diff options
-rw-r--r-- | clang/lib/Sema/SemaExprCXX.cpp | 2 | ||||
-rw-r--r-- | clang/test/SemaCXX/new-delete.cpp | 11 |
2 files changed, 13 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 5345e8d8e9c..e3df0a32753 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/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/clang/test/SemaCXX/new-delete.cpp b/clang/test/SemaCXX/new-delete.cpp index e77e3d652f4..8b352954a33 100644 --- a/clang/test/SemaCXX/new-delete.cpp +++ b/clang/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; + } +}; |