mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
117 lines
3.1 KiB
Swift
117 lines
3.1 KiB
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: split-file %S/trap-on-exception-irgen-itanium.swift %t
|
|
|
|
// RUN: %target-build-swift %s -I %t/Inputs -o %t/trap-exceptions -Xfrontend -enable-experimental-cxx-interop -Xfrontend -validate-tbd-against-ir=none -g
|
|
// RUN: %target-codesign %t/trap-exceptions
|
|
// RUN: %target-run %t/trap-exceptions
|
|
|
|
// RUN: %target-build-swift %s -I %t/Inputs -o %t/trap-exceptions-no-debug -Xfrontend -enable-experimental-cxx-interop -Xfrontend -validate-tbd-against-ir=none
|
|
// RUN: %target-codesign %t/trap-exceptions-no-debug
|
|
// RUN: %target-run %t/trap-exceptions-no-debug
|
|
|
|
// RUN: %target-build-swift %s -I %t/Inputs -o %t/trap-exceptions-opt -Xfrontend -enable-experimental-cxx-interop -Xfrontend -validate-tbd-against-ir=none -O
|
|
// RUN: %target-codesign %t/trap-exceptions-opt
|
|
// RUN: %target-run %t/trap-exceptions-opt
|
|
|
|
// REQUIRES: executable_test
|
|
|
|
// FIXME: Support MSVC exceptions.
|
|
// UNSUPPORTED: OS=windows-msvc
|
|
|
|
import CxxModule
|
|
import StdlibUnittest
|
|
|
|
func makeCInt() -> CInt {
|
|
return 42
|
|
}
|
|
|
|
var TrapOnExecutionTestSuite = TestSuite("TrapOnExecution")
|
|
|
|
TrapOnExecutionTestSuite.test("freeFunctionNoThrow") {
|
|
expectEqual(freeFunctionNoThrow(makeCInt()), -42)
|
|
}
|
|
|
|
TrapOnExecutionTestSuite.test("freeFunctionThrows") {
|
|
expectCrashLater()
|
|
let _ = freeFunctionThrows(2)
|
|
}
|
|
|
|
TrapOnExecutionTestSuite.test("freeFunctionThrowsNoException") {
|
|
expectEqual(freeFunctionThrows(-1), 1)
|
|
}
|
|
|
|
TrapOnExecutionTestSuite.test("freeFunctionCatchesException") {
|
|
expectEqual(freeFunctionCatchesException(-1), 1)
|
|
expectEqual(freeFunctionCatchesException(2), 2)
|
|
}
|
|
|
|
TrapOnExecutionTestSuite.test("TestClassMethodThrows") {
|
|
expectCrashLater()
|
|
let v = TestClass()
|
|
v.method(2)
|
|
}
|
|
|
|
TrapOnExecutionTestSuite.test("TestClassNoExceptMethod") {
|
|
var v = TestClass()
|
|
expectEqual(v.noExceptMethod(1), -1)
|
|
}
|
|
|
|
TrapOnExecutionTestSuite.test("TestTemplateIntDependentNoExceptMethod") {
|
|
var v = TestTemplateInt()
|
|
v.dependentNoExceptMethod()
|
|
}
|
|
|
|
TrapOnExecutionTestSuite.test("TestTemplateBoolDependentNoExceptMethod") {
|
|
expectCrashLater()
|
|
var v = TestTemplateBool()
|
|
v.dependentNoExceptMethod()
|
|
}
|
|
|
|
protocol MethodProtocol {
|
|
func method(_ x: CInt) -> CInt
|
|
}
|
|
|
|
extension TestClass: MethodProtocol {
|
|
}
|
|
|
|
TrapOnExecutionTestSuite.test("TestProtocolConformanceThunkInvoke") {
|
|
let v = TestClass()
|
|
let p: MethodProtocol = v
|
|
expectCrashLater()
|
|
let _ = p.method(2)
|
|
}
|
|
|
|
TrapOnExecutionTestSuite.test("TestClassWithSubscript") {
|
|
let v = ClassWithSubscript()
|
|
expectEqual(v[0], 0)
|
|
expectCrashLater()
|
|
let _ = v[1]
|
|
}
|
|
|
|
TrapOnExecutionTestSuite.test("TestClassWithThrowingDestructor") {
|
|
expectCrashLater()
|
|
let _ = ClassWithThrowingDestructor()
|
|
}
|
|
|
|
TrapOnExecutionTestSuite.test("TestClassWithThrowingCopyConstructor") {
|
|
expectCrashLater()
|
|
let p1 = ClassWithThrowingCopyConstructor()
|
|
var p2 = p1
|
|
expectEqual(p2.m, 0)
|
|
p2.m = 1
|
|
expectEqual(p2.m, 1)
|
|
expectEqual(p1.m, 0)
|
|
}
|
|
|
|
TrapOnExecutionTestSuite.test("ClassWithThrowingConstructor") {
|
|
expectCrashLater()
|
|
let _ = ClassWithThrowingConstructor()
|
|
}
|
|
|
|
TrapOnExecutionTestSuite.test("ClassWithNoThrowingConstructor") {
|
|
let obj = ClassWithNoThrowingConstructor()
|
|
expectEqual(obj.m, 0)
|
|
}
|
|
|
|
runAllTests()
|