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