mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
In the below, 'Self.A.A' is not a type parameter; rather, since
'Self.A' is concretely known to be 'S', we resolve it as 'S.A',
which performs a name lookup and finds the concrete type alias 'A':
public struct S {
public typealias A = Int
}
public protocol P {
typealias A = S
}
public struct G<T> {}
public protocol Q: P {
typealias B = G<Self.A.A>
}
This is fine, but such a type alias should not participate in
the rewrite system. Let's exclude them like any other invalid
requirement.
The type alias itself is not an error; however, it is an error
to use it from a 'where' clause requirement. This is not
diagnosed yet, though.
Fixes rdar://136686001.
24 lines
567 B
Swift
24 lines
567 B
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-frontend -emit-module %s -emit-module-path %t/out.swiftmodule
|
|
// RUN: %target-swift-frontend -typecheck %s -debug-generic-signatures 2>&1 | %FileCheck %s
|
|
|
|
public struct S {
|
|
public typealias A = Int
|
|
}
|
|
|
|
public protocol P {
|
|
typealias A = S
|
|
}
|
|
|
|
public struct G<T> {}
|
|
|
|
public protocol Q: P {
|
|
typealias B = G<Self.A.A>
|
|
}
|
|
|
|
// FIXME: This should be diagnosed as an error.
|
|
|
|
// CHECK-LABEL: rdar136686001.(file).f@
|
|
// CHECK-NEXT: Generic signature: <T, U where T : Q>
|
|
public func f<T: Q, U>(_: T, _: U) where T.B == U {}
|