stmt.c (expand_expr_stmt): Only call warn_if_unused_value if the tree has side effects.
authorRichard Henderson <rth@cygnus.com>
Tue, 19 Sep 2000 13:39:10 +0000 (06:39 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Tue, 19 Sep 2000 13:39:10 +0000 (06:39 -0700)
        * stmt.c (expand_expr_stmt): Only call warn_if_unused_value
        if the tree has side effects.
        (warn_if_unused_value): Do not warn about void constructs.

From-SVN: r36532

gcc/ChangeLog
gcc/stmt.c

index 79da6a32bcb6a32410699bd2f1b84d6980cf6ddd..e74d3c7ff6742cd4ee72cbd3c089d376fef8c8e2 100644 (file)
@@ -1,5 +1,9 @@
 2000-09-19  Richard Henderson  <rth@cygnus.com>
 
+       * stmt.c (expand_expr_stmt): Only call warn_if_unused_value
+       if the tree has side effects.
+       (warn_if_unused_value): Do not warn about void constructs.
+
        * c-decl.c (poplevel): Invoke warn_about_unused_variables.
 
        * unroll.c (copy_loop_body): Update LABEL_NUSES before
index 11a713225e0b8b4e4efb402590b4dad69672553a..2892d340b8909d6de7448692271e44f411bde026 100644 (file)
@@ -1908,12 +1908,14 @@ expand_expr_stmt (exp)
      except inside a ({...}) where they may be useful.  */
   if (expr_stmts_for_value == 0 && exp != error_mark_node)
     {
-      if (! TREE_SIDE_EFFECTS (exp)
-         && (extra_warnings || warn_unused_value)
-         && !(TREE_CODE (exp) == CONVERT_EXPR
-              && VOID_TYPE_P (TREE_TYPE (exp))))
-       warning_with_file_and_line (emit_filename, emit_lineno,
-                                   "statement with no effect");
+      if (! TREE_SIDE_EFFECTS (exp))
+       {
+         if ((extra_warnings || warn_unused_value)
+             && !(TREE_CODE (exp) == CONVERT_EXPR
+                  && VOID_TYPE_P (TREE_TYPE (exp))))
+           warning_with_file_and_line (emit_filename, emit_lineno,
+                                       "statement with no effect");
+       }
       else if (warn_unused_value)
        warn_if_unused_value (exp);
     }
@@ -1978,6 +1980,12 @@ warn_if_unused_value (exp)
   if (TREE_USED (exp))
     return 0;
 
+  /* Don't warn about void constructs.  This includes casting to void,
+     void function calls, and statement expressions with a final cast
+     to void.  */
+  if (VOID_TYPE_P (TREE_TYPE (exp)))
+    return 0;
+
   switch (TREE_CODE (exp))
     {
     case PREINCREMENT_EXPR:
@@ -2023,9 +2031,6 @@ warn_if_unused_value (exp)
     case NOP_EXPR:
     case CONVERT_EXPR:
     case NON_LVALUE_EXPR:
-      /* Don't warn about values cast to void.  */
-      if (VOID_TYPE_P (TREE_TYPE (exp)))
-       return 0;
       /* Don't warn about conversions not explicit in the user's program.  */
       if (TREE_NO_UNUSED_WARNING (exp))
        return 0;