[PATCH] D155131: [clang][modules] Deserialize included files lazily
Jan Svoboda via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Jul 13 10:02:02 PDT 2023
jansvoboda11 added a comment.
In D155131#4495489 <https://reviews.llvm.org/D155131#4495489>, @benlangmuir wrote:
> Now that it's not eagerly deserialized, should `Preprocessor::alreadyIncluded` call `HeaderInfo.getFileInfo(File)` to ensure the information is up to date?
It should, but `Preprocessor::alreadyIncluded()` is only called from `HeaderSearch::ShouldEnterIncludeFile()` and `Preprocessor::HandleHeaderIncludeOrImport()`, where `HeaderSearch::getFileInfo(File)` has already been called. But I agree it would be better to ensure that within `Preprocessor::alreadyIncluded()` itself. I'll try to include that in the next revision.
> Similarly, we expose the list of files in `Preprocessor::getIncludedFiles` -- is it okay if this list is incomplete?
That should be okay. This function only needs to return files included in the current module compilation, not all transitive includes.
================
Comment at: clang/lib/Serialization/ASTReader.cpp:1947
+ if (const FileEntry *FE = getFile(key))
+ Reader.getPreprocessor().getIncludedFiles().insert(FE);
+
----------------
benlangmuir wrote:
> `Reader.getPreprocessor().markIncluded`?
That would trigger infinite recursion, since that calls `getFileInfo()` which attempts to deserialize.
================
Comment at: clang/lib/Serialization/ASTWriter.cpp:2545
- raw_svector_ostream Out(Buffer);
- writeIncludedFiles(Out, PP);
- RecordData::value_type Record[] = {PP_INCLUDED_FILES};
----------------
benlangmuir wrote:
> Can we remove `ASTWriter::writeIncludedFiles` now?
Yes, forgot about that, thanks.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D155131/new/
https://reviews.llvm.org/D155131
More information about the cfe-commits
mailing list