diff options
Diffstat (limited to 'clang/test')
| -rw-r--r-- | clang/test/CodeGen/exceptions-seh-leave.c | 135 |
1 files changed, 2 insertions, 133 deletions
diff --git a/clang/test/CodeGen/exceptions-seh-leave.c b/clang/test/CodeGen/exceptions-seh-leave.c index 67a04c4e97d..7901c8c2fbd 100644 --- a/clang/test/CodeGen/exceptions-seh-leave.c +++ b/clang/test/CodeGen/exceptions-seh-leave.c @@ -125,6 +125,8 @@ int __leave_with___finally() { ////////////////////////////////////////////////////////////////////////////// // Mixed, nested cases. +// FIXME: Test with outer __finally once PR22553 is fixed. + int nested___except___finally() { int myres = 0; __try { @@ -235,136 +237,3 @@ int nested___except___except() { // CHECK: [[tryleave]] // CHECK-NEXT: br label %[[trycont4]] - -int nested___finally___except() { - int myres = 0; - __try { - __try { - g(); - } __except (1) { - g(); - __leave; // Refers to the outer __try, not the __except! - myres = 23; - return 0; - } - - myres = 51; - } __finally { - } - return 1; -} -// The order of basic blocks in the below doesn't matter. -// CHECK-LABEL: define i32 @nested___finally___except() - -// CHECK-LABEL: invoke void bitcast (void (...)* @g to void ()*)() -// CHECK-NEXT: to label %[[g1_cont:.*]] unwind label %[[g1_lpad:.*]] - -// CHECK: [[g1_cont]] -// CHECK-NEXT: br label %[[trycont:[^ ]*]] - -// CHECK: [[g1_lpad]] -// CHECK: br label %[[except]] - -// CHECK: [[except]] -// CHECK-NEXT: invoke void bitcast (void (...)* @g to void ()*)() -// CHECK-NEXT: to label %[[g2_cont:.*]] unwind label %[[g2_lpad:.*]] - -// CHECK: [[g2_cont]] -// CHECK-NEXT: br label %[[tryleave:[^ ]*]] -// CHECK-NOT: 23 - -// CHECK: [[g2_lpad]] -// CHECK: store i8 1, i8* %[[abnormal:[^ ]*]] -// CHECK-NEXT: br label %[[finally:[^ ]*]] - -// CHECK: [[trycont]] -// CHECK: store i32 51, i32* % -// CHECK-NEXT: br label %[[tryleave]] - -// CHECK: [[tryleave]] -// CHECK-NEXT: store i8 0, i8* %[[abnormal]] -// CHECK-NEXT: br label %[[finally:[^ ]*]] - -// CHECK: [[finally]] -// CHECK-NEXT: %[[abnormallocal:[^ ]*]] = load i8* %[[abnormal]] -// CHECK-NEXT: %[[reg:[^ ]*]] = icmp eq i8 %[[abnormallocal]], 0 -// CHECK-NEXT: br i1 %[[reg]], label %[[finallycont:[^ ]*]], label %[[finallyresume:[^ ]*]] - -// CHECK: [[finallycont]] -// CHECK-NEXT: ret i32 1 - -// CHECK: [[finallyresume]] -// CHECK-NEXT: br label %[[ehresume:[^ ]*]] - -// CHECK: [[ehresume]] -// CHECK: resume - -int nested___finally___finally() { - int myres = 0; - __try { - __try { - g(); - myres = 16; - } __finally { - g(); - __leave; // Refers to the outer __try, not the __finally we're in! - myres = 23; - return 0; - } - - myres = 51; - } __finally { - } - return 1; -} -// The order of basic blocks in the below doesn't matter. -// CHECK-LABEL: define i32 @nested___finally___finally() - -// CHECK-LABEL: invoke void bitcast (void (...)* @g to void ()*)() -// CHECK-NEXT: to label %[[g1_cont:.*]] unwind label %[[g1_lpad:.*]] - -// CHECK: [[g1_cont]] -// CHECK: store i32 16, i32* %[[myres:[^ ]*]], -// CHECK: store i8 0, i8* %[[abnormal:[^ ]*]] -// CHECK-NEXT: br label %[[finally:[^ ]*]] - -// CHECK: [[finally]] -// CHECK-NEXT: invoke void bitcast (void (...)* @g to void ()*)() #3 -// CHECK-NEXT: to label %[[g2_cont:.*]] unwind label %[[g2_lpad:.*]] - -// CHECK: [[g2_cont]] -// CHECK-NEXT: br label %[[tryleave:[^ ]*]] -// CHECK-NOT: store i32 23 - -// There's an unreachable block for the skipped `myres = 51`. -// CHECK: store i32 51, i32* %[[myres]] -// CHECK-NEXT: br label %[[tryleave]] - -// CHECK: [[tryleave]] -// CHECK-NEXT: store i8 0, i8* %[[abnormal]] -// CHECK-NEXT: br label %[[outerfinally:[^ ]*]] - -// CHECK: [[outerfinally]] -// CHECK-NEXT: %[[abnormallocal:[^ ]*]] = load i8* %[[abnormal]] -// CHECK-NEXT: %[[reg:[^ ]*]] = icmp eq i8 %[[abnormallocal]], 0 -// CHECK-NEXT: br i1 %[[reg]], label %[[finallycont:[^ ]*]], label %[[finallyresume:[^ ]*]] - -// CHECK: [[finallycont]] -// CHECK-NEXT: ret i32 1 - -// CHECK: [[g1_lpad]] -// CHECK: store i8 1, i8* %[[abnormal]] -// CHECK-NEXT: br label %[[finally:[^ ]*]] - -// CHECK: [[g2_lpad]] -// CHECK: br label %[[ehcleanup:[^ ]*]] - -// CHECK: [[ehcleanup]] -// CHECK-NEXT: store i8 1, i8* %[[abnormal]] -// CHECK-NEXT: br label %[[outerfinally]] - -// CHECK: [[finallyresume]] -// CHECK-NEXT: br label %[[ehresume:[^ ]*]] - -// CHECK: [[ehresume]] -// CHECK: resume |

