From: Duncan P. N. Exon Smith Date: Sat, 28 Jan 2017 21:34:28 +0000 (+0000) Subject: Modules: Separate out a checkSignature helper, almost NFC X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f4f30d8e678dff248fe7de991f6800e03c1558ef;p=clang 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. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@293393 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Serialization/ModuleManager.cpp b/lib/Serialization/ModuleManager.cpp index 722b547e80..c0f59d48a3 100644 --- a/lib/Serialization/ModuleManager.cpp +++ b/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) {