1// RUN: %clang_cc1 -fblocks %s -emit-llvm -o %t 2 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 12// 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 32int 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