if the solution of x includes ANYTHING we fail to add the solution of y to all
variables. Testcase (fails on a-i branch):
int i;
void __attribute__((noinline))
foo(long b, long q)
{
int *y;
int **a = &y, **x;
int ***p;
if (b)
p = (int ***)q;
else
p = &a;
x = *p;
*x = &i;
*y = 0;
}
extern void abort (void);
int main()
{
i = 1;
foo (0, 0);
if (i != 0)
abort ();
return 0;
}
I guess we should warn for dereferenced pointers whos points-to set is empty
with "warning: dereferencing uninitialized pointer".
--
Summary: PTA constraint processing for *x = y is wrong
Product: gcc
Version: 4.4.0
Status: UNCONFIRMED
Keywords: wrong-code, alias
Severity: major
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: rguenth at gcc dot gnu dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39074