5 Commits

Author SHA1 Message Date
Leonard Chan
f45f1c3585 Reland "[clang] Add experimental option to omit the RTTI component from the vtable when -fno-rtti is used"
This reverts commit 070493ddbd9473499d6f00ca62bc6aa92808ed79 (and
relands the original change). This removes a test run that makes an
assumption of RTTI being on by default for a given target.
2023-09-14 18:28:37 +00:00
Douglas Yung
070493ddbd Revert "Revert "Revert "[clang] Add experimental option to omit the RTTI component from the vtable when -fno-rtti is used"""
This reverts commit e16474ba2cba8fa69b413a83852d06c93155f8c9.

This change is still causing a test failure on a bot: https://lab.llvm.org/buildbot/#/builders/139/builds/49666
2023-09-13 21:07:56 -07:00
Leonard Chan
e16474ba2c Revert "Revert "[clang] Add experimental option to omit the RTTI component from the vtable when -fno-rtti is used""
This attempts to reland 6385c1df919f237d4149fabf542a158f61010bf8 but
with a fix for the test failure.
2023-09-14 00:00:50 +00:00
Leonard Chan
87e11ecbae Revert "[clang] Add experimental option to omit the RTTI component from the vtable when -fno-rtti is used"
This reverts commit 6385c1df919f237d4149fabf542a158f61010bf8.

Reverting since this broke a windows builder:
https://lab.llvm.org/buildbot/#/builders/216/builds/27252.
2023-09-13 23:55:05 +00:00
Leonard Chan
6385c1df91 [clang] Add experimental option to omit the RTTI component from the vtable when -fno-rtti is used
For programs that don't use RTTI, the rtti component is just replaced with a
zero. This way, vtables that don't use RTTI can still cooperate with vtables
that use RTTI since offset calculations on the ABI level would still work.
However, if throughout your whole program you don't use RTTI at all (such as
the embedded case), then this is just an unused pointer-sized component that's
wasting space. This adds an experimental option for removing the RTTI component
from the vtable.

Some notes:
- This is only allowed when RTTI is disabled, so we don't have to worry about
  things like `typeid` or `dynamic_cast`.
- This is a "use at your own risk" since, similar to relative vtables, everything
  must be compiled with this since it's an ABI breakage. That is, a program compiled
  with this is not guaranteed to work with a program compiled without this, even
  if RTTI is disabled for both programs.

Note that this is a completely different ABI flavor orthogonal to the
relative-vtables ABI. That is, they can be enabled/disabled independently.

Differential Revision: https://reviews.llvm.org/D152405
2023-09-13 23:15:50 +00:00