16503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian// RUN: %clang_cc1 -fsyntax-only -verify %s 26503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian 36503fa539a8911da4e68d51499b46766335c138dFariborz Jahaniantemplate <typename T> 46503fa539a8911da4e68d51499b46766335c138dFariborz Jahanianclass SmallVectorImpl { 56503fa539a8911da4e68d51499b46766335c138dFariborz Jahanianpublic: 66503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian explicit SmallVectorImpl(unsigned N) { 76503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian } 86503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian 96503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian ~SmallVectorImpl() { } 106503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian 116503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian}; 126503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian 136503fa539a8911da4e68d51499b46766335c138dFariborz Jahaniantemplate <typename T, unsigned N> 146503fa539a8911da4e68d51499b46766335c138dFariborz Jahanianclass SmallVector : public SmallVectorImpl<T> { 156503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian typedef typename SmallVectorImpl<T>::U U; // expected-error {{no type named 'U' in 'SmallVectorImpl<CallSite>'}} 166503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian enum { 176503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian 186503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian MinUs = (static_cast<unsigned int>(sizeof(T))*N + // expected-error {{invalid application of 'sizeof' to an incomplete type 'CallSite'}} 196503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian static_cast<unsigned int>(sizeof(U)) - 1) / 206503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian static_cast<unsigned int>(sizeof(U)), 216503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian NumInlineEltsElts = MinUs 226503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian }; 236503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian U InlineElts[NumInlineEltsElts]; 246503fa539a8911da4e68d51499b46766335c138dFariborz Jahanianpublic: 256503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian SmallVector() : SmallVectorImpl<T>(NumInlineEltsElts) { 266503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian } 276503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian 286503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian}; 296503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian 306503fa539a8911da4e68d51499b46766335c138dFariborz Jahanianclass CallSite; // expected-note {{forward declaration of 'CallSite'}} 316503fa539a8911da4e68d51499b46766335c138dFariborz Jahanianclass InlineFunctionInfo { 326503fa539a8911da4e68d51499b46766335c138dFariborz Jahanianpublic: 336503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian explicit InlineFunctionInfo() {} 346503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian SmallVector<CallSite, 2> DevirtualizedCalls; // expected-note {{in instantiation of template class 'SmallVector<CallSite, 2>' requested}} 356503fa539a8911da4e68d51499b46766335c138dFariborz Jahanian}; 36