[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