1 // RUN: %clang_cc1 -fblocks %s -emit-llvm -o %t 2 3 extern "C" int printf(const char*, ...); 4 5 template<typename T> class range { 6 public: 7 T _i; range(T i)8 range(T i) {_i = i;}; get()9 T get() {return _i;}; 10 }; 11 12 class A { 13 public: A()14 A() : field(10), d1(3.14) {} 15 void F(); S()16 void S() { 17 printf(" field = %d\n", field); 18 printf(" field = %f\n", d1); 19 } 20 int field; 21 double d1; 22 }; 23 F()24void A::F() 25 { 26 __block A &tlc = *this; 27 // crashed in code gen 28 ^{ tlc.S(); }(); 29 } 30 main()31int main() { 32 33 // works 34 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