------- Comment #10 from rguenth at gcc dot gnu dot org 2009-04-03 12:19 ------- *a = 1; <--- a cannot point to b here. if (b == 2)
b != 2 you mean. This works for me with 4.0.4 even. Likely optimized on RTL level? Adjusted testcase: extern void link_error (void); extern void abort (void); int *t; int __attribute__((noinline)) g(int *a) { t = a; *a = 2; } void __attribute__((noinline)) f(int *a) { int b; b = 1; g(&b); b = 2; *a = 1; if (b != 2) link_error(); } int main(void) { int t; f(&t); if (t != 1) abort (); return 0; } On trunk we now have f (int * a) { int b; <bb 2>: b = 1; g (&b); *a = 1; return; } -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Known to fail| |4.4.0 Resolution| |FIXED Target Milestone|--- |4.5.0 http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23086