[PATCH] D100480: Add flag for showing skipped headers in -H / --show-includes output

Hans Wennborg via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Apr 14 07:48:15 PDT 2021


hans created this revision.
hans added reviewers: thakis, rnk.
Herald added subscribers: jansvoboda11, dang.
hans requested review of this revision.
Herald added a project: clang.

Consider the following set of files:

  a.cc:
  #include "a.h"
  
  a.h:
  #ifndef A_H
  #define A_H
  
  #include "b.h"
  #include "c.h"  // This gets "skipped".
  
  #endif
  
  b.h:
  #ifndef B_H
  #define B_H
  
  #include "c.h"
  
  #endif
  
  c.h:
  #ifndef C_H
  #define C_H
  
  void c();
  
  #endif

And the output of the -H option:

  $ clang -c -H a.cc
  . ./a.h
  .. ./b.h
  ... ./c.h

Note that the include of `c.h` in `a.h` is not shown in the output. (GCC does the same.) This is because of the include guard optimization: clang knows `c.h` is covered by an include guard which is already defined, so when it sees the include in `a.h`, it skips it. The same would have happened if `#pragma once` were used instead of include guards.

However, `a.h` *does* include `c.h`, and it may be useful to show that in the `-H` output. This patch adds a flag for doing that.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D100480

Files:
  clang/include/clang/Driver/Options.td
  clang/include/clang/Frontend/DependencyOutputOptions.h
  clang/lib/Frontend/HeaderIncludeGen.cpp
  clang/test/Frontend/Inputs/test.h
  clang/test/Frontend/Inputs/test2.h
  clang/test/Frontend/print-header-includes.c

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D100480.337444.patch
Type: text/x-patch
Size: 4633 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210414/c5038118/attachment.bin>


More information about the cfe-commits mailing list