// RUN: %target-typecheck-verify-swift // RUN: %target-typecheck-verify-swift -I %t // ! - Based on the result builders proposal `buildBlock` shouldn't be type-checked together with `buildOptional`. protocol ActionIdentifier: Hashable { } struct ActionLookup { init(_: Identifier...) {} } @resultBuilder enum ActionLookupBuilder { // expected-note 3{{'Identifier' previously declared here}} static func buildBlock(_ components: [ActionLookup]...) -> ActionLookup { // expected-warning {{generic parameter 'Identifier' shadows generic parameter from outer scope with the same name; this is an error in the Swift 6 language mode}} expected-note {{found this candidate}} fatalError() } static func buildBlock(_ components: [ActionLookup]...) -> [ActionLookup] { // expected-warning {{generic parameter 'Identifier' shadows generic parameter from outer scope with the same name; this is an error in the Swift 6 language mode}} expected-note {{found this candidate}} [] } static func buildExpression(_ expression: ActionLookup) -> [ActionLookup] { [] } static func buildOptional(_ component: [ActionLookup]?) -> [ActionLookup] { // expected-warning {{generic parameter 'Identifier' shadows generic parameter from outer scope with the same name; this is an error in the Swift 6 language mode}} [] } } enum ActionType: String, ActionIdentifier, CaseIterable { case download case upload public typealias ActionTypeLookup = ActionLookup public typealias ActionTypeLookupBuilder = ActionLookupBuilder @ActionTypeLookupBuilder static var test: ActionTypeLookup { ActionTypeLookup( .download ) if true { // If condition without else is needed to make sure that `buildOptional` affects `buildBlock` resolution. // expected-error@-1 {{ambiguous use of 'buildBlock'}} ActionTypeLookup( .upload ) } } }