11a596562STed Kremenek // RUN: %clang_cc1 -fblocks %s -emit-llvm -o %t
29ffd706bSFariborz Jahanian 
39ffd706bSFariborz Jahanian extern "C" int printf(const char*, ...);
49ffd706bSFariborz Jahanian 
59ffd706bSFariborz Jahanian template<typename T> class range {
69ffd706bSFariborz Jahanian public:
79ffd706bSFariborz Jahanian T _i;
range(T i)89ffd706bSFariborz Jahanian         range(T i) {_i = i;};
get()99ffd706bSFariborz Jahanian         T get() {return _i;};
109ffd706bSFariborz Jahanian };
119ffd706bSFariborz Jahanian 
12*eeb23379SFariborz Jahanian // rdar: // 7495203
13*eeb23379SFariborz Jahanian class A {
14*eeb23379SFariborz Jahanian     public:
A()15*eeb23379SFariborz Jahanian 	A() : field(10), d1(3.14) {}
16*eeb23379SFariborz Jahanian 	void F();
S()17*eeb23379SFariborz Jahanian 	void S() {
18*eeb23379SFariborz Jahanian 	  printf(" field = %d\n", field);
19*eeb23379SFariborz Jahanian 	  printf(" field = %f\n", d1);
20*eeb23379SFariborz Jahanian 	}
21*eeb23379SFariborz Jahanian 	int field;
22*eeb23379SFariborz Jahanian 	double d1;
23*eeb23379SFariborz Jahanian };
24*eeb23379SFariborz Jahanian 
F()25*eeb23379SFariborz Jahanian void A::F()
26*eeb23379SFariborz Jahanian     {
27*eeb23379SFariborz Jahanian 	__block A &tlc = *this;
28*eeb23379SFariborz Jahanian 	// crashed in code gen (radar 7495203)
29*eeb23379SFariborz Jahanian         ^{ tlc.S(); }();
30*eeb23379SFariborz Jahanian     }
31*eeb23379SFariborz Jahanian 
main()329ffd706bSFariborz Jahanian int main() {
339ffd706bSFariborz Jahanian 
349ffd706bSFariborz Jahanian         // works
359ffd706bSFariborz Jahanian         void (^bl)(range<int> ) = ^(range<int> i){printf("Hello Blocks %d\n", i.get()); };
369ffd706bSFariborz Jahanian 
379ffd706bSFariborz Jahanian         //crashes in godegen?
389ffd706bSFariborz Jahanian         void (^bl2)(range<int>& ) = ^(range<int>& i){printf("Hello Blocks %d\n", i.get()); };
39*eeb23379SFariborz Jahanian 
40*eeb23379SFariborz Jahanian 	A *a = new A;
41*eeb23379SFariborz Jahanian 	a->F();
429ffd706bSFariborz Jahanian         return 0;
439ffd706bSFariborz Jahanian }
44