re PR tree-optimization/71908 (ICE at -Os and above in both 32-bit and 64-bit modes on x86_64-linux-gnu (get_constraint_for_component_ref))
2016-07-18 Richard Biener <rguenther@suse.de> PR tree-optimization/71908 * tree-ssa-structalias.c (get_constraint_for_component_ref): Handle symbolic constants in a more reliable way. * gcc.dg/torture/pr71908.c: New testcase. From-SVN: r238467
This commit is contained in:
parent
d9157f1514
commit
9a4cb9733d
4 changed files with 53 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
2016-07-18 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/71908
|
||||
* tree-ssa-structalias.c (get_constraint_for_component_ref): Handle
|
||||
symbolic constants in a more reliable way.
|
||||
|
||||
2016-07-19 Ilya Enkovich <ilya.enkovich@intel.com>
|
||||
|
||||
* tree-vect-loop-manip.c (vect_update_ivs_after_vectorizer): Update
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2016-07-18 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/71908
|
||||
* gcc.dg/torture/pr71908.c: New testcase.
|
||||
|
||||
2016-07-18 Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||
|
||||
PR target/71493
|
||||
|
|
26
gcc/testsuite/gcc.dg/torture/pr71908.c
Normal file
26
gcc/testsuite/gcc.dg/torture/pr71908.c
Normal file
|
@ -0,0 +1,26 @@
|
|||
/* { dg-do compile } */
|
||||
|
||||
struct S3
|
||||
{
|
||||
int f3;
|
||||
int f5;
|
||||
char f6;
|
||||
int f7;
|
||||
} b;
|
||||
int a;
|
||||
static struct S3 *c = &b;
|
||||
int *d;
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
for (;;) {
|
||||
a = 0;
|
||||
int **e = &d;
|
||||
i = 0;
|
||||
for (; i < 2; i++)
|
||||
d = &(*c).f5;
|
||||
*e = d;
|
||||
**e = 3;
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -3211,6 +3211,20 @@ get_constraint_for_component_ref (tree t, vec<ce_s> *results,
|
|||
|
||||
t = get_ref_base_and_extent (t, &bitpos, &bitsize, &bitmaxsize, &reverse);
|
||||
|
||||
/* We can end up here for component references on a
|
||||
VIEW_CONVERT_EXPR <>(&foobar) or things like a
|
||||
BIT_FIELD_REF <&MEM[(void *)&b + 4B], ...>. So for
|
||||
symbolic constants simply give up. */
|
||||
if (TREE_CODE (t) == ADDR_EXPR)
|
||||
{
|
||||
constraint_expr result;
|
||||
result.type = SCALAR;
|
||||
result.var = anything_id;
|
||||
result.offset = 0;
|
||||
results->safe_push (result);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Pretend to take the address of the base, we'll take care of
|
||||
adding the required subset of sub-fields below. */
|
||||
get_constraint_for_1 (t, results, true, lhs_p);
|
||||
|
@ -3300,8 +3314,8 @@ get_constraint_for_component_ref (tree t, vec<ce_s> *results,
|
|||
}
|
||||
else if (result.type == ADDRESSOF)
|
||||
{
|
||||
/* We can end up here for component references on a
|
||||
VIEW_CONVERT_EXPR <>(&foobar). */
|
||||
/* We can end up here for component references on constants like
|
||||
VIEW_CONVERT_EXPR <>({ 0, 1, 2, 3 })[i]. */
|
||||
result.type = SCALAR;
|
||||
result.var = anything_id;
|
||||
result.offset = 0;
|
||||
|
|
Loading…
Add table
Reference in a new issue