r318556 - Loosen -Wempty-body warning

Hans Wennborg via cfe-commits cfe-commits at lists.llvm.org
Mon Nov 20 09:49:50 PST 2017


Reverted the original patch too, in r318667 since I assume that was
breaking Ilya's build.

Hopefully this is easy to fix and they can be re-landed together.

On Mon, Nov 20, 2017 at 9:39 AM, Hans Wennborg <hans at chromium.org> wrote:
> I've reverted in r318665 to get the buildbots green until this is figured out.
>
>
>
> On Sat, Nov 18, 2017 at 11:55 AM, Hans Wennborg <hans at chromium.org> wrote:
>> We're still seeing some in macro-related code. From Chromium:
>>
>> ../../third_party/ffmpeg/libavcodec/bitstream.c(169,5):  error: if
>> statement has empty body [-Werror,-Wempty-body]
>>     ff_dlog(NULL, "new table index=%d size=%d\n", table_index, table_size);
>>     ^
>> ../../third_party/ffmpeg\libavutil/internal.h(276,80):  note: expanded
>> from macro 'ff_dlog'
>> #   define ff_dlog(ctx, ...) do { if (0) av_log(ctx, AV_LOG_DEBUG,
>> __VA_ARGS__); } while (0)
>>                                                                                ^
>> ../../third_party/ffmpeg/libavcodec/bitstream.c(169,5):  note: put the
>> semicolon on a separate line to silence this warning
>>
>> (See https://build.chromium.org/p/chromium.clang/builders/ToTWin/builds/420)
>>
>> On Fri, Nov 17, 2017 at 1:33 PM, Reid Kleckner via cfe-commits
>> <cfe-commits at lists.llvm.org> wrote:
>>> Author: rnk
>>> Date: Fri Nov 17 13:33:28 2017
>>> New Revision: 318556
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=318556&view=rev
>>> Log:
>>> Loosen -Wempty-body warning
>>>
>>> Do not show it when `if` or `else` come from macros.
>>> E.g.,
>>>
>>>     #define USED(A) if (A); else
>>>     #define SOME_IF(A) if (A)
>>>
>>>     void test() {
>>>       // No warnings are shown in those cases now.
>>>       USED(0);
>>>       SOME_IF(0);
>>>     }
>>>
>>> Patch by Ilya Biryukov!
>>>
>>> Differential Revision: https://reviews.llvm.org/D40185
>>>
>>> Modified:
>>>     cfe/trunk/include/clang/Sema/Sema.h
>>>     cfe/trunk/lib/Parse/ParseStmt.cpp
>>>     cfe/trunk/lib/Sema/SemaChecking.cpp
>>>     cfe/trunk/lib/Sema/SemaStmt.cpp
>>>     cfe/trunk/test/SemaCXX/warn-empty-body.cpp
>>>
>>> Modified: cfe/trunk/include/clang/Sema/Sema.h
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=318556&r1=318555&r2=318556&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/include/clang/Sema/Sema.h (original)
>>> +++ cfe/trunk/include/clang/Sema/Sema.h Fri Nov 17 13:33:28 2017
>>> @@ -9690,6 +9690,7 @@ public:
>>>    class ConditionResult {
>>>      Decl *ConditionVar;
>>>      FullExprArg Condition;
>>> +    SourceLocation RParenLoc;
>>>      bool Invalid;
>>>      bool HasKnownValue;
>>>      bool KnownValue;
>>> @@ -9713,6 +9714,9 @@ public:
>>>        return std::make_pair(cast_or_null<VarDecl>(ConditionVar),
>>>                              Condition.get());
>>>      }
>>> +
>>> +    void setRParenLoc(SourceLocation Loc) { RParenLoc = Loc; }
>>> +
>>>      llvm::Optional<bool> getKnownValue() const {
>>>        if (!HasKnownValue)
>>>          return None;
>>>
>>> Modified: cfe/trunk/lib/Parse/ParseStmt.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseStmt.cpp?rev=318556&r1=318555&r2=318556&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/lib/Parse/ParseStmt.cpp (original)
>>> +++ cfe/trunk/lib/Parse/ParseStmt.cpp Fri Nov 17 13:33:28 2017
>>> @@ -1101,6 +1101,7 @@ bool Parser::ParseParenExprOrCondition(S
>>>
>>>    // Otherwise the condition is valid or the rparen is present.
>>>    T.consumeClose();
>>> +  Cond.setRParenLoc(T.getCloseLocation());
>>>
>>>    // Check for extraneous ')'s to catch things like "if (foo())) {".  We know
>>>    // that all callers are looking for a statement after the condition, so ")"
>>>
>>> Modified: cfe/trunk/lib/Sema/SemaChecking.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaChecking.cpp?rev=318556&r1=318555&r2=318556&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/lib/Sema/SemaChecking.cpp (original)
>>> +++ cfe/trunk/lib/Sema/SemaChecking.cpp Fri Nov 17 13:33:28 2017
>>> @@ -11821,7 +11821,7 @@ static bool ShouldDiagnoseEmptyStmtBody(
>>>
>>>    // Get line numbers of statement and body.
>>>    bool StmtLineInvalid;
>>> -  unsigned StmtLine = SourceMgr.getPresumedLineNumber(StmtLoc,
>>> +  unsigned StmtLine = SourceMgr.getSpellingLineNumber(StmtLoc,
>>>                                                        &StmtLineInvalid);
>>>    if (StmtLineInvalid)
>>>      return false;
>>>
>>> Modified: cfe/trunk/lib/Sema/SemaStmt.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=318556&r1=318555&r2=318556&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/lib/Sema/SemaStmt.cpp (original)
>>> +++ cfe/trunk/lib/Sema/SemaStmt.cpp Fri Nov 17 13:33:28 2017
>>> @@ -530,8 +530,7 @@ Sema::ActOnIfStmt(SourceLocation IfLoc,
>>>    if (elseStmt)
>>>      DiagnoseEmptyStmtBody(ElseLoc, elseStmt, diag::warn_empty_else_body);
>>>    else
>>> -    DiagnoseEmptyStmtBody(CondExpr->getLocEnd(), thenStmt,
>>> -                          diag::warn_empty_if_body);
>>> +    DiagnoseEmptyStmtBody(Cond.RParenLoc, thenStmt, diag::warn_empty_if_body);
>>>
>>>    return BuildIfStmt(IfLoc, IsConstexpr, InitStmt, Cond, thenStmt, ElseLoc,
>>>                       elseStmt);
>>>
>>> Modified: cfe/trunk/test/SemaCXX/warn-empty-body.cpp
>>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-empty-body.cpp?rev=318556&r1=318555&r2=318556&view=diff
>>> ==============================================================================
>>> --- cfe/trunk/test/SemaCXX/warn-empty-body.cpp (original)
>>> +++ cfe/trunk/test/SemaCXX/warn-empty-body.cpp Fri Nov 17 13:33:28 2017
>>> @@ -301,3 +301,14 @@ void test7(int x, int y) {
>>>    if (x) IDENTITY(); // no-warning
>>>  }
>>>
>>> +#define SOME_IF(A) if (A)
>>> +#define IF_ELSE(A) if (A); else
>>> +
>>> +
>>> +void test_macros() {
>>> +  SOME_IF(0);
>>> +  IF_ELSE(0);
>>> +
>>> +  IDENTITY(if (0);) // expected-warning{{if statement has empty body}} expected-note{{separate line}}
>>> +  IDENTITY(if (0); else;) // expected-warning{{else clause has empty body}} expected-note{{separate line}}}
>>> +}
>>>
>>>
>>> _______________________________________________
>>> cfe-commits mailing list
>>> cfe-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list