re PR middle-end/27409 (ICE in get_constraint_for_component_ref)

2006-05-07  Richard Guenther  <rguenther@suse.de>

	PR tree-optimization/27409
	* tree-ssa-structalias.c (get_constraint_for_component_ref):
	Do not try to find zero-sized subvars.

	* gcc.dg/torture/pr27409.c: New testcase.

From-SVN: r113607
This commit is contained in:
Richard Guenther 2006-05-07 21:03:55 +00:00 committed by Richard Biener
parent e716a54401
commit 18455d174e
4 changed files with 36 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2006-05-07 Richard Guenther <rguenther@suse.de>
PR tree-optimization/27409
* tree-ssa-structalias.c (get_constraint_for_component_ref):
Do not try to find zero-sized subvars.
2006-05-07 Richard Guenther <rguenther@suse.de>
PR tree-optimization/27136

View File

@ -1,3 +1,8 @@
2006-05-07 Richard Guenther <rguenther@suse.de>
PR tree-optimization/27409
* gcc.dg/torture/pr27409.c: New testcase.
2006-05-07 Tobias Schlüter <tobias.schlueter@physik.uni-muenchen.de>
PR fortran/27457

View File

@ -0,0 +1,17 @@
/* { dg-do compile } */
typedef struct {
struct { } z;
} thang_t;
struct {
short e;
thang_t f;
int g;
} my_struct;
void function(int blaz)
{
thang_t *fp = &my_struct.f;
foo(fp);
}

View File

@ -2378,7 +2378,8 @@ get_constraint_for_component_ref (tree t, VEC(ce_s, heap) **results)
ignore this constraint. When we handle pointer subtraction,
we may have to do something cute here. */
if (result->offset < get_varinfo (result->var)->fullsize)
if (result->offset < get_varinfo (result->var)->fullsize
&& bitmaxsize != 0)
{
/* It's also not true that the constraint will actually start at the
right offset, it may start in some padding. We only care about
@ -2400,6 +2401,12 @@ get_constraint_for_component_ref (tree t, VEC(ce_s, heap) **results)
embedded in a struct resulting in accessing *only* padding. */
gcc_assert (curr || ref_contains_array_ref (orig_t));
}
else if (bitmaxsize == 0)
{
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "Access to zero-sized part of variable,"
"ignoring\n");
}
else
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "Access to past the end of variable, ignoring\n");