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

Reply via email to