[cfe-commits] r127635 - in /cfe/trunk: lib/CodeGen/CGException.cpp test/CXX/except/except.spec/p9-dynamic.cpp test/CXX/except/except.spec/p9-noexcept.cpp

Jakob Stoklund Olesen stoklund at 2pi.dk
Mon Mar 14 17:18:21 PDT 2011


Author: stoklund
Date: Mon Mar 14 19:18:21 2011
New Revision: 127635

URL: http://llvm.org/viewvc/llvm-project?rev=127635&view=rev
Log:
Revert r127617: "Code generation for noexcept."

The tests fail in a -Asserts build.

Removed:
    cfe/trunk/test/CXX/except/except.spec/p9-dynamic.cpp
    cfe/trunk/test/CXX/except/except.spec/p9-noexcept.cpp
Modified:
    cfe/trunk/lib/CodeGen/CGException.cpp

Modified: cfe/trunk/lib/CodeGen/CGException.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGException.cpp?rev=127635&r1=127634&r2=127635&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGException.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGException.cpp Mon Mar 14 19:18:21 2011
@@ -449,23 +449,19 @@
   if (Proto == 0)
     return;
 
-  ExceptionSpecificationType EST = Proto->getExceptionSpecType();
-  if (isNoexceptExceptionSpec(EST)) {
-    if (Proto->getNoexceptSpec(getContext()) == FunctionProtoType::NR_Nothrow) {
-      // noexcept functions are simple terminate scopes.
-      EHStack.pushTerminate();
-    }
-  } else if (EST == EST_Dynamic || EST == EST_DynamicNone) {
-    unsigned NumExceptions = Proto->getNumExceptions();
-    EHFilterScope *Filter = EHStack.pushFilter(NumExceptions);
-
-    for (unsigned I = 0; I != NumExceptions; ++I) {
-      QualType Ty = Proto->getExceptionType(I);
-      QualType ExceptType = Ty.getNonReferenceType().getUnqualifiedType();
-      llvm::Value *EHType = CGM.GetAddrOfRTTIDescriptor(ExceptType,
-                                                        /*ForEH=*/true);
-      Filter->setFilter(I, EHType);
-    }
+  // FIXME: What about noexcept?
+  if (!Proto->hasDynamicExceptionSpec())
+    return;
+
+  unsigned NumExceptions = Proto->getNumExceptions();
+  EHFilterScope *Filter = EHStack.pushFilter(NumExceptions);
+
+  for (unsigned I = 0; I != NumExceptions; ++I) {
+    QualType Ty = Proto->getExceptionType(I);
+    QualType ExceptType = Ty.getNonReferenceType().getUnqualifiedType();
+    llvm::Value *EHType = CGM.GetAddrOfRTTIDescriptor(ExceptType,
+                                                      /*ForEH=*/true);
+    Filter->setFilter(I, EHType);
   }
 }
 
@@ -480,14 +476,10 @@
   if (Proto == 0)
     return;
 
-  ExceptionSpecificationType EST = Proto->getExceptionSpecType();
-  if (isNoexceptExceptionSpec(EST)) {
-    if (Proto->getNoexceptSpec(getContext()) == FunctionProtoType::NR_Nothrow) {
-      EHStack.popTerminate();
-    }
-  } else if (EST == EST_Dynamic || EST == EST_DynamicNone) {
-    EHStack.popFilter();
-  }
+  if (!Proto->hasDynamicExceptionSpec())
+    return;
+
+  EHStack.popFilter();
 }
 
 void CodeGenFunction::EmitCXXTryStmt(const CXXTryStmt &S) {

Removed: cfe/trunk/test/CXX/except/except.spec/p9-dynamic.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/except/except.spec/p9-dynamic.cpp?rev=127634&view=auto
==============================================================================
--- cfe/trunk/test/CXX/except/except.spec/p9-dynamic.cpp (original)
+++ cfe/trunk/test/CXX/except/except.spec/p9-dynamic.cpp (removed)
@@ -1,12 +0,0 @@
-// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - -fcxx-exceptions -fexceptions | FileCheck %s
-
-void external();
-
-void target() throw(int)
-{
-  // CHECK: invoke void @_Z8externalv()
-  external();
-}
-// CHECK: %eh.selector = call i32 (i8*, i8*, ...)* @llvm.eh.selector(i8* %exn, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i32 2, i8* bitcast (i8** @_ZTIi to i8*), i8* null) nounwind
-// CHECK: ehspec.unexpected:
-// CHECK: call void @__cxa_call_unexpected(i8* %1) noreturn

Removed: cfe/trunk/test/CXX/except/except.spec/p9-noexcept.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/except/except.spec/p9-noexcept.cpp?rev=127634&view=auto
==============================================================================
--- cfe/trunk/test/CXX/except/except.spec/p9-noexcept.cpp (original)
+++ cfe/trunk/test/CXX/except/except.spec/p9-noexcept.cpp (removed)
@@ -1,19 +0,0 @@
-// RUN: %clang_cc1 %s -std=c++0x -triple=x86_64-apple-darwin10 -emit-llvm -o - -fcxx-exceptions -fexceptions | FileCheck %s
-
-void external();
-
-void target() noexcept
-{
-  // CHECK: invoke void @_Z8externalv()
-  external();
-}
-// CHECK: terminate.lpad:
-// CHECK:  %eh.selector = call i32 (i8*, i8*, ...)* @llvm.eh.selector(i8* %exn, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* null) nounwind
-// CHECK-NEXT: call void @_ZSt9terminatev() noreturn nounwind
-// CHECK-NEXT: unreachable
-
-void reverse() noexcept(false)
-{
-  // CHECK: call void @_Z8externalv()
-  external();
-}





More information about the cfe-commits mailing list