aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMartin Liska <mliska@suse.cz>2018-02-19 19:29:52 +0100
committerMartin Liska <marxin@gcc.gnu.org>2018-02-19 18:29:52 +0000
commit6a5aca53278dd43bea2618126f282125c5ca3e02 (patch)
tree0faf090d04bbffe5e6dd904eeb72d6e34234cb3e /gcc
parenta197d3406c4c2c472b8f38fb5de2bdc4e3db9476 (diff)
downloadgcc-6a5aca53278dd43bea2618126f282125c5ca3e02.zip
gcc-6a5aca53278dd43bea2618126f282125c5ca3e02.tar.gz
gcc-6a5aca53278dd43bea2618126f282125c5ca3e02.tar.bz2
Fix ubsan in gimple-fold.c (PR tree-optimization/82491).
2018-02-19 Martin Liska <mliska@suse.cz> Richard Sandiford <richard.sandiford@linaro.org> PR tree-optimization/82491 * gimple-fold.c (get_base_constructor): Make earlier bail out to prevent ubsan. Co-Authored-By: Richard Sandiford <richard.sandiford@linaro.org> From-SVN: r257816
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/gimple-fold.c10
2 files changed, 10 insertions, 7 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6b59722..7a37db7 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2018-02-19 Martin Liska <mliska@suse.cz>
+ Richard Sandiford <richard.sandiford@linaro.org>
+
+ PR tree-optimization/82491
+ * gimple-fold.c (get_base_constructor): Make earlier bail out
+ to prevent ubsan.
+
2018-02-19 Carl Love <cel@us.ibm.com>
* config/rs6000/rs6000-builtin.def: Change NEG macro expansions from
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index e556f05..c9dad6f 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -6442,13 +6442,9 @@ get_base_constructor (tree base, poly_int64_pod *bit_offset,
if (TREE_CODE (base) == MEM_REF)
{
- if (!integer_zerop (TREE_OPERAND (base, 1)))
- {
- if (!tree_fits_shwi_p (TREE_OPERAND (base, 1)))
- return NULL_TREE;
- *bit_offset += (mem_ref_offset (base).force_shwi ()
- * BITS_PER_UNIT);
- }
+ poly_offset_int boff = *bit_offset + mem_ref_offset (base) * BITS_PER_UNIT;
+ if (!boff.to_shwi (bit_offset))
+ return NULL_TREE;
if (valueize
&& TREE_CODE (TREE_OPERAND (base, 0)) == SSA_NAME)