forked from OSchip/llvm-project
Do not try to instantiate invalid declarations. It's a recipe for
disaster. Fixes PR6161. llvm-svn: 96371
This commit is contained in:
parent
10e3022b10
commit
71ad477ab3
|
@ -1304,6 +1304,9 @@ Decl * TemplateDeclInstantiator
|
|||
Decl *Sema::SubstDecl(Decl *D, DeclContext *Owner,
|
||||
const MultiLevelTemplateArgumentList &TemplateArgs) {
|
||||
TemplateDeclInstantiator Instantiator(*this, Owner, TemplateArgs);
|
||||
if (D->isInvalidDecl())
|
||||
return 0;
|
||||
|
||||
return Instantiator.Visit(D);
|
||||
}
|
||||
|
||||
|
|
|
@ -159,12 +159,10 @@ void loadEngineFor() {
|
|||
}
|
||||
|
||||
template <class T> struct TBase {
|
||||
void* operator new(T size, int); // expected-error {{'operator new' cannot take a dependent type as first parameter; use size_t}}\
|
||||
// expected-error {{'operator new' takes type size_t}}
|
||||
void* operator new(T size, int); // expected-error {{'operator new' cannot take a dependent type as first parameter; use size_t}}
|
||||
};
|
||||
|
||||
// FIXME: We should not try to instantiate operator new, since it is invalid.
|
||||
TBase<int> t1; // expected-note {{in instantiation of template class 'struct TBase<int>' requested here}}
|
||||
TBase<int> t1;
|
||||
|
||||
class X6 {
|
||||
public:
|
||||
|
|
|
@ -9,3 +9,15 @@ struct X0 {
|
|||
|
||||
template<> void X0<char>::f0(char);
|
||||
template<> void X0<char>::f1(type);
|
||||
|
||||
namespace PR6161 {
|
||||
template<typename _CharT>
|
||||
class numpunct : public locale::facet // expected-error{{use of undeclared identifier 'locale'}} \
|
||||
// expected-error{{expected class name}} \
|
||||
// expected-note{{attempt to specialize declaration here}}
|
||||
{
|
||||
static locale::id id; // expected-error{{use of undeclared identifier}}
|
||||
};
|
||||
numpunct<char>::~numpunct(); // expected-error{{template specialization requires 'template<>'}} \
|
||||
// expected-error{{specialization of member 'PR6161::numpunct<char>::~numpunct' does not specialize an instantiated member}}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue