diff options
author | Eric Botcazou <ebotcazou@adacore.com> | 2022-11-04 11:23:12 +0100 |
---|---|---|
committer | Eric Botcazou <ebotcazou@adacore.com> | 2022-11-04 15:14:50 +0100 |
commit | 0bdf10bdf1b2c9f31e7e764dec4d56ea6044f943 (patch) | |
tree | 25b2ac3b00d05621a82a46657a3dd214fe1d3a72 /libcpp/generated_cpp_wcwidth.h | |
parent | 3e2bdf2460a34a2389dee813a2ba8ecf976f2ec9 (diff) | |
download | gcc-0bdf10bdf1b2c9f31e7e764dec4d56ea6044f943.zip gcc-0bdf10bdf1b2c9f31e7e764dec4d56ea6044f943.tar.gz gcc-0bdf10bdf1b2c9f31e7e764dec4d56ea6044f943.tar.bz2 |
Fix recent thinko in operand_equal_p
There is a thinko in a recent improvement made to operand_equal_p where
the code just looks at operand 2 of COMPONENT_REF, if it is present, to
compare addresses. That's wrong because operand 2 contains the number of
DECL_OFFSET_ALIGN-bit-sized words so, when DECL_OFFSET_ALIGN > 8, not all
the bytes are included and some of them are in DECL_FIELD_BIT_OFFSET, see
get_inner_reference for the model computation.
In other words, you would need to compare operand 2 and DECL_OFFSET_ALIGN
and DECL_FIELD_BIT_OFFSET in this situation, but I'm not sure this is worth
the hassle in practice so the fix just removes this alternate handling.
gcc/
* fold-const.cc (operand_compare::operand_equal_p) <COMPONENT_REF>:
Do not take into account operand 2.
(operand_compare::hash_operand) <COMPONENT_REF>: Likewise.
gcc/testsuite/
* gnat.dg/opt99.adb: New test.
* gnat.dg/opt99_pkg1.ads, gnat.dg/opt99_pkg1.adb: New helper.
* gnat.dg/opt99_pkg2.ads: Likewise.
Diffstat (limited to 'libcpp/generated_cpp_wcwidth.h')
0 files changed, 0 insertions, 0 deletions