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<BinaryConditionalOperator>(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<BinaryConditionalOperator>(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