Skip to content

Commit cbb5bc7

Browse files
committed
[swift][TBDGen] Stop adding redundant ObjC Classes
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 94717da commit cbb5bc7

File tree

5 files changed

+14
-17
lines changed

5 files changed

+14
-17
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
@@ -318,21 +318,16 @@ class SILSymbolVisitorImpl : public ASTVisitor<SILSymbolVisitorImpl> {
318318
// Metaclasses and ObjC classes (duh) are an ObjC thing, and so are not
319319
// needed in build artifacts/for classes which can't touch ObjC.
320320
if (objCCompatible) {
321-
bool addObjCClass = false;
322-
if (isObjC) {
323-
addObjCClass = true;
324-
Visitor.addObjCClass(CD);
325-
}
321+
if (isObjC)
322+
Visitor.addObjCInterface(CD);
326323

327324
if (CD->getMetaclassKind() == ClassDecl::MetaclassKind::ObjC) {
328-
addObjCClass = true;
329-
Visitor.addObjCMetaclass(CD);
325+
// If an ObjCInterface was not added, ObjC Metaclass may still need to
326+
// be included.
327+
if (!isObjC)
328+
Visitor.addObjCMetaclass(CD);
330329
} else
331330
Visitor.addSwiftMetaclassStub(CD);
332-
333-
if (addObjCClass) {
334-
Visitor.addObjCInterface(CD);
335-
}
336331
}
337332

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

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)