diff options
-rw-r--r-- | lib/Sema/SemaExprCXX.cpp | 2 | ||||
-rw-r--r-- | test/SemaCXX/new-delete.cpp | 11 |
2 files changed, 13 insertions, 0 deletions
diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 5345e8d8e9..e3df0a3275 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -2026,6 +2026,8 @@ Sema::ActOnCXXDelete(SourceLocation StartLoc, bool UseGlobal, if (!Ex.get()->isTypeDependent()) { // Perform lvalue-to-rvalue cast, if needed. Ex = DefaultLvalueConversion(Ex.take()); + if (Ex.isInvalid()) + return ExprError(); QualType Type = Ex.get()->getType(); diff --git a/test/SemaCXX/new-delete.cpp b/test/SemaCXX/new-delete.cpp index e77e3d652f..8b352954a3 100644 --- a/test/SemaCXX/new-delete.cpp +++ b/test/SemaCXX/new-delete.cpp @@ -499,3 +499,14 @@ namespace PR12061 { DeferredCookieTaskTest() {} }; } + +class DeletingPlaceholder { + int* f() { + delete f; // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} + return 0; + } + int* g(int, int) { + delete g; // expected-error {{reference to non-static member function must be called}} + return 0; + } +}; |