forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			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;
 | 
						|
}
 |