2010-04-16 01:11:33 +04:00
|
|
|
// RUN: %clang_cc1 -fblocks %s -emit-llvm -o %t
|
2010-04-14 03:45:47 +04:00
|
|
|
|
|
|
|
extern "C" int printf(const char*, ...);
|
|
|
|
|
|
|
|
template<typename T> class range {
|
|
|
|
public:
|
|
|
|
T _i;
|
|
|
|
range(T i) {_i = i;};
|
|
|
|
T get() {return _i;};
|
|
|
|
};
|
|
|
|
|
2010-05-04 21:59:32 +04:00
|
|
|
// 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(); }();
|
|
|
|
}
|
|
|
|
|
2010-04-14 03:45:47 +04:00
|
|
|
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()); };
|
2010-05-04 21:59:32 +04:00
|
|
|
|
|
|
|
A *a = new A;
|
|
|
|
a->F();
|
2010-04-14 03:45:47 +04:00
|
|
|
return 0;
|
|
|
|
}
|