tree-optimization/108791 - checking ICE with sloppy ADDR_EXPR

The following fixes a checking ICE by choosing a more appropriate
type for an ADDR_EXPR built by forwprop.

	PR tree-optimization/108791
	* tree-ssa-forwprop.cc (optimize_vector_load): Build
	the ADDR_EXPR of a TARGET_MEM_REF using a more meaningful
	type.

	* gcc.dg/torture/pr108791.c: New testcase.
This commit is contained in:
Richard Biener 2023-02-15 14:00:21 +01:00
parent 384dedaf65
commit 441c466fd4
2 changed files with 11 additions and 1 deletions

View file

@ -0,0 +1,9 @@
/* { dg-do compile } */
int f (int *a(), int *b, int *c, int *d)
{
int s = 0;
for (int *i = (int *)a; i < b; ++i, ++c)
s += *c * d[*i];
return s;
}

View file

@ -3299,7 +3299,8 @@ optimize_vector_load (gimple_stmt_iterator *gsi)
{
if (TREE_CODE (TREE_OPERAND (load_rhs, 0)) == ADDR_EXPR)
mark_addressable (TREE_OPERAND (TREE_OPERAND (load_rhs, 0), 0));
tree tem = make_ssa_name (TREE_TYPE (TREE_OPERAND (load_rhs, 0)));
tree ptrtype = build_pointer_type (TREE_TYPE (load_rhs));
tree tem = make_ssa_name (ptrtype);
gimple *new_stmt
= gimple_build_assign (tem, build1 (ADDR_EXPR, TREE_TYPE (tem),
unshare_expr (load_rhs)));