forked from OSchip/llvm-project
Make __leave test pass in -Asserts builds.
llvm-svn: 230514
This commit is contained in:
parent
d264827229
commit
d9b8bd6b86
|
@ -1,8 +1,5 @@
|
|||
// RUN: %clang_cc1 %s -triple x86_64-pc-win32 -fms-extensions -emit-llvm -o - | FileCheck %s
|
||||
|
||||
// FIXME: Rewrite CHECKs for unnamed BBs and Insts.
|
||||
// REQUIRES: asserts
|
||||
|
||||
void g();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -22,9 +19,9 @@ int __leave_with___except_simple() {
|
|||
}
|
||||
// CHECK-LABEL: define i32 @__leave_with___except_simple()
|
||||
// CHECK: store i32 15, i32* %myres
|
||||
// CHECK-NEXT: br label %__try.__leave
|
||||
// CHECK-NEXT: br label %[[tryleave:[^ ]*]]
|
||||
// CHECK-NOT: store i32 23
|
||||
// CHECK: __try.__leave:
|
||||
// CHECK: [[tryleave]]
|
||||
// CHECK-NEXT: ret i32 1
|
||||
|
||||
|
||||
|
@ -48,10 +45,10 @@ int __leave_with___except() {
|
|||
// keeps the CodeGen code simpler, __leave is very rare, and SimplifyCFG will
|
||||
// simplify this anyways.
|
||||
// CHECK: [[cont]]
|
||||
// CHECK-NEXT: br label %__try.__leave
|
||||
// CHECK-NEXT: br label %[[tryleave:[^ ]*]]
|
||||
// CHECK-NOT: store i32 23
|
||||
// CHECK: __try.__leave:
|
||||
// CHECK-NEXT: br label %__try.cont
|
||||
// CHECK: [[tryleave]]
|
||||
// CHECK-NEXT: br label %
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -74,11 +71,11 @@ int __leave_with___finally_simple() {
|
|||
}
|
||||
// CHECK-LABEL: define i32 @__leave_with___finally_simple()
|
||||
// CHECK: store i32 15, i32* %myres
|
||||
// CHECK-NEXT: br label %__try.__leave
|
||||
// CHECK-NEXT: br label %[[tryleave:[^ ]*]]
|
||||
// CHECK-NOT: store i32 23
|
||||
// CHECK: __try.__leave:
|
||||
// CHECK-NEXT: store i8 0, i8* %abnormal.termination.slot
|
||||
// CHECK-NEXT: br label %__finally
|
||||
// CHECK: [[tryleave]]
|
||||
// CHECK-NEXT: store i8 0, i8* %
|
||||
// CHECK-NEXT: br label %
|
||||
|
||||
// __finally block doesn't return, __finally.cont doesn't exist.
|
||||
int __leave_with___finally_noreturn() {
|
||||
|
@ -94,11 +91,11 @@ int __leave_with___finally_noreturn() {
|
|||
}
|
||||
// CHECK-LABEL: define i32 @__leave_with___finally_noreturn()
|
||||
// CHECK: store i32 15, i32* %myres
|
||||
// CHECK-NEXT: br label %__try.__leave
|
||||
// CHECK-NEXT: br label %[[tryleave:[^ ]*]]
|
||||
// CHECK-NOT: store i32 23
|
||||
// CHECK: __try.__leave:
|
||||
// CHECK-NEXT: store i8 0, i8* %abnormal.termination.slot
|
||||
// CHECK-NEXT: br label %__finally
|
||||
// CHECK: [[tryleave]]
|
||||
// CHECK-NEXT: store i8 0, i8* %
|
||||
// CHECK-NEXT: br label %
|
||||
|
||||
// The "normal" case.
|
||||
int __leave_with___finally() {
|
||||
|
@ -118,11 +115,11 @@ int __leave_with___finally() {
|
|||
// For __finally, there needs to be an explicit __try.__leave, because
|
||||
// abnormal.termination.slot needs to be set there.
|
||||
// CHECK: [[cont]]
|
||||
// CHECK-NEXT: br label %__try.__leave
|
||||
// CHECK-NEXT: br label %[[tryleave:[^ ]*]]
|
||||
// CHECK-NOT: store i32 23
|
||||
// CHECK: __try.__leave:
|
||||
// CHECK-NEXT: store i8 0, i8* %abnormal.termination.slot
|
||||
// CHECK-NEXT: br label %__finally
|
||||
// CHECK: [[tryleave]]
|
||||
// CHECK-NEXT: store i8 0, i8* %
|
||||
// CHECK-NEXT: br label %
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -153,31 +150,34 @@ int nested___except___finally() {
|
|||
// CHECK-LABEL: invoke void bitcast (void (...)* @g to void ()*)()
|
||||
// CHECK-NEXT: to label %[[g1_cont:.*]] unwind label %[[g1_lpad:.*]]
|
||||
|
||||
// CHECK: [[g1_cont]]:
|
||||
// CHECK-NEXT: store i8 0, i8* %abnormal.termination.slot
|
||||
// CHECK-NEXT: br label %__finally
|
||||
// CHECK: [[g1_cont]]
|
||||
// CHECK-NEXT: store i8 0, i8* %[[abnormal:[^ ]*]]
|
||||
// CHECK-NEXT: br label %[[finally:[^ ]*]]
|
||||
|
||||
// CHECK-LABEL: __finally:
|
||||
// CHECK-NEXT: invoke void bitcast (void (...)* @g to void ()*)() #3
|
||||
// CHECK: [[finally]]
|
||||
// CHECK-NEXT: invoke void bitcast (void (...)* @g to void ()*)()
|
||||
// CHECK-NEXT: to label %[[g2_cont:.*]] unwind label %[[g2_lpad:.*]]
|
||||
|
||||
// CHECK: [[g2_cont]]:
|
||||
// CHECK: [[g2_cont]]
|
||||
// CHECK-NEXT: br label %[[tryleave:[^ ]*]]
|
||||
// CHECK-NOT: store i32 23
|
||||
// CHECK: br label %__try.__leave
|
||||
|
||||
// CHECK: [[g1_lpad]]:
|
||||
// CHECK: store i8 1, i8* %abnormal.termination.slot
|
||||
// CHECK-NEXT: br label %__finally
|
||||
// CHECK: [[g1_lpad]]
|
||||
// CHECK: store i8 1, i8* %
|
||||
// CHECK-NEXT: br label %[[finally]]
|
||||
|
||||
// CHECK: [[g2_lpad]]:
|
||||
// CHECK-NOT: %abnormal.termination.slot
|
||||
// CHECK: br label %__except
|
||||
// CHECK: [[g2_lpad]]
|
||||
// CHECK-NOT: %[[abnormal]]
|
||||
// CHECK: br label %[[except:[^ ]*]]
|
||||
|
||||
// CHECK-LABEL: __except:
|
||||
// CHECK-NEXT: br label %__try.cont
|
||||
// CHECK: [[except]]
|
||||
// CHECK-NEXT: br label %[[trycont:[^ ]*]]
|
||||
|
||||
// CHECK-LABEL: __try.__leave:
|
||||
// CHECK-NEXT: br label %__try.cont
|
||||
// CHECK: [[trycont]]
|
||||
// CHECK-NEXT: ret i32 1
|
||||
|
||||
// CHECK: [[tryleave]]
|
||||
// CHECK-NEXT: br label %[[trycont]]
|
||||
|
||||
int nested___except___except() {
|
||||
int myres = 0;
|
||||
|
@ -203,30 +203,33 @@ int nested___except___except() {
|
|||
// CHECK-LABEL: invoke void bitcast (void (...)* @g to void ()*)()
|
||||
// CHECK-NEXT: to label %[[g1_cont:.*]] unwind label %[[g1_lpad:.*]]
|
||||
|
||||
// CHECK: [[g1_cont]]:
|
||||
// CHECK: [[g1_cont]]
|
||||
// CHECK: store i32 16, i32* %myres
|
||||
// CHECK-NEXT: br label %__try.cont
|
||||
// CHECK-NEXT: br label %[[trycont:[^ ]*]]
|
||||
|
||||
// CHECK: [[g1_lpad]]:
|
||||
// CHECK: br label %__except
|
||||
// CHECK: [[g1_lpad]]
|
||||
// CHECK: br label %[[except:[^ ]*]]
|
||||
|
||||
// CHECK-LABEL: __except:
|
||||
// CHECK: [[except]]
|
||||
// CHECK-NEXT: invoke void bitcast (void (...)* @g to void ()*)() #3
|
||||
// CHECK-NEXT: to label %[[g2_cont:.*]] unwind label %[[g2_lpad:.*]]
|
||||
|
||||
// CHECK: [[g2_cont]]:
|
||||
// CHECK: [[g2_cont]]
|
||||
// CHECK-NEXT: br label %[[tryleave:[^ ]*]]
|
||||
// CHECK-NOT: store i32 23
|
||||
// CHECK: br label %__try.__leave
|
||||
|
||||
// CHECK: [[g2_lpad]]:
|
||||
// CHECK: br label %__except3
|
||||
// CHECK: [[g2_lpad]]
|
||||
// CHECK: br label %[[outerexcept:[^ ]*]]
|
||||
|
||||
// CHECK-LABEL: __except3:
|
||||
// CHECK-NEXT: br label %__try.cont4
|
||||
// CHECK: [[outerexcept]]
|
||||
// CHECK-NEXT: br label %[[trycont4:[^ ]*]]
|
||||
|
||||
// CHECK-LABEL: __try.cont:
|
||||
// CHECK: [[trycont4]]
|
||||
// CHECK-NEXT: ret i32 1
|
||||
|
||||
// CHECK: [[trycont]]
|
||||
// CHECK-NEXT: store i32 51, i32* %myres
|
||||
// CHECK-NEXT: br label %__try.__leave
|
||||
// CHECK-NEXT: br label %[[tryleave]]
|
||||
|
||||
// CHECK-LABEL: __try.__leave:
|
||||
// CHECK-NEXT: br label %__try.cont4
|
||||
// CHECK: [[tryleave]]
|
||||
// CHECK-NEXT: br label %[[trycont4]]
|
||||
|
|
Loading…
Reference in New Issue