Skip to content

Commit 363ef63

Browse files
committed
[Code completion] Split out tests that require Objective-C interop.
A bunch of tests that technically require Objective-C interop were not labeled as such, and worked in the absence of Objective-C interop due to bugs in the type checker.
1 parent dbe9cb6 commit 363ef63

File tree

6 files changed

+119
-112
lines changed

6 files changed

+119
-112
lines changed

test/IDE/complete_stdlib_optional.swift

Lines changed: 12 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -16,38 +16,14 @@
1616
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=UN_OPT_NO_DOT_1 > %t.opt.txt
1717
// RUN: %FileCheck %s -check-prefix=UN_OPT_NO_DOT_FOOSTRUCT < %t.opt.txt
1818

19-
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=UN_OPT_NO_DOT_2 > %t.opt.txt
20-
// RUN: %FileCheck %s -check-prefix=UN_OPT_NO_DOT_FOOSTRUCT_RETURN < %t.opt.txt
21-
22-
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=UN_OPT_NO_DOT_3 > %t.opt.txt
23-
// RUN: %FileCheck %s -check-prefix=UN_OPT_NO_DOT_INT < %t.opt.txt
24-
2519
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=UN_OPT_DOT_1 > %t.opt.txt
2620
// RUN: %FileCheck %s -check-prefix=UN_OPT_DOT_FOOSTRUCT < %t.opt.txt
2721

2822
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=UN_OPT_DOT_2 > %t.opt.txt
2923
// RUN: %FileCheck %s -check-prefix=UN_OPT_DOT_FOOSTRUCT_RETURN < %t.opt.txt
3024

31-
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=UN_OPT_DOT_3 > %t.opt.txt
32-
// RUN: %FileCheck %s -check-prefix=UN_OPT_DOT_INT < %t.opt.txt
33-
34-
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_DL_NO_DOT_1 > %t.opt.txt
35-
// RUN: %FileCheck %s -check-prefix=OBJCCLASS_MEMBERS_NO_DOT < %t.opt.txt
36-
37-
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_DL_NO_DOT_2 > %t.opt.txt
38-
// RUN: %FileCheck %s -check-prefix=OBJCCLASS_MEMBERS_NO_DOT < %t.opt.txt
39-
40-
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_DL_DOT_1 > %t.opt.txt
41-
// RUN: %FileCheck %s -check-prefix=OBJCCLASS_MEMBERS_DOT < %t.opt.txt
42-
43-
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_DL_DOT_2 > %t.opt.txt
44-
// RUN: %FileCheck %s -check-prefix=OBJCCLASS_MEMBERS_DOT < %t.opt.txt
45-
46-
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_DL_FORCE_RETURN_OPTIONAL_1 > %t.opt.txt
47-
// RUN: %FileCheck %s -check-prefix=OPT_NO_DOT_OBJCCLASS < %t.opt.txt
48-
49-
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_CAST_AS_RESULT_1 > %t.opt.txt
50-
// RUN: %FileCheck %s -check-prefix=OPT_NO_DOT_OBJCCLASS < %t.opt.txt
25+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=UN_OPT_NO_DOT_2 > %t.opt.txt
26+
// RUN: %FileCheck %s -check-prefix=UN_OPT_NO_DOT_FOOSTRUCT_RETURN < %t.opt.txt
5127

5228
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_TUPLE_1 | %FileCheck %s -check-prefix=OPT_TUPLE_1
5329
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_TUPLE_2 | %FileCheck %s -check-prefix=OPT_TUPLE_2
@@ -76,12 +52,6 @@ func returnsImplicitlyUnwrappedOptional() -> FooStruct! {
7652
return FooStruct()
7753
}
7854

