Skip to content

Commit d20ca1f

Browse files
committed
IRGen: Remove ConformanceDescriptor::hasDependentAssociatedTypeWitnesses
This sets the 'requires instantiation' bit in a couple more cases, which doesn't really matter because the runtime already checks a few other conditions, such as the presence of resilient witnesses.
1 parent 22259a6 commit d20ca1f

4 files changed

+18
-18
lines changed

lib/IRGen/ConformanceDescription.h

+2-7
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,6 @@ class ConformanceDescription {
5151
/// Whether this witness table requires runtime specialization.
5252
const unsigned requiresSpecialization : 1;
5353

54-
/// Whether this witness table contains dependent associated type witnesses.
55-
const unsigned hasDependentAssociatedTypeWitnesses : 1;
56-
5754
/// The instantiation function, to be run at the end of witness table
5855
/// instantiation.
5956
llvm::Constant *instantiationFn = nullptr;
@@ -66,13 +63,11 @@ class ConformanceDescription {
6663
llvm::Constant *pattern,
6764
uint16_t witnessTableSize,
6865
uint16_t witnessTablePrivateSize,
69-
bool requiresSpecialization,
70-
bool hasDependentAssociatedTypeWitnesses)
66+
bool requiresSpecialization)
7167
: conformance(conformance), wtable(wtable), pattern(pattern),
7268
witnessTableSize(witnessTableSize),
7369
witnessTablePrivateSize(witnessTablePrivateSize),
74-
requiresSpecialization(requiresSpecialization),
75-
hasDependentAssociatedTypeWitnesses(hasDependentAssociatedTypeWitnesses)
70+
requiresSpecialization(requiresSpecialization)
7671
{
7772
}
7873
};

lib/IRGen/GenProto.cpp

+2-5
Original file line numberDiff line numberDiff line change
@@ -2040,7 +2040,7 @@ namespace {
20402040
// WitnessTablePrivateSizeInWordsAndRequiresInstantiation
20412041
B.addInt(IGM.Int16Ty,
20422042
(Description.witnessTablePrivateSize << 1) |
2043-
Description.hasDependentAssociatedTypeWitnesses);
2043+
Description.requiresSpecialization);
20442044
// Instantiation function
20452045
B.addRelativeAddressOrNull(Description.instantiationFn);
20462046
// Private data
@@ -2296,10 +2296,7 @@ void IRGenModule::emitSILWitnessTable(SILWitnessTable *wt) {
22962296
wtableBuilder.getTablePrivateSize(),
22972297
isDependentConformance(
22982298
conf,
2299-
/*considerResilience=*/true),
2300-
isDependentConformance(
2301-
conf,
2302-
/*considerResilience=*/false));
2299+
/*considerResilience=*/true));
23032300

23042301
// Build the instantiation function, we if need one.
23052302
description.instantiationFn = wtableBuilder.buildInstantiationFunction();

test/IRGen/protocol_resilience.sil

+4-4
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,8 @@ protocol InternalProtocol {
9797
// -- number of witness table entries
9898
// CHECK-SAME: i16 0,
9999

100-
// -- size of private area + 'requires instantiation' bit (not set)
101-
// CHECK-SAME: i16 0,
100+
// -- size of private area + 'requires instantiation' bit
101+
// CHECK-SAME: i16 1,
102102

103103
// -- instantiator function
104104
// CHECK-SAME: i32 0
@@ -127,8 +127,8 @@ protocol InternalProtocol {
127127
// -- number of witness table entries
128128
// CHECK-SAME: i16 0,
129129

130-
// -- size of private area + 'requires instantiation' bit (not set)
131-
// CHECK-SAME: i16 0,
130+
// -- size of private area + 'requires instantiation' bit
131+
// CHECK-SAME: i16 1,
132132

133133
// -- instantiator function
134134
// CHECK-SAME: i32 0

test/IRGen/protocol_resilience_descriptors.swift

+10-2
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,18 @@ public struct ConditionallyConforms<Element> { }
6060
public struct Y { }
6161

6262
// CHECK-USAGE-LABEL: @"$s31protocol_resilience_descriptors1YV010resilient_A022OtherResilientProtocolAAMc" =
63+
// -- flags: has generic witness table
6364
// CHECK-USAGE-SAME: i32 131072,
65+
// -- number of witness table entries
6466
// CHECK-USAGE-SAME: i16 0,
65-
// CHECK-USAGE-SAME: i16 0,
66-
// CHECK-USAGE-SAME: i32 0
67+
// -- size of private area + 'requires instantiation' bit
68+
// CHECK-USAGE-SAME: i16 1,
69+
// -- instantiator function
70+
// CHECK-USAGE-SAME: i32 0,
71+
// -- private data area
72+
// CHECK-USAGE-SAME: {{@[0-9]+}}
73+
// --
74+
// CHECK-USAGE-SAME: }
6775
extension Y: OtherResilientProtocol { }
6876

6977
// CHECK-USAGE: @"$s31protocol_resilience_descriptors29ConformsWithAssocRequirementsV010resilient_A008ProtocoleF12TypeDefaultsAAMc" =

0 commit comments

Comments
 (0)