mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
The original bug was a crash-on-invalid with a missing '}', but it actually exposed a bug with nested protocols (SE-0404) and another long-time bug. - Whatever we do, we should skip this for protocols because their 'Self' parameter is not bound from context. - getTrailingWhereClause() is not the right proxy for "has a generic signature different than its parent", in particular it doesn't round-trip through serialization. Instead, just compare generic signatures for pointer equality in the early return check. The second change is source-breaking because it was possible to write a nested type with a `where` clause and use it contradicting its requirements across a module boundary. Fixes rdar://113103854.
23 lines
988 B
Swift
23 lines
988 B
Swift
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-frontend -emit-module -o %t/ModuleA.swiftmodule %S/Inputs/where_clause_across_module_boundaries_module.swift
|
|
// RUN: %target-typecheck-verify-swift -I %t
|
|
|
|
// https://github.com/apple/swift/issues/58084
|
|
// Associated Type Inference fails across module boundaries
|
|
// Self bounds from where clause cannot be accessed across modules.
|
|
// This test is intended to test whether it can use generic signature to get self bounds.
|
|
import ModuleA
|
|
|
|
struct ModuleBFoo: Codable, DefaultsSerializable {
|
|
}
|
|
|
|
enum ModuleBBar: Int, Codable, DefaultsSerializable { // expected-error {{type 'ModuleBBar' does not conform to protocol 'DefaultsSerializable'}}
|
|
case foo, bar
|
|
}
|
|
|
|
func foo() {
|
|
_ = AliasTest<Int>.A.self // expected-error {{type 'Int' does not conform to protocol 'Collection'}}
|
|
_ = AliasTest<Int>.B.self // expected-error {{type 'Int' does not conform to protocol 'Collection'}}
|
|
_ = AliasTest<String>.A.self
|
|
_ = AliasTest<String>.B.self
|
|
} |