79-
@objc
80-
class ObjcClass {
81-
@objc var instanceVar: Int = 0
82-
@objc func instanceFunc() -> ObjcClass { return self }
83-
}
84-
8555
// OPT_NO_DOT_FOOSTRUCT: Begin completions
8656
// OPT_NO_DOT_FOOSTRUCT-DAG: Decl[InstanceVar]/CurrNominal: ?.instanceVar[#Int#]{{; name=.+$}}
8757
// OPT_NO_DOT_FOOSTRUCT-DAG: Decl[InstanceMethod]/CurrNominal: ?.instanceFunc()[#Void#]{{; name=.+$}}
@@ -97,16 +67,6 @@ class ObjcClass {
9767
// OPT_DOT_FOOSTRUCT_SPACES-DAG: Decl[InstanceMethod]/CurrNominal/Erase[3]: ?.instanceFunc()[#Void#]{{; name=.+$}}
9868
// OPT_DOT_FOOSTRUCT_SPACES: End completions
9969

100-
// UN_OPT_NO_DOT_FOOSTRUCT: Begin completions
101-
// UN_OPT_NO_DOT_FOOSTRUCT-DAG: Decl[InstanceVar]/CurrNominal: .instanceVar[#Int#]{{; name=.+$}}
102-
// UN_OPT_NO_DOT_FOOSTRUCT-DAG: Decl[InstanceMethod]/CurrNominal: .instanceFunc()[#Void#]{{; name=.+$}}
103-
// UN_OPT_NO_DOT_FOOSTRUCT: End completions
104-
105-
// UN_OPT_NO_DOT_FOOSTRUCT_RETURN: Begin completions
106-
// UN_OPT_NO_DOT_FOOSTRUCT_RETURN-DAG: Decl[InstanceVar]/CurrNominal: ?.instanceVar[#Int#]{{; name=.+$}}
107-
// UN_OPT_NO_DOT_FOOSTRUCT_RETURN-DAG: Decl[InstanceMethod]/CurrNominal: ?.instanceFunc()[#Void#]{{; name=.+$}}
108-
// UN_OPT_NO_DOT_FOOSTRUCT_RETURN: End completions
109-
11070
// UN_OPT_DOT_FOOSTRUCT: Begin completions
11171
// UN_OPT_DOT_FOOSTRUCT-DAG: Decl[InstanceVar]/CurrNominal: instanceVar[#Int#]{{; name=.+$}}
11272
// UN_OPT_DOT_FOOSTRUCT-DAG: Decl[InstanceMethod]/CurrNominal: instanceFunc()[#Void#]{{; name=.+$}}
@@ -117,32 +77,6 @@ class ObjcClass {
11777
// UN_OPT_DOT_FOOSTRUCT_RETURN-DAG: Decl[InstanceMethod]/CurrNominal/Erase[1]: ?.instanceFunc()[#Void#]{{; name=.+$}}
11878
// UN_OPT_DOT_FOOSTRUCT_RETURN: End completions
11979

120-
// UN_OPT_NO_DOT_INT: Begin completions
121-
// UN_OPT_NO_DOT_INT-DAG: Decl[InstanceVar]/CurrNominal: ?.nonzeroBitCount[#Int#]{{; name=.+$}}
122-
// UN_OPT_NO_DOT_INT: End completions
123-
124-
// UN_OPT_DOT_INT: Begin completions
125-
// UN_OPT_DOT_INT-DAG: Decl[InstanceVar]/CurrNominal/Erase[1]: ?.nonzeroBitCount[#Int#]{{; name=.+$}}
126-
// UN_OPT_DOT_INT: End completions
127-
128-
// OPT_NO_DOT_OBJCCLASS: Begin completions
129-
// OPT_NO_DOT_OBJCCLASS-DAG: Decl[InstanceVar]/CurrNominal: ?.instanceVar[#Int#]{{; name=.+$}}
130-
// OPT_NO_DOT_OBJCCLASS-DAG: Decl[InstanceMethod]/CurrNominal: ?.instanceFunc()[#ObjcClass#]{{; name=.+$}}
131-
// OPT_NO_DOT_OBJCCLASS: End completions
132-
133-
// OBJCCLASS_MEMBERS_NO_DOT: Begin completions
134-
// OBJCCLASS_MEMBERS_NO_DOT-NEXT: Decl[InstanceVar]/CurrNominal: .instanceVar[#Int#]
135-
// OBJCCLASS_MEMBERS_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc()[#ObjcClass#]
136-
// OBJCCLASS_MEMBERS_NO_DOT-NEXT: Decl[InfixOperatorFunction]/OtherModule[Swift]: === {#AnyObject?#}[#Bool#]
137-
// OBJCCLASS_MEMBERS_NO_DOT-NEXT: Decl[InfixOperatorFunction]/OtherModule[Swift]: !== {#AnyObject?#}[#Bool#]
138-
// OBJCCLASS_MEMBERS_NO_DOT-NEXT: Keyword[self]/CurrNominal: .self[#ObjcClass#]; name=self
139-
// OBJCCLASS_MEMBERS_NO_DOT-NEXT: End completions
140-
141-
// OBJCCLASS_MEMBERS_DOT: Begin completions
142-
// OBJCCLASS_MEMBERS_DOT-NEXT: Keyword[self]/CurrNominal: self[#ObjcClass#]; name=self
143-
// OBJCCLASS_MEMBERS_DOT-NEXT: Decl[InstanceVar]/CurrNominal: instanceVar[#Int#]
144-
// OBJCCLASS_MEMBERS_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc()[#ObjcClass#]
145-
// OBJCCLASS_MEMBERS_DOT-NEXT: End completions
14680

14781
//===---
14882
//===--- Tests.
@@ -184,38 +118,6 @@ func testImplicitlyUnwrappedOptionalReturnValue2() {
184118
returnsImplicitlyUnwrappedOptional().#^UN_OPT_DOT_2^#
185119
}
186120

187-
func testAnyObject1(a: AnyObject) {
188-
a.instanceVar#^UN_OPT_NO_DOT_3^#
189-
}
190-
191-
func testAnyObject2(a: AnyObject) {
192-
a.instanceVar.#^UN_OPT_DOT_3^#
193-
}
194-
195-
func testAnyObject3(a: AnyObject) {
196-
a.instanceFunc!()#^OPT_DL_NO_DOT_1^#
197-
}
198-
199-
func testAnyObject4(a: AnyObject) {
200-
a.instanceFunc?()#^OPT_DL_NO_DOT_2^#
201-
}
202-
203-
func testAnyObject5(a: AnyObject) {
204-
a.instanceFunc!().#^OPT_DL_DOT_1^#
205-
}
206-
207-
func testAnyObject6(a: AnyObject) {
208-
a.instanceFunc?().#^OPT_DL_DOT_2^#
209-
}
210-
211-
func testAnyObject7(a: AnyObject) {
212-
(a.instanceFunc?())#^OPT_DL_FORCE_RETURN_OPTIONAL_1^#
213-
}
214-
215-
func testAnyObject8(a: AnyObject) {
216-
(a as? ObjcClass)#^OPT_CAST_AS_RESULT_1^#
217-
}
218-
219121
func testOptionalTuple1(a: (Int, String)?) {
220122
a#^OPT_TUPLE_1^#
221123
}
@@ -245,3 +147,13 @@ func testOptionalTuple5(a: (x: Int, y: String)?) {
245147
}
246148
// OPT_TUPLE_5: Pattern/CurrNominal/Erase[1]: ?.x[#Int#]
247149
// OPT_TUPLE_5: Pattern/CurrNominal/Erase[1]: ?.y[#String#]
150+
151+
// UN_OPT_NO_DOT_FOOSTRUCT: Begin completions
152+
// UN_OPT_NO_DOT_FOOSTRUCT-DAG: Decl[InstanceVar]/CurrNominal: .instanceVar[#Int#]{{; name=.+$}}
153+
// UN_OPT_NO_DOT_FOOSTRUCT-DAG: Decl[InstanceMethod]/CurrNominal: .instanceFunc()[#Void#]{{; name=.+$}}
154+
// UN_OPT_NO_DOT_FOOSTRUCT: End completions
155+
156+
// UN_OPT_NO_DOT_FOOSTRUCT_RETURN: Begin completions
157+
// UN_OPT_NO_DOT_FOOSTRUCT_RETURN-DAG: Decl[InstanceVar]/CurrNominal: ?.instanceVar[#Int#]{{; name=.+$}}
158+
// UN_OPT_NO_DOT_FOOSTRUCT_RETURN-DAG: Decl[InstanceMethod]/CurrNominal: ?.instanceFunc()[#Void#]{{; name=.+$}}
159+
// UN_OPT_NO_DOT_FOOSTRUCT_RETURN: End completions
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
// REQUIRES: objc_interop
2+
3+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=UN_OPT_NO_DOT_3 > %t.opt.txt
4+
// RUN: %FileCheck %s -check-prefix=UN_OPT_NO_DOT_INT < %t.opt.txt
5+
6+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=UN_OPT_DOT_3 > %t.opt.txt
7+
// RUN: %FileCheck %s -check-prefix=UN_OPT_DOT_INT < %t.opt.txt
8+
9+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_DL_NO_DOT_1 > %t.opt.txt
10+
// RUN: %FileCheck %s -check-prefix=OBJCCLASS_MEMBERS_NO_DOT < %t.opt.txt
11+
12+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_DL_NO_DOT_2 > %t.opt.txt
13+
// RUN: %FileCheck %s -check-prefix=OBJCCLASS_MEMBERS_NO_DOT < %t.opt.txt
14+
15+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_DL_DOT_1 > %t.opt.txt
16+
// RUN: %FileCheck %s -check-prefix=OBJCCLASS_MEMBERS_DOT < %t.opt.txt
17+
18+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_DL_DOT_2 > %t.opt.txt
19+
// RUN: %FileCheck %s -check-prefix=OBJCCLASS_MEMBERS_DOT < %t.opt.txt
20+
21+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_DL_FORCE_RETURN_OPTIONAL_1 > %t.opt.txt
22+
// RUN: %FileCheck %s -check-prefix=OPT_NO_DOT_OBJCCLASS < %t.opt.txt
23+
24+
// RUN: %target-swift-ide-test -code-completion -source-filename %s -disable-objc-attr-requires-foundation-module -code-completion-token=OPT_CAST_AS_RESULT_1 > %t.opt.txt
25+
// RUN: %FileCheck %s -check-prefix=OPT_NO_DOT_OBJCCLASS < %t.opt.txt
26+
27+
@objc
28+
class ObjcClass {
29+
@objc var instanceVar: Int = 0
30+
@objc func instanceFunc() -> ObjcClass { return self }
31+
}
32+
33+
func testAnyObject1(a: AnyObject) {
34+
a.instanceVar#^UN_OPT_NO_DOT_3^#
35+
}
36+
37+
func testAnyObject2(a: AnyObject) {
38+
a.instanceVar.#^UN_OPT_DOT_3^#
39+
}
40+
41+
func testAnyObject3(a: AnyObject) {
42+
a.instanceFunc!()#^OPT_DL_NO_DOT_1^#
43+
}
44+
45+
func testAnyObject4(a: AnyObject) {
46+
a.instanceFunc?()#^OPT_DL_NO_DOT_2^#
47+
}
48+
49+
func testAnyObject5(a: AnyObject) {
50+
a.instanceFunc!().#^OPT_DL_DOT_1^#
51+
}
52+
53+
func testAnyObject6(a: AnyObject) {
54+
a.instanceFunc?().#^OPT_DL_DOT_2^#
55+
}
56+
57+
func testAnyObject7(a: AnyObject) {
58+
(a.instanceFunc?())#^OPT_DL_FORCE_RETURN_OPTIONAL_1^#
59+
}
60+
61+
func testAnyObject8(a: AnyObject) {
62+
(a as? ObjcClass)#^OPT_CAST_AS_RESULT_1^#
63+
}
64+
65+
// UN_OPT_NO_DOT_INT: Begin completions
66+
// UN_OPT_NO_DOT_INT-DAG: Decl[InstanceVar]/CurrNominal: ?.nonzeroBitCount[#Int#]{{; name=.+$}}
67+
// UN_OPT_NO_DOT_INT: End completions
68+
69+
// UN_OPT_DOT_INT: Begin completions
70+
// UN_OPT_DOT_INT-DAG: Decl[InstanceVar]/CurrNominal/Erase[1]: ?.nonzeroBitCount[#Int#]{{; name=.+$}}
71+
// UN_OPT_DOT_INT: End completions
72+
73+
// OBJCCLASS_MEMBERS_NO_DOT: Begin completions
74+
// OBJCCLASS_MEMBERS_NO_DOT-NEXT: Decl[InstanceVar]/CurrNominal: .instanceVar[#Int#]
75+
// OBJCCLASS_MEMBERS_NO_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: .instanceFunc()[#ObjcClass#]
76+
// OBJCCLASS_MEMBERS_NO_DOT-NEXT: Decl[InfixOperatorFunction]/OtherModule[Swift]: === {#AnyObject?#}[#Bool#]
77+
// OBJCCLASS_MEMBERS_NO_DOT-NEXT: Decl[InfixOperatorFunction]/OtherModule[Swift]: !== {#AnyObject?#}[#Bool#]
78+
// OBJCCLASS_MEMBERS_NO_DOT-NEXT: Keyword[self]/CurrNominal: .self[#ObjcClass#]; name=self
79+
// OBJCCLASS_MEMBERS_NO_DOT-NEXT: End completions
80+
81+
// OBJCCLASS_MEMBERS_DOT: Begin completions
82+
// OBJCCLASS_MEMBERS_DOT-NEXT: Keyword[self]/CurrNominal: self[#ObjcClass#]; name=self
83+
// OBJCCLASS_MEMBERS_DOT-NEXT: Decl[InstanceVar]/CurrNominal: instanceVar[#Int#]
84+
// OBJCCLASS_MEMBERS_DOT-NEXT: Decl[InstanceMethod]/CurrNominal: instanceFunc()[#ObjcClass#]
85+
// OBJCCLASS_MEMBERS_DOT-NEXT: End completions
86+
87+
// OPT_NO_DOT_OBJCCLASS: Begin completions
88+
// OPT_NO_DOT_OBJCCLASS-DAG: Decl[InstanceVar]/CurrNominal: ?.instanceVar[#Int#]{{; name=.+$}}
89+
// OPT_NO_DOT_OBJCCLASS-DAG: Decl[InstanceMethod]/CurrNominal: ?.instanceFunc()[#ObjcClass#]{{; name=.+$}}
90+
// OPT_NO_DOT_OBJCCLASS: End completions

test/Index/kinds.swift

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -225,18 +225,6 @@ class NonTestCase {
225225
// CHECK: [[@LINE-1]]:8 | instance-method/Swift | testMeNot() |
226226
}
227227

228-
@objc class TargetForIBAction {}
229-
// CHECK: [[@LINE-1]]:13 | class/Swift | TargetForIBAction | [[TargetForIBAction_USR:.*]] | Def |
230-
class AttrAnnots {
231-
@IBOutlet var iboutletString: AnyObject?
232-
// CHECK: [[@LINE-1]]:17 | instance-property(IB)/Swift | iboutletString |
233-
@IBAction func someibaction(o: TargetForIBAction) {}
234-
// CHECK: [[@LINE-1]]:18 | instance-method(IB)/Swift | someibaction(o:) | {{.*}} | Def,Dyn,RelChild,RelIBType | rel: 2
235-
// CHECK-NEXT: RelIBType | class/Swift | TargetForIBAction | [[TargetForIBAction_USR]]
236-
@GKInspectable var gkString = "gk"
237-
// CHECK: [[@LINE-1]]:22 | instance-property(GKI)/Swift | gkString |
238-
}
239-
240228
// CHECK: [[@LINE+1]]:7 | class/Swift | C1 | [[C1_USR:.*]] | Def | rel: 0
241229
class C1 {}
242230
// CHECK: [[@LINE+1]]:11 | type-alias/Swift | C1Alias | [[C1Alias_USR:.*]] | Def | rel: 0

test/Index/kinds_objc.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// RUN: %target-swift-ide-test -print-indexed-symbols -source-filename %s | %FileCheck %s
2+
// REQUIRES: objc_interop
3+
4+
@objc class TargetForIBAction {}
5+
// CHECK: [[@LINE-1]]:13 | class/Swift | TargetForIBAction | [[TargetForIBAction_USR:.*]] | Def |
6+
class AttrAnnots {
7+
@IBOutlet var iboutletString: AnyObject?
8+
// CHECK: [[@LINE-1]]:17 | instance-property(IB)/Swift | iboutletString |
9+
@IBAction func someibaction(o: TargetForIBAction) {}
10+
// CHECK: [[@LINE-1]]:18 | instance-method(IB)/Swift | someibaction(o:) | {{.*}} | Def,Dyn,RelChild,RelIBType | rel: 2
11+
// CHECK-NEXT: RelIBType | class/Swift | TargetForIBAction | [[TargetForIBAction_USR]]
12+
@GKInspectable var gkString = "gk"
13+
// CHECK: [[@LINE-1]]:22 | instance-property(GKI)/Swift | gkString |
14+
}
15+

test/Sema/implicit_initializer_multi.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// RUN: %target-swift-frontend -emit-silgen -primary-file %s %S/Inputs/implicit_initializer_multi_other.swift -verify
2+
// REQUIRES: objc_interop
23

34
func test() {
45
_ = DefaultInitializable()

test/attr/attr_dynamic_infer.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// RUN: %target-swift-ide-test -print-ast-typechecked -source-filename=%s -print-implicit-attrs -disable-objc-attr-requires-foundation-module | %FileCheck %s
2+
// REQUIRES: objc_interop
23

34
@objc class Super {
45
@objc dynamic func baseFoo() {}

0 commit comments

Comments
 (0)