зеркало из https://github.com/microsoft/clang-1.git
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:
Родитель
cc2fca2ba2
Коммит
da8e571ce4
|
@ -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
|
Загрузка…
Ссылка в новой задаче