summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGenCXX/eh.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-07-07 06:56:46 +0000
committerJohn McCall <rjmccall@apple.com>2010-07-07 06:56:46 +0000
commitb609d3f5f9fa9d2c01f3001ea1e670bb24634687 (patch)
tree5ab0f7142bef3cc75a6da36465a08ee18e46ca98 /clang/test/CodeGenCXX/eh.cpp
parent3956106543637429e25878d98948bee847be8966 (diff)
downloadbcm5719-llvm-b609d3f5f9fa9d2c01f3001ea1e670bb24634687.tar.gz
bcm5719-llvm-b609d3f5f9fa9d2c01f3001ea1e670bb24634687.zip
Teach function-try-blocks on constructors and destructors to implicitly
rethrow. Fixes rdar://problem/7696603 llvm-svn: 107757
Diffstat (limited to 'clang/test/CodeGenCXX/eh.cpp')
-rw-r--r--clang/test/CodeGenCXX/eh.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/eh.cpp b/clang/test/CodeGenCXX/eh.cpp
index 4d0955877d2..d03dc917153 100644
--- a/clang/test/CodeGenCXX/eh.cpp
+++ b/clang/test/CodeGenCXX/eh.cpp
@@ -193,3 +193,30 @@ namespace test8 {
}
}
}
+
+// Constructor function-try-block must rethrow on fallthrough.
+// rdar://problem/7696603
+namespace test9 {
+ void opaque();
+
+ struct A { A(); };
+
+ // CHECK: define void @_ZN5test91AC1Ev
+ // CHECK: call void @_ZN5test91AC2Ev
+ // CHECK-NEXT: ret void
+
+ // CHECK: define void @_ZN5test91AC2Ev(
+ A::A() try {
+ // CHECK: invoke void @_ZN5test96opaqueEv()
+ opaque();
+ } catch (int x) {
+ // CHECK: call i8* @__cxa_begin_catch
+ // CHECK: invoke void @_ZN5test96opaqueEv()
+ // CHECK: invoke void @__cxa_rethrow()
+ opaque();
+ }
+
+ // landing pad from first call to invoke
+ // CHECK: call i8* @llvm.eh.exception
+ // CHECK: call i32 (i8*, i8*, ...)* @llvm.eh.selector(i8* {{.*}}, i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*), i8* bitcast (i8** @_ZTIi to i8*), i8* null)
+}
OpenPOWER on IntegriCloud