From b9861bff6c54b2eabafbe684647972f3c4f2a747 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Sun, 20 Jun 2004 10:16:27 -0700 Subject: [PATCH] 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 --- gcc/ChangeLog | 7 +++++++ gcc/c-gimplify.c | 7 +------ gcc/c-typeck.c | 2 +- gcc/stmt.c | 32 ++++++++++++++++++++++---------- gcc/tree.h | 2 +- 5 files changed, 32 insertions(+), 18 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 744f3967782..8d02e2b387c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2004-06-20 Richard Henderson + + * 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. + 2004-06-20 Andrew Pinski PR middle-end/16089 diff --git a/gcc/c-gimplify.c b/gcc/c-gimplify.c index 57208e4c03f..9259923794f 100644 --- a/gcc/c-gimplify.c +++ b/gcc/c-gimplify.c @@ -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) diff --git a/gcc/c-typeck.c b/gcc/c-typeck.c index 201c5f1c114..99bb78d7c1d 100644 --- a/gcc/c-typeck.c +++ b/gcc/c-typeck.c @@ -2949,7 +2949,7 @@ internal_build_compound_expr (tree list, int first_p) `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); } diff --git a/gcc/stmt.c b/gcc/stmt.c index aa970dfd2fb..4d878e3b081 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -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; } } diff --git a/gcc/tree.h b/gcc/tree.h index 6babb197c59..d5d87b69d65 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -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); -- 2.30.2