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;
 | |
| }
 |