diff options
author | Richard Henderson <rth@redhat.com> | 2004-06-20 10:16:27 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-06-20 10:16:27 -0700 |
commit | b9861bff6c54b2eabafbe684647972f3c4f2a747 (patch) | |
tree | ed8b5243c2eb8d695f4aecb713b9176aeb3cafe3 /gcc/stmt.c | |
parent | 9127884102347420f8185b819c137610b7e51126 (diff) | |
download | gcc-b9861bff6c54b2eabafbe684647972f3c4f2a747.zip gcc-b9861bff6c54b2eabafbe684647972f3c4f2a747.tar.gz gcc-b9861bff6c54b2eabafbe684647972f3c4f2a747.tar.bz2 |
stmt.c (warn_if_unused_value): Add locus argument.
* 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.
From-SVN: r83416
Diffstat (limited to 'gcc/stmt.c')
-rw-r--r-- | gcc/stmt.c | 32 |
1 files changed, 22 insertions, 10 deletions
@@ -2097,7 +2097,7 @@ expand_expr_stmt_value (tree exp, int want_value, int maybe_last) && 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 want_value, int maybe_last) } /* 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; } } |