// RUN: %empty-directory(%t) // RUN: %target-build-swift %s -o %t/Assert_Debug -Onone // RUN: %target-build-swift %s -Xfrontend -disable-access-control -o %t/Assert_Release -O // RUN: %target-build-swift %s -Xfrontend -disable-access-control -o %t/Assert_Unchecked -Ounchecked // RUN: %target-codesign %t/Assert_Debug // RUN: %target-codesign %t/Assert_Release // RUN: %target-codesign %t/Assert_Unchecked // // RUN: %target-run %t/Assert_Debug // RUN: %target-run %t/Assert_Release // RUN: %target-run %t/Assert_Unchecked // REQUIRES: executable_test import StdlibUnittest func returnNil() -> AnyObject? { return _opaqueIdentity(nil as AnyObject?) } var OptionalTraps = TestSuite("OptionalTraps") OptionalTraps.test("UnwrapNone") .skip(.custom( { _isFastAssertConfiguration() }, reason: "this trap is not guaranteed to happen in -Ounchecked")) .code { let a: AnyObject? = returnNil() expectCrashLater() let unwrapped: AnyObject = a! _blackHole(unwrapped) } OptionalTraps.test("UnwrapNone/location") .skip(.custom( { _isFastAssertConfiguration() }, reason: "this trap is not guaranteed to happen in -Ounchecked")) .crashOutputMatches(_isDebugAssertConfiguration() ? "OptionalTraps.swift, line 45" : "") .code { expectCrashLater() let a: AnyObject? = returnNil() expectCrashLater() let unwrapped: AnyObject = a! _blackHole(unwrapped) } OptionalTraps.test("UnwrapNone/Ounchecked") .xfail(.custom( { !_isFastAssertConfiguration() }, reason: "unwrapping nil should trap unless we are in -Ounchecked mode")) .code { var a: AnyObject? = returnNil() expectEqual(0, unsafeBitCast(a!, to: Int.self)) } OptionalTraps.test("UnwrapNone/Message") .skip(.custom( { _isFastAssertConfiguration() }, reason: "this trap is not guaranteed to happen in -Ounchecked")) .skip(.custom( { !_isDebugAssertConfiguration() }, reason: "this trap may not have an error message may not be printed in -O")) .code { var a: AnyObject? = returnNil() expectCrashLater(withMessage: "Unexpectedly found nil while unwrapping an Optional value") let unwrapped: AnyObject = a! _blackHole(unwrapped) } OptionalTraps.test("UnwrapNone/Message/Implicit") .skip(.custom( { _isFastAssertConfiguration() }, reason: "this trap is not guaranteed to happen in -Ounchecked")) .skip(.custom( { !_isDebugAssertConfiguration() }, reason: "this trap may not have an error message may not be printed in -O")) .code { var a: AnyObject! = returnNil() expectCrashLater(withMessage: "Unexpectedly found nil while implicitly unwrapping an Optional value") let unwrapped: AnyObject = a _blackHole(unwrapped) } runAllTests()