1// RUN: %clang_cc1 -fblocks %s -emit-llvm -o %t
2
3extern "C" int printf(const char*, ...);
4
5template<typename T> class range {
6public:
7T _i;
8        range(T i) {_i = i;};
9        T get() {return _i;};
10};
11
12// rdar: // 7495203
13class A {
14    public:
15	A() : field(10), d1(3.14) {}
16	void F();
17	void S() {
18	  printf(" field = %d\n", field);
19	  printf(" field = %f\n", d1);
20	}
21	int field;
22	double d1;
23};
24
25void A::F()
26    {
27	__block A &tlc = *this;
28	// crashed in code gen (radar 7495203)
29        ^{ tlc.S(); }();
30    }
31
32int main() {
33
34        // works
35        void (^bl)(range<int> ) = ^(range<int> i){printf("Hello Blocks %d\n", i.get()); };
36
37        //crashes in godegen?
38        void (^bl2)(range<int>& ) = ^(range<int>& i){printf("Hello Blocks %d\n", i.get()); };
39
40	A *a = new A;
41	a->F();
42        return 0;
43}
44