<div dir="ltr"><div><br></div><div>I'm forwarding this question about clang warnings for a friend:</div><div><br></div><div>When I compile the test file below (taken from a larger real program) clang raises the following warning unless gcc-compat is disabled:</div><div><br></div><div><div>clang_gcc_compat.c:17:13: warning: 'break' is bound to current loop, GCC binds</div><div>      it to the enclosing loop [-Wgcc-compat]</div><div>    } while(__m(1));</div><div>            ^</div><div>clang_gcc_compat.c:8:3: note: expanded from macro '__m'</div><div>                break;                          \</div><div>                ^</div><div>1 warning generated.</div><div>/usr/x86_64-cros-linux-gnu/usr/lib/../lib64/Scrt1.o:function _start: error: undefined reference to 'main'</div><div>clang-4.0: error: linker command failed with exit code 1 (use -v to see invocation)</div></div><div><br></div><div><br></div><div>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?<br></div><div><br></div><div><br></div><div>Thanks!</div><div><br></div><div><br></div><div><br></div><div>The source code for clang_gcc_compat.c is below:</div><div><br></div><div><div><font face="monospace, monospace">/* x86_64-cros-linux-gnu-clang tmp/clang_gcc_compat.c */</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">#define __m(x) \</font></div><div><font face="monospace, monospace">({<span class="gmail-Apple-tab-span" style="white-space:pre">                                              </span>\</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>switch (x) {<span class="gmail-Apple-tab-span" style="white-space:pre">                          </span>\</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>case 1:<span class="gmail-Apple-tab-span" style="white-space:pre">                                       </span>\</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>{<span class="gmail-Apple-tab-span" style="white-space:pre">                                     </span>\</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">               </span>break;<span class="gmail-Apple-tab-span" style="white-space:pre">                                </span>\</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>}<span class="gmail-Apple-tab-span" style="white-space:pre">                                     </span>\</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>}<span class="gmail-Apple-tab-span" style="white-space:pre">                                     </span>\</font></div><div><font face="monospace, monospace"><span class="gmail-Apple-tab-span" style="white-space:pre">       </span>42;<span class="gmail-Apple-tab-span" style="white-space:pre">                                   </span>\</font></div><div><font face="monospace, monospace">})</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">void f() {</font></div><div><font face="monospace, monospace">  for (;;) {</font></div><div><font face="monospace, monospace">    do {</font></div><div><font face="monospace, monospace">    } while(__m(1));</font></div><div><font face="monospace, monospace">  }</font></div><div><font face="monospace, monospace">}</font></div></div><div><br></div></div>