http://gcc.gnu.org/bugzilla/show_bug.cgi?id=45967
Richard Guenther <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Component|rtl-optimization |tree-optimization Known to fail| |4.5.2 --- Comment #8 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-01-17 11:44:11 UTC --- The patch is quite big and a backport is nothing for the faint-hearted. Do not hold your breath. The underlying problem is present since ever btw, and 4.4 can be tricked into miscompiling with the usual avoid-empty-points-to-sets trick (conditionally assign (not) to the pointer, thus add something else to the set): extern void abort (void); int b; void foo (void *p_, int *q) { int *p; int i; for (i = 0; i < sizeof(int *); ++i) ((char *)&p)[i] = ((char *)p_)[i]; if (b) p = q; *p = 1; } int main() { int i = 0, j; int *p = &i; foo (&p, &j); if (i != 1) abort (); return 0; } I'll add some more testcases.