Commit 0ba0772b by Richard Biener

re PR tree-optimization/44946 (ICE: in get_constraint_for_component_ref, at…

re PR tree-optimization/44946 (ICE: in get_constraint_for_component_ref, at tree-ssa-structalias.c:3184)

2010-07-15  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/44946
	* tree-ssa-structalias.c (get_constraint_for_component_ref): Deal
	with accessing only padding properly.

	* gcc.c-torture/compile/pr44946.c: New testcase.

From-SVN: r162216
parent 02ee7bea
2010-07-15 Richard Guenther <rguenther@suse.de>
PR tree-optimization/44946
* tree-ssa-structalias.c (get_constraint_for_component_ref): Deal
with accessing only padding properly.
2010-07-15 Jan Hubicka <jh@suse.cz>
* ipa.c (function_and_variable_visibility): Variables marked as used should
not be localized.
* ipa.c (function_and_variable_visibility): Variables marked as used
should not be localized.
2010-07-15 Jan Hubicka <jh@suse.cz>
......
2010-07-15 Richard Guenther <rguenther@suse.de>
PR tree-optimization/44946
* gcc.c-torture/compile/pr44946.c: New testcase.
2010-07-15 Jakub Jelinek <jakub@redhat.com>
PR fortran/40206
......
struct A
{
int i;
long l;
};
struct B
{
int i;
};
struct C
{
int i;
struct B b;
};
struct B foo (struct A a)
{
struct C *c = (struct C *) &a;
return c->b;
}
void bar (struct A a, struct B b)
{
struct C *c = (struct C *) &a;
c->b = b;
}
......@@ -3177,13 +3177,19 @@ get_constraint_for_component_ref (tree t, VEC(ce_s, heap) **results,
cexpr.var = curr->id;
VEC_safe_push (ce_s, heap, *results, &cexpr);
}
else
else if (VEC_length (ce_s, *results) == 0)
/* Assert that we found *some* field there. The user couldn't be
accessing *only* padding. */
/* Still the user could access one past the end of an array
embedded in a struct resulting in accessing *only* padding. */
gcc_assert (VEC_length (ce_s, *results) >= 1
|| ref_contains_array_ref (orig_t));
/* Or accessing only padding via type-punning to a type
that has a filed just in padding space. */
{
cexpr.type = SCALAR;
cexpr.var = anything_id;
cexpr.offset = 0;
VEC_safe_push (ce_s, heap, *results, &cexpr);
}
}
else if (bitmaxsize == 0)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment