diff options
author | Richard Smith <richard@metafoo.co.uk> | 2023-07-21 17:37:55 -0700 |
---|---|---|
committer | Richard Smith <richard@metafoo.co.uk> | 2023-07-21 19:07:59 -0700 |
commit | 9d525bf94b255df89587db955b5fa2d3c03c2c3e (patch) | |
tree | ea9df28908ba14a54facb966e9d077b7dadcdf9c /clang/lib/CodeGen/CodeGenAction.cpp | |
parent | 57bd882343f8e4cca598b6ad47da93476cffb987 (diff) | |
download | llvm-9d525bf94b255df89587db955b5fa2d3c03c2c3e.zip llvm-9d525bf94b255df89587db955b5fa2d3c03c2c3e.tar.gz llvm-9d525bf94b255df89587db955b5fa2d3c03c2c3e.tar.bz2 |
Optimize emission of `dynamic_cast` to final classes.
- When the destination is a final class type that does not derive from
the source type, the cast always fails and is now emitted as a null
pointer or call to __cxa_bad_cast.
- When the destination is a final class type that does derive from the
source type, emit a direct comparison against the corresponding base
class vptr value(s). There may be more than one such value in the case
of multiple inheritance; check them all.
For now, this is supported only for the Itanium ABI. I expect the same thing is
possible for the MS ABI too, but I don't know what guarantees are made about
vfptr uniqueness.
Reviewed By: rjmccall
Differential Revision: https://reviews.llvm.org/D154658
Diffstat (limited to 'clang/lib/CodeGen/CodeGenAction.cpp')
0 files changed, 0 insertions, 0 deletions