33 lines
		
	
	
		
			472 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			472 B
		
	
	
	
		
			C++
		
	
	
	
// RUN: %clang_cc1 -chain-include %s -chain-include %s -fsyntax-only %s
 | 
						|
// Just don't crash.
 | 
						|
#if !defined(RUN1)
 | 
						|
#define RUN1
 | 
						|
 | 
						|
struct CXXRecordDecl { CXXRecordDecl(int); };
 | 
						|
 | 
						|
template <typename T, typename U>
 | 
						|
T cast(U u) {
 | 
						|
  return reinterpret_cast<T&>(u);
 | 
						|
}
 | 
						|
 | 
						|
void test1() {
 | 
						|
  cast<float>(1);
 | 
						|
}
 | 
						|
 | 
						|
#elif !defined(RUN2)
 | 
						|
#define RUN2
 | 
						|
 | 
						|
template <typename T>
 | 
						|
void test2(T) {
 | 
						|
  cast<CXXRecordDecl>(1.0f);
 | 
						|
}
 | 
						|
 | 
						|
#else
 | 
						|
 | 
						|
void test3() {
 | 
						|
  cast<CXXRecordDecl>(1.0f);
 | 
						|
  test2(1);
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |