11a596562STed Kremenek // RUN: %clang_cc1 -fblocks %s -emit-llvm -o %t 29ffd706bSFariborz Jahanian 39ffd706bSFariborz Jahanian extern "C" int printf(const char*, ...); 49ffd706bSFariborz Jahanian 59ffd706bSFariborz Jahanian template<typename T> class range { 69ffd706bSFariborz Jahanian public: 79ffd706bSFariborz Jahanian T _i; range(T i)89ffd706bSFariborz Jahanian range(T i) {_i = i;}; get()99ffd706bSFariborz Jahanian T get() {return _i;}; 109ffd706bSFariborz Jahanian }; 119ffd706bSFariborz Jahanian 12*eeb23379SFariborz Jahanian // rdar: // 7495203 13*eeb23379SFariborz Jahanian class A { 14*eeb23379SFariborz Jahanian public: A()15*eeb23379SFariborz Jahanian A() : field(10), d1(3.14) {} 16*eeb23379SFariborz Jahanian void F(); S()17*eeb23379SFariborz Jahanian void S() { 18*eeb23379SFariborz Jahanian printf(" field = %d\n", field); 19*eeb23379SFariborz Jahanian printf(" field = %f\n", d1); 20*eeb23379SFariborz Jahanian } 21*eeb23379SFariborz Jahanian int field; 22*eeb23379SFariborz Jahanian double d1; 23*eeb23379SFariborz Jahanian }; 24*eeb23379SFariborz Jahanian F()25*eeb23379SFariborz Jahanianvoid A::F() 26*eeb23379SFariborz Jahanian { 27*eeb23379SFariborz Jahanian __block A &tlc = *this; 28*eeb23379SFariborz Jahanian // crashed in code gen (radar 7495203) 29*eeb23379SFariborz Jahanian ^{ tlc.S(); }(); 30*eeb23379SFariborz Jahanian } 31*eeb23379SFariborz Jahanian main()329ffd706bSFariborz Jahanianint main() { 339ffd706bSFariborz Jahanian 349ffd706bSFariborz Jahanian // works 359ffd706bSFariborz Jahanian void (^bl)(range<int> ) = ^(range<int> i){printf("Hello Blocks %d\n", i.get()); }; 369ffd706bSFariborz Jahanian 379ffd706bSFariborz Jahanian //crashes in godegen? 389ffd706bSFariborz Jahanian void (^bl2)(range<int>& ) = ^(range<int>& i){printf("Hello Blocks %d\n", i.get()); }; 39*eeb23379SFariborz Jahanian 40*eeb23379SFariborz Jahanian A *a = new A; 41*eeb23379SFariborz Jahanian a->F(); 429ffd706bSFariborz Jahanian return 0; 439ffd706bSFariborz Jahanian } 44