diff options
author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2017-01-28 21:34:28 +0000 |
---|---|---|
committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2017-01-28 21:34:28 +0000 |
commit | 14afc8e7b83e643ed56580d8e935f77a7a6ae52c (patch) | |
tree | 0e2ca3697f329664ebd0c28463c0fd3ab5d5fdce /clang/lib/Serialization/ModuleManager.cpp | |
parent | 3caaaa94c6a2aea5d0cda2550a9d83a3145ed5fd (diff) | |
download | llvm-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.cpp | 29 |
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) { |