[cfe-dev] question about clang warning

Caroline Tice via cfe-dev cfe-dev at lists.llvm.org
Mon Apr 10 16:20:19 PDT 2017


I'm forwarding this question about clang warnings for a friend:

When I compile the test file below (taken from a larger real program) clang
raises the following warning unless gcc-compat is disabled:

clang_gcc_compat.c:17:13: warning: 'break' is bound to current loop, GCC
binds
      it to the enclosing loop [-Wgcc-compat]
    } while(__m(1));
            ^
clang_gcc_compat.c:8:3: note: expanded from macro '__m'
                break;                          \
                ^
1 warning generated.
/usr/x86_64-cros-linux-gnu/usr/lib/../lib64/Scrt1.o:function _start: error:
undefined reference to 'main'
clang-4.0: error: linker command failed with exit code 1 (use -v to see
invocation)


In my understanding the break statement is clearly part of the switch
construct and in this context there is a single loop, it is not clear why
clang is referring to an enclosing loop.  Could someone verify that this is
correct and explain why?


Thanks!



The source code for clang_gcc_compat.c is below:

/* x86_64-cros-linux-gnu-clang tmp/clang_gcc_compat.c */

#define __m(x) \
({ \
switch (x) { \
case 1: \
{ \
break; \
} \
} \
42; \
})

void f() {
  for (;;) {
    do {
    } while(__m(1));
  }
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170410/2dcf4385/attachment.html>


More information about the cfe-dev mailing list