// RUN: %clang_cc1 -fblocks %s -emit-llvm -o %t extern "C" int printf(const char*, ...); template<typename T> class range { public: T _i; range(T i) {_i = i;}; T get() {return _i;}; }; // rdar: // 7495203 class A { public: A() : field(10), d1(3.14) {} void F(); void S() { printf(" field = %d\n", field); printf(" field = %f\n", d1); } int field; double d1; }; void A::F() { __block A &tlc = *this; // crashed in code gen (radar 7495203) ^{ tlc.S(); }(); } int main() { // works void (^bl)(range<int> ) = ^(range<int> i){printf("Hello Blocks %d\n", i.get()); }; //crashes in godegen? void (^bl2)(range<int>& ) = ^(range<int>& i){printf("Hello Blocks %d\n", i.get()); }; A *a = new A; a->F(); return 0; } |