Skip to content

Commit 21b75b4

Browse files
committed
[NFC] Serialize module selector fields
1 parent 5ef6326 commit 21b75b4

File tree

3 files changed

+29
-14
lines changed

3 files changed

+29
-14
lines changed

lib/Serialization/Deserialization.cpp

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4528,15 +4528,18 @@ llvm::Error DeclDeserializer::deserializeDeclCommon() {
45284528
serialization::decls_block::DynamicReplacementDeclAttrLayout::
45294529
readRecord(scratch, isImplicit, replacedFunID, numArgs, rawPieceIDs);
45304530

4531-
auto baseName = MF.getDeclBaseName(rawPieceIDs[0]);
4531+
auto moduleSelector = MF.getIdentifier(rawPieceIDs[0]);
4532+
auto baseName = MF.getDeclBaseName(rawPieceIDs[1]);
45324533
SmallVector<Identifier, 4> pieces;
4533-
for (auto pieceID : rawPieceIDs.slice(1))
4534+
for (auto pieceID : rawPieceIDs.slice(2))
45344535
pieces.push_back(MF.getIdentifier(pieceID));
45354536

4537+
DeclNameRef replacedFunName(ctx, moduleSelector, baseName, pieces);
4538+
45364539
assert(numArgs != 0);
45374540
assert(!isImplicit && "Need to update for implicit");
4538-
Attr = DynamicReplacementAttr::create(
4539-
ctx, DeclNameRef({ ctx, baseName, pieces }), &MF, replacedFunID);
4541+
Attr = DynamicReplacementAttr::create(ctx, replacedFunName, &MF,
4542+
replacedFunID);
45404543
break;
45414544
}
45424545

