@@ -768,6 +768,15 @@ IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
768
768
return Reader.getGlobalIdentifierID (F, RawID >> 1 );
769
769
}
770
770
771
+ static void markIdentifierFromAST (ASTReader &Reader, IdentifierInfo &II) {
772
+ if (!II.isFromAST ()) {
773
+ II.setIsFromAST ();
774
+ bool IsModule = Reader.getPreprocessor ().getCurrentModule () != nullptr ;
775
+ if (isInterestingIdentifier (Reader, II, IsModule))
776
+ II.setChangedSinceDeserialization ();
777
+ }
778
+ }
779
+
771
780
IdentifierInfo *ASTIdentifierLookupTrait::ReadData (const internal_key_type& k,
772
781
const unsigned char * d,
773
782
unsigned DataLen) {
@@ -784,12 +793,7 @@ IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
784
793
II = &Reader.getIdentifierTable ().getOwn (k);
785
794
KnownII = II;
786
795
}
787
- if (!II->isFromAST ()) {
788
- II->setIsFromAST ();
789
- bool IsModule = Reader.PP .getCurrentModule () != nullptr ;
790
- if (isInterestingIdentifier (Reader, *II, IsModule))
791
- II->setChangedSinceDeserialization ();
792
- }
796
+ markIdentifierFromAST (Reader, *II);
793
797
Reader.markIdentifierUpToDate (II);
794
798
795
799
IdentID ID = Reader.getGlobalIdentifierID (F, RawID);
@@ -3560,12 +3564,7 @@ ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName,
3560
3564
3561
3565
// Mark this identifier as being from an AST file so that we can track
3562
3566
// whether we need to serialize it.
3563
- if (!II.isFromAST ()) {
3564
- II.setIsFromAST ();
3565
- bool IsModule = PP.getCurrentModule () != nullptr ;
3566
- if (isInterestingIdentifier (*this , II, IsModule))
3567
- II.setChangedSinceDeserialization ();
3568
- }
3567
+ markIdentifierFromAST (*this , II);
3569
3568
3570
3569
// Associate the ID with the identifier so that the writer can reuse it.
3571
3570
auto ID = Trait.ReadIdentifierID (Data + KeyDataLen.first );
@@ -7455,10 +7454,11 @@ IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
7455
7454
const unsigned char *StrLenPtr = (const unsigned char *) Str - 2 ;
7456
7455
unsigned StrLen = (((unsigned ) StrLenPtr[0 ])
7457
7456
| (((unsigned ) StrLenPtr[1 ]) << 8 )) - 1 ;
7458
- IdentifiersLoaded[ID]
7459
- = &PP.getIdentifierTable ().get (StringRef (Str, StrLen));
7457
+ auto &II = PP.getIdentifierTable ().get (StringRef (Str, StrLen));
7458
+ IdentifiersLoaded[ID] = &II;
7459
+ markIdentifierFromAST (*this , II);
7460
7460
if (DeserializationListener)
7461
- DeserializationListener->IdentifierRead (ID + 1 , IdentifiersLoaded[ID] );
7461
+ DeserializationListener->IdentifierRead (ID + 1 , &II );
7462
7462
}
7463
7463
7464
7464
return IdentifiersLoaded[ID];
0 commit comments