[PATCH] D155659: [WPD][LLD] Add option to validate RTTI is enabled on all native types and prevent devirtualization on types with native RTTI
Teresa Johnson via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 8 07:51:33 PDT 2023
tejohnson added a comment.
In D155659#4641354 <https://reviews.llvm.org/D155659#4641354>, @modimo wrote:
> Good catch with the example! Looks like this is an interaction with the `class A` not having a key function (https://lld.llvm.org/missingkeyfunction.html) so b.cc doesn't generate a vtable symbol for `class A` and RTTI only emits a reference to `_ZTI1A`. The Itanium C++ ABI mandates type name as a field for every type info (https://itanium-cxx-abi.github.io/cxx-abi/abi.html#rtti) but because we only get a reference `_ZTS1A` doesn't come along for the ride. The vtable for `class A` being defined only inside the LTO Unit then means there's no native reference to key off of.
>
> I think this means native symbol lookup should be keyed off the type info symbol corresponding to the type name we have in metadata. The layout of RTTI guarantees we'll have the base type info symbol(s) but as seen here not necessarily the type name symbol. WDYT?
This seems ok to me - there is already code in the lld part of this patch that maps _ZTV to _ZTI, so mapping _ZTS to _ZTI is not significantly different. Can you also add this as a test case (suggest including the original c++ code in a comment).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D155659/new/
https://reviews.llvm.org/D155659
More information about the llvm-commits
mailing list