1*67e74705SXin Li // RUN: %clang_cc1 -fblocks %s -emit-llvm -o %t 2*67e74705SXin Li 3*67e74705SXin Li extern "C" int printf(const char*, ...); 4*67e74705SXin Li 5*67e74705SXin Li template<typename T> class range { 6*67e74705SXin Li public: 7*67e74705SXin Li T _i; range(T i)8*67e74705SXin Li range(T i) {_i = i;}; get()9*67e74705SXin Li T get() {return _i;}; 10*67e74705SXin Li }; 11*67e74705SXin Li 12*67e74705SXin Li // rdar: // 7495203 13*67e74705SXin Li class A { 14*67e74705SXin Li public: A()15*67e74705SXin Li A() : field(10), d1(3.14) {} 16*67e74705SXin Li void F(); S()17*67e74705SXin Li void S() { 18*67e74705SXin Li printf(" field = %d\n", field); 19*67e74705SXin Li printf(" field = %f\n", d1); 20*67e74705SXin Li } 21*67e74705SXin Li int field; 22*67e74705SXin Li double d1; 23*67e74705SXin Li }; 24*67e74705SXin Li F()25*67e74705SXin Livoid A::F() 26*67e74705SXin Li { 27*67e74705SXin Li __block A &tlc = *this; 28*67e74705SXin Li // crashed in code gen (radar 7495203) 29*67e74705SXin Li ^{ tlc.S(); }(); 30*67e74705SXin Li } 31*67e74705SXin Li main()32*67e74705SXin Liint main() { 33*67e74705SXin Li 34*67e74705SXin Li // works 35*67e74705SXin Li void (^bl)(range<int> ) = ^(range<int> i){printf("Hello Blocks %d\n", i.get()); }; 36*67e74705SXin Li 37*67e74705SXin Li //crashes in godegen? 38*67e74705SXin Li void (^bl2)(range<int>& ) = ^(range<int>& i){printf("Hello Blocks %d\n", i.get()); }; 39*67e74705SXin Li 40*67e74705SXin Li A *a = new A; 41*67e74705SXin Li a->F(); 42*67e74705SXin Li return 0; 43*67e74705SXin Li } 44