|
@@ -457,6 +457,16 @@ ASTIdentifierLookupTraitBase::ReadKey(const unsigned char* d, unsigned n) {
|
|
return StringRef((const char*) d, n-1);
|
|
return StringRef((const char*) d, n-1);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/// \brief Whether the given identifier is "interesting".
|
|
|
|
+static bool isInterestingIdentifier(IdentifierInfo &II) {
|
|
|
|
+ return II.isPoisoned() ||
|
|
|
|
+ II.isExtensionToken() ||
|
|
|
|
+ II.getObjCOrBuiltinID() ||
|
|
|
|
+ II.hasRevertedTokenIDToIdentifier() ||
|
|
|
|
+ II.hadMacroDefinition() ||
|
|
|
|
+ II.getFETokenInfo<void>();
|
|
|
|
+}
|
|
|
|
+
|
|
IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
|
|
IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
|
|
const unsigned char* d,
|
|
const unsigned char* d,
|
|
unsigned DataLen) {
|
|
unsigned DataLen) {
|
|
@@ -477,8 +487,13 @@ IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
|
|
KnownII = II;
|
|
KnownII = II;
|
|
}
|
|
}
|
|
Reader.SetIdentifierInfo(ID, II);
|
|
Reader.SetIdentifierInfo(ID, II);
|
|
- II->setIsFromAST();
|
|
|
|
- Reader.markIdentifierUpToDate(II);
|
|
|
|
|
|
+ if (!II->isFromAST()) {
|
|
|
|
+ bool WasInteresting = isInterestingIdentifier(*II);
|
|
|
|
+ II->setIsFromAST();
|
|
|
|
+ if (WasInteresting)
|
|
|
|
+ II->setChangedSinceDeserialization();
|
|
|
|
+ }
|
|
|
|
+ Reader.markIdentifierUpToDate(II);
|
|
return II;
|
|
return II;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -506,7 +521,12 @@ IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
|
|
KnownII = II;
|
|
KnownII = II;
|
|
}
|
|
}
|
|
Reader.markIdentifierUpToDate(II);
|
|
Reader.markIdentifierUpToDate(II);
|
|
- II->setIsFromAST();
|
|
|
|
|
|
+ if (!II->isFromAST()) {
|
|
|
|
+ bool WasInteresting = isInterestingIdentifier(*II);
|
|
|
|
+ II->setIsFromAST();
|
|
|
|
+ if (WasInteresting)
|
|
|
|
+ II->setChangedSinceDeserialization();
|
|
|
|
+ }
|
|
|
|
|
|
// Set or check the various bits in the IdentifierInfo structure.
|
|
// Set or check the various bits in the IdentifierInfo structure.
|
|
// Token IDs are read-only.
|
|
// Token IDs are read-only.
|