blob: df85753a5b695041c7b9815c048b4a23ef8a5fe8 [file] [log] [blame]
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -primary-file %s -O -g -S | %FileCheck %s --check-prefix CHECK --check-prefix CHECK-%target-cpu --check-prefix CHECK-OPT-%target-os
// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil -primary-file %s -g -S | %FileCheck %s --check-prefix CHECK --check-prefix CHECK-%target-cpu --check-prefix CHECK-NOOPT-%target-os
import Builtin
import Swift
// Make sure we emit two traps.
// CHECK-LABEL: test_cond_fail:
// CHECK-x86_64: .cfi_startproc
// CHECK-i386: .cfi_startproc
// CHECK-arm64: .cfi_startproc
// CHECK-armv7: Lfunc_begin
// CHECK-armv7s: Lfunc_begin
// CHECK-powerpc64: .cfi_startproc
// CHECK-powerpc64le: .cfi_startproc
// CHECK-s390x: .cfi_startproc
// CHECK-OPT-macosx: ## InlineAsm Start
// CHECK-OPT-macosx: ## InlineAsm End
// CHECK-OPT-linux: ##APP
// CHECK-OPT-linux: ##NO_APP
// CHECK-NOOPT-macosx-NOT: ## InlineAsm Start
// CHECK-NOOPT-macosx-NOT: ## InlineAsm End
// CHECK-NOOPT-linux-NOT: ##APP
// CHECK-NOOPT-linux-NOT: ##NO_APP
// CHECK-x86_64: ud2
// CHECK-i386: ud2
// CHECK-arm64: brk
// CHECK-armv7: trap
// CHECK-armv7s: trap
// CHECK-powerpc64: trap
// CHECK-powerpc64le: trap
// CHECK-s390x: trap
// CHECK-NOT-x86_64: .cfi_endproc
// CHECK-NOT-i386: .cfi_endproc
// CHECK-NOT-arm64: .cfi_endproc
// CHECK-NOT-armv7: Lfunc_end
// CHECK-NOT-armv7s: Lfunc_end
// CHECK-NOT-powerpc64: .cfi_endproc
// CHECK-NOT-powerpc64le: .cfi_endproc
// CHECK-NOT-s390x: .cfi_endproc
// CHECK-OPT-macosx: ## InlineAsm Start
// CHECK-OPT-macosx: ## InlineAsm End
// CHECK-OPT-linux: ##APP
// CHECK-OPT-linux: ##NO_APP
// CHECK-NOOPT-macosx-NOT: ## InlineAsm Start
// CHECK-NOOPT-macosx-NOT: ## InlineAsm End
// CHECK-NOOPT-linux-NOT: ##APP
// CHECK-NOOPT-linux-NOT: ##NO_APP
// CHECK-x86_64: ud2
// CHECK-i386: ud2
// CHECK-arm64: brk
// CHECK-armv7: trap
// CHECK-armv7s: trap
// CHECK-powerpc64: trap
// CHECK-powerpc64le: trap
// CHECK-s390x: trap
// CHECK-x86_64: .cfi_endproc
// CHECK-i386: .cfi_endproc
// CHECK-arm64: .cfi_endproc
// CHECK-armv7: Lfunc_end
// CHECK-armv7s: Lfunc_end
// CHECK-powerpc64: .cfi_endproc
// CHECK-powerpc64le: .cfi_endproc
// CHECK-s390x: .cfi_endproc
sil hidden @test_cond_fail : $@convention(thin) (Int32) -> Int32 {
bb0(%0 : $Int32):
%2 = integer_literal $Builtin.Int32, 1
%3 = struct_extract %0 : $Int32, #Int32._value
%4 = integer_literal $Builtin.Int1, -1
%5 = builtin "sadd_with_overflow_Int32"(%3 : $Builtin.Int32, %2 : $Builtin.Int32, %4 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1)
%6 = tuple_extract %5 : $(Builtin.Int32, Builtin.Int1), 0
%7 = tuple_extract %5 : $(Builtin.Int32, Builtin.Int1), 1
cond_fail %7 : $Builtin.Int1
%8 = builtin "sadd_with_overflow_Int32"(%6 : $Builtin.Int32, %2 : $Builtin.Int32, %4 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1)
%9 = tuple_extract %8 : $(Builtin.Int32, Builtin.Int1), 0
%10 = tuple_extract %8 : $(Builtin.Int32, Builtin.Int1), 1
cond_fail %10 : $Builtin.Int1
%11 = struct $Int32 (%9 : $Builtin.Int32)
return %11 : $Int32
}