[PATCH] D48946: [Preamble] Check system dependencies in preamble too

Ilya Biryukov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jul 4 10:19:12 PDT 2018

ilya-biryukov created this revision.
ilya-biryukov added reviewers: sammccall, ioeric.

PrecompiledPreamble hasn't checked the system dependencies changed
before. This result in invalid preamble not being rebuilt if headers
that changed were found in -isystem include paths.

This pattern is sometimes used to avoid showing warnings in third
party code, so we want to correctly handle those cases.

Tested in clangd, see the follow-up patch.

  rC Clang



Index: lib/Frontend/PrecompiledPreamble.cpp
--- lib/Frontend/PrecompiledPreamble.cpp
+++ lib/Frontend/PrecompiledPreamble.cpp
@@ -63,6 +63,15 @@
   return Overlay;
+class PreambleDependencyCollector : public DependencyCollector {
+ // We want to collect all dependencies for correctness. Avoiding the real
+ // system dependencies (e.g. stl from /usr/lib) would probably be a good idea,
+ // but there is no way to distinguish between those and the ones that can be
+ // spuriously added by '-isystem' (e.g. to avoid errors from those headers).
+ bool needSystemDependencies() override { return true; }
 /// Keeps a track of files to be deleted in destructor.
 class TemporaryFiles {
@@ -311,7 +320,7 @@
       new SourceManager(Diagnostics, Clang->getFileManager()));
-  auto PreambleDepCollector = std::make_shared<DependencyCollector>();
+  auto PreambleDepCollector = std::make_shared<PreambleDependencyCollector>();
   // Remap the main source file to the preamble buffer.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D48946.154134.patch
Type: text/x-patch
Size: 1163 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180704/bf8e1ee3/attachment.bin>

More information about the cfe-commits mailing list