diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-02-05 19:03:40 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-02-05 19:03:40 +0000 |
commit | d79514e24b4da111b6b08535f975ae8f4d81c26d (patch) | |
tree | 67d8d153a83045efb837f0434ae4c0923b9a11af /clang/lib | |
parent | 1242ce96952133e1b1f629ec3ce9e3145f0362e1 (diff) | |
download | bcm5719-llvm-d79514e24b4da111b6b08535f975ae8f4d81c26d.tar.gz bcm5719-llvm-d79514e24b4da111b6b08535f975ae8f4d81c26d.zip |
[modules] Separately track whether an identifier's preprocessor information and
name lookup information have changed since deserialization. For a C++ modules
build, we do not need to re-emit the identifier into the serialized identifier
table if only the name lookup information has changed (and in all cases, we
don't need to re-emit the macro information if only the name lookup information
has changed).
llvm-svn: 259901
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Basic/IdentifierTable.cpp | 1 | ||||
-rw-r--r-- | clang/lib/Sema/IdentifierResolver.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 6 |
3 files changed, 7 insertions, 2 deletions
diff --git a/clang/lib/Basic/IdentifierTable.cpp b/clang/lib/Basic/IdentifierTable.cpp index 67de1cb6fda..d6ad0f5c915 100644 --- a/clang/lib/Basic/IdentifierTable.cpp +++ b/clang/lib/Basic/IdentifierTable.cpp @@ -42,6 +42,7 @@ IdentifierInfo::IdentifierInfo() { NeedsHandleIdentifier = false; IsFromAST = false; ChangedAfterLoad = false; + FEChangedAfterLoad = false; RevertedTokenID = false; OutOfDate = false; IsModulesImport = false; diff --git a/clang/lib/Sema/IdentifierResolver.cpp b/clang/lib/Sema/IdentifierResolver.cpp index 53263bac546..0bdb19490bc 100644 --- a/clang/lib/Sema/IdentifierResolver.cpp +++ b/clang/lib/Sema/IdentifierResolver.cpp @@ -381,7 +381,7 @@ void IdentifierResolver::updatingIdentifier(IdentifierInfo &II) { PP.getExternalSource()->updateOutOfDateIdentifier(II); if (II.isFromAST()) - II.setChangedSinceDeserialization(); + II.setFETokenInfoChangedSinceDeserialization(); } //===----------------------------------------------------------------------===// diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 0b28a7aa673..3e153327923 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -3162,6 +3162,8 @@ public: NeedDecls(!IsModule || !Writer.getLangOpts().CPlusPlus), InterestingIdentifierOffsets(InterestingIdentifierOffsets) {} + bool needDecls() const { return NeedDecls; } + static hash_value_type ComputeHash(const IdentifierInfo* II) { return llvm::HashString(II->getName()); } @@ -3307,7 +3309,9 @@ void ASTWriter::WriteIdentifierTable(Preprocessor &PP, auto *II = const_cast<IdentifierInfo *>(IdentIDPair.first); IdentID ID = IdentIDPair.second; assert(II && "NULL identifier in identifier table"); - if (!Chain || !II->isFromAST() || II->hasChangedSinceDeserialization()) + if (!Chain || !II->isFromAST() || II->hasChangedSinceDeserialization() || + (Trait.needDecls() && + II->hasFETokenInfoChangedSinceDeserialization())) Generator.insert(II, ID, Trait); } |