diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp --- a/clang/lib/AST/Expr.cpp +++ b/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; diff --git a/clang/test/Sema/warn-binary-conditional-expression-unused.c b/clang/test/Sema/warn-binary-conditional-expression-unused.c new file mode 100644 --- /dev/null +++ b/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; +}; +