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

Matt Beaumont-Gay matthewbg at google.com
Tue Dec 20 14:38:16 PST 2011


On Tue, Dec 20, 2011 at 14:34, Eli Friedman <eli.friedman at gmail.com> wrote:
> 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?

In GCC, this warning falls into -Wparentheses.

I'm not super thrilled about the dangling-else-parentheses name
either; I'll try to come up with a constructive suggestion.

-Matt




More information about the cfe-commits mailing list