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:
parent
e716a54401
commit
18455d174e
@ -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
|
||||
|
@ -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
|
||||
|
17
gcc/testsuite/gcc.dg/torture/pr27409.c
Normal file
17
gcc/testsuite/gcc.dg/torture/pr27409.c
Normal 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);
|
||||
}
|
@ -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");
|
||||
|
Loading…
Reference in New Issue
Block a user