36 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -fsyntax-only -verify %s
 | |
| 
 | |
| template <typename T>
 | |
| class SmallVectorImpl  {
 | |
| public:
 | |
|   explicit SmallVectorImpl(unsigned N) {
 | |
|   }
 | |
| 
 | |
|   ~SmallVectorImpl() { }
 | |
| 
 | |
| };
 | |
| 
 | |
| template <typename T, unsigned N>
 | |
| class SmallVector : public SmallVectorImpl<T> {
 | |
|   typedef typename SmallVectorImpl<T>::U U; // expected-error {{no type named 'U' in 'SmallVectorImpl<CallSite>'}}
 | |
|   enum {
 | |
| 
 | |
|     MinUs = (static_cast<unsigned int>(sizeof(T))*N +	// expected-error {{invalid application of 'sizeof' to an incomplete type 'CallSite'}}
 | |
|              static_cast<unsigned int>(sizeof(U)) - 1) /
 | |
|             static_cast<unsigned int>(sizeof(U)),
 | |
|     NumInlineEltsElts = MinUs 
 | |
|   };
 | |
|   U InlineElts[NumInlineEltsElts];
 | |
| public:
 | |
|   SmallVector() : SmallVectorImpl<T>(NumInlineEltsElts) {
 | |
|   }
 | |
| 
 | |
| };
 | |
| 
 | |
| class CallSite;	// expected-note {{forward declaration of 'CallSite'}}
 | |
| class InlineFunctionInfo {
 | |
| public:
 | |
|   explicit InlineFunctionInfo() {}
 | |
|   SmallVector<CallSite, 2> DevirtualizedCalls;	// expected-note {{in instantiation of template class 'SmallVector<CallSite, 2>' requested}}
 | |
| };
 |