// RUN: %target-typecheck-verify-swift -swift-version 4 // https://bugs.swift.org/browse/SR-3452 // See test/Compatibility/enum_element_pattern.swift for Swift3 behavior. // As for FIXME cases: see https://bugs.swift.org/browse/SR-3466 enum E { case A, B, C, D static func testE(e: E) { switch e { case A(): // expected-error {{cannot specialize a non-generic definition}} // expected-note@-1 {{while parsing this '<' as a type parameter bracket}} break case B(): // expected-error {{cannot specialize a non-generic definition}} expected-note {{while parsing this '<' as a type parameter bracket}} break default: break; } } } func testE(e: E) { switch e { case E.A(): // expected-error {{cannot specialize a non-generic definition}} // expected-note@-1 {{while parsing this '<' as a type parameter bracket}} break case E.B(): // expected-error {{cannot specialize a non-generic definition}} expected-note {{while parsing this '<' as a type parameter bracket}} break case .C(): // expected-error {{pattern with associated values does not match enum case 'C'}} // expected-note@-1 {{remove associated values to make the pattern match}} {{10-12=}} break case .D(let payload): // expected-error{{pattern with associated values does not match enum case 'D'}} // expected-note@-1 {{remove associated values to make the pattern match}} {{10-23=}} let _: () = payload break default: break } guard case .C() = e, // expected-error {{pattern with associated values does not match enum case 'C'}} // expected-note@-1 {{remove associated values to make the pattern match}} {{12-14=}} case .D(let payload) = e // expected-error {{pattern with associated values does not match enum case 'D'}} // expected-note@-1 {{remove associated values to make the pattern match}} {{12-25=}} else { return } } extension E : Error {} func canThrow() throws { throw E.A } do { try canThrow() } catch E.A() { // expected-error {{pattern with associated values does not match enum case 'A'}} // expected-note@-1 {{remove associated values to make the pattern match}} {{12-14=}} // .. } catch E.B(let payload) { // expected-error {{pattern with associated values does not match enum case 'B'}} // expected-note@-1 {{remove associated values to make the pattern match}} {{12-25=}} let _: () = payload }