Skip to content

Commit 98fa584

Browse files
authored
[swift][TBDGen] Stop adding redundant ObjC Classes (#62068)
TBD files contain a section reserved for obj-c classes. Previously, TBDGen was adding symbols with this + normal globals with objc class prefixes. This patch removes the extra globals being added. This also accounts for this behavior for `validate-tbd-against-ir` checking. Resolves: rdar://101442087
1 parent 6d75fac commit 98fa584

File tree

7 files changed

+14
-89
lines changed

7 files changed

+14
-89
lines changed

include/swift/SIL/SILSymbolVisitor.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,6 @@ class SILSymbolVisitor {
107107
virtual void addMethodDescriptor(SILDeclRef declRef) {}
108108
virtual void addMethodLookupFunction(ClassDecl *CD) {}
109109
virtual void addNominalTypeDescriptor(NominalTypeDecl *NTD) {}
110-
virtual void addObjCClass(ClassDecl *CD) {}
111110
virtual void addObjCInterface(ClassDecl *CD) {}
112111
virtual void addObjCMetaclass(ClassDecl *CD) {}
113112
virtual void addObjCMethod(AbstractFunctionDecl *AFD) {}

lib/IRGen/IRSymbolVisitor.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -158,12 +158,7 @@ class IRSymbolVisitorImpl : public SILSymbolVisitor {
158158
addLinkEntity(LinkEntity::forNominalTypeDescriptor(NTD));
159159
}
160160

161-
void addObjCClass(ClassDecl *CD) override {
162-
addLinkEntity(LinkEntity::forObjCClass(CD));
163-
}
164-
165161
void addObjCInterface(ClassDecl *CD) override {
166-
// Pass through; Obj-C interfaces don't have linkable symbols.
167162
Visitor.addObjCInterface(CD);
168163
}
169164

lib/IRGen/TBDGen.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -607,6 +607,11 @@ PublicSymbolsRequest::evaluate(Evaluator &evaluator,
607607
auto addSymbol = [&](StringRef symbol, SymbolKind kind, SymbolSource source) {
608608
if (kind == SymbolKind::GlobalSymbol)
609609
symbols.push_back(symbol.str());
610+
// TextAPI ObjC Class Kinds represents two symbols.
611+
else if (kind == SymbolKind::ObjectiveCClass) {
612+
symbols.push_back((llvm::MachO::ObjC2ClassNamePrefix + symbol).str());
613+
symbols.push_back((llvm::MachO::ObjC2MetaClassNamePrefix + symbol).str());
614+
}
610615
};
611616
SimpleAPIRecorder recorder(addSymbol);
612617
TBDGenVisitor visitor(desc, recorder);

lib/SIL/IR/SILSymbolVisitor.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -320,21 +320,16 @@ class SILSymbolVisitorImpl : public ASTVisitor<SILSymbolVisitorImpl> {
320320
// Metaclasses and ObjC classes (duh) are an ObjC thing, and so are not
321321
// needed in build artifacts/for classes which can't touch ObjC.
322322
if (objCCompatible) {
323-
bool addObjCClass = false;
324-
if (isObjC) {
325-
addObjCClass = true;
326-
Visitor.addObjCClass(CD);
327-
}
323+
if (isObjC)
324+
Visitor.addObjCInterface(CD);
328325

329326
if (CD->getMetaclassKind() == ClassDecl::MetaclassKind::ObjC) {
330-
addObjCClass = true;
331-
Visitor.addObjCMetaclass(CD);
327+
// If an ObjCInterface was not added, ObjC Metaclass may still need to
328+
// be included.
329+
if (!isObjC)
330+
Visitor.addObjCMetaclass(CD);
332331
} else
333332
Visitor.addSwiftMetaclassStub(CD);
334-
335-
if (addObjCClass) {
336-
Visitor.addObjCInterface(CD);
337-
}
338333
}
339334

340335
// Some members of classes get extra handling, beyond members of

test/APIJSON/apigen.swift

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -316,42 +316,6 @@ public func myFunction2() {}
316316
// CHECK-NEXT: "access": "public",
317317
// CHECK-NEXT: "file": "/@input/MyModule.swiftinterface",
318318
// CHECK-NEXT: "linkage": "exported"
319-
// CHECK-NEXT: },
320-
// CHECK-NEXT: {
321-
// CHECK-NEXT: "name": "_OBJC_CLASS_$__TtC8MyModule4Test",
322-
// CHECK-NEXT: "access": "public",
323-
// CHECK-NEXT: "file": "/@input/MyModule.swiftinterface",
324-
// CHECK-NEXT: "linkage": "exported"
325-
// CHECK-NEXT: },
326-
// CHECK-NEXT: {
327-
// CHECK-NEXT: "name": "_OBJC_CLASS_$__TtC8MyModule5Test3",
328-
// CHECK-NEXT: "access": "public",
329-
// CHECK-NEXT: "file": "/@input/MyModule.swiftinterface",
330-
// CHECK-NEXT: "linkage": "exported"
331-
// CHECK-NEXT: },
332-
// CHECK-NEXT: {
333-
// CHECK-NEXT: "name": "_OBJC_CLASS_$__TtC8MyModule7Derived",
334-
// CHECK-NEXT: "access": "public",
335-
// CHECK-NEXT: "file": "/@input/MyModule.swiftinterface",
336-
// CHECK-NEXT: "linkage": "exported"
337-
// CHECK-NEXT: },
338-
// CHECK-NEXT: {
339-
// CHECK-NEXT: "name": "_OBJC_METACLASS_$__TtC8MyModule4Test",
340-
// CHECK-NEXT: "access": "public",
341-
// CHECK-NEXT: "file": "/@input/MyModule.swiftinterface",
342-
// CHECK-NEXT: "linkage": "exported"
343-
// CHECK-NEXT: },
344-
// CHECK-NEXT: {
345-
// CHECK-NEXT: "name": "_OBJC_METACLASS_$__TtC8MyModule5Test3",
346-
// CHECK-NEXT: "access": "public",
347-
// CHECK-NEXT: "file": "/@input/MyModule.swiftinterface",
348-
// CHECK-NEXT: "linkage": "exported"
349-
// CHECK-NEXT: },
350-
// CHECK-NEXT: {
351-
// CHECK-NEXT: "name": "_OBJC_METACLASS_$__TtC8MyModule7Derived",
352-
// CHECK-NEXT: "access": "public",
353-
// CHECK-NEXT: "file": "/@input/MyModule.swiftinterface",
354-
// CHECK-NEXT: "linkage": "exported"
355319
// CHECK-NEXT: }
356320
// CHECK-NEXT: ],
357321
// CHECK-NEXT: "interfaces": [

test/APIJSON/spi.swift

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -72,18 +72,6 @@ public func spiAvailableFunc() {}
7272
// CHECK-NEXT: "file": "/@input/MyModule.swiftinterface",
7373
// CHECK-NEXT: "linkage": "exported",
7474
// CHECK-NEXT: "unavailable": true
75-
// CHECK-NEXT: },
76-
// CHECK-NEXT: {
77-
// CHECK-NEXT: "name": "_OBJC_CLASS_$__TtC8MyModule8MyClass2",
78-
// CHECK-NEXT: "access": "public",
79-
// CHECK-NEXT: "file": "/@input/MyModule.swiftinterface",
80-
// CHECK-NEXT: "linkage": "exported"
81-
// CHECK-NEXT: },
82-
// CHECK-NEXT: {
83-
// CHECK-NEXT: "name": "_OBJC_METACLASS_$__TtC8MyModule8MyClass2",
84-
// CHECK-NEXT: "access": "public",
85-
// CHECK-NEXT: "file": "/@input/MyModule.swiftinterface",
86-
// CHECK-NEXT: "linkage": "exported"
8775
// CHECK-NEXT: }
8876
// CHECK-NEXT: ],
8977
// CHECK-NEXT: "interfaces": [
@@ -244,30 +232,6 @@ public func spiAvailableFunc() {}
244232
// CHECK-SPI-NEXT: "introduced": "10.10"
245233
// CHECK-SPI-NEXT: },
246234
// CHECK-SPI-NEXT: {
247-
// CHECK-SPI-NEXT: "name": "_OBJC_CLASS_$__TtC8MyModule7MyClass",
248-
// CHECK-SPI-NEXT: "access": "private",
249-
// CHECK-SPI-NEXT: "file": "/@input/MyModule.swiftmodule",
250-
// CHECK-SPI-NEXT: "linkage": "exported"
251-
// CHECK-SPI-NEXT: },
252-
// CHECK-SPI-NEXT: {
253-
// CHECK-SPI-NEXT: "name": "_OBJC_CLASS_$__TtC8MyModule8MyClass2",
254-
// CHECK-SPI-NEXT: "access": "public",
255-
// CHECK-SPI-NEXT: "file": "/@input/MyModule.swiftmodule",
256-
// CHECK-SPI-NEXT: "linkage": "exported"
257-
// CHECK-SPI-NEXT: },
258-
// CHECK-SPI-NEXT: {
259-
// CHECK-SPI-NEXT: "name": "_OBJC_METACLASS_$__TtC8MyModule7MyClass",
260-
// CHECK-SPI-NEXT: "access": "private",
261-
// CHECK-SPI-NEXT: "file": "/@input/MyModule.swiftmodule",
262-
// CHECK-SPI-NEXT: "linkage": "exported"
263-
// CHECK-SPI-NEXT: },
264-
// CHECK-SPI-NEXT: {
265-
// CHECK-SPI-NEXT: "name": "_OBJC_METACLASS_$__TtC8MyModule8MyClass2",
266-
// CHECK-SPI-NEXT: "access": "public",
267-
// CHECK-SPI-NEXT: "file": "/@input/MyModule.swiftmodule",
268-
// CHECK-SPI-NEXT: "linkage": "exported"
269-
// CHECK-SPI-NEXT: },
270-
// CHECK-SPI-NEXT: {
271235
// CHECK-SPI-NEXT: "name": "_main",
272236
// CHECK-SPI-NEXT: "access": "public",
273237
// CHECK-SPI-NEXT: "file": "/@input/MyModule.swiftmodule",

test/TBD/implied_objc_symbols.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,7 @@
77

88
// RUN: %FileCheck %s < %t/main.tbd
99

10+
// CHECK-NOT: '_OBJC_CLASS_$_CApi'
11+
// CHECK-NOT: '_OBJC_METACLASS_$_CApi'
12+
1013
// CHECK: objc-classes: [ CApi ]

0 commit comments

Comments
 (0)