Skip to content

Commit 088824d

Browse files
committed
[TBDGen] Generate symbols for protocol conformances.
1 parent 15c3878 commit 088824d

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

lib/TBDGen/TBDGen.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "swift/IRGen/Linking.h"
2424
#include "swift/SIL/FormalLinkage.h"
2525
#include "swift/SIL/SILDeclRef.h"
26+
#include "swift/SIL/TypeLowering.h"
2627
#include "llvm/ADT/StringSet.h"
2728

2829
using namespace swift;
@@ -105,6 +106,18 @@ class TBDGenVisitor : public ASTVisitor<TBDGenVisitor> {
105106
/*isPattern=*/false));
106107
addSymbol(irgen::LinkEntity::forTypeMetadataAccessFunction(declaredType));
107108

109+
// There are symbols associated with any protocols this type conforms to.
110+
for (auto conformance : NTD->getLocalConformances()) {
111+
auto needsWTable = Lowering::TypeConverter::protocolRequiresWitnessTable(
112+
conformance->getProtocol());
113+
if (!needsWTable)
114+
continue;
115+
116+
addSymbol(irgen::LinkEntity::forDirectProtocolWitnessTable(conformance));
117+
addSymbol(irgen::LinkEntity::forProtocolWitnessTableAccessFunction(
118+
conformance));
119+
}
120+
108121
visitMembers(NTD);
109122
}
110123
void visitClassDecl(ClassDecl *CD) {

test/TBD/Inputs/protocol.log

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
<unknown>:0: error: symbol '_T04test014PublicInternalB6StructV17internalVarGetSetSivfi' (test.PublicInternalPublicStruct.(internalVarGetSet : Swift.Int).(variable initialization expression)) is in generated IR file, but not in TBD file
55
<unknown>:0: error: symbol '_T04test06PublicbB6StructV12publicVarGetSivfi' (test.PublicPublicPublicStruct.(publicVarGet : Swift.Int).(variable initialization expression)) is in generated IR file, but not in TBD file
66
<unknown>:0: error: symbol '_T04test06PublicbB6StructV15publicVarGetSetSivfi' (test.PublicPublicPublicStruct.(publicVarGetSet : Swift.Int).(variable initialization expression)) is in generated IR file, but not in TBD file
7-
<unknown>:0: error: symbol '_T04test06PublicbB6StructVAA0B0AAWP' (protocol witness table for test.PublicPublicPublicStruct : test.Public in test) is in generated IR file, but not in TBD file
8-
<unknown>:0: error: symbol '_T04test06PublicbB6StructVAA0B0AAWa' (protocol witness table accessor for test.PublicPublicPublicStruct : test.Public in test) is in generated IR file, but not in TBD file
97
<unknown>:0: error: symbol '_T04test013PublicPrivateB6StructV13privateVarGetSifg' (test.PublicPrivatePublicStruct.privateVarGet.getter : Swift.Int) is in TBD file, but not in generated IR
108
<unknown>:0: error: symbol '_T04test013PublicPrivateB6StructV16privateVarGetSetSifg' (test.PublicPrivatePublicStruct.privateVarGetSet.getter : Swift.Int) is in TBD file, but not in generated IR
119
<unknown>:0: error: symbol '_T04test013PublicPrivateB6StructV16privateVarGetSetSifm' (test.PublicPrivatePublicStruct.privateVarGetSet.materializeForSet : Swift.Int) is in TBD file, but not in generated IR

0 commit comments

Comments
 (0)