x86_64 ABI: Fix assert on return of _Complex long double.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@64756 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGCall.cpp b/lib/CodeGen/CGCall.cpp
index 9c7991d..f687a5b 100644
--- a/lib/CodeGen/CGCall.cpp
+++ b/lib/CodeGen/CGCall.cpp
@@ -419,7 +419,7 @@
/// The \arg Lo class will be NoClass iff the argument is ignored.
///
/// If the \arg Lo class is ComplexX87, then the \arg Hi class will
- /// be NoClass.
+ /// also be ComplexX87.
void classify(QualType T, ASTContext &Context, uint64_t OffsetBase,
Class &Lo, Class &Hi) const;
@@ -751,20 +751,21 @@
// part of the value is returned in %st0 and the imaginary part in
// %st1.
case ComplexX87:
- assert(Hi == NoClass && "Unexpected ComplexX87 classification.");
+ assert(Hi == ComplexX87 && "Unexpected ComplexX87 classification.");
ResType = llvm::VectorType::get(llvm::Type::X86_FP80Ty, 2);
break;
}
switch (Hi) {
- // Memory was handled previously, and ComplexX87 and X87 should
- // never occur as hi classes.
+ // Memory was handled previously and X87 should
+ // never occur as a hi class.
case Memory:
case X87:
- case ComplexX87:
assert(0 && "Invalid classification for hi word.");
+ case ComplexX87: // Previously handled.
case NoClass: break;
+
case Integer:
ResType = llvm::StructType::get(ResType, llvm::Type::Int64Ty, NULL);
break;