[cfe-commits] [patch] Add -Wdangling-else-parentheses

Eli Friedman eli.friedman at gmail.com
Tue Dec 20 14:34:43 PST 2011


On Tue, Dec 20, 2011 at 1:36 PM, Nico Weber <thakis at chromium.org> wrote:
> Hi,
>
> the attached patch implements a warning for dangling elses, like
> described at http://drdobbs.com/blogs/cpp/231602010 and as requested
> in http://llvm.org/pr11609. The warning fires 0 times for chromium and
> webkit, and it seems to catch a superset of what gcc's -Wparentheses
> catches.
>
> Examples (see the test case for more):
>
> This warns:
> $ cat test.cc
> void f() {}
>
> int main() {
>  if (false)
>    if (false)
>      return 0;
>  else
>    return 1;
> }
> $ Release+Asserts/bin/clang -c test.cc
> test.cc:7:3: warning: add explicit braces to avoid dangling else
> [-Wdangling-else-parentheses]
>  else
>  ^
> 1 warning generated.
>
>
> These don't:
> $ cat test.cc
> void f() {}
>
> int main() {
>  if (false) {
>    if (false)
>      return 0;
>  } else
>    return 1;
> }
> $ Release+Asserts/bin/clang -c test.cc
> $ cat test.cc
> void f() {}
>
> int main() {
>  if (false)
>    if (false) {
>      return 0;
>    } else
>      return 1;
> }

Why exactly do we not want to warn for the following?

int main() {
  if (false)
    if (false) {
      return 0;
    }
  else
    return 1;
}

Why is the flag called "Wdangling-else-parentheses"?  What do
parentheses have to do with this warning?

Passing TrailingElseLoc all over statement parsing is a bit ugly,
although I see why you did it...

-Eli




More information about the cfe-commits mailing list