Merge pull request #13411 from frootloops/expect-crash

diff --git a/stdlib/private/StdlibUnittest/StdlibUnittest.swift.gyb b/stdlib/private/StdlibUnittest/StdlibUnittest.swift.gyb
index f4a028f..93bf6e6 100644
--- a/stdlib/private/StdlibUnittest/StdlibUnittest.swift.gyb
+++ b/stdlib/private/StdlibUnittest/StdlibUnittest.swift.gyb
@@ -542,6 +542,11 @@
   _seenExpectCrash = true
 }
 
+public func expectCrash(executing: () -> Void) {
+  expectCrashLater()
+  executing()
+}
+
 func _defaultTestSuiteFailedCallback() {
   abort()
 }
diff --git a/test/stdlib/Optional.swift b/test/stdlib/Optional.swift
index d3e3320..72eeb0c 100644
--- a/test/stdlib/Optional.swift
+++ b/test/stdlib/Optional.swift
@@ -327,13 +327,11 @@
 
 OptionalTests.test("Casting Optional Traps") {
   let nx: C? = nil
-  expectCrashLater()
-  _blackHole(anyToAny(nx, Int.self))
+  expectCrash { _blackHole(anyToAny(nx, Int.self)) }
 }
 OptionalTests.test("Casting Optional Any Traps") {
   let nx: X? = X()
-  expectCrashLater()
-  _blackHole(anyToAny(nx as Any, Optional<Int>.self))
+  expectCrash { _blackHole(anyToAny(nx as Any, Optional<Int>.self)) }
 }
 
 class TestNoString {}
@@ -402,8 +400,7 @@
     reason: "assertions are disabled in Release and Unchecked mode"))
   .code {
   let empty: Int? = nil
-  expectCrashLater()
-  _blackHole(empty.unsafelyUnwrapped)
+  expectCrash { _blackHole(empty.unsafelyUnwrapped) }
 }
 
 runAllTests()