[cfe-commits] r101841 - in /cfe/trunk: lib/Sema/SemaExprCXX.cpp test/CXX/expr/expr.unary/expr.new/p19.cpp test/CXX/expr/expr.unary/expr.new/p20-0x.cpp test/CXX/expr/expr.unary/expr.new/p20.cpp test/SemaCXX/no-exceptions.cpp

John McCall rjmccall at apple.com
Mon Apr 19 17:22:43 PDT 2010


Author: rjmccall
Date: Mon Apr 19 19:22:43 2010
New Revision: 101841

URL: http://llvm.org/viewvc/llvm-project?rev=101841&view=rev
Log:
Don't bother looking for (or diagnosing problems with) the 'operator delete'
associated with a new expression if -fno-exceptions is set.


Added:
    cfe/trunk/test/SemaCXX/no-exceptions.cpp
Modified:
    cfe/trunk/lib/Sema/SemaExprCXX.cpp
    cfe/trunk/test/CXX/expr/expr.unary/expr.new/p19.cpp
    cfe/trunk/test/CXX/expr/expr.unary/expr.new/p20-0x.cpp
    cfe/trunk/test/CXX/expr/expr.unary/expr.new/p20.cpp

Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=101841&r1=101840&r2=101841&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Mon Apr 19 19:22:43 2010
@@ -886,6 +886,13 @@
       return true;
   }
 
+  // We don't need an operator delete if we're running under
+  // -fno-exceptions.
+  if (!getLangOptions().Exceptions) {
+    OperatorDelete = 0;
+    return false;
+  }
+
   // FindAllocationOverload can change the passed in arguments, so we need to
   // copy them back.
   if (NumPlaceArgs > 0)

Modified: cfe/trunk/test/CXX/expr/expr.unary/expr.new/p19.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/expr/expr.unary/expr.new/p19.cpp?rev=101841&r1=101840&r2=101841&view=diff
==============================================================================
--- cfe/trunk/test/CXX/expr/expr.unary/expr.new/p19.cpp (original)
+++ cfe/trunk/test/CXX/expr/expr.unary/expr.new/p19.cpp Mon Apr 19 19:22:43 2010
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -verify %s
+// RUN: %clang_cc1 -fsyntax-only -verify -fexceptions %s
 typedef __SIZE_TYPE__ size_t;
 
 // Operator delete template for placement new with global lookup

Modified: cfe/trunk/test/CXX/expr/expr.unary/expr.new/p20-0x.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/expr/expr.unary/expr.new/p20-0x.cpp?rev=101841&r1=101840&r2=101841&view=diff
==============================================================================
--- cfe/trunk/test/CXX/expr/expr.unary/expr.new/p20-0x.cpp (original)
+++ cfe/trunk/test/CXX/expr/expr.unary/expr.new/p20-0x.cpp Mon Apr 19 19:22:43 2010
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -verify -std=c++0x %s
+// RUN: %clang_cc1 -fsyntax-only -verify -std=c++0x -fexceptions %s
 typedef __SIZE_TYPE__ size_t;
 
 struct S {

Modified: cfe/trunk/test/CXX/expr/expr.unary/expr.new/p20.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/expr/expr.unary/expr.new/p20.cpp?rev=101841&r1=101840&r2=101841&view=diff
==============================================================================
--- cfe/trunk/test/CXX/expr/expr.unary/expr.new/p20.cpp (original)
+++ cfe/trunk/test/CXX/expr/expr.unary/expr.new/p20.cpp Mon Apr 19 19:22:43 2010
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -fsyntax-only -verify %s
+// RUN: %clang_cc1 -fsyntax-only -verify -fexceptions %s
 typedef __SIZE_TYPE__ size_t;
 
 // Overloaded operator delete with two arguments

Added: cfe/trunk/test/SemaCXX/no-exceptions.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/no-exceptions.cpp?rev=101841&view=auto
==============================================================================
--- cfe/trunk/test/SemaCXX/no-exceptions.cpp (added)
+++ cfe/trunk/test/SemaCXX/no-exceptions.cpp Mon Apr 19 19:22:43 2010
@@ -0,0 +1,21 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+// Various tests for -fno-exceptions
+
+typedef __typeof(sizeof(int)) size_t;
+
+namespace test0 {
+  // rdar://problem/7878149
+  class Foo {
+  public:
+    void* operator new(size_t x);
+  private:
+    void operator delete(void *x);
+  };
+
+  void test() {
+    // Under -fexceptions, this does access control for the associated
+    // 'operator delete'.
+    (void) new Foo();
+  }
+}





More information about the cfe-commits mailing list