Files
swift-mirror/test/Profiler/coverage_errors_exec.swift
2024-08-04 10:45:29 +01:00

443 lines
24 KiB
Swift

// RUN: %empty-directory(%t)
// RUN: %target-build-swift %s -profile-generate -profile-coverage-mapping -o %t/main
// RUN: %target-codesign %t/main
// RUN: env %env-LLVM_PROFILE_FILE=%t/default.profraw %target-run %t/main
// RUN: %llvm-profdata merge %t/default.profraw -o %t/default.profdata
// RUN: %llvm-cov show %t/main -instr-profile=%t/default.profdata | %FileCheck %s
// REQUIRES: profile_runtime
// REQUIRES: executable_test
struct Err: Error {}
struct S {
static subscript() -> Int {
get throws { throw Err() }
}
func throwingMethod() throws -> Int { throw Err() }
}
func noThrowingFn() throws -> Int { 0 }
@discardableResult
func throwingFn() throws -> Int { throw Err() }
func throwingBool() throws -> Bool { throw Err() }
func noThrowingBool() throws -> Bool { true }
var throwingProp: Int {
get throws { throw Err() }
}
var throwingS: S {
get throws { throw Err() }
}
var noThrowingS: S {
get throws { S() }
}
func test1() -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
do { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
let x = try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} catch { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 0 // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = test1() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test2() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
let x = try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test2() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test3() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
let x = try throwingProp // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test3() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test4() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
let x = try S[] // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test4() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
// Note we don't emit a region after the call since it would be empty.
func test5() -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
do { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} catch { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 0 // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = test5() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func takesInts(_ x: Int, _ y: Int) {} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
// The throwing expr is nested here, the region starts after the throwing expr.
func test6() throws { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
takesInts(try throwingFn(), 0) // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
try? test6() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test7() throws { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
takesInts( // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn(), // CHECK: {{ *}}[[@LINE]]|{{ *}}1
0 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
) // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
try? test7() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test8() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
let x = try throwingS.throwingMethod() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test8()
func test9() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
let x = try noThrowingS.throwingMethod() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test9() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test10() throws { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
takesInts( // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn(), // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
) // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
try? test10() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test11() throws { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
takesInts( // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try noThrowingFn(), // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
) // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
try? test11() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
// rdar://100470244 - Make sure we don't underflow the counter here.
func test12() -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
do { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 1 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} catch { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 2 // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = test12() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test13() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
x: do { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} catch is Err { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
break x // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 1 // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test13() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test14() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
x: do { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
do { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
break x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} catch is Err { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 1 // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} catch is Err { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
return 2 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test14() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test15() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
x: do { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
do { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try noThrowingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
break x // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} catch is Err { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
return 1 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} catch is Err { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
// CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 2 // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test15() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test16() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
let x = try true // CHECK: {{ *}}[[@LINE]]|{{ *}}1
? throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
: throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test16() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
// FIXME: The line execution count is misleading here as it includes the
// trailing edge of the thrown error from the first branch (rdar://118654503).
func test17() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
let x = try false // CHECK: {{ *}}[[@LINE]]|{{ *}}1
? throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
: throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test17() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
// FIXME: The line execution count is misleading here as it includes the
// trailing edge of the thrown error from the first branch (rdar://118654503).
func test18() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
let x = try true // CHECK: {{ *}}[[@LINE]]|{{ *}}1
? noThrowingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
: noThrowingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test18() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
@discardableResult
func takesOptInts(_ x: Int?, _ y: Int?) -> Int { 0 }
func test19() { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
takesOptInts( // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try? throwingFn(), // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try? throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
) // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
test19() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test20(
) throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try takesOptInts( // CHECK: {{ *}}[[@LINE]]|{{ *}}1
throwingFn(), // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try? throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
) // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
_ = try? test20() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test21() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
throw Err() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
}() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 1 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test21() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test22(
) throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try takesOptInts( // CHECK: {{ *}}[[@LINE]]|{{ *}}1
noThrowingFn(), // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try? throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
) // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test22() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test23() -> Int? { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
guard let x = try? throwingFn() else { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return nil // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = test23() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test24() -> Int? { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
guard let x = try? noThrowingFn() else { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return nil // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = test24() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test25() -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
let x = try! noThrowingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = test25() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test26() throws -> Int {
let x = if try throwingBool() { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} else { // CHECK: {{ *}}[[@LINE]]|{{ *}}0
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test26() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test27() throws -> Int {
let x = if try noThrowingBool() { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} else { // CHECK: {{ *}}[[@LINE]]|{{ *}}0
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test27() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test28() throws -> Int {
let x = if try !noThrowingBool() { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} else { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test28() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test29() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingBool() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
? try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
: try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
_ = try? test29() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test30() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try noThrowingBool() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
? try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
: try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
_ = try? test30() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
// FIXME: The line execution count is misleading here (rdar://118654503).
func test31() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try !noThrowingBool() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
? try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
: try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
_ = try? test31() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test32() throws { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
if try throwingBool(), // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingBool() { // CHECK: {{ *}}[[@LINE]]|{{ *}}0
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} else { // CHECK: {{ *}}[[@LINE]]|{{ *}}0
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
_ = try? test32() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test33() throws { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
if try noThrowingBool(), // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingBool() { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} else { // CHECK: {{ *}}[[@LINE]]|{{ *}}0
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
_ = try? test33() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test34() throws { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
if try noThrowingBool(), // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try noThrowingBool() { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} else { // CHECK: {{ *}}[[@LINE]]|{{ *}}0
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
_ = try? test34() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test35() throws { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
if try !noThrowingBool(), // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try noThrowingBool() { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} else { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
try throwingFn() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
_ = try? test35() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test36() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
guard try throwingBool() else { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 1 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
return 0 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test36() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test37() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
guard try noThrowingBool() else { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 1 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 0 // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test37() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test38() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
guard try !noThrowingBool() else { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 1 // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 0 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test38() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test39() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
switch try throwingBool() { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
case true: // CHECK: {{ *}}[[@LINE]]|{{ *}}0
return 0 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
case false: // CHECK: {{ *}}[[@LINE]]|{{ *}}0
return 1 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
_ = try? test39() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
// FIXME: The line coverage for the second case isn't great (rdar://118654503).
func test40() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
switch try noThrowingBool() { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
case true: // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 0 // CHECK: {{ *}}[[@LINE]]|{{ *}}1
case false: // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 1 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test40() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
// FIXME: The line coverage for the first case isn't great (rdar://118654503).
func test41() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
switch try !noThrowingBool() { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
case true: // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 0 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
case false: // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return 1 // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test41() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
func test42() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
let x = switch try throwingBool() { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
case true: // CHECK: {{ *}}[[@LINE]]|{{ *}}0
0 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
case false: // CHECK: {{ *}}[[@LINE]]|{{ *}}0
1 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}0
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test42() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
// FIXME: The line coverage for the second case isn't great (rdar://118654503).
func test43() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
let x = switch try noThrowingBool() { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
case true: // CHECK: {{ *}}[[@LINE]]|{{ *}}1
0 // CHECK: {{ *}}[[@LINE]]|{{ *}}1
case false: // CHECK: {{ *}}[[@LINE]]|{{ *}}1
1 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test43() // CHECK: {{ *}}[[@LINE]]|{{ *}}1
// FIXME: The line coverage for the first case isn't great (rdar://118654503).
func test44() throws -> Int { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
let x = switch try !noThrowingBool() { // CHECK: {{ *}}[[@LINE]]|{{ *}}1
case true: // CHECK: {{ *}}[[@LINE]]|{{ *}}1
0 // CHECK: {{ *}}[[@LINE]]|{{ *}}0
case false: // CHECK: {{ *}}[[@LINE]]|{{ *}}1
1 // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
return x // CHECK: {{ *}}[[@LINE]]|{{ *}}1
} // CHECK: {{ *}}[[@LINE]]|{{ *}}1
_ = try? test44() // CHECK: {{ *}}[[@LINE]]|{{ *}}1