diff options
author | Jan Hubicka <hubicka@ucw.cz> | 2021-11-05 23:17:50 +0100 |
---|---|---|
committer | Jan Hubicka <hubicka@ucw.cz> | 2021-11-05 23:17:50 +0100 |
commit | 9cc8ca8da90426f625481195a2127a5e86689bcd (patch) | |
tree | 38ab35fe16c71352e290e9e32e0a47037f959fba /gcc | |
parent | 432ed97b992ccfe93616d5af1fa5c1a7d7aff9ff (diff) | |
download | gcc-9cc8ca8da90426f625481195a2127a5e86689bcd.zip gcc-9cc8ca8da90426f625481195a2127a5e86689bcd.tar.gz gcc-9cc8ca8da90426f625481195a2127a5e86689bcd.tar.bz2 |
Avoid left shift of negative value in ipa-modref-tree.h
gcc/ChangeLog:
PR ipa/103082
* ipa-modref-tree.h (struct modref_access_node): Avoid left shift
of negative value
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ipa-modref-tree.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/ipa-modref-tree.h b/gcc/ipa-modref-tree.h index 9976e48..bc428d1 100644 --- a/gcc/ipa-modref-tree.h +++ b/gcc/ipa-modref-tree.h @@ -116,8 +116,13 @@ struct GTY(()) modref_access_node if (!known_le (parm_offset, a.parm_offset) && !range_info_useful_p ()) return false; + /* We allow negative aoffset_adj here in case + there is an useful range. This is because adding + a.offset may result in non-ngative offset again. + Ubsan fails on val << LOG_BITS_PER_UNIT where val + is negative. */ aoffset_adj = (a.parm_offset - parm_offset) - << LOG2_BITS_PER_UNIT; + * BITS_PER_UNIT; } } if (range_info_useful_p ()) |