https://github.com/efriedma-quic approved this pull request.

LGTM... but please consider submitting a patch to expand the explanation in 
ItaniumCXXABI::canSpeculativelyEmitVTableAsBaseClass.

If I'm following correctly, the function in question is, in fact, odr-used in 
the translation unit in question: constructing an object is an odr-use all 
virtual members.  So we could emit it if we wanted to.  But we currently don't 
because we emit inline functions lazily, and the lazy emission doesn't account 
for vtables.  If we don't emit it, we can't reliably refer to it.

This applies equally to a function where the initial declaration is inline, and 
a function where the initial declaration is not inline, but a later definition 
is; this fix makes sure we treat both situations equivalently.

It might be worth trying to sort out this situation at some point; the 
inability to emit these functions seems like this makes devirtualization 
significantly weaker.

https://github.com/llvm/llvm-project/pull/100785
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to