diff options
-rw-r--r-- | lib/CodeGen/CGExprComplex.cpp | 6 | ||||
-rw-r--r-- | test/CodeGen/capture-complex-expr-block.c | 19 |
2 files changed, 5 insertions, 20 deletions
diff --git a/lib/CodeGen/CGExprComplex.cpp b/lib/CodeGen/CGExprComplex.cpp index 24d0115028..1a27d1322b 100644 --- a/lib/CodeGen/CGExprComplex.cpp +++ b/lib/CodeGen/CGExprComplex.cpp @@ -311,7 +311,11 @@ void ComplexExprEmitter::EmitStoreOfComplex(ComplexPairTy Val, llvm::Value *Ptr, //===----------------------------------------------------------------------===// ComplexPairTy ComplexExprEmitter::VisitExpr(Expr *E) { - return EmitLoadOfLValue(E); + CGF.ErrorUnsupported(E, "complex expression"); + llvm::Type *EltTy = + CGF.ConvertType(E->getType()->getAs<ComplexType>()->getElementType()); + llvm::Value *U = llvm::UndefValue::get(EltTy); + return ComplexPairTy(U, U); } ComplexPairTy ComplexExprEmitter:: diff --git a/test/CodeGen/capture-complex-expr-block.c b/test/CodeGen/capture-complex-expr-block.c deleted file mode 100644 index 17d3cc5a0c..0000000000 --- a/test/CodeGen/capture-complex-expr-block.c +++ /dev/null @@ -1,19 +0,0 @@ -// RUN: %clang_cc1 %s -emit-llvm -o - -fblocks -triple x86_64-apple-darwin10 | FileCheck %s -// rdar://10033986 - -int main () -{ - _Complex double c; - ^() { - _Complex double z; - z = z + c; - }; - return 0; -} - -// CHECK: define internal void @__main_block_invoke_0 -// CHECK: [[C1:%.*]] = alloca { double, double }, align 8 -// CHECK: [[C1]].realp = getelementptr inbounds { double, double }* [[C1]], i32 0, i32 0 -// CHECK-NEXT: [[C1]].real = load double* [[C1]].realp -// CHECK-NEXT: [[C1]].imagp = getelementptr inbounds { double, double }* [[C1]], i32 0, i32 1 -// CHECK-NEXT: [[C1]].imag = load double* [[C1]].imagp |