From 1469f39895f6bc6c7095f8b2d2f707181a91b5e9 Mon Sep 17 00:00:00 2001
From: Richard Trieu <rtrieu@google.com>
Date: Tue, 20 May 2014 01:34:43 +0000
Subject: [PATCH] Ignore void returning overloaded functions fom
 -Wunused-comparison.  PR19791.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@209186 91177308-0d34-0410-b5e6-96231b3b80d8
---
 lib/AST/Expr.cpp                        |  3 ++-
 test/SemaCXX/warn-unused-comparison.cpp | 14 ++++++++++++++
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/lib/AST/Expr.cpp b/lib/AST/Expr.cpp
index f51e188b416..aea2f432ad5 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 4dd203875b3..3afad585b66 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}}
+}
+}
-- 
GitLab