43 lines · cpp
1// RUN: %clang_cc1 -fblocks %s -emit-llvm -o %t2 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 12class A {13 public:14 A() : field(10), d1(3.14) {}15 void F();16 void S() {17 printf(" field = %d\n", field);18 printf(" field = %f\n", d1);19 }20 int field;21 double d1;22};23 24void A::F()25 {26 __block A &tlc = *this;27 // crashed in code gen28 ^{ tlc.S(); }();29 }30 31int main() {32 33 // works34 void (^bl)(range<int> ) = ^(range<int> i){printf("Hello Blocks %d\n", i.get()); };35 36 //crashes in godegen?37 void (^bl2)(range<int>& ) = ^(range<int>& i){printf("Hello Blocks %d\n", i.get()); };38 39 A *a = new A;40 a->F();41 return 0;42}43