diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp index f51e188b4167..aea2f432ad5e 100644 --- a/clang/lib/AST/Expr.cpp +++ b/clang/lib/AST/Expr.cpp @@ -2094,7 +2094,8 @@ bool Expr::isUnusedResultAWarning(const Expr *&WarnE, SourceLocation &Loc, case OO_Greater: case OO_GreaterEqual: case OO_LessEqual: - if (Op->getCallReturnType()->isReferenceType()) + if (Op->getCallReturnType()->isReferenceType() || + Op->getCallReturnType()->isVoidType()) break; WarnE = this; Loc = Op->getOperatorLoc(); diff --git a/clang/test/SemaCXX/warn-unused-comparison.cpp b/clang/test/SemaCXX/warn-unused-comparison.cpp index 4dd203875b35..3afad585b668 100644 --- a/clang/test/SemaCXX/warn-unused-comparison.cpp +++ b/clang/test/SemaCXX/warn-unused-comparison.cpp @@ -119,3 +119,17 @@ void test() { cout < cin; // expected-warning {{relational comparison result unused}} } } + +namespace PR19791 { +struct S { + void operator!=(int); + int operator==(int); +}; + +void test() { + S s; + s != 1; + s == 1; // expected-warning{{equality comparison result unused}} + // expected-note@-1{{use '=' to turn this equality comparison into an assignment}} +} +}