Hi,

I've submitted a patch to bug 62182 [1], and I would like to have some
feedback about it (this is still WIP as noted in the bug).
As it is my first patch to gcc, I'm not sure what is the best way to
discuss/review patches (here or in bugzilla).
Anyway, please let me know your thoughts :)

Arnaud

[1]: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62182
Index: gcc/c/c-typeck.c
===================================================================
--- gcc/c/c-typeck.c	(révision 221845)
+++ gcc/c/c-typeck.c	(copie de travail)
@@ -9921,6 +9921,10 @@ emit_side_effect_warnings (location_t lo
 {
   if (expr == error_mark_node)
     ;
+  else if (TREE_CODE (expr) == EQ_EXPR && !VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
+    {
+      warning_at (loc, OPT_Wunused_comparison, "equality comparison result unused: did you mean '='?");
+    }
   else if (!TREE_SIDE_EFFECTS (expr))
     {
       if (!VOID_TYPE_P (TREE_TYPE (expr)) && !TREE_NO_WARNING (expr))
Index: gcc/common.opt
===================================================================
--- gcc/common.opt	(révision 221845)
+++ gcc/common.opt	(copie de travail)
@@ -727,6 +727,10 @@ Wunused-variable
 Common Var(warn_unused_variable) Warning EnabledBy(Wunused)
 Warn when a variable is unused
 
+Wunused-comparison
+Common Var(warn_unused_comparison) Warning EnabledBy(Wunused)
+Warn when the result of a comparison is unused
+
 Wcoverage-mismatch
 Common Var(warn_coverage_mismatch) Init(1) Warning
 Warn in case profiles in -fprofile-use do not match
Index: gcc/cp/cvt.c
===================================================================
--- gcc/cp/cvt.c	(révision 221845)
+++ gcc/cp/cvt.c	(copie de travail)
@@ -1345,9 +1345,15 @@ convert_to_void (tree expr, impl_conv_vo
 	  && !TREE_NO_WARNING (expr)
 	  && !processing_template_decl)
 	{
+    if ((TREE_CODE (expr) == EQ_EXPR) && !TREE_NO_WARNING (expr))
+      {
+        warning_at (loc, OPT_Wunused_comparison,
+        "equality comparison result unused: "
+        "did you mean '='?");
+      }
 	  /* The middle end does not warn about expressions that have
 	     been explicitly cast to void, so we must do so here.  */
-	  if (!TREE_SIDE_EFFECTS (expr)) {
+    else if (!TREE_SIDE_EFFECTS (expr)) {
             if (complain & tf_warning)
 	      switch (implicit)
 		{
Index: gcc/doc/invoke.texi
===================================================================
--- gcc/doc/invoke.texi	(révision 221845)
+++ gcc/doc/invoke.texi	(copie de travail)
@@ -285,7 +285,7 @@ Objective-C and Objective-C++ Dialects}.
 -Wunsuffixed-float-constants  -Wunused  -Wunused-function @gol
 -Wunused-label  -Wunused-local-typedefs -Wunused-parameter @gol
 -Wno-unused-result -Wunused-value @gol -Wunused-variable @gol
--Wunused-but-set-parameter -Wunused-but-set-variable @gol
+-Wunused-but-set-parameter -Wunused-but-set-variable -Wunused-comparison @gol
 -Wuseless-cast -Wvariadic-macros -Wvector-operation-performance @gol
 -Wvla -Wvolatile-register-var  -Wwrite-strings @gol
 -Wzero-as-null-pointer-constant}

Reply via email to