[PATCH] D63369: [AST] Fixed extraneous warnings for binary conditional operator
This revision was automatically updated to reflect the committed changes. Closed by commit rL363857: [AST] Fixed extraneous warnings for binary conditional operator (authored by Nathan-Huckleberry, committed by ). Herald added a project: LLVM. Herald added a subscriber: llvm-commits. Changed prior to commit: https://reviews.llvm.org/D63369?vs=205473=205652#toc Repository: rL LLVM CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63369/new/ https://reviews.llvm.org/D63369 Files: cfe/trunk/lib/AST/Expr.cpp cfe/trunk/test/Sema/warn-binary-conditional-expression-unused.c Index: cfe/trunk/lib/AST/Expr.cpp === --- cfe/trunk/lib/AST/Expr.cpp +++ cfe/trunk/lib/AST/Expr.cpp @@ -2453,12 +2453,13 @@ // If only one of the LHS or RHS is a warning, the operator might // be being used for control flow. Only warn if both the LHS and // RHS are warnings. -const ConditionalOperator *Exp = cast(this); -if (!Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx)) - return false; -if (!Exp->getLHS()) - return true; -return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); +const auto *Exp = cast(this); +return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx) && + Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); + } + case BinaryConditionalOperatorClass: { +const auto *Exp = cast(this); +return Exp->getFalseExpr()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); } case MemberExprClass: Index: cfe/trunk/test/Sema/warn-binary-conditional-expression-unused.c === --- cfe/trunk/test/Sema/warn-binary-conditional-expression-unused.c +++ cfe/trunk/test/Sema/warn-binary-conditional-expression-unused.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused-value -verify %s +int main() { +int a; +int b; +a ? : b; //expected-warning{{expression result unused}} +a ? a : b; //expected-warning{{expression result unused}} +a ? : ++b; +a ? a : ++b; +++a ? : b; //expected-warning{{expression result unused}} +++a ? a : b; //expected-warning{{expression result unused}} +++a ? : ++b; +++a ? a : ++b; +return 0; +}; + Index: cfe/trunk/lib/AST/Expr.cpp === --- cfe/trunk/lib/AST/Expr.cpp +++ cfe/trunk/lib/AST/Expr.cpp @@ -2453,12 +2453,13 @@ // If only one of the LHS or RHS is a warning, the operator might // be being used for control flow. Only warn if both the LHS and // RHS are warnings. -const ConditionalOperator *Exp = cast(this); -if (!Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx)) - return false; -if (!Exp->getLHS()) - return true; -return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); +const auto *Exp = cast(this); +return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx) && + Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); + } + case BinaryConditionalOperatorClass: { +const auto *Exp = cast(this); +return Exp->getFalseExpr()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); } case MemberExprClass: Index: cfe/trunk/test/Sema/warn-binary-conditional-expression-unused.c === --- cfe/trunk/test/Sema/warn-binary-conditional-expression-unused.c +++ cfe/trunk/test/Sema/warn-binary-conditional-expression-unused.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused-value -verify %s +int main() { +int a; +int b; +a ? : b; //expected-warning{{expression result unused}} +a ? a : b; //expected-warning{{expression result unused}} +a ? : ++b; +a ? a : ++b; +++a ? : b; //expected-warning{{expression result unused}} +++a ? a : b; //expected-warning{{expression result unused}} +++a ? : ++b; +++a ? a : ++b; +return 0; +}; + ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D63369: [AST] Fixed extraneous warnings for binary conditional operator
Nathan-Huckleberry updated this revision to Diff 205473. Nathan-Huckleberry added a comment. Mistakenly updated revision. Attempting to revert. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63369/new/ https://reviews.llvm.org/D63369 Files: clang/lib/AST/Expr.cpp clang/test/Sema/warn-binary-conditional-expression-unused.c Index: clang/test/Sema/warn-binary-conditional-expression-unused.c === --- /dev/null +++ clang/test/Sema/warn-binary-conditional-expression-unused.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused-value -verify %s +int main() { +int a; +int b; +a ? : b; //expected-warning{{expression result unused}} +a ? a : b; //expected-warning{{expression result unused}} +a ? : ++b; +a ? a : ++b; +++a ? : b; //expected-warning{{expression result unused}} +++a ? a : b; //expected-warning{{expression result unused}} +++a ? : ++b; +++a ? a : ++b; +return 0; +}; + Index: clang/lib/AST/Expr.cpp === --- clang/lib/AST/Expr.cpp +++ clang/lib/AST/Expr.cpp @@ -2345,12 +2345,13 @@ // If only one of the LHS or RHS is a warning, the operator might // be being used for control flow. Only warn if both the LHS and // RHS are warnings. -const ConditionalOperator *Exp = cast(this); -if (!Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx)) - return false; -if (!Exp->getLHS()) - return true; -return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); +const auto *Exp = cast(this); +return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx) && + Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); + } + case BinaryConditionalOperatorClass: { +const auto *Exp = cast(this); +return Exp->getFalseExpr()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); } case MemberExprClass: Index: clang/test/Sema/warn-binary-conditional-expression-unused.c === --- /dev/null +++ clang/test/Sema/warn-binary-conditional-expression-unused.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused-value -verify %s +int main() { +int a; +int b; +a ? : b; //expected-warning{{expression result unused}} +a ? a : b; //expected-warning{{expression result unused}} +a ? : ++b; +a ? a : ++b; +++a ? : b; //expected-warning{{expression result unused}} +++a ? a : b; //expected-warning{{expression result unused}} +++a ? : ++b; +++a ? a : ++b; +return 0; +}; + Index: clang/lib/AST/Expr.cpp === --- clang/lib/AST/Expr.cpp +++ clang/lib/AST/Expr.cpp @@ -2345,12 +2345,13 @@ // If only one of the LHS or RHS is a warning, the operator might // be being used for control flow. Only warn if both the LHS and // RHS are warnings. -const ConditionalOperator *Exp = cast(this); -if (!Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx)) - return false; -if (!Exp->getLHS()) - return true; -return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); +const auto *Exp = cast(this); +return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx) && + Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); + } + case BinaryConditionalOperatorClass: { +const auto *Exp = cast(this); +return Exp->getFalseExpr()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); } case MemberExprClass: ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D63369: [AST] Fixed extraneous warnings for binary conditional operator
Nathan-Huckleberry updated this revision to Diff 205470. Nathan-Huckleberry added a comment. - [analyzer] Fix clang-tidy crash on GCCAsmStmt Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63369/new/ https://reviews.llvm.org/D63369 Files: clang-tools-extra/test/clang-tidy/asm-goto.cpp clang/lib/AST/Expr.cpp clang/lib/StaticAnalyzer/Core/CoreEngine.cpp clang/test/Sema/warn-binary-conditional-expression-unused.c Index: clang/test/Sema/warn-binary-conditional-expression-unused.c === --- /dev/null +++ clang/test/Sema/warn-binary-conditional-expression-unused.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused-value -verify %s +int main() { +int a; +int b; +a ? : b; //expected-warning{{expression result unused}} +a ? a : b; //expected-warning{{expression result unused}} +a ? : ++b; +a ? a : ++b; +++a ? : b; //expected-warning{{expression result unused}} +++a ? a : b; //expected-warning{{expression result unused}} +++a ? : ++b; +++a ? a : ++b; +return 0; +}; + Index: clang/lib/StaticAnalyzer/Core/CoreEngine.cpp === --- clang/lib/StaticAnalyzer/Core/CoreEngine.cpp +++ clang/lib/StaticAnalyzer/Core/CoreEngine.cpp @@ -396,6 +396,9 @@ case Stmt::WhileStmtClass: HandleBranch(cast(Term)->getCond(), Term, B, Pred); return; + + case Stmt::GCCAsmStmtClass: +return; } } Index: clang/lib/AST/Expr.cpp === --- clang/lib/AST/Expr.cpp +++ clang/lib/AST/Expr.cpp @@ -2345,12 +2345,13 @@ // If only one of the LHS or RHS is a warning, the operator might // be being used for control flow. Only warn if both the LHS and // RHS are warnings. -const ConditionalOperator *Exp = cast(this); -if (!Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx)) - return false; -if (!Exp->getLHS()) - return true; -return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); +const auto *Exp = cast(this); +return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx) && + Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); + } + case BinaryConditionalOperatorClass: { +const auto *Exp = cast(this); +return Exp->getFalseExpr()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); } case MemberExprClass: Index: clang-tools-extra/test/clang-tidy/asm-goto.cpp === --- /dev/null +++ clang-tools-extra/test/clang-tidy/asm-goto.cpp @@ -0,0 +1,29 @@ +// REQUIRES: static-analyzer +// RUN: clang-tidy %s -checks='bugprone-use-after-move' -- | FileCheck %s +#include +#include +int main() { +struct S { + std::string str; + int i; +}; + +S s = { "Hello, world!\n", 42 }; +S s_other = std::move(s); +asm goto( "xor %0, %0\n je %l[label1]\n jl %l[label2]" : /* no outputs */ : /* inputs */ : /* clobbers */ : label1, label2 /* any labels used */ ); +return 0; + +label1: +// CHECK: warning: 's' used after it was moved [bugprone-use-after-move] +s.str = "ABC"; +s.i = 99; +return 2; + +label2: +// There should be a warning here, but UseAfterMoveCheck only reports one +// warning per std::move +s.str = "DEF"; +s.i = 100; +return 0; +} + Index: clang/test/Sema/warn-binary-conditional-expression-unused.c === --- /dev/null +++ clang/test/Sema/warn-binary-conditional-expression-unused.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused-value -verify %s +int main() { +int a; +int b; +a ? : b; //expected-warning{{expression result unused}} +a ? a : b; //expected-warning{{expression result unused}} +a ? : ++b; +a ? a : ++b; +++a ? : b; //expected-warning{{expression result unused}} +++a ? a : b; //expected-warning{{expression result unused}} +++a ? : ++b; +++a ? a : ++b; +return 0; +}; + Index: clang/lib/StaticAnalyzer/Core/CoreEngine.cpp === --- clang/lib/StaticAnalyzer/Core/CoreEngine.cpp +++ clang/lib/StaticAnalyzer/Core/CoreEngine.cpp @@ -396,6 +396,9 @@ case Stmt::WhileStmtClass: HandleBranch(cast(Term)->getCond(), Term, B, Pred); return; + + case Stmt::GCCAsmStmtClass: +return; } } Index: clang/lib/AST/Expr.cpp === --- clang/lib/AST/Expr.cpp +++ clang/lib/AST/Expr.cpp @@ -2345,12 +2345,13 @@ // If only one of the LHS or RHS is a warning, the operator might // be being used for control flow. Only warn if both the LHS and // RHS are warnings. -const ConditionalOperator
[PATCH] D63369: [AST] Fixed extraneous warnings for binary conditional operator
nickdesaulniers accepted this revision. nickdesaulniers added a comment. Thanks for the patch and following up on the review comments. Let's work on getting you commit access now. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63369/new/ https://reviews.llvm.org/D63369 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D63369: [AST] Fixed extraneous warnings for binary conditional operator
Nathan-Huckleberry updated this revision to Diff 205129. Nathan-Huckleberry added a comment. - [AST] Formatting changes to ConditionalOperator unused detection Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63369/new/ https://reviews.llvm.org/D63369 Files: clang/lib/AST/Expr.cpp clang/test/Sema/warn-binary-conditional-expression-unused.c Index: clang/test/Sema/warn-binary-conditional-expression-unused.c === --- /dev/null +++ clang/test/Sema/warn-binary-conditional-expression-unused.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused-value -verify %s +int main() { +int a; +int b; +a ? : b; //expected-warning{{expression result unused}} +a ? a : b; //expected-warning{{expression result unused}} +a ? : ++b; +a ? a : ++b; +++a ? : b; //expected-warning{{expression result unused}} +++a ? a : b; //expected-warning{{expression result unused}} +++a ? : ++b; +++a ? a : ++b; +return 0; +}; + Index: clang/lib/AST/Expr.cpp === --- clang/lib/AST/Expr.cpp +++ clang/lib/AST/Expr.cpp @@ -2345,12 +2345,13 @@ // If only one of the LHS or RHS is a warning, the operator might // be being used for control flow. Only warn if both the LHS and // RHS are warnings. -const ConditionalOperator *Exp = cast(this); -if (!Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx)) - return false; -if (!Exp->getLHS()) - return true; -return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); +const auto *Exp = cast(this); +return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx) && + Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); + } + case BinaryConditionalOperatorClass: { +const auto *Exp = cast(this); +return Exp->getFalseExpr()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); } case MemberExprClass: Index: clang/test/Sema/warn-binary-conditional-expression-unused.c === --- /dev/null +++ clang/test/Sema/warn-binary-conditional-expression-unused.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused-value -verify %s +int main() { +int a; +int b; +a ? : b; //expected-warning{{expression result unused}} +a ? a : b; //expected-warning{{expression result unused}} +a ? : ++b; +a ? a : ++b; +++a ? : b; //expected-warning{{expression result unused}} +++a ? a : b; //expected-warning{{expression result unused}} +++a ? : ++b; +++a ? a : ++b; +return 0; +}; + Index: clang/lib/AST/Expr.cpp === --- clang/lib/AST/Expr.cpp +++ clang/lib/AST/Expr.cpp @@ -2345,12 +2345,13 @@ // If only one of the LHS or RHS is a warning, the operator might // be being used for control flow. Only warn if both the LHS and // RHS are warnings. -const ConditionalOperator *Exp = cast(this); -if (!Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx)) - return false; -if (!Exp->getLHS()) - return true; -return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); +const auto *Exp = cast(this); +return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx) && + Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); + } + case BinaryConditionalOperatorClass: { +const auto *Exp = cast(this); +return Exp->getFalseExpr()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); } case MemberExprClass: ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D63369: [AST] Fixed extraneous warnings for binary conditional operator
nickdesaulniers added inline comments. Comment at: clang/lib/AST/Expr.cpp:2348 // RHS are warnings. const ConditionalOperator *Exp = cast(this); +return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx) && `const auto *Exp` Comment at: clang/lib/AST/Expr.cpp:2353 + case BinaryConditionalOperatorClass: { +auto *Exp = cast(this); +return Exp->getFalseExpr()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); `const auto *Exp` Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63369/new/ https://reviews.llvm.org/D63369 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D63369: [AST] Fixed extraneous warnings for binary conditional operator
Nathan-Huckleberry updated this revision to Diff 205117. Nathan-Huckleberry added a comment. - [AST] Cleanup of conditional operator unused warning detection Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63369/new/ https://reviews.llvm.org/D63369 Files: clang/lib/AST/Expr.cpp clang/test/Sema/warn-binary-conditional-expression-unused.c Index: clang/test/Sema/warn-binary-conditional-expression-unused.c === --- /dev/null +++ clang/test/Sema/warn-binary-conditional-expression-unused.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused-value -verify %s +int main() { +int a; +int b; +a ? : b; //expected-warning{{expression result unused}} +a ? a : b; //expected-warning{{expression result unused}} +a ? : ++b; +a ? a : ++b; +++a ? : b; //expected-warning{{expression result unused}} +++a ? a : b; //expected-warning{{expression result unused}} +++a ? : ++b; +++a ? a : ++b; +return 0; +}; + Index: clang/lib/AST/Expr.cpp === --- clang/lib/AST/Expr.cpp +++ clang/lib/AST/Expr.cpp @@ -2346,11 +2346,12 @@ // be being used for control flow. Only warn if both the LHS and // RHS are warnings. const ConditionalOperator *Exp = cast(this); -if (!Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx)) - return false; -if (!Exp->getLHS()) - return true; -return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); +return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx) && +Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); + } + case BinaryConditionalOperatorClass: { +auto *Exp = cast(this); +return Exp->getFalseExpr()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); } case MemberExprClass: Index: clang/test/Sema/warn-binary-conditional-expression-unused.c === --- /dev/null +++ clang/test/Sema/warn-binary-conditional-expression-unused.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused-value -verify %s +int main() { +int a; +int b; +a ? : b; //expected-warning{{expression result unused}} +a ? a : b; //expected-warning{{expression result unused}} +a ? : ++b; +a ? a : ++b; +++a ? : b; //expected-warning{{expression result unused}} +++a ? a : b; //expected-warning{{expression result unused}} +++a ? : ++b; +++a ? a : ++b; +return 0; +}; + Index: clang/lib/AST/Expr.cpp === --- clang/lib/AST/Expr.cpp +++ clang/lib/AST/Expr.cpp @@ -2346,11 +2346,12 @@ // be being used for control flow. Only warn if both the LHS and // RHS are warnings. const ConditionalOperator *Exp = cast(this); -if (!Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx)) - return false; -if (!Exp->getLHS()) - return true; -return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); +return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx) && +Exp->getRHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); + } + case BinaryConditionalOperatorClass: { +auto *Exp = cast(this); +return Exp->getFalseExpr()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); } case MemberExprClass: ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D63369: [AST] Fixed extraneous warnings for binary conditional operator
nickdesaulniers added inline comments. Comment at: clang/lib/AST/Expr.cpp:2351-2352 return false; if (!Exp->getLHS()) return true; return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); rsmith wrote: > Looks like whoever wrote this expected to handle binary conditional operators > here. Maybe delete this check since it's impossible for a ternary conditional > operator? I agree; I assume it's not possible for this case and that they meant to handle `BinaryConditionalOperatorClass`. This should make the the return value a simple logical and of the two sides; which more closely follows the comment above. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63369/new/ https://reviews.llvm.org/D63369 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D63369: [AST] Fixed extraneous warnings for binary conditional operator
rsmith accepted this revision. rsmith added inline comments. This revision is now accepted and ready to land. Comment at: clang/lib/AST/Expr.cpp:2351-2352 return false; if (!Exp->getLHS()) return true; return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); Looks like whoever wrote this expected to handle binary conditional operators here. Maybe delete this check since it's impossible for a ternary conditional operator? Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63369/new/ https://reviews.llvm.org/D63369 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D63369: [AST] Fixed extraneous warnings for binary conditional operator
nickdesaulniers added inline comments. Comment at: clang/test/Sema/warn-binary-conditional-expression-unused.c:8 +a ? : ++b; +a ? a : ++b; +++a ? : b; //expected-warning{{expression result unused}} Note to other reviewers: Whether or not we should warn on `a` here is another story and orthogonal to this patch, which focuses on just fixing existing inconsistency between ternary and gnu binary conditional that exists today. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D63369/new/ https://reviews.llvm.org/D63369 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D63369: [AST] Fixed extraneous warnings for binary conditional operator
Nathan-Huckleberry created this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits. Binary conditional operator gave warnings where ternary operators did not. They have been fixed to warn similarly to ternary operators. Link: https://bugs.llvm.org/show_bug.cgi?id=42239 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D63369 Files: clang/lib/AST/Expr.cpp clang/test/Sema/warn-binary-conditional-expression-unused.c Index: clang/test/Sema/warn-binary-conditional-expression-unused.c === --- /dev/null +++ clang/test/Sema/warn-binary-conditional-expression-unused.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused-value -verify %s +int main() { +int a; +int b; +a ? : b; //expected-warning{{expression result unused}} +a ? a : b; //expected-warning{{expression result unused}} +a ? : ++b; +a ? a : ++b; +++a ? : b; //expected-warning{{expression result unused}} +++a ? a : b; //expected-warning{{expression result unused}} +++a ? : ++b; +++a ? a : ++b; +return 0; +}; + Index: clang/lib/AST/Expr.cpp === --- clang/lib/AST/Expr.cpp +++ clang/lib/AST/Expr.cpp @@ -2352,6 +2352,10 @@ return true; return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); } + case BinaryConditionalOperatorClass: { +auto *Exp = cast(this); +return Exp->getFalseExpr()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); + } case MemberExprClass: WarnE = this; Index: clang/test/Sema/warn-binary-conditional-expression-unused.c === --- /dev/null +++ clang/test/Sema/warn-binary-conditional-expression-unused.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -fsyntax-only -Wunused-value -verify %s +int main() { +int a; +int b; +a ? : b; //expected-warning{{expression result unused}} +a ? a : b; //expected-warning{{expression result unused}} +a ? : ++b; +a ? a : ++b; +++a ? : b; //expected-warning{{expression result unused}} +++a ? a : b; //expected-warning{{expression result unused}} +++a ? : ++b; +++a ? a : ++b; +return 0; +}; + Index: clang/lib/AST/Expr.cpp === --- clang/lib/AST/Expr.cpp +++ clang/lib/AST/Expr.cpp @@ -2352,6 +2352,10 @@ return true; return Exp->getLHS()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); } + case BinaryConditionalOperatorClass: { +auto *Exp = cast(this); +return Exp->getFalseExpr()->isUnusedResultAWarning(WarnE, Loc, R1, R2, Ctx); + } case MemberExprClass: WarnE = this; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits