summaryrefslogtreecommitdiffstats
path: root/clang/test/CodeGen/exceptions-seh.c
diff options
context:
space:
mode:
authorReid Kleckner <reid@kleckner.net>2015-07-01 22:33:45 +0000
committerReid Kleckner <reid@kleckner.net>2015-07-01 22:33:45 +0000
commit698310b004f83e9b4300c1d1bbd53ead0bc7f77d (patch)
tree998505f6034bd551b619c7d9dc0f9b5f10be4638 /clang/test/CodeGen/exceptions-seh.c
parent489759672814aab8af90985efef1d4812266e9a5 (diff)
downloadbcm5719-llvm-698310b004f83e9b4300c1d1bbd53ead0bc7f77d.tar.gz
bcm5719-llvm-698310b004f83e9b4300c1d1bbd53ead0bc7f77d.zip
[SEH] Update EmitCapturedLocals to match r241187
It was still using frameaddress(1) to get the parent FP, even though it had the value it wanted as a parameter. llvm-svn: 241199
Diffstat (limited to 'clang/test/CodeGen/exceptions-seh.c')
-rw-r--r--clang/test/CodeGen/exceptions-seh.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/clang/test/CodeGen/exceptions-seh.c b/clang/test/CodeGen/exceptions-seh.c
index 772fe547ba5..3eba3a412fe 100644
--- a/clang/test/CodeGen/exceptions-seh.c
+++ b/clang/test/CodeGen/exceptions-seh.c
@@ -168,21 +168,20 @@ int nested_try(void) {
// CHECK: load i32, i32*
// CHECK: icmp eq i32 %{{.*}}, 123
-static unsigned g = 0;
-void basic_finally(void) {
- ++g;
+int basic_finally(int g) {
__try {
j();
} __finally {
- --g;
+ ++g;
}
+ return g;
}
-// CHECK-LABEL: define void @basic_finally()
+// CHECK-LABEL: define i32 @basic_finally(i32 %g)
// X64-SAME: personality i8* bitcast (i32 (...)* @__C_specific_handler to i8*)
// X86-SAME: personality i8* bitcast (i32 (...)* @_except_handler3 to i8*)
-// CHECK: load i32, i32* @g
-// CHECK: add i32 %{{.*}}, 1
-// CHECK: store i32 %{{.*}}, i32* @g
+// CHECK: %[[g_addr:[^ ]*]] = alloca i32, align 4
+// CHECK: call void (...) @llvm.frameescape(i32* %[[g_addr]])
+// CHECK: store i32 %g, i32* %[[g_addr]]
//
// CHECK: invoke void @j()
// CHECK: to label %[[cont:[^ ]*]] unwind label %[[lpad:[^ ]*]]
@@ -190,7 +189,8 @@ void basic_finally(void) {
// CHECK: [[cont]]
// CHECK: %[[fp:[^ ]*]] = call i8* @llvm.frameaddress(i32 0)
// CHECK: call void @"\01?fin$0@0@basic_finally@@"({{i8( zeroext)?}} 0, i8* %[[fp]])
-// CHECK: ret void
+// CHECK: load i32, i32* %[[g_addr]], align 4
+// CHECK: ret i32
//
// CHECK: [[lpad]]
// CHECK: landingpad { i8*, i32 }
@@ -199,10 +199,11 @@ void basic_finally(void) {
// CHECK: call void @"\01?fin$0@0@basic_finally@@"({{i8( zeroext)?}} 1, i8* %[[fp]])
// CHECK: resume
-// CHECK: define internal void @"\01?fin$0@0@basic_finally@@"({{.*}})
-// CHECK: load i32, i32* @g, align 4
-// CHECK: add i32 %{{.*}}, -1
-// CHECK: store i32 %{{.*}}, i32* @g, align 4
+// CHECK: define internal void @"\01?fin$0@0@basic_finally@@"({{i8( zeroext)?}} %abnormal_termination, i8* %frame_pointer)
+// CHECK: call i8* @llvm.framerecover(i8* bitcast (i32 (i32)* @basic_finally to i8*), i8* %frame_pointer, i32 0)
+// CHECK: load i32, i32* %{{.*}}, align 4
+// CHECK: add nsw i32 %{{.*}}, 1
+// CHECK: store i32 %{{.*}}, i32* %{{.*}}, align 4
// CHECK: ret void
int returns_int(void);
OpenPOWER on IntegriCloud