// RUN: %target-typecheck-verify-swift -swift-version 3 // https://bugs.swift.org/browse/SR-3452 // See test/Parse/enum_element_pattern_swift4.swift for Swift4 behavior. enum E { case A, B, C, D static func testE(e: E) { switch e { case A(): // expected-warning {{cannot specialize enum case; ignoring generic argument, which will be rejected in future version of Swift}} {{11-24=}} break case B(): // expected-warning {{cannot specialize enum case; ignoring generic argument, which will be rejected in future version of Swift}} {{11-16=}} break default: break; } } } func testE(e: E) { switch e { case E.A(): // expected-warning {{cannot specialize enum case; ignoring generic argument, which will be rejected in future version of Swift}} {{11-24=}} break case E.B(): // expected-warning {{cannot specialize enum case; ignoring generic argument, which will be rejected in future version of Swift}} {{11-16=}} break case .C(): // Ok. break case .D(let payload): // Ok. 'payload' has type '()'. let _: () = payload break default: break } guard case .C() = e, // Ok. SILGen assert this, but no-assert Swift3 GM build didn't assert. case .D(let payload) = e // FIXME: Should be rejected. Swift3 IRGen verifier did catch this. else { return } print(payload) } extension E : Error {} func canThrow() throws { throw E.A } do { try canThrow() } catch E.A() { // Ok. // .. } catch E.B(let payload) { // Ok. 'payload' has type '()'. let _: () = payload }