summaryrefslogtreecommitdiffstats
path: root/clang/lib/Serialization/Module.cpp
diff options
context:
space:
mode:
authorBen Langmuir <blangmuir@apple.com>2014-10-23 18:05:36 +0000
committerBen Langmuir <blangmuir@apple.com>2014-10-23 18:05:36 +0000
commit487ea14a46f50f7b025ebb3ae5ee00da935b3f25 (patch)
tree546427f824aec7a61a92e1cf15451afe1ed88ef1 /clang/lib/Serialization/Module.cpp
parent5b2787dfb263574ec94a1993c3f1627f9adf97da (diff)
downloadbcm5719-llvm-487ea14a46f50f7b025ebb3ae5ee00da935b3f25.tar.gz
bcm5719-llvm-487ea14a46f50f7b025ebb3ae5ee00da935b3f25.zip
Add a "signature" to AST files to verify that they haven't changed
Since the order of the IDs in the AST file (e.g. DeclIDs, SelectorIDs) is not stable, it is not safe to load an AST file that depends on another AST file that has been rebuilt since the importer was built, even if "nothing changed". We previously used size and modtime to check this, but I've seen cases where a module rebuilt quickly enough to foil this check and caused very hard to debug build errors. To save cycles when we're loading the AST, we just generate a random nonce value and check that it hasn't changed when we load an imported module, rather than actually hash the whole file. This is slightly complicated by the fact that we need to verify the signature inside addModule, since we might otherwise consider that a mdoule is "OutOfDate" when really it is the importer that is out of date. I didn't see any regressions in module load time after this change. llvm-svn: 220493
Diffstat (limited to 'clang/lib/Serialization/Module.cpp')
-rw-r--r--clang/lib/Serialization/Module.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/clang/lib/Serialization/Module.cpp b/clang/lib/Serialization/Module.cpp
index 6f2a3c22043..6c48a41187c 100644
--- a/clang/lib/Serialization/Module.cpp
+++ b/clang/lib/Serialization/Module.cpp
@@ -21,7 +21,7 @@ using namespace serialization;
using namespace reader;
ModuleFile::ModuleFile(ModuleKind Kind, unsigned Generation)
- : Kind(Kind), File(nullptr), DirectlyImported(false),
+ : Kind(Kind), File(nullptr), Signature(0), DirectlyImported(false),
Generation(Generation), SizeInBits(0),
LocalNumSLocEntries(0), SLocEntryBaseID(0),
SLocEntryBaseOffset(0), SLocEntryOffsets(nullptr),
OpenPOWER on IntegriCloud