1
+ // RUN: %empty-directory(%t)
2
+
1
3
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -typecheck -parse-as-library -swift-version 4 %s -verify
2
4
// RUN: not %target-swift-frontend(mock-sdk: %clang-importer-sdk) -typecheck -parse-as-library -swift-version 4 %s -disable-nskeyedarchiver-diagnostics 2>&1 | %FileCheck -check-prefix CHECK-NO-DIAGS %s
3
5
4
- // RUN: not %target-swift-frontend(mock-sdk: %clang-importer-sdk) -typecheck -parse-as-library -swift-version 4 %s -dump-ast > %t.ast
5
- // RUN: %FileCheck %s < %t.ast
6
+ // RUN: not %target-swift-frontend(mock-sdk: %clang-importer-sdk) -typecheck -parse-as-library -swift-version 4 %s -dump-ast -target x86_64-apple-macosx10.14.3 > %t/old.ast
7
+ // RUN: not %target-swift-frontend(mock-sdk: %clang-importer-sdk) -typecheck -parse-as-library -swift-version 4 %s -dump-ast -target x86_64-apple-macosx10.14.4 > %t/new.ast
8
+
9
+ // RUN: %FileCheck --check-prefix=CHECK-OLD %s < %t/old.ast
10
+ // RUN: %FileCheck --check-prefix=NEGATIVE %s < %t/old.ast
11
+ // RUN: %FileCheck --check-prefix=NEGATIVE --check-prefix=NEGATIVE-NEW %s < %t/new.ast
6
12
7
- // REQUIRES: objc_interop
13
+ // REQUIRES: OS=macosx
8
14
9
15
// CHECK-NO-DIAGS-NOT: NSCoding
10
16
// CHECK-NO-DIAGS-NOT: unstable
11
17
12
18
import Foundation
13
19
14
20
// Top-level classes
15
- // CHECK -NOT: class_decl{{.*}}"CodingA"{{.*}}@_staticInitializeObjCMetadata
21
+ // NEGATIVE -NOT: class_decl{{.*}}"CodingA"{{.*}}@_staticInitializeObjCMetadata
16
22
class CodingA : NSObject , NSCoding {
17
23
required init ( coder: NSCoder ) { }
18
24
func encode( coder: NSCoder ) { }
@@ -21,7 +27,7 @@ class CodingA : NSObject, NSCoding {
21
27
22
28
// Nested classes
23
29
extension CodingA {
24
- // CHECK -NOT: class_decl{{.*}}"NestedA"{{.*}}@_staticInitializeObjCMetadata
30
+ // NEGATIVE -NOT: class_decl{{.*}}"NestedA"{{.*}}@_staticInitializeObjCMetadata
25
31
class NestedA : NSObject , NSCoding { // expected-error{{nested class 'CodingA.NestedA' has an unstable name when archiving via 'NSCoding'}}
26
32
// expected-note@-1{{for compatibility with existing archives, use '@objc' to record the Swift 3 runtime name}}{{3-3=@objc(_TtCC8nscoding7CodingA7NestedA)}}
27
33
// expected-note@-2{{for new classes, use '@objc' to specify a unique, prefixed Objective-C runtime name}}{{3-3=@objc(<#prefixed Objective-C class name#>)}}
@@ -36,14 +42,14 @@ extension CodingA {
36
42
func encode( coder: NSCoder ) { }
37
43
}
38
44
39
- // CHECK -NOT: class_decl{{.*}}"NestedC"{{.*}}@_staticInitializeObjCMetadata
45
+ // NEGATIVE -NOT: class_decl{{.*}}"NestedC"{{.*}}@_staticInitializeObjCMetadata
40
46
@objc ( CodingA_NestedC)
41
47
class NestedC : NSObject , NSCoding {
42
48
required init ( coder: NSCoder ) { }
43
49
func encode( coder: NSCoder ) { }
44
50
}
45
51
46
- // CHECK -NOT: class_decl{{.*}}"NestedD"{{.*}}@_staticInitializeObjCMetadata
52
+ // NEGATIVE -NOT: class_decl{{.*}}"NestedD"{{.*}}@_staticInitializeObjCMetadata
47
53
@objc ( CodingA_NestedD)
48
54
class NestedD : NSObject {
49
55
required init ( coder: NSCoder ) { }
@@ -58,7 +64,7 @@ extension CodingA.NestedD: NSCoding { // okay
58
64
}
59
65
60
66
// Generic classes
61
- // CHECK -NOT: class_decl{{.*}}"CodingB"{{.*}}@_staticInitializeObjCMetadata
67
+ // NEGATIVE -NOT: class_decl{{.*}}"CodingB"{{.*}}@_staticInitializeObjCMetadata
62
68
class CodingB < T> : NSObject , NSCoding {
63
69
required init ( coder: NSCoder ) { }
64
70
func encode( coder: NSCoder ) { }
@@ -72,7 +78,7 @@ extension CodingB {
72
78
}
73
79
74
80
// Fileprivate classes.
75
- // CHECK -NOT: class_decl{{.*}}"CodingC"{{.*}}@_staticInitializeObjCMetadata
81
+ // NEGATIVE -NOT: class_decl{{.*}}"CodingC"{{.*}}@_staticInitializeObjCMetadata
76
82
fileprivate class CodingC : NSObject , NSCoding { // expected-error{{fileprivate class 'CodingC' has an unstable name when archiving via 'NSCoding'}}
77
83
// expected-note@-1{{for compatibility with existing archives, use '@objc' to record the Swift 3 runtime name}}{{1-1=@objc(_TtC8nscodingP33_0B4E7641C0BD1F170280EEDD0D0C1F6C7CodingC)}}
78
84
// expected-note@-2{{for new classes, use '@objc' to specify a unique, prefixed Objective-C runtime name}}{{1-1=@objc(<#prefixed Objective-C class name#>)}}
@@ -99,7 +105,7 @@ func someFunction() {
99
105
}
100
106
101
107
// Inherited conformances.
102
- // CHECK -NOT: class_decl{{.*}}"CodingE"{{.*}}@_staticInitializeObjCMetadata
108
+ // NEGATIVE -NOT: class_decl{{.*}}"CodingE"{{.*}}@_staticInitializeObjCMetadata
103
109
class CodingE < T> : CodingB < T > {
104
110
required init ( coder: NSCoder ) { super. init ( coder: coder) }
105
111
override func encode( coder: NSCoder ) { }
@@ -119,24 +125,26 @@ private class CodingG : NSObject, NSCoding {
119
125
}
120
126
121
127
extension CodingB {
122
- // CHECK -NOT: class_decl{{.*}}"GenericViaScope"{{.*}}@_staticInitializeObjCMetadata
128
+ // NEGATIVE -NOT: class_decl{{.*}}"GenericViaScope"{{.*}}@_staticInitializeObjCMetadata
123
129
@objc ( GenericViaScope) // expected-error {{generic subclasses of '@objc' classes cannot have an explicit '@objc' because they are not directly visible from Objective-C}}
124
130
class GenericViaScope : NSObject { }
125
131
}
126
132
127
133
// Inference of @_staticInitializeObjCMetadata.
128
- // CHECK -NOT: class_decl{{.*}}"SubclassOfCodingA"{{.*}}@_staticInitializeObjCMetadata
134
+ // NEGATIVE -NOT: class_decl{{.*}}"SubclassOfCodingA"{{.*}}@_staticInitializeObjCMetadata
129
135
class SubclassOfCodingA : CodingA { }
130
136
131
- // CHECK: class_decl{{.*}}"SubclassOfCodingE"{{.*}}@_staticInitializeObjCMetadata
137
+ // CHECK-OLD: class_decl{{.*}}"SubclassOfCodingE"{{.*}}@_staticInitializeObjCMetadata
138
+ // NEGATIVE-NEW-NOT: class_decl{{.*}}"SubclassOfCodingE"{{.*}}@_staticInitializeObjCMetadata
132
139
class SubclassOfCodingE : CodingE < Int > { }
133
140
134
141
// Do not warn when simply inheriting from classes that conform to NSCoding.
135
142
// The subclass may never be serialized. But do still infer static
136
143
// initialization, just in case.
137
- // CHECK -NOT: class_decl{{.*}}"PrivateSubclassOfCodingA"{{.*}}@_staticInitializeObjCMetadata
144
+ // NEGATIVE -NOT: class_decl{{.*}}"PrivateSubclassOfCodingA"{{.*}}@_staticInitializeObjCMetadata
138
145
private class PrivateSubclassOfCodingA : CodingA { }
139
- // CHECK: class_decl{{.*}}"PrivateSubclassOfCodingE"{{.*}}@_staticInitializeObjCMetadata
146
+ // CHECK-OLD: class_decl{{.*}}"PrivateSubclassOfCodingE"{{.*}}@_staticInitializeObjCMetadata
147
+ // NEGATIVE-NEW-NOT: class_decl{{.*}}"PrivateSubclassOfCodingE"{{.*}}@_staticInitializeObjCMetadata
140
148
private class PrivateSubclassOfCodingE : CodingE < Int > { }
141
149
142
150
// But do warn when inherited through a protocol.
0 commit comments