Skip to content

Commit 8da411b

Browse files
authored
[Serialization] Fix caching of deserialized Identifiers (#19264)
This was causing us to do a string table lookup on every use of a serialized identifier, even a repeated one.
1 parent 0149129 commit 8da411b

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

lib/Serialization/Deserialization.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1736,7 +1736,7 @@ DeclBaseName ModuleFile::getDeclBaseName(IdentifierID IID) {
17361736

17371737
size_t rawID = IID - NUM_SPECIAL_IDS;
17381738
assert(rawID < Identifiers.size() && "invalid identifier ID");
1739-
auto identRecord = Identifiers[rawID];
1739+
auto &identRecord = Identifiers[rawID];
17401740

17411741
if (identRecord.Offset == 0)
17421742
return identRecord.Ident;
@@ -1748,7 +1748,11 @@ DeclBaseName ModuleFile::getDeclBaseName(IdentifierID IID) {
17481748
assert(terminatorOffset != StringRef::npos &&
17491749
"unterminated identifier string data");
17501750

1751-
return getContext().getIdentifier(rawStrPtr.slice(0, terminatorOffset));
1751+
// Cache the resulting identifier.
1752+
identRecord.Ident =
1753+
getContext().getIdentifier(rawStrPtr.slice(0, terminatorOffset));
1754+
identRecord.Offset = 0;
1755+
return identRecord.Ident;
17521756
}
17531757

17541758
Identifier ModuleFile::getIdentifier(IdentifierID IID) {

0 commit comments

Comments
 (0)