aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Serialization/ModuleManager.cpp
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2017-01-28 21:34:28 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2017-01-28 21:34:28 +0000
commit14afc8e7b83e643ed56580d8e935f77a7a6ae52c (patch)
tree0e2ca3697f329664ebd0c28463c0fd3ab5d5fdce /clang/lib/Serialization/ModuleManager.cpp
parent3caaaa94c6a2aea5d0cda2550a9d83a3145ed5fd (diff)
downloadllvm-14afc8e7b83e643ed56580d8e935f77a7a6ae52c.zip
llvm-14afc8e7b83e643ed56580d8e935f77a7a6ae52c.tar.gz
llvm-14afc8e7b83e643ed56580d8e935f77a7a6ae52c.tar.bz2
Modules: Separate out a checkSignature helper, almost NFC
The main point is to move the delete-the-new-module logic into the same block that creates it, so I can simplify the memory management in a follow-up, but I think it's clearer to use use a checkSignature helper here anyway. There is a minor functionality change: we now scan ahead to pull the signature out of the control block *only* if this is a new ModuleFile. For old ones, ASTReader::ReadControlBlock will have already read the signature. llvm-svn: 293393
Diffstat (limited to 'clang/lib/Serialization/ModuleManager.cpp')
-rw-r--r--clang/lib/Serialization/ModuleManager.cpp29
1 files changed, 16 insertions, 13 deletions
diff --git a/clang/lib/Serialization/ModuleManager.cpp b/clang/lib/Serialization/ModuleManager.cpp
index 722b547..c0f59d4 100644
--- a/clang/lib/Serialization/ModuleManager.cpp
+++ b/clang/lib/Serialization/ModuleManager.cpp
@@ -52,6 +52,17 @@ ModuleManager::lookupBuffer(StringRef Name) {
return std::move(InMemoryBuffers[Entry]);
}
+static bool checkSignature(ASTFileSignature Signature,
+ ASTFileSignature ExpectedSignature,
+ std::string &ErrorStr) {
+ if (!ExpectedSignature || Signature == ExpectedSignature)
+ return false;
+
+ ErrorStr =
+ Signature ? "signature mismatch" : "could not read module signature";
+ return true;
+}
+
ModuleManager::AddModuleResult
ModuleManager::addModule(StringRef FileName, ModuleKind Type,
SourceLocation ImportLoc, ModuleFile *ImportedBy,
@@ -136,22 +147,14 @@ ModuleManager::addModule(StringRef FileName, ModuleKind Type,
// Initialize the stream.
ModuleEntry->Data = PCHContainerRdr.ExtractPCH(*ModuleEntry->Buffer);
- }
- if (ExpectedSignature) {
- // If we've not read the control block yet, read the signature eagerly now
- // so that we can check it.
- if (!ModuleEntry->Signature)
- ModuleEntry->Signature = ReadSignature(ModuleEntry->Data);
-
- if (ModuleEntry->Signature != ExpectedSignature) {
- ErrorStr = ModuleEntry->Signature ? "signature mismatch"
- : "could not read module signature";
-
- if (NewModule)
- delete ModuleEntry;
+ // Read the signature eagerly now so that we can check it.
+ if (checkSignature(ReadSignature(ModuleEntry->Data), ExpectedSignature, ErrorStr)) {
+ delete ModuleEntry;
return OutOfDate;
}
+ } else if (checkSignature(ModuleEntry->Signature, ExpectedSignature, ErrorStr)) {
+ return OutOfDate;
}
if (ImportedBy) {