As reported by Dimitar, this should have been a multiplication, but wasn't
caught because in the test (~(__SIZE_TYPE__) 0) / 2 is the largest accepted
size and so adding 3 to it also resulted in "overflow".
The following patch adds one subtest to really verify it is a multiplication
and fixes the operation.
2025-01-20 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/118224
* tree-ssa-dce.cc (is_removable_allocation_p): Multiply a1 by a2
instead of adding it.
* gcc.dg/pr118224.c: New test.
#endif
if (__builtin_calloc ((~(__SIZE_TYPE__) 0) / 2, 3))
__builtin_abort ();
+ if (__builtin_calloc ((~(__SIZE_TYPE__) 0) / 16, 64))
+ __builtin_abort ();
foo (1);
}
return false;
if (TREE_CODE (a1) == INTEGER_CST
&& TREE_CODE (a2) == INTEGER_CST
- && (wi::to_widest (a1) + wi::to_widest (a2)
+ && (wi::to_widest (a1) * wi::to_widest (a2)
> tree_to_uhwi (TYPE_MAX_VALUE (ptrdiff_type_node))))
return false;
return true;