]> granicus.if.org Git - clang/commitdiff
Revert r127617: "Code generation for noexcept."
authorJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 15 Mar 2011 00:18:21 +0000 (00:18 +0000)
committerJakob Stoklund Olesen <stoklund@2pi.dk>
Tue, 15 Mar 2011 00:18:21 +0000 (00:18 +0000)
The tests fail in a -Asserts build.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@127635 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGException.cpp
test/CXX/except/except.spec/p9-dynamic.cpp [deleted file]
test/CXX/except/except.spec/p9-noexcept.cpp [deleted file]

index 7fdfe700421e718424af2c96db239c9be960ec6a..f05bc700b4ffe1b2d7750e70bd43aa8a4949938f 100644 (file)
@@ -449,23 +449,19 @@ void CodeGenFunction::EmitStartEHSpec(const Decl *D) {
   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 @@ void CodeGenFunction::EmitEndEHSpec(const Decl *D) {
   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) {
diff --git a/test/CXX/except/except.spec/p9-dynamic.cpp b/test/CXX/except/except.spec/p9-dynamic.cpp
deleted file mode 100644 (file)
index 3e7f931..0000000
+++ /dev/null
@@ -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
diff --git a/test/CXX/except/except.spec/p9-noexcept.cpp b/test/CXX/except/except.spec/p9-noexcept.cpp
deleted file mode 100644 (file)
index 71a8dee..0000000
+++ /dev/null
@@ -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();
-}