Skip to content

Commit 4e60aa1

Browse files
committed
RequirementMachine: Pass -requirement-machine-inferred-signatures=off in a handful of tests
- unify_superclass_types_[23].swift: I will fix these soon. rdar://90469643 - attr/accessibility_where_clause.swift: This one is dicey and should probably be banned. rdar://90469477
1 parent 075e7c1 commit 4e60aa1

File tree

4 files changed

+88
-72
lines changed

4 files changed

+88
-72
lines changed
Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1-
// RUN: %target-typecheck-verify-swift -dump-requirement-machine 2>&1 | %FileCheck %s
1+
// RUN: %target-typecheck-verify-swift -debug-generic-signatures -requirement-machine-inferred-signatures=off 2>&1 | %FileCheck %s
2+
// RUN: %target-typecheck-verify-swift -dump-requirement-machine -requirement-machine-inferred-signatures=off 2>&1 | %FileCheck %s --check-prefix=CHECK-RULE
23

34
// Note: The GSB fails this test, because it doesn't implement unification of
45
// superclass type constructor arguments.
56

7+
// FIXME: The Requirement Machine also fails to minimize the signature of
8+
// unifySuperclassTest(). rdar://90469643
9+
610
class Generic<T, U, V> {}
711

812
protocol P1 {
@@ -21,30 +25,32 @@ func sameType<T>(_: T.Type, _: T.Type) {}
2125

2226
func takesGenericIntString<U>(_: Generic<Int, String, U>.Type) {}
2327

28+
// CHECK-LABEL: .unifySuperclassTest@
29+
// CHECK-NEXT: Generic signature: <T where T : P1, T : P2>
2430
func unifySuperclassTest<T : P1 & P2>(_: T) {
2531
sameType(T.A1.self, String.self)
2632
sameType(T.A2.self, Int.self)
2733
sameType(T.B1.self, T.B2.self)
2834
takesGenericIntString(T.X.self)
2935
}
3036

31-
// CHECK-LABEL: Requirement machine for <τ_0_0 where τ_0_0 : P1, τ_0_0 : P2>
32-
// CHECK-NEXT: Rewrite system: {
33-
// CHECK: - τ_0_0.[P2:X] => τ_0_0.[P1:X]
34-
// CHECK: - τ_0_0.[P1:X].[superclass: Generic<τ_0_0.[P2:A2], String, τ_0_0.[P2:B2]>] => τ_0_0.[P1:X]
35-
// CHECK: - τ_0_0.[P1:X].[superclass: Generic<Int, String, τ_0_0.[P1:B1]>] => τ_0_0.[P1:X]
36-
// CHECK: - τ_0_0.[P1:A1].[concrete: String] => τ_0_0.[P1:A1]
37-
// CHECK: - τ_0_0.[P2:A2].[concrete: Int] => τ_0_0.[P2:A2]
38-
// CHECK: - τ_0_0.[P2:B2] => τ_0_0.[P1:B1]
39-
// CHECK: - τ_0_0.B2 => τ_0_0.[P1:B1]
40-
// CHECK: }
41-
// CHECK: Property map: {
42-
// CHECK-NEXT: [P1] => { conforms_to: [P1] }
43-
// CHECK-NEXT: [P1:X] => { layout: _NativeClass superclass: [superclass: Generic<Int, [P1:A1], [P1:B1]>] }
44-
// CHECK-NEXT: [P2] => { conforms_to: [P2] }
45-
// CHECK-NEXT: [P2:X] => { layout: _NativeClass superclass: [superclass: Generic<[P2:A2], String, [P2:B2]>] }
46-
// CHECK-NEXT: τ_0_0 => { conforms_to: [P1 P2] }
47-
// CHECK-NEXT: τ_0_0.[P1:X] => { layout: _NativeClass superclass: [superclass: Generic<Int, String, τ_0_0.[P1:B1]>] }
48-
// CHECK-NEXT: τ_0_0.[P1:A1] => { concrete_type: [concrete: String] }
49-
// CHECK-NEXT: τ_0_0.[P2:A2] => { concrete_type: [concrete: Int] }
50-
// CHECK-NEXT: }
37+
// CHECK-RULE-LABEL: Requirement machine for <τ_0_0 where τ_0_0 : P1, τ_0_0 : P2>
38+
// CHECK-RULE-NEXT: Rewrite system: {
39+
// CHECK-RULE: - τ_0_0.[P2:X] => τ_0_0.[P1:X]
40+
// CHECK-RULE: - τ_0_0.[P1:X].[superclass: Generic<τ_0_0.[P2:A2], String, τ_0_0.[P2:B2]>] => τ_0_0.[P1:X]
41+
// CHECK-RULE: - τ_0_0.[P1:X].[superclass: Generic<Int, String, τ_0_0.[P1:B1]>] => τ_0_0.[P1:X]
42+
// CHECK-RULE: - τ_0_0.[P1:A1].[concrete: String] => τ_0_0.[P1:A1]
43+
// CHECK-RULE: - τ_0_0.[P2:A2].[concrete: Int] => τ_0_0.[P2:A2]
44+
// CHECK-RULE: - τ_0_0.[P2:B2] => τ_0_0.[P1:B1]
45+
// CHECK-RULE: - τ_0_0.B2 => τ_0_0.[P1:B1]
46+
// CHECK-RULE: }
47+
// CHECK-RULE: Property map: {
48+
// CHECK-RULE-NEXT: [P1] => { conforms_to: [P1] }
49+
// CHECK-RULE-NEXT: [P1:X] => { layout: _NativeClass superclass: [superclass: Generic<Int, [P1:A1], [P1:B1]>] }
50+
// CHECK-RULE-NEXT: [P2] => { conforms_to: [P2] }
51+
// CHECK-RULE-NEXT: [P2:X] => { layout: _NativeClass superclass: [superclass: Generic<[P2:A2], String, [P2:B2]>] }
52+
// CHECK-RULE-NEXT: τ_0_0 => { conforms_to: [P1 P2] }
53+
// CHECK-RULE-NEXT: τ_0_0.[P1:X] => { layout: _NativeClass superclass: [superclass: Generic<Int, String, τ_0_0.[P1:B1]>] }
54+
// CHECK-RULE-NEXT: τ_0_0.[P1:A1] => { concrete_type: [concrete: String] }
55+
// CHECK-RULE-NEXT: τ_0_0.[P2:A2] => { concrete_type: [concrete: Int] }
56+
// CHECK-RULE-NEXT: }
Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1-
// RUN: %target-typecheck-verify-swift -dump-requirement-machine 2>&1 | %FileCheck %s
1+
// RUN: %target-typecheck-verify-swift -debug-generic-signatures -requirement-machine-inferred-signatures=off 2>&1 | %FileCheck %s
2+
// RUN: %target-typecheck-verify-swift -dump-requirement-machine -requirement-machine-inferred-signatures=off 2>&1 | %FileCheck %s --check-prefix=CHECK-RULE
23

34
// Note: The GSB fails this test, because it doesn't implement unification of
45
// superclass type constructor arguments.
56

7+
// FIXME: The Requirement Machine also fails to minimize the signature of
8+
// unifySuperclassTest(). rdar://90469643
9+
610
class Generic<T, U, V> {}
711

812
class Derived<TT, UU> : Generic<Int, TT, UU> {}
@@ -23,32 +27,34 @@ func sameType<T>(_: T.Type, _: T.Type) {}
2327

2428
func takesDerivedString<U>(_: Derived<String, U>.Type) {}
2529

30+
// CHECK-LABEL: .unifySuperclassTest@
31+
// CHECK-NEXT: Generic signature: <T where T : P1, T : P2>
2632
func unifySuperclassTest<T : P1 & P2>(_: T) {
2733
sameType(T.A1.self, String.self)
2834
sameType(T.A2.self, Int.self)
2935
sameType(T.B1.self, T.B2.self)
3036
takesDerivedString(T.X.self)
3137
}
3238

33-
// CHECK-LABEL: Requirement machine for <τ_0_0 where τ_0_0 : P1, τ_0_0 : P2>
34-
// CHECK-NEXT: Rewrite system: {
35-
// CHECK: - [P1:X].[layout: _NativeClass] => [P1:X]
36-
// CHECK: - [P2:X].[layout: _NativeClass] => [P2:X]
37-
// CHECK: - τ_0_0.[P2:X] => τ_0_0.[P1:X]
38-
// CHECK: - τ_0_0.[P1:X].[superclass: Generic<Int, τ_0_0.[P1:A1], τ_0_0.[P1:B1]>] => τ_0_0.[P1:X]
39-
// CHECK: - τ_0_0.[P1:X].[superclass: Generic<Int, String, τ_0_0.[P1:B1]>] => τ_0_0.[P1:X]
40-
// CHECK: - τ_0_0.[P2:A2].[concrete: Int] => τ_0_0.[P2:A2]
41-
// CHECK: - τ_0_0.[P2:B2] => τ_0_0.[P1:B1]
42-
// CHECK: - τ_0_0.[P1:A1].[concrete: String] => τ_0_0.[P1:A1]
43-
// CHECK: - τ_0_0.B2 => τ_0_0.[P1:B1]
44-
// CHECK: }
45-
// CHECK: Property map: {
46-
// CHECK-NEXT: [P1] => { conforms_to: [P1] }
47-
// CHECK-NEXT: [P1:X] => { layout: _NativeClass superclass: [superclass: Derived<[P1:A1], [P1:B1]>] }
48-
// CHECK-NEXT: [P2] => { conforms_to: [P2] }
49-
// CHECK-NEXT: [P2:X] => { layout: _NativeClass superclass: [superclass: Generic<[P2:A2], String, [P2:B2]>] }
50-
// CHECK-NEXT: τ_0_0 => { conforms_to: [P1 P2] }
51-
// CHECK-NEXT: τ_0_0.[P1:X] => { layout: _NativeClass superclass: [superclass: Derived<τ_0_0.[P1:A1], τ_0_0.[P1:B1]>] }
52-
// CHECK-NEXT: τ_0_0.[P2:A2] => { concrete_type: [concrete: Int] }
53-
// CHECK-NEXT: τ_0_0.[P1:A1] => { concrete_type: [concrete: String] }
54-
// CHECK-NEXT: }
39+
// CHECK-RULE-LABEL: Requirement machine for <τ_0_0 where τ_0_0 : P1, τ_0_0 : P2>
40+
// CHECK-RULE-NEXT: Rewrite system: {
41+
// CHECK-RULE: - [P1:X].[layout: _NativeClass] => [P1:X]
42+
// CHECK-RULE: - [P2:X].[layout: _NativeClass] => [P2:X]
43+
// CHECK-RULE: - τ_0_0.[P2:X] => τ_0_0.[P1:X]
44+
// CHECK-RULE: - τ_0_0.[P1:X].[superclass: Generic<Int, τ_0_0.[P1:A1], τ_0_0.[P1:B1]>] => τ_0_0.[P1:X]
45+
// CHECK-RULE: - τ_0_0.[P1:X].[superclass: Generic<Int, String, τ_0_0.[P1:B1]>] => τ_0_0.[P1:X]
46+
// CHECK-RULE: - τ_0_0.[P2:A2].[concrete: Int] => τ_0_0.[P2:A2]
47+
// CHECK-RULE: - τ_0_0.[P2:B2] => τ_0_0.[P1:B1]
48+
// CHECK-RULE: - τ_0_0.[P1:A1].[concrete: String] => τ_0_0.[P1:A1]
49+
// CHECK-RULE: - τ_0_0.B2 => τ_0_0.[P1:B1]
50+
// CHECK-RULE: }
51+
// CHECK-RULE: Property map: {
52+
// CHECK-RULE-NEXT: [P1] => { conforms_to: [P1] }
53+
// CHECK-RULE-NEXT: [P1:X] => { layout: _NativeClass superclass: [superclass: Derived<[P1:A1], [P1:B1]>] }
54+
// CHECK-RULE-NEXT: [P2] => { conforms_to: [P2] }
55+
// CHECK-RULE-NEXT: [P2:X] => { layout: _NativeClass superclass: [superclass: Generic<[P2:A2], String, [P2:B2]>] }
56+
// CHECK-RULE-NEXT: τ_0_0 => { conforms_to: [P1 P2] }
57+
// CHECK-RULE-NEXT: τ_0_0.[P1:X] => { layout: _NativeClass superclass: [superclass: Derived<τ_0_0.[P1:A1], τ_0_0.[P1:B1]>] }
58+
// CHECK-RULE-NEXT: τ_0_0.[P2:A2] => { concrete_type: [concrete: Int] }
59+
// CHECK-RULE-NEXT: τ_0_0.[P1:A1] => { concrete_type: [concrete: String] }
60+
// CHECK-RULE-NEXT: }

test/attr/accessibility.swift

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -207,31 +207,3 @@ extension GenericStruct where Param: InternalProto {
207207
public func foo() {} // expected-error {{cannot declare a public instance method in an extension with internal requirements}} {{3-9=internal}}
208208
}
209209

210-
211-
public class OuterClass {
212-
class InnerClass {}
213-
}
214-
215-
public protocol PublicProto2 {
216-
associatedtype T
217-
associatedtype U
218-
}
219-
220-
// FIXME: With the current design, the below should not diagnose.
221-
//
222-
// However, it does, because we look at the bound decl in the
223-
// TypeRepr first, and it happens to already be set.
224-
//
225-
// FIXME: Once we no longer do that, come up with another strategy
226-
// to make the above diagnose.
227-
228-
extension PublicProto2 where Self.T : OuterClass, Self.U == Self.T.InnerClass {
229-
public func cannotBePublic() {}
230-
// expected-error@-1 {{cannot declare a public instance method in an extension with internal requirements}}
231-
}
232-
233-
public extension OuterClass {
234-
open convenience init(x: ()) { self.init() }
235-
// expected-warning@-1 {{'open' modifier conflicts with extension's default access of 'public'}}
236-
// expected-error@-2 {{only classes and overridable class members can be declared 'open'; use 'public'}}
237-
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// RUN: %target-typecheck-verify-swift -requirement-machine-inferred-signatures=off
2+
3+
public class OuterClass {
4+
class InnerClass {}
5+
}
6+
7+
public protocol PublicProto2 {
8+
associatedtype T
9+
associatedtype U
10+
}
11+
12+
// FIXME: With the current design, the below should not diagnose.
13+
//
14+
// However, it does, because we look at the bound decl in the
15+
// TypeRepr first, and it happens to already be set.
16+
//
17+
// FIXME: Once we no longer do that, come up with another strategy
18+
// to make the above diagnose.
19+
20+
// FIXME: Get this working with the Requirement Machine, or decide that it should
21+
// be unsupported: rdar://90469477
22+
23+
extension PublicProto2 where Self.T : OuterClass, Self.U == Self.T.InnerClass {
24+
public func cannotBePublic() {}
25+
// expected-error@-1 {{cannot declare a public instance method in an extension with internal requirements}}
26+
}
27+
28+
public extension OuterClass {
29+
open convenience init(x: ()) { self.init() }
30+
// expected-warning@-1 {{'open' modifier conflicts with extension's default access of 'public'}}
31+
// expected-error@-2 {{only classes and overridable class members can be declared 'open'; use 'public'}}
32+
}

0 commit comments

Comments
 (0)