https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62184

Manuel López-Ibáñez <manu at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2014-11-12
     Ever confirmed|0                           |1

--- Comment #4 from Manuel López-Ibáñez <manu at gcc dot gnu.org> ---
I'm going to confirm this. We definitely want this. The heuristic of Clang
seems quite elaborated: only warn when the ';' is on the same line and there is
a statement after it that starts at a higher column than the while.line.

void foo ()
{
#define EMPTY
  while (0)EMPTY;
    foo(); // warns if preprocessed
  while (0);
   foo(); // warns
  while (0);
  foo(); // does not warn
  while (0); // does not warn
}

$ clang test.c 
test.c:6:12: warning: while loop has empty body [-Wempty-body]
  while (0);
           ^
test.c:6:12: note: put the semicolon on a separate line to silence this warning

$ clang test.c -save-temps
In file included from test.c:1:
test.c:4:12: warning: while loop has empty body [-Wempty-body]
  while (0);
           ^
test.c:4:12: note: put the semicolon on a separate line to silence this warning
test.c:6:12: warning: while loop has empty body [-Wempty-body]
  while (0);
           ^
test.c:6:12: note: put the semicolon on a separate line to silence this warning

Reply via email to