blob: 388ec7c4bbca32f6f96f12ab843c52b2a4c816fa [file] [log] [blame]
Ted Kremenekeb2ccd82010-04-15 21:11:33 +00001// RUN: %clang_cc1 -fblocks %s -emit-llvm -o %t
Fariborz Jahanian6b2b26c2010-04-13 23:45:47 +00002
3extern "C" int printf(const char*, ...);
4
5template<typename T> class range {
6public:
7T _i;
8 range(T i) {_i = i;};
9 T get() {return _i;};
10};
11
Fariborz Jahanian50802ac2010-05-04 17:59:32 +000012// rdar: // 7495203
13class A {
14 public:
15 A() : field(10), d1(3.14) {}
16 void F();
17 void S() {
18 printf(" field = %d\n", field);
19 printf(" field = %f\n", d1);
20 }
21 int field;
22 double d1;
23};
24
25void A::F()
26 {
27 __block A &tlc = *this;
28 // crashed in code gen (radar 7495203)
29 ^{ tlc.S(); }();
30 }
31
Fariborz Jahanian6b2b26c2010-04-13 23:45:47 +000032int main() {
33
34 // works
35 void (^bl)(range<int> ) = ^(range<int> i){printf("Hello Blocks %d\n", i.get()); };
36
37 //crashes in godegen?
38 void (^bl2)(range<int>& ) = ^(range<int>& i){printf("Hello Blocks %d\n", i.get()); };
Fariborz Jahanian50802ac2010-05-04 17:59:32 +000039
40 A *a = new A;
41 a->F();
Fariborz Jahanian6b2b26c2010-04-13 23:45:47 +000042 return 0;
43}