blob: d970cc86f190129bde6d1b7096d890aa5673de9c [file] [log] [blame]
// RUN: %target-swift-frontend -emit-sil %s -o /dev/null -verify
func testUnreachableAfterReturn() -> Int {
var x: Int = 3;
return x;
x += 1 //expected-warning {{code after 'return' will never be executed}}
}
func testUnreachableAfterIfReturn(a: Bool) -> Int {
if a {
return 1
} else {
return 0
}
var _: Int = testUnreachableAfterReturn() // expected-warning {{will never be executed}}
}
func testUnreachableForAfterContinue(b: Bool) {
for (var i:Int = 0; i<10; i++) { // expected-warning {{C-style for statement is deprecated and will be removed in a future version of Swift}}
var y: Int = 300;
y++;
if b {
break;
y++; // expected-warning {{code after 'break' will never be executed}}
}
continue;
y--; // expected-warning {{code after 'continue' will never be executed}}
}
}
func testUnreachableWhileAfterContinue(b: Bool) {
var i:Int = 0;
while (i<10) {
var y: Int = 300;
y++;
if b {
break;
y++; // expected-warning {{code after 'break' will never be executed}}
}
continue;
i++; // expected-warning {{code after 'continue' will never be executed}}
}
}
func testBreakAndContinue() {
var i = 0;
var m = 0;
for (i = 0; i < 10; ++i) { // expected-warning {{C-style for statement is deprecated and will be removed in a future version of Swift}}
m += 1
if m == 15 {
break
} else {
continue
}
m += 1 // expected-warning {{will never be executed}}
}
}
// <rdar://problem/20253447> `case let Case` without bindings incorrectly matches other cases
enum Tree {
case Leaf(Int)
case Branch(Int)
}
func testUnreachableCase1(a : Tree) {
switch a {
case let Leaf:
_ = Leaf
return
case .Branch(_): // expected-warning {{case will never be executed}}
return
}
}
func testUnreachableCase2(a : Tree) {
switch a {
case let Leaf:
_ = Leaf
fallthrough
case .Branch(_):
return
}
}
func testUnreachableCase3(a : Tree) {
switch a {
case _:
break
case .Branch(_): // expected-warning {{case will never be executed}}
return
}
}
func testUnreachableCase4(a : Tree) {
switch a {
case .Leaf(_):
return
case .Branch(_):
return
}
}
func testUnreachableCase5(a : Tree) {
switch a {
case _:
break
default: // expected-warning {{default will never be executed}}
return
}
}
func testUnreachableAfterThrow(e : ErrorType) throws {
throw e
return // expected-warning {{code after 'throw' will never be executed}}
}
class TestThrowInInit {
required init(e : ErrorType) throws {
throw e // no unreachable code diagnostic for the implicit return.
}
}