diff --git a/clang/lib/AST/Interp/ByteCodeExprGen.cpp b/clang/lib/AST/Interp/ByteCodeExprGen.cpp --- a/clang/lib/AST/Interp/ByteCodeExprGen.cpp +++ b/clang/lib/AST/Interp/ByteCodeExprGen.cpp @@ -595,8 +595,9 @@ template bool ByteCodeExprGen::VisitAbstractConditionalOperator( const AbstractConditionalOperator *E) { - return this->visitConditional( - E, [this](const Expr *E) { return this->visit(E); }); + return this->visitConditional(E, [this](const Expr *E) { + return DiscardResult ? this->discard(E) : this->visit(E); + }); } template diff --git a/clang/test/AST/Interp/literals.cpp b/clang/test/AST/Interp/literals.cpp --- a/clang/test/AST/Interp/literals.cpp +++ b/clang/test/AST/Interp/literals.cpp @@ -857,6 +857,9 @@ (void)5, (void)6; + 1 ? 0 : 1; // expected-warning {{unused}} \ + // ref-warning {{unused}} + return 0; }