xref: /aosp_15_r20/external/clang/test/SemaCXX/invalid-instantiated-field-decl.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li 
3*67e74705SXin Li template <typename T>
4*67e74705SXin Li class SmallVectorImpl  {
5*67e74705SXin Li public:
SmallVectorImpl(unsigned N)6*67e74705SXin Li   explicit SmallVectorImpl(unsigned N) {
7*67e74705SXin Li   }
8*67e74705SXin Li 
~SmallVectorImpl()9*67e74705SXin Li   ~SmallVectorImpl() { }
10*67e74705SXin Li 
11*67e74705SXin Li };
12*67e74705SXin Li 
13*67e74705SXin Li template <typename T, unsigned N>
14*67e74705SXin Li class SmallVector : public SmallVectorImpl<T> {
15*67e74705SXin Li   typedef typename SmallVectorImpl<T>::U U; // expected-error {{no type named 'U' in 'SmallVectorImpl<CallSite>'}}
16*67e74705SXin Li   enum {
17*67e74705SXin Li 
18*67e74705SXin Li     MinUs = (static_cast<unsigned int>(sizeof(T))*N +	// expected-error {{invalid application of 'sizeof' to an incomplete type 'CallSite'}}
19*67e74705SXin Li              static_cast<unsigned int>(sizeof(U)) - 1) /
20*67e74705SXin Li             static_cast<unsigned int>(sizeof(U)),
21*67e74705SXin Li     NumInlineEltsElts = MinUs
22*67e74705SXin Li   };
23*67e74705SXin Li   U InlineElts[NumInlineEltsElts];
24*67e74705SXin Li public:
SmallVector()25*67e74705SXin Li   SmallVector() : SmallVectorImpl<T>(NumInlineEltsElts) {
26*67e74705SXin Li   }
27*67e74705SXin Li 
28*67e74705SXin Li };
29*67e74705SXin Li 
30*67e74705SXin Li class CallSite;	// expected-note {{forward declaration of 'CallSite'}}
31*67e74705SXin Li class InlineFunctionInfo {
32*67e74705SXin Li public:
InlineFunctionInfo()33*67e74705SXin Li   explicit InlineFunctionInfo() {}
34*67e74705SXin Li   SmallVector<CallSite, 2> DevirtualizedCalls;	// expected-note {{in instantiation of template class 'SmallVector<CallSite, 2>' requested}}
35*67e74705SXin Li };
36