------- Comment #9 from rguenth at gcc dot gnu dot org 2006-03-23 11:08 ------- Yay. Reduced testcase:
extern void abort (void); struct delay_block { struct delay_block *succ; }; static struct delay_block Timer_Queue; struct delay_block* time_enqueue (struct delay_block *d) { struct delay_block *q = Timer_Queue.succ; d->succ = (void *)0; return Timer_Queue.succ; } int main(void) { Timer_Queue.succ = &Timer_Queue; if (time_enqueue (&Timer_Queue) != (void*)0) abort (); return 0; } Pointed-to sets for pointers in time_enqueue d_3, is dereferenced, its value escapes, points-to anything SFT.0_1 q_2 D.1529_4, its value escapes <retval>_5 # VUSE <SFT.0_1>; q_2 = Timer_Queue.succ; # SMT.5_7 = V_MAY_DEF <SMT.5_6>; d_3->succ = 0B; # VUSE <SFT.0_1>; D.1529_4 = Timer_Queue.succ; -- rguenth at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|ACATS tests c974001 and |[4.1/4.2 Regression] ACATS |c974013 do not terminate |tests c974001 and c974013 do |with struct aliasing enabled|not terminate with struct | |aliasing enabled http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25737