1eb2ccd83f07a8c571b5abd3d8ae9915529c49195Ted Kremenek// RUN: %clang_cc1 -fblocks %s -emit-llvm -o %t 26b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian 36b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanianextern "C" int printf(const char*, ...); 46b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian 56b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahaniantemplate<typename T> class range { 66b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanianpublic: 76b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz JahanianT _i; 86b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian range(T i) {_i = i;}; 96b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian T get() {return _i;}; 106b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian}; 116b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian 1250802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian// rdar: // 7495203 1350802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanianclass A { 1450802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian public: 1550802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian A() : field(10), d1(3.14) {} 1650802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian void F(); 1750802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian void S() { 1850802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian printf(" field = %d\n", field); 1950802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian printf(" field = %f\n", d1); 2050802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian } 2150802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian int field; 2250802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian double d1; 2350802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian}; 2450802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian 2550802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanianvoid A::F() 2650802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian { 2750802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian __block A &tlc = *this; 2850802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian // crashed in code gen (radar 7495203) 2950802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian ^{ tlc.S(); }(); 3050802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian } 3150802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian 326b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanianint main() { 336b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian 346b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian // works 356b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian void (^bl)(range<int> ) = ^(range<int> i){printf("Hello Blocks %d\n", i.get()); }; 366b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian 376b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian //crashes in godegen? 386b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian void (^bl2)(range<int>& ) = ^(range<int>& i){printf("Hello Blocks %d\n", i.get()); }; 3950802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian 4050802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian A *a = new A; 4150802ac72eaba667d8aa96b0cce80b3e2f689d9dFariborz Jahanian a->F(); 426b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian return 0; 436b2b26cc0b0b304e31bffe984cf2db1c24ec864fFariborz Jahanian} 44