44 lines
804 B
C++
44 lines
804 B
C++
|
// 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;
|
||
|
}
|