http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49330
--- Comment #10 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-06-10 11:13:53 UTC --- (In reply to comment #9) > > Creating that pointer is perfectly valid - you are allowed to cast a > > pointer to an uintptr_t and back, which is what the code does (in some > > obfuscated way of course). > > No disagreement, "problematic" only in the sense that it breaks the assumption > of the aliasing machinery, as you're creating a pointer out of nothing. Indeed. I fixed similar bugs in tree points-to analysis, like int x, y; int foo (int *p) { int *q = &x; int *p = &y; int i; for (i=0; i<sizeof(int *); ++i) ((char *)&q)[i] = ((char *)&p)[i]; *p = 1; *q = 2; return *p; } which I suspect might work on RTL only by accident (at -O3 with the loop unrolled).