blocks: Support capturing complex variable in block.

// rdar://10033896


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139020 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Fariborz Jahanian 2011-09-02 18:39:40 +00:00
Родитель cc2fca2ba2
Коммит da8e571ce4
2 изменённых файлов: 20 добавлений и 5 удалений

Просмотреть файл

@ -311,11 +311,7 @@ void ComplexExprEmitter::EmitStoreOfComplex(ComplexPairTy Val, llvm::Value *Ptr,
//===----------------------------------------------------------------------===//
ComplexPairTy ComplexExprEmitter::VisitExpr(Expr *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);
return EmitLoadOfLValue(E);
}
ComplexPairTy ComplexExprEmitter::

Просмотреть файл

@ -0,0 +1,19 @@
// 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