[analyzer] Use the new registration mechanism on the non-path-sensitive-checkers:
[clang.git] / test / CodeGen / blocks.c
blobb7b6a2d505efffcbfa846fccc1ee375fffe3dbc0
1 // RUN: %clang_cc1 -triple i386-unknown-unknown %s -emit-llvm -o %t -fblocks
2 void (^f)(void) = ^{};
4 // rdar://6768379
5 int f0(int (^a0)()) {
6 return a0(1, 2, 3);
9 // Verify that attributes on blocks are set correctly.
10 typedef struct s0 T;
11 struct s0 {
12 int a[64];
15 // RUN: grep 'internal void @__f2_block_invoke_0(.struct.s0\* sret .*, .*, .* byval .*)' %t
16 struct s0 f2(struct s0 a0) {
17 return ^(struct s0 a1){ return a1; }(a0);
20 // This should not crash: rdar://6808051
21 void *P = ^{
22 void *Q = __func__;
25 void (^test1)(void) = ^(void) {
26 __block int i;
27 ^ { i = 1; }();
30 typedef double ftype(double);
31 // It's not clear that we *should* support this syntax, but until that decision
32 // is made, we should support it properly and not crash.
33 ftype ^test2 = ^ftype {
34 return 0;
37 // rdar://problem/8605032
38 void f3_helper(void (^)(void));
39 void f3() {
40 _Bool b = 0;
41 f3_helper(^{ if (b) {} });