[Bug c/96468] Warn when an empty while loop could have been a do-while
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Aug 6 00:07:47 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96468
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Component|tree-optimization |c
--- Comment #6 from Martin Sebor <msebor at gcc dot gnu.org> ---
Oh. So you're just looking for a simple lexical check to see if a while
statement is preceded by a block { } and a warning if it is and (presumably)
isn't the result of macro expansion. E.g., issue a warning here:
void f (void)
{
{ debug ("in f ()"); }
while (!signaled); // warn
}
but not here (:
void f (void)
{
DEBUG // expands to { debug (...); }
while (!signaled); // don't warn
}
That should be simpler and doable in the front end (so back to C for component)
but also seems considerably less useful to me as well as more prone to noise.
Front end isn't really my area so I don't expect to work on this but a couple
of questions occur to me: should blank lines between the closing curly or the
while have any effect on the warnig? If yes as I would expect it starts to
feel like it's in the same area as -Wmisleading-indentation. What about other
iteration statements -- should those be considered as well?
while (condition); // warning? (spurious semicolon)
{ }
for (...; condition; ...); // ditto
{ }
More information about the Gcc-bugs
mailing list