[PATCH] D47687: [Sema] Missing -Wlogical-op-parentheses warnings in macros (PR18971)

Xing via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Sun Jun 17 21:17:44 PDT 2018


Higuoxing added inline comments.


================
Comment at: test/Sema/parentheses.c:114
+  NON_NESTING_VOID_0(i && i || i); // expected-warning {{'&&' within '||'}} \
+                                   // expected-note {{place parentheses around the '&&' expression to silence this warning}}
+  NON_NESTING_VOID_0((i && i) || i); // no warning.
----------------
Higuoxing wrote:
> dexonsmith wrote:
> > Can you add fix-it CHECKs?
> ```
> llvm/tools/clang/test/Sema/parentheses.c:109:15: note: place parentheses around the '&&' expression to silence this warning
>   VOID_CAST(i && i || i); // expected-warning {{'&&' within '||'}} \
>             ~~^~~~
> llvm/tools/clang/test/Sema/parentheses.c:17:34: note: expanded from macro 'VOID_CAST'
> #define VOID_CAST(cond) ( (void)(cond) )
>                                  ^~~~
> ```
> 
> Sorry, it seems that when deal with expressions in macros, there is no fix-it hint ...
The `suggestParentheses` suppress the fix-it hint when the expression is in macros

```
  if (ParenRange.getBegin().isFileID() && ParenRange.getEnd().isFileID() &&
      EndLoc.isValid()) {
    Self.Diag(Loc, Note)
      << FixItHint::CreateInsertion(ParenRange.getBegin(), "(")
      << FixItHint::CreateInsertion(EndLoc, ")");
  } else {
    // We can't display the parentheses, so just show the bare note.
    Self.Diag(Loc, Note) << ParenRange;
  }
```

You see, there is a `isFileID()`


https://reviews.llvm.org/D47687





More information about the cfe-commits mailing list