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