diff options
| author | Eli Friedman <eli.friedman@gmail.com> | 2012-12-13 00:37:17 +0000 |
|---|---|---|
| committer | Eli Friedman <eli.friedman@gmail.com> | 2012-12-13 00:37:17 +0000 |
| commit | 89a4a2cd3da0af6343ec9b4124b2512d00d84968 (patch) | |
| tree | b666f00bcc0c6ef9ffa1a26221575a1fd4c257e2 | |
| parent | caaf4dd5168d2416e27cbb7e15c88220e23f243a (diff) | |
| download | bcm5719-llvm-89a4a2cd3da0af6343ec9b4124b2512d00d84968.tar.gz bcm5719-llvm-89a4a2cd3da0af6343ec9b4124b2512d00d84968.zip | |
Add missing check for error return from DefaultLvalueConversion. Fixes <rdar://problem/12857416>.
llvm-svn: 170056
| -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; + } +}; |

