middle-end/98773 - always sign extend CHREC_RIGHT
The previous change exposed a miscompile when trying to interpret CHREC_RIGHT correctly which in fact it already was to the extent it is used. The following reverts this part of the change, only retaining the singling out of HOST_WIDE_INT_MIN. 2021-01-22 Richard Biener <rguenther@suse.de> PR middle-end/98773 * tree-data-ref.c (initalize_matrix_A): Revert previous change, retaining failing on HOST_WIDE_INT_MIN CHREC_RIGHT. * gcc.dg/torture/pr98773.c: New testcase.
This commit is contained in:
parent
36fe1cdc95
commit
8bad25eb56
|
@ -0,0 +1,19 @@
|
|||
/* { dg-do run } */
|
||||
|
||||
char a[128];
|
||||
|
||||
void __attribute__((noipa))
|
||||
foo ()
|
||||
{
|
||||
for (unsigned i = 27; i >= 5; --i)
|
||||
a[i] = a[i-5];
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
__builtin_memcpy (a, "Hello World", sizeof ("Hello World"));
|
||||
foo ();
|
||||
if (__builtin_memcmp (a + 5, "Hello World", sizeof ("Hello World")) != 0)
|
||||
__builtin_abort ();
|
||||
return 0;
|
||||
}
|
|
@ -3924,21 +3924,10 @@ initialize_matrix_A (lambda_matrix A, tree chrec, unsigned index, int mult)
|
|||
switch (TREE_CODE (chrec))
|
||||
{
|
||||
case POLYNOMIAL_CHREC:
|
||||
/* CHREC_RIGHT and its negated value should fit in a lambda_int.
|
||||
Pointer typed chrecs right are to be interpreted signed. */
|
||||
HOST_WIDE_INT chrec_right;
|
||||
if (POINTER_TYPE_P (chrec_type (chrec)))
|
||||
{
|
||||
if (!cst_and_fits_in_hwi (CHREC_RIGHT (chrec)))
|
||||
return chrec_dont_know;
|
||||
chrec_right = int_cst_value (CHREC_RIGHT (chrec));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!tree_fits_shwi_p (CHREC_RIGHT (chrec)))
|
||||
return chrec_dont_know;
|
||||
chrec_right = tree_to_shwi (CHREC_RIGHT (chrec));
|
||||
}
|
||||
if (!cst_and_fits_in_hwi (CHREC_RIGHT (chrec)))
|
||||
return chrec_dont_know;
|
||||
chrec_right = int_cst_value (CHREC_RIGHT (chrec));
|
||||
/* We want to be able to negate without overflow. */
|
||||
if (chrec_right == HOST_WIDE_INT_MIN)
|
||||
return chrec_dont_know;
|
||||
|
|
Loading…
Reference in New Issue