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; 8 range(T i) {_i = i;}; 9 T get() {return _i;}; 10 }; 11 12 // rdar: // 7495203 13 class 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 25 void A::F() 26 { 27 __block A &tlc = *this; 28 // crashed in code gen (radar 7495203) 29 ^{ tlc.S(); }(); 30 } 31 32 int 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()); }; 39 40 A *a = new A; 41 a->F(); 42 return 0; 43 } 44