Break in loop expression-3

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
[-Wpedantic]
     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

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
[-Wpedantic]
     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.

That's simply wrong.

So, it seems to be an llvm bug.

This is essentially the same as http://llvm.org/bugs/show_bug.cgi?id=8880 .

-Eli