|
| 1 | +// RUN: %target-typecheck-verify-swift -dump-ast > %t.dump |
| 2 | +// RUN: %FileCheck %s < %t.dump |
| 3 | + |
| 4 | +// SR-13815 |
| 5 | +extension Optional { |
| 6 | + func sr13815() -> SR13815? { SR13815() } |
| 7 | + static func sr13815_2() -> SR13815? { SR13815() } |
| 8 | + static func sr13815_3() -> SR13815? { SR13815() } |
| 9 | + static var sr13815_wrongType: Int { 0 } |
| 10 | + static var sr13815_overload: SR13815 { SR13815() } |
| 11 | + init(overloaded: Void) { self = nil } |
| 12 | +} |
| 13 | + |
| 14 | +struct SR13815 { |
| 15 | + static var sr13815: SR13815? = SR13815() |
| 16 | + static var sr13815_2: SR13815? = SR13815() |
| 17 | + static var sr13815_wrongType: SR13815? { SR13815() } |
| 18 | + static var p_SR13815: SR13815? { SR13815() } |
| 19 | + static func sr13815_3() -> SR13815? { SR13815() } |
| 20 | + static var sr13815_overload: SR13815? { SR13815() } |
| 21 | + init(overloaded: Void) {} |
| 22 | + init?(failable: Void) {} |
| 23 | + init() {} |
| 24 | +} |
| 25 | + |
| 26 | +protocol P_SR13815 {} |
| 27 | +extension Optional: P_SR13815 where Wrapped: Equatable { |
| 28 | + static func p_SR13815() {} |
| 29 | +} |
| 30 | + |
| 31 | +let _: SR13815? = .sr13815 |
| 32 | +let _: SR13815? = .sr13815_wrongType |
| 33 | +let _: SR13815? = .init() |
| 34 | +let _: SR13815? = .sr13815() // expected-error {{instance member 'sr13815' cannot be used on type 'SR13815?'}} |
| 35 | +let _: SR13815? = .sr13815_2() |
| 36 | +let _: SR13815? = .init(SR13815()) |
| 37 | +let _: SR13815? = .init(overloaded: ()) |
| 38 | +// If members exist on Optional and Wrapped, always choose the one on optional |
| 39 | +// CHECK: declref_expr {{.*}} location={{.*}}optional_overload.swift:37 |
| 40 | +// CHECK-SAME: decl=optional_overload.(file).Optional extension.init(overloaded:) |
| 41 | +let _: SR13815? = .sr13815_overload |
| 42 | +// Should choose the overload from Optional even if the Wrapped overload would otherwise have a better score |
| 43 | +// CHECK: member_ref_expr {{.*}} location={{.*}}optional_overload.swift:41 |
| 44 | +// CHECK-SAME: decl=optional_overload.(file).Optional extension.sr13815_overload |
| 45 | +let _: SR13815? = .init(failable: ()) |
| 46 | +let _: SR13815? = .sr13815_3() |
| 47 | +let _: SR13815? = .p_SR13815 |
0 commit comments