]> granicus.if.org Git - clang/commitdiff
Add missing check for error return from DefaultLvalueConversion. Fixes <rdar://probl...
authorEli Friedman <eli.friedman@gmail.com>
Thu, 13 Dec 2012 00:37:17 +0000 (00:37 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Thu, 13 Dec 2012 00:37:17 +0000 (00:37 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@170056 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaExprCXX.cpp
test/SemaCXX/new-delete.cpp

index 5345e8d8e9c39d517ea1b1be1df1391b84fc7ff1..e3df0a327534e40c6de80a886eae541365da28eb 100644 (file)
@@ -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();
 
index e77e3d652f4520085317c075f6102e33c9217429..8b352954a33133436ff402815b475929787a58d2 100644 (file)
@@ -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;
+  }
+};