sammccall added a comment.

Thanks for reviewing! Going to land this now as the bug is surfaced by other 
pending changes.

In D81474#2087095 <https://reviews.llvm.org/D81474#2087095>, @kadircet wrote:

> Looking at this some more, it looks like whenever clang is building a TU 
> prefix(preamble), the assumption is that any delayed templates will be parsed 
> at the end of the TU. That is unfortunately not true, if the rest of the TU 
> is built with no-delayed-template-parsing. (as you've already said in the 
> description)
>
> This suggests that DelayedTemplateParsing shouldn't be a benign langopt. But 
> since it is, we should be setting late template parser at the end of TU if 
> there are any delayed templates coming from either the preamble or in the 
> rest of the TU.
>  The latter is already done by checking for langopt, we can check for the 
> former using `Actions.ExternalSemaSource`. But in the absence of delayed 
> templates, setting the parser is (currently) a no-op. So setting it all the 
> time should hopefully be OK.
>  Hence LGTM.


Yeah I think checking ExternalSemaSource is probably correct. Not checking it 
is simpler though :-)

> Another option would be to change preamble building logic to parse all the 
> late parsed templates at the end, instead of just serializing the tokens. 
> That sounds like a more intrusive change though, so I am more comfortable 
> with current one.

This has different semantics - the point of delayed template parsing is to wait 
for more symbols to be visible. If we parse at the end of the PCH, then symbols 
defined in the main file (but before instantiation) are not visible.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81474



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

Reply via email to