torarnv added a comment.

Just for understanding what's going on here, I'm going to ask some stupid 
questions 😄

So, this will make `-frewrite-includes` do more work, to ensure that it not 
only covers the "top level" `#include` or `__has_include` case, but also 
`__has_include` in one or more levels of macros?

Does that effectively means it needs to do full preprocessing? Eg. to determine 
cases like this:

  #ifdef FOO
  #define BAR(x) __has_include(x)
  #else
  #define BAR(x) 0
  #endif

Or do we draw the line there and only support `__has_include` in macros if 
those are not conditional themselves? Does it depend on whether `-E` is passed 
with `-frewrite-includes`?

Will this mean that cases like icecream and distcc that use 
`-frewrite-includes` will have fully preprocessed sources to send to the remote 
hosts (with correct line/column number when compilation fails), or should they 
still pass `-D` options during the remote compilation? I'm referring to this 
quote from the distcc manual:

> run_second_cpp
> 
> If false, ccache will first run preprocessor to preprocess the source code 
> and then on a cache miss run the compiler on the preprocessed source code 
> instead of the original source code. This makes cache misses slightly faster 
> since the source code only has to be preprocessed once. The downside is that 
> some compilers won’t produce the same result (for instance diagnostics 
> warnings) when compiling preprocessed source code.
> 
> A solution to the above mentioned downside is to set run_second_cpp to false 
> and pass -fdirectives-only (for GCC) or -frewrite-includes (for Clang) to the 
> compiler. This will cause the compiler to leave the macros and other 
> preprocessor information, and only process the #include directives. When run 
> in this way, the preprocessor arguments will be passed to the compiler since 
> it still has to do some preprocessing (like macros).

How does `ICECC_REMOTE_CPP` work in this case?


Repository:
  rC Clang

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D63508/new/

https://reviews.llvm.org/D63508



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to