// 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 {{use of undeclared type 'UndefinedTy'}} 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 {{use of undeclared type 'UndefinedTy'}} 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(): // FIXME: This should be rejected as well. break case .D(let payload): // FIXME: ditto. let _: () = payload break default: break } guard // Currently, these will be asserted in SILGen, // or in no-assert build, verify-failed in IRGen case .C() = e, // FIXME: Should be rejected. case .D(let payload) = e // FIXME: ditto. else { return } } extension E : Error {} func canThrow() throws { throw E.A } do { try canThrow() } catch E.A() { // FIXME: Should be rejected. // .. } catch E.B(let payload) { // FIXME: ditto. let _: () = payload }