llunak added a comment.

In D73846#1991330 <https://reviews.llvm.org/D73846#1991330>, @rsmith wrote:

> Looks OK as a workaround. Do you know why we consider these to be in the main 
> file? If we could fix that in the source manager, that'd seem preferable.


According to my testing, SourceManager::isInMainFile() can handle "<built-in>" 
locations in 3 ways:

- for macros defined using -D on the command line the control flow returns 
false in the "if (FI.hasLineDirectives())" block
- for built-in macros such as __clang__ the control flow enters the same "if 
(FI.hasLineDirectives())" block, but Entry->IncludeOffset is 0, so the flow 
then reaches the final "return FI.getIncludeLoc().isInvalid();", which returns 
true
- if PCH is used, macros defined using -D on the command line do not even enter 
"if (FI.hasLineDirectives())" and so they end up returning true the same way 
built-in macros do

But I don't understand this enough to know why and what that actually means.

I've also tried a patch that added SourceManager::setPredefinesFileID() and 
moved the check from this patch to SourceManager::isInMainFile(), but then 
tests fail because apparently Preprocessor::setPredefinesFileID() may be called 
multiple times.


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

https://reviews.llvm.org/D73846



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D73846: [PCH] make ... Luboš Luňák via Phabricator via cfe-commits

Reply via email to