@@ -4630,6 +4633,7 @@ llvm::Error DeclDeserializer::deserializeDeclCommon() {
46304633

46314634
case decls_block::Derivative_DECL_ATTR: {
46324635
bool isImplicit;
4636+
uint64_t origModuleSelectorId;
46334637
uint64_t origNameId;
46344638
bool hasAccessorKind;
46354639
uint64_t rawAccessorKind;
@@ -4638,8 +4642,9 @@ llvm::Error DeclDeserializer::deserializeDeclCommon() {
46384642
ArrayRef<uint64_t> parameters;
46394643

46404644
serialization::decls_block::DerivativeDeclAttrLayout::readRecord(
4641-
scratch, isImplicit, origNameId, hasAccessorKind, rawAccessorKind,
4642-
origDeclId, rawDerivativeKind, parameters);
4645+
scratch, isImplicit, origModuleSelectorId, origNameId,
4646+
hasAccessorKind, rawAccessorKind, origDeclId, rawDerivativeKind,
4647+
parameters);
46434648

46444649
Optional<AccessorKind> accessorKind = None;
46454650
if (hasAccessorKind) {
@@ -4649,8 +4654,12 @@ llvm::Error DeclDeserializer::deserializeDeclCommon() {
46494654
accessorKind = *maybeAccessorKind;
46504655
}
46514656

4652-
DeclNameRefWithLoc origName{DeclNameRef(MF.getDeclBaseName(origNameId)),
4653-
DeclNameLoc(), accessorKind};
4657+
Identifier origModuleSelector = MF.getIdentifier(origModuleSelectorId);
4658+
DeclBaseName origBaseName = MF.getDeclBaseName(origNameId);
4659+
DeclNameRef origName(ctx, origModuleSelector, origBaseName);
4660+
DeclNameRefWithLoc origNameWithLoc{origName, DeclNameLoc(),
4661+
accessorKind};
4662+
46544663
auto derivativeKind =
46554664
getActualAutoDiffDerivativeFunctionKind(rawDerivativeKind);
46564665
if (!derivativeKind)
@@ -4662,7 +4671,8 @@ llvm::Error DeclDeserializer::deserializeDeclCommon() {
46624671

46634672
auto *derivativeAttr =
46644673
DerivativeAttr::create(ctx, isImplicit, SourceLoc(), SourceRange(),
4665-
/*baseType*/ nullptr, origName, indices);
4674+
/*baseType*/ nullptr, origNameWithLoc,
4675+
indices);
46664676
derivativeAttr->setOriginalFunctionResolver(&MF, origDeclId);
46674677
derivativeAttr->setDerivativeKind(*derivativeKind);
46684678
Attr = derivativeAttr;

lib/Serialization/ModuleFormat.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ const uint16_t SWIFTMODULE_VERSION_MAJOR = 0;
5656
/// describe what change you made. The content of this comment isn't important;
5757
/// it just ensures a conflict if two people change the module format.
5858
/// Don't worry about adhering to the 80-column limit for this line.
59-
const uint16_t SWIFTMODULE_VERSION_MINOR = 623; // remove designated types
59+
const uint16_t SWIFTMODULE_VERSION_MINOR = 624; // DeclNameRef ModuleSelector fields
6060

6161
/// A standard hash seed used for all string hashes in a serialized module.
6262
///
@@ -1931,6 +1931,7 @@ namespace decls_block {
19311931
using DerivativeDeclAttrLayout = BCRecordLayout<
19321932
Derivative_DECL_ATTR,
19331933
BCFixed<1>, // Implicit flag.
1934+
IdentifierIDField, // Original module selector.
19341935
IdentifierIDField, // Original name.
19351936
BCFixed<1>, // Has original accessor kind?
19361937
AccessorKindField, // Original accessor kind.
@@ -1958,7 +1959,7 @@ namespace decls_block {
19581959
DynamicReplacement_DECL_ATTR,
19591960
BCFixed<1>, // implicit flag
19601961
DeclIDField, // replaced function
1961-
BCVBR<4>, // # of arguments (+1) or zero if no name
1962+
BCVBR<4>, // # of arguments (+2) or zero if no name
19621963
BCArray<IdentifierIDField>
19631964
>;
19641965

lib/Serialization/Serialization.cpp

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2564,6 +2564,7 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
25642564
auto theAttr = cast<DynamicReplacementAttr>(DA);
25652565
auto replacedFun = theAttr->getReplacedFunctionName();
25662566
SmallVector<IdentifierID, 4> pieces;
2567+
pieces.push_back(S.addDeclBaseNameRef(replacedFun.getModuleSelector()));
25672568
pieces.push_back(S.addDeclBaseNameRef(replacedFun.getBaseName()));
25682569
for (auto argName : replacedFun.getArgumentNames())
25692570
pieces.push_back(S.addDeclBaseNameRef(argName));
@@ -2634,7 +2635,10 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
26342635
"`@derivative` attribute should have original declaration set "
26352636
"during construction or parsing");
26362637
auto origDeclNameRef = attr->getOriginalFunctionName();
2638+
auto origModuleSelector = origDeclNameRef.Name.getModuleSelector();
26372639
auto origName = origDeclNameRef.Name.getBaseName();
2640+
IdentifierID origModuleSelectorId =
2641+
S.addDeclBaseNameRef(origModuleSelector);
26382642
IdentifierID origNameId = S.addDeclBaseNameRef(origName);
26392643
DeclID origDeclID = S.addDeclRef(attr->getOriginalFunction(ctx));
26402644
auto derivativeKind =
@@ -2649,9 +2653,9 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
26492653
for (unsigned i : range(parameterIndices->getCapacity()))
26502654
paramIndicesVector.push_back(parameterIndices->contains(i));
26512655
DerivativeDeclAttrLayout::emitRecord(
2652-
S.Out, S.ScratchRecord, abbrCode, attr->isImplicit(), origNameId,
2653-
origAccessorKind.hasValue(), rawAccessorKind, origDeclID,
2654-
derivativeKind, paramIndicesVector);
2656+
S.Out, S.ScratchRecord, abbrCode, attr->isImplicit(),
2657+
origModuleSelectorId, origNameId, origAccessorKind.hasValue(),
2658+
rawAccessorKind, origDeclID, derivativeKind, paramIndicesVector);
26552659
return;
26562660
}
26572661

0 commit comments

Comments
 (0)