diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp index f51e188b41676416a7aeeb8a03e50b8df18e4f41..aea2f432ad5e1822409ae268e33e16aa30eb4627 100644 --- a/lib/AST/Expr.cpp +++ b/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/test/SemaCXX/warn-unused-comparison.cpp b/test/SemaCXX/warn-unused-comparison.cpp index 4dd203875b35c023d31cb87ca3eaf9cd571f02d0..3afad585b668936f85486a5d7fd585ac5898bff3 100644 --- a/test/SemaCXX/warn-unused-comparison.cpp +++ b/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}} +} +}