aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Serialization/GlobalModuleIndex.cpp
diff options
context:
space:
mode:
authorJan Svoboda <jan_svoboda@apple.com>2023-08-25 22:31:17 -0700
committerJan Svoboda <jan_svoboda@apple.com>2023-08-28 09:54:39 -0700
commit6fb08d8f558a6f28db7835acdb88cab83aea2eb4 (patch)
tree66a6c29cc3be1627adb91b27f4389702008d3c72 /clang/lib/Serialization/GlobalModuleIndex.cpp
parentd4a912153488308ea9ab96a0267150460cdfc697 (diff)
downloadllvm-6fb08d8f558a6f28db7835acdb88cab83aea2eb4.zip
llvm-6fb08d8f558a6f28db7835acdb88cab83aea2eb4.tar.gz
llvm-6fb08d8f558a6f28db7835acdb88cab83aea2eb4.tar.bz2
Reland "[clang][modules] Move `UNHASHED_CONTROL_BLOCK` up in the AST file"
This reverts commit b6ba804f7775f89f230ee1e62526a2f8225c7966, effectively relanding commit 7d1565727dad3acb54fe76a908630843835d7bc8. The original commit incorrectly called `ASTWriter::writeUnhashedControlBlock()` before `ASTWriter::collectNonAffectingInputFiles()`, causing SourceLocations/FileIDs in the pragma diagnostic mappings block to be invalid. This is now tested by `clang/test/Modules/diag-mappings-affecting.c`.
Diffstat (limited to 'clang/lib/Serialization/GlobalModuleIndex.cpp')
-rw-r--r--clang/lib/Serialization/GlobalModuleIndex.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/clang/lib/Serialization/GlobalModuleIndex.cpp b/clang/lib/Serialization/GlobalModuleIndex.cpp
index d57f4ce..92417c7 100644
--- a/clang/lib/Serialization/GlobalModuleIndex.cpp
+++ b/clang/lib/Serialization/GlobalModuleIndex.cpp
@@ -697,9 +697,12 @@ llvm::Error GlobalModuleIndexBuilder::loadModuleFile(const FileEntry *File) {
}
// Get Signature.
- if (State == DiagnosticOptionsBlock && Code == SIGNATURE)
- getModuleFileInfo(File).Signature = ASTFileSignature::create(
- Record.begin(), Record.begin() + ASTFileSignature::size);
+ if (State == DiagnosticOptionsBlock && Code == SIGNATURE) {
+ auto Signature = ASTFileSignature::create(Blob.begin(), Blob.end());
+ assert(Signature != ASTFileSignature::createDummy() &&
+ "Dummy AST file signature not backpatched in ASTWriter.");
+ getModuleFileInfo(File).Signature = Signature;
+ }
// We don't care about this record.
}