[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