[LLVMdev] Break in loop expression-3

Alex Markin alexanius at gmail.com
Fri Jul 12 12:08:06 PDT 2013

Hello everyone.

I've noticed the difference in gcc and llvm behaviour with the following code:

$ cat test.c
#include <stdio.h>
int main()
    for(int i = 0;; ({break;}))
                printf("Hello, world\n");

$ clang test.c -pedantic && ./a.out
test.c:5:22: warning: use of GNU statement expression extension [-Wgnu]
    for(int i = 0;; ({break;}))
1 warning generated.
Hello, world

$ gcc test.c -std=gnu11 -pedantic && ./a.out
test.c: In function 'main':
test.c:5:23: error: break statement not within loop or switch
     for(int i = 0;; ({break;}))
test.c:5:21: warning: ISO C forbids braced-groups within expressions
     for(int i = 0;; ({break;}))

I asked gcc developers about that fact, they answered that gcc is
correct here, because statement expressions don't inherit the
surrounding context. So, it seems to be an llvm bug.

Kind regards,
Markin Alex

More information about the llvm-dev mailing list