mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
If we fail to build a generic signature (or requirement signature of a protocol) because of a request cycle or because Knuth-Bendix completion failed, we would create a placeholder signature with no requirements. However in a move-only world, a completely unconstrained generic parameter might generate spurious diagnostics when used in a copyable way. For this reason, let's outfit these placeholder signatures with a default set of conformance requirements to Copyable and Escapable.
21 lines
720 B
Swift
21 lines
720 B
Swift
// RUN: %target-typecheck-verify-swift -requirement-machine-max-rule-length=4
|
|
|
|
// https://github.com/apple/swift/issues/52031
|
|
|
|
struct S<N> {}
|
|
|
|
protocol P {
|
|
associatedtype A: P = Self
|
|
static func f(_ x: A) -> A
|
|
}
|
|
|
|
extension S: P where N: P {
|
|
static func f<X: P>(_ x: X) -> S<X.A> where A == X, X.A == N {
|
|
// expected-error@-1 {{cannot build rewrite system for generic signature; rule length limit exceeded}}
|
|
// expected-note@-2 {{τ_0_0.[P:A].[P:A].[P:A].[P:A].[P:A].[concrete: S<S<S<S<S<S<τ_0_0>>>>>>] => τ_0_0.[P:A].[P:A].[P:A].[P:A].[P:A] [subst↓]}}
|
|
// expected-error@-3 {{'A' is not a member type of type 'X'}}
|
|
// expected-error@-4 {{'A' is not a member type of type 'X'}}
|
|
return S<X.A>()
|
|
}
|
|
}
|