From: Jan Hubicka Date: Fri, 5 Nov 2021 22:17:50 +0000 (+0100) Subject: Avoid left shift of negative value in ipa-modref-tree.h X-Git-Tag: basepoints/gcc-13~3348 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9cc8ca8da90426f625481195a2127a5e86689bcd;p=thirdparty%2Fgcc.git 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 --- diff --git a/gcc/ipa-modref-tree.h b/gcc/ipa-modref-tree.h index 9976e489697e..bc428d193d24 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 ())