blocks-irgen.mm revision 8443188a8f9cbd27612b7058cdcfc53356f024a3
1da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd// RUN: %clang_cc1 -std=c++11 -fblocks -emit-llvm -o - -triple x86_64-apple-darwin11.3 %s | FileCheck %s 2da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd 3da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Juddnamespace PR12746 { 4da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd // CHECK: define zeroext i1 @_ZN7PR127462f1EPi 5da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd bool f1(int *x) { 6da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd // CHECK: store i8* bitcast (i1 (i8*)* @___ZN7PR127462f1EPi_block_invoke to i8*) 7da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd bool (^outer)() = ^ { 8da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd auto inner = [&]() -> bool { 9da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd return x == 0; 10da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd }; 11da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd return inner(); 12da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd }; 13da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd return outer(); 14da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd } 15da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd 16da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd // CHECK: define internal zeroext i1 @___ZN7PR127462f1EPi_block_invoke 17da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd // CHECK: call zeroext i1 @"_ZZZN7PR127462f1EPiEUb_ENK3$_0clEv" 18da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd 19da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd bool f2(int *x) { 20da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd auto outer = [&]() -> bool { 21da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd bool (^inner)() = ^ { 22da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd return x == 0; 23da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd }; 24da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd return inner(); 25da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd }; 26da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd return outer(); 27da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd } 28da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd} 29da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd 30da4ce795221e0fd9a3d11c84f018b3b5d6a10421Sam Judd