Allow operator delete to be an invalid Decl.
Do not discard invalid Decl when searching for the operator delete function. The lookup for this function always expects to find a result, so sometimes the invalid Decl is the only choice possible. This fixes PR34109. llvm-svn: 310435
This commit is contained in:
parent
24a6951187
commit
c06b35c97e
|
@ -1378,9 +1378,6 @@ Sema::BuildCXXTypeConstructExpr(TypeSourceInfo *TInfo,
|
|||
/// \brief Determine whether the given function is a non-placement
|
||||
/// deallocation function.
|
||||
static bool isNonPlacementDeallocationFunction(Sema &S, FunctionDecl *FD) {
|
||||
if (FD->isInvalidDecl())
|
||||
return false;
|
||||
|
||||
if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(FD))
|
||||
return Method->isUsualDeallocationFunction();
|
||||
|
||||
|
|
|
@ -504,6 +504,20 @@ struct S {
|
|||
int S::fn() { return 0; } // expected-warning {{is missing exception specification}}
|
||||
}
|
||||
|
||||
class PR34109_class {
|
||||
PR34109_class() {}
|
||||
virtual ~PR34109_class() {}
|
||||
};
|
||||
|
||||
void operator delete(void *) throw();
|
||||
// expected-note@-1 {{previous declaration is here}}
|
||||
__declspec(dllexport) void operator delete(void *) throw();
|
||||
// expected-error@-1 {{redeclaration of 'operator delete' cannot add 'dllexport' attribute}}
|
||||
|
||||
void PR34109(int* a) {
|
||||
delete a;
|
||||
}
|
||||
|
||||
#elif TEST2
|
||||
|
||||
// Check that __unaligned is not recognized if MS extensions are not enabled
|
||||
|
|
Loading…
Reference in New Issue