diff options
author | Jan Svoboda <jan_svoboda@apple.com> | 2023-08-25 22:31:17 -0700 |
---|---|---|
committer | Jan Svoboda <jan_svoboda@apple.com> | 2023-08-28 09:54:39 -0700 |
commit | 6fb08d8f558a6f28db7835acdb88cab83aea2eb4 (patch) | |
tree | 66a6c29cc3be1627adb91b27f4389702008d3c72 /clang/lib/Serialization/GlobalModuleIndex.cpp | |
parent | d4a912153488308ea9ab96a0267150460cdfc697 (diff) | |
download | llvm-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.cpp | 9 |
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. } |