mirror of git://gcc.gnu.org/git/gcc.git
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
|
|
@ -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>
|
2016-07-19 Ilya Enkovich <ilya.enkovich@intel.com>
|
||||||
|
|
||||||
* tree-vect-loop-manip.c (vect_update_ivs_after_vectorizer): Update
|
* 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>
|
2016-07-18 Michael Meissner <meissner@linux.vnet.ibm.com>
|
||||||
|
|
||||||
PR target/71493
|
PR target/71493
|
||||||
|
|
|
||||||
|
|
@ -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);
|
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
|
/* Pretend to take the address of the base, we'll take care of
|
||||||
adding the required subset of sub-fields below. */
|
adding the required subset of sub-fields below. */
|
||||||
get_constraint_for_1 (t, results, true, lhs_p);
|
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)
|
else if (result.type == ADDRESSOF)
|
||||||
{
|
{
|
||||||
/* We can end up here for component references on a
|
/* We can end up here for component references on constants like
|
||||||
VIEW_CONVERT_EXPR <>(&foobar). */
|
VIEW_CONVERT_EXPR <>({ 0, 1, 2, 3 })[i]. */
|
||||||
result.type = SCALAR;
|
result.type = SCALAR;
|
||||||
result.var = anything_id;
|
result.var = anything_id;
|
||||||
result.offset = 0;
|
result.offset = 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue