This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Fix warn_if_unused_value line numbering


Moves away from using the emit_locus rtl state.


r~


        * stmt.c (warn_if_unused_value): Add locus argument.
        * tree.h (warn_if_unused_value): Update decl.
        * c-typeck.c (internal_build_compound_expr): Update call.
        * c-gimplify.c (gimplify_expr_stmt): Likewise.

Index: c-gimplify.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-gimplify.c,v
retrieving revision 2.13
diff -u -p -u -r2.13 c-gimplify.c
--- c-gimplify.c	20 Jun 2004 10:09:56 -0000	2.13
+++ c-gimplify.c	20 Jun 2004 17:07:33 -0000
@@ -239,12 +239,7 @@ gimplify_expr_stmt (tree *stmt_p)
 	    warning ("statement with no effect");
 	}
       else if (warn_unused_value)
-	{
-	  /* Kludge for 20020220-2.c.  warn_if_unused_value shouldn't use
-	     the stmt file location info.  */
-	  set_file_and_line_for_stmt (input_location);
-	  warn_if_unused_value (stmt);
-	}
+	warn_if_unused_value (stmt, input_location);
     }
 
   if (stmt == NULL_TREE)
Index: c-typeck.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/c-typeck.c,v
retrieving revision 1.321
diff -u -p -u -r1.321 c-typeck.c
--- c-typeck.c	20 Jun 2004 09:18:04 -0000	1.321
+++ c-typeck.c	20 Jun 2004 17:07:34 -0000
@@ -2949,7 +2949,7 @@ internal_build_compound_expr (tree list,
      `foo() + bar(), baz()' the result of the `+' operator is not used,
      so we should issue a warning.  */
   else if (warn_unused_value)
-    warn_if_unused_value (TREE_VALUE (list));
+    warn_if_unused_value (TREE_VALUE (list), input_location);
 
   return build (COMPOUND_EXPR, TREE_TYPE (rest), TREE_VALUE (list), rest);
 }
Index: stmt.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/stmt.c,v
retrieving revision 1.360
diff -u -p -u -r1.360 stmt.c
--- stmt.c	19 Jun 2004 18:52:04 -0000	1.360
+++ stmt.c	20 Jun 2004 17:07:35 -0000
@@ -2097,7 +2097,7 @@ expand_expr_stmt_value (tree exp, int wa
       && warn_unused_value)
     {
       if (TREE_SIDE_EFFECTS (exp))
-	warn_if_unused_value (exp);
+	warn_if_unused_value (exp, emit_locus);
       else if (!VOID_TYPE_P (TREE_TYPE (exp)) && !TREE_NO_WARNING (exp))
 	warning ("%Hstatement with no effect", &emit_locus);
     }
@@ -2155,11 +2155,13 @@ expand_expr_stmt_value (tree exp, int wa
 }
 
 /* Warn if EXP contains any computations whose results are not used.
-   Return 1 if a warning is printed; 0 otherwise.  */
+   Return 1 if a warning is printed; 0 otherwise.  LOCUS is the 
+   (potential) location of the expression.  */
 
 int
-warn_if_unused_value (tree exp)
+warn_if_unused_value (tree exp, location_t locus)
 {
+ restart:
   if (TREE_USED (exp))
     return 0;
 
@@ -2169,6 +2171,9 @@ warn_if_unused_value (tree exp)
   if (VOID_TYPE_P (TREE_TYPE (exp)))
     return 0;
 
+  if (EXPR_LOCUS (exp))
+    locus = *EXPR_LOCUS (exp);
+
   switch (TREE_CODE (exp))
     {
     case PREINCREMENT_EXPR:
@@ -2187,25 +2192,29 @@ warn_if_unused_value (tree exp)
 
     case BIND_EXPR:
       /* For a binding, warn if no side effect within it.  */
-      return warn_if_unused_value (TREE_OPERAND (exp, 1));
+      exp = BIND_EXPR_BODY (exp);
+      goto restart;
 
     case SAVE_EXPR:
-      return warn_if_unused_value (TREE_OPERAND (exp, 0));
+      exp = TREE_OPERAND (exp, 0);
+      goto restart;
 
     case TRUTH_ORIF_EXPR:
     case TRUTH_ANDIF_EXPR:
       /* In && or ||, warn if 2nd operand has no side effect.  */
-      return warn_if_unused_value (TREE_OPERAND (exp, 1));
+      exp = TREE_OPERAND (exp, 1);
+      goto restart;
 
     case COMPOUND_EXPR:
       if (TREE_NO_WARNING (exp))
 	return 0;
-      if (warn_if_unused_value (TREE_OPERAND (exp, 0)))
+      if (warn_if_unused_value (TREE_OPERAND (exp, 0), locus))
 	return 1;
       /* Let people do `(foo (), 0)' without a warning.  */
       if (TREE_CONSTANT (TREE_OPERAND (exp, 1)))
 	return 0;
-      return warn_if_unused_value (TREE_OPERAND (exp, 1));
+      exp = TREE_OPERAND (exp, 1);
+      goto restart;
 
     case NOP_EXPR:
     case CONVERT_EXPR:
@@ -2233,7 +2242,10 @@ warn_if_unused_value (tree exp)
       /* Don't warn about automatic dereferencing of references, since
 	 the user cannot control it.  */
       if (TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == REFERENCE_TYPE)
-	return warn_if_unused_value (TREE_OPERAND (exp, 0));
+	{
+	  exp = TREE_OPERAND (exp, 0);
+	  goto restart;
+	}
       /* Fall through.  */
 
     default:
@@ -2255,7 +2267,7 @@ warn_if_unused_value (tree exp)
       if (TREE_SIDE_EFFECTS (exp))
 	return 0;
 
-      warning ("%Hvalue computed is not used", &emit_locus);
+      warning ("%Hvalue computed is not used", &locus);
       return 1;
     }
 }
Index: tree.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tree.h,v
retrieving revision 1.523
diff -u -p -u -r1.523 tree.h
--- tree.h	20 Jun 2004 09:18:05 -0000	1.523
+++ tree.h	20 Jun 2004 17:07:35 -0000
@@ -3240,7 +3240,7 @@ extern tree expand_start_stmt_expr (int)
 extern tree expand_end_stmt_expr (tree);
 extern void expand_expr_stmt (tree);
 extern void expand_expr_stmt_value (tree, int, int);
-extern int warn_if_unused_value (tree);
+extern int warn_if_unused_value (tree, location_t);
 extern void expand_decl_init (tree);
 extern void clear_last_expr (void);
 extern void expand_label (tree);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]