re PR tree-optimization/90213 (UBSAN: signed integer overflow: -5621332293356458048 * 8 cannot be represented in type 'long int')

2019-04-24  Richard Biener  <rguenther@suse.de>

	PR middle-end/90213
	* gimple-fold.c (fold_const_aggregate_ref_1): Do multiplication
	by size and BITS_PER_UNIT on poly-wide-ints.

From-SVN: r270570
This commit is contained in:
Richard Biener 2019-04-25 11:17:49 +00:00 committed by Richard Biener
parent f469220df6
commit a9e6359a90
2 changed files with 8 additions and 6 deletions

View file

@ -1,3 +1,9 @@
2019-04-24 Richard Biener <rguenther@suse.de>
PR middle-end/90213
* gimple-fold.c (fold_const_aggregate_ref_1): Do multiplication
by size and BITS_PER_UNIT on poly-wide-ints.
2019-04-25 Richard Biener <rguenther@suse.de>
PR middle-end/90194

View file

@ -6983,14 +6983,10 @@ fold_const_aggregate_ref_1 (tree t, tree (*valueize) (tree))
= wi::sext (wi::to_poly_offset (idx)
- wi::to_poly_offset (low_bound),
TYPE_PRECISION (TREE_TYPE (idx)));
woffset *= tree_to_uhwi (unit_size);
woffset *= BITS_PER_UNIT;
if (woffset.to_shwi (&offset))
{
/* TODO: This code seems wrong, multiply then check
to see if it fits. */
offset *= tree_to_uhwi (unit_size);
offset *= BITS_PER_UNIT;
base = TREE_OPERAND (t, 0);
ctor = get_base_constructor (base, &offset, valueize);
/* Empty constructor. Always fold to 0. */