summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Friedman <eli.friedman@gmail.com>2012-12-13 00:37:17 +0000
committerEli Friedman <eli.friedman@gmail.com>2012-12-13 00:37:17 +0000
commit89a4a2cd3da0af6343ec9b4124b2512d00d84968 (patch)
treeb666f00bcc0c6ef9ffa1a26221575a1fd4c257e2
parentcaaf4dd5168d2416e27cbb7e15c88220e23f243a (diff)
downloadbcm5719-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.cpp2
-rw-r--r--clang/test/SemaCXX/new-delete.cpp11
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;
+ }
+};
OpenPOWER on IntegriCloud