| // 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; |
| } |