http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54031
--- Comment #5 from Markus Trippelsdorf <markus at trippelsdorf dot de> 2012-07-19 18:01:16 UTC --- Function clocksource_enqueue is compiled to an endless loop: static void clocksource_enqueue(struct clocksource *cs) { struct list_head *entry = &clocksource_list; struct clocksource *tmp; for (tmp = ({ const typeof( ((typeof(*tmp) *)0)->list ) *__mptr = ((&clocksource_list)->next); (typeof(*tmp) *)( (char *)__mptr - __builtin_offsetof(typeof(*tmp),list) );}); &tmp->list != (&clocksource_list); tmp = ({ const typeof( ((typeof(*tmp) *)0)->list ) *__mptr = (tmp->list.next); (typeof(*tmp) *)( (char *)__mptr - __builtin_offsetof(typeof(*tmp),list) );})) if (tmp->rating >= cs->rating) entry = &tmp->list; list_add(&cs->list, entry); } >From clocksource.s: .type clocksource_enqueue.isra.3, @function clocksource_enqueue.isra.3: .p2align 5,,24 .p2align 3 .L35: jmp .L35 .size clocksource_enqueue.isra.3, .-clocksource_enqueue.isra.3 .section .rodata.str1.8,"aMS",@progbits,1 .align 8