tejohnson added a comment.

In https://reviews.llvm.org/D53524#1271387, @tejohnson wrote:

> In https://reviews.llvm.org/D53524#1271357, @pcc wrote:
>
> > The reason why LTO unit is always enabled is so that you can link 
> > translation units compiled with `-fsanitize=cfi` and/or 
> > `-fwhole-program-vtables` against translation units compiled without 
> > CFI/WPD. With this change we will see miscompiles in the translation units 
> > compiled with CFI/WPD if they use vtables in the translation units compiled 
> > without CFI/WPD. If we really need this option I think it should be an opt 
> > out.
>
>
> Is there an important use case for support thing mixing and matching? The 
> issue is that it comes at a cost to all ThinLTO compiles for codes with 
> vtables by requiring them all to process IR during the thin link.


Ping on the question of why this mode needs to be default. If it was a matter 
of a few percent overhead that would be one thing, but we're talking a *huge* 
overhead (as noted off-patch for my app I'm seeing >20x thin link time 
currently, and with improvements to the hashing to always get successful 
splitting we could potentially get down to closer to 2x - still a big 
overhead). This kind of overhead should be opt-in. The average ThinLTO user is 
not going to realize they are paying a big overhead because CFI is always 
pre-enabled.

> Can we detect that TUs compiled with -flto-unit are being mixed with those 
> not built without -flto-unit at the thin link time and issue an error?

This would be doable pretty easily. E.g. add a flag at the index level that the 
module would have been split but wasn't. Users who get the error and want to 
support always-enabled CFI could opt in via -flto-unit.


Repository:
  rC Clang

https://reviews.llvm.org/D53524



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

Reply via email to