Files
swift-mirror/test/SILGen/coverage_exceptions.swift
Justin Bogner 330fb77e5f InstrProf: Fix a crash when instrumentation hits an implicit return
Exception handling in an init block was hitting an assert when we
ended a coverage range inside the implicit return decl. It doesn't
actually make sense to generate coverage mappings in implicit stmts
anyway, but this is the first test case that came across that.

Swift SVN r28508
2015-05-13 07:07:47 +00:00

63 lines
1.5 KiB
Swift

// RUN: %target-swift-frontend -profile-generate -profile-coverage-mapping -emit-sorted-sil -emit-sil -module-name coverage_catch %s | FileCheck %s
enum SomeErr : ErrorType {
case Err1
case Err2
}
// CHECK-LABEL: sil_coverage_map {{.*}}// coverage_catch.bar
func bar() throws {
// CHECK-NEXT: [[@LINE-1]]:19 -> [[@LINE+2]]:2 : 0
throw SomeErr.Err2
} // CHECK-NEXT: }
// CHECK-LABEL: sil_coverage_map {{.*}}// coverage_catch.baz
func baz(fn: () throws -> ()) rethrows {
do {
try fn()
} catch SomeErr.Err1 { // CHECK: [[@LINE]]:24 -> {{[0-9]+}}:4 : 2
return
} // CHECK-NEXT: [[@LINE]]:4 -> {{[0-9]+}}:2 : 1
try fn()
} // CHECK-NEXT: }
// CHECK-LABEL: sil_coverage_map {{.*}}// coverage_catch.foo
func foo() -> Int32 {
var x : Int32 = 0
do {
throw SomeErr.Err1
x += 2 // [[@LINE]]:5 -> [[@LINE+1]]:4 : zero
} catch SomeErr.Err1 {
// CHECK: [[@LINE-1]]:24 -> [[@LINE+1]]:4 : 2
} catch _ {
// CHECK: [[@LINE-1]]:13 -> [[@LINE+1]]:4 : 3
} // CHECK: [[@LINE]]:4 -> {{[0-9:]+}} : 1
do {
try baz(bar)
} catch _ {
// CHECK: [[@LINE-1]]:13 -> [[@LINE+1]]:4 : 5
} // CHECK: [[@LINE]]:4 -> {{[0-9:]+}} : 4
do {
try baz { () throws -> () in throw SomeErr.Err1 }
} catch _ {}
return x
}
struct S {
// CHECK-LABEL: sil_coverage_map {{.*}}// coverage_catch.S.init
init() {
do {
throw SomeErr.Err1
} catch {
// CHECK: [[@LINE-1]]:13 -> [[@LINE+1]]:6 : 2
} // CHECK: [[@LINE]]:6 -> [[@LINE+1]]:4 : 1
}
}
foo()