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

Nico Weber thakis at chromium.org
Tue Dec 20 15:58:43 PST 2011


New version!

This warns on the example Eli gave (like gcc does), and uses
-Wdangling-else as suggested by nbjoerg on IRC (part of -Wall)

espindola tells me that this warning fires 0 times with a Firefox
build. It now has 1 false positive in chrome on code that looks like

  if (...)
    for (...)
      if (...) {
      } else {
      }

but I can live with that.

Nico

On Tue, Dec 20, 2011 at 3:28 PM, Ted Kremenek <kremenek at apple.com> wrote:
> Indeed!
>
> On Dec 20, 2011, at 2:45 PM, Matt Beaumont-Gay wrote:
>
>> On Tue, Dec 20, 2011 at 14:44, Ted Kremenek <kremenek at apple.com> wrote:
>>> How about: -Wambigious-else
>>
>> Preferably spelled "ambiguous" ;)
>>
>>>
>>> On Dec 20, 2011, at 2:38 PM, Matt Beaumont-Gay wrote:
>>>
>>>> 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
>>>>
>>>> _______________________________________________
>>>> cfe-commits mailing list
>>>> cfe-commits at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
-------------- next part --------------
A non-text attachment was scrubbed...
Name: clang-warn.patch
Type: application/octet-stream
Size: 10912 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20111220/cde3e8c5/attachment.obj>


More information about the cfe-commits mailing list