* move warning_if_unused_value to c-common.c
@ 2012-04-10 15:26 Manuel López-Ibáñez
2012-04-10 16:07 ` Gabriel Dos Reis
0 siblings, 1 reply; 2+ messages in thread
From: Manuel López-Ibáñez @ 2012-04-10 15:26 UTC (permalink / raw)
To: Gcc Patch List; +Cc: Jason Merrill, Joseph S. Myers, Ian Lance Taylor
[-- Attachment #1: Type: text/plain, Size: 553 bytes --]
It is a C-family FE function, not sure how it ended up in stmt.c.
OK to commit?
Cheers,
Manuel.
Bootstrapped and regression tested with languages=all,ada,obj-c++
2012-04-10 Manuel López-Ibáñez <manu@gcc.gnu.org>
* c-family/c-common.c (warn_if_unused_valuer): Move definition to here.
* tree.h (warn_if_unused_value): Move declaration from here.
* c-family/c-common.h (warn_if_unused_value): Move declaration to here.
* cp/cvt.c (convert_to_void): Update comment.
* stmt.c (warn_if_unused_value): Move definition from here.
[-- Attachment #2: warning_if_unused.diff --]
[-- Type: application/octet-stream, Size: 8900 bytes --]
Index: gcc/c-family/c-common.c
===================================================================
--- gcc/c-family/c-common.c (revision 186200)
+++ gcc/c-family/c-common.c (working copy)
@@ -1647,10 +1647,106 @@ warn_logical_operator (location_t locati
"of mutually exclusive tests is always false");
}
}
+/* Warn if EXP contains any computations whose results are not used.
+ Return true if a warning is printed; false otherwise. LOCUS is the
+ (potential) location of the expression. */
+
+bool
+warn_if_unused_value (const_tree exp, location_t locus)
+{
+ restart:
+ if (TREE_USED (exp) || TREE_NO_WARNING (exp))
+ return false;
+
+ /* 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 false;
+
+ if (EXPR_HAS_LOCATION (exp))
+ locus = EXPR_LOCATION (exp);
+
+ switch (TREE_CODE (exp))
+ {
+ case PREINCREMENT_EXPR:
+ case POSTINCREMENT_EXPR:
+ case PREDECREMENT_EXPR:
+ case POSTDECREMENT_EXPR:
+ case MODIFY_EXPR:
+ case INIT_EXPR:
+ case TARGET_EXPR:
+ case CALL_EXPR:
+ case TRY_CATCH_EXPR:
+ case WITH_CLEANUP_EXPR:
+ case EXIT_EXPR:
+ case VA_ARG_EXPR:
+ return false;
+
+ case BIND_EXPR:
+ /* For a binding, warn if no side effect within it. */
+ exp = BIND_EXPR_BODY (exp);
+ goto restart;
+
+ case SAVE_EXPR:
+ case NON_LVALUE_EXPR:
+ 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. */
+ exp = TREE_OPERAND (exp, 1);
+ goto restart;
+
+ case COMPOUND_EXPR:
+ if (warn_if_unused_value (TREE_OPERAND (exp, 0), locus))
+ return true;
+ /* Let people do `(foo (), 0)' without a warning. */
+ if (TREE_CONSTANT (TREE_OPERAND (exp, 1)))
+ return false;
+ exp = TREE_OPERAND (exp, 1);
+ goto restart;
+
+ case COND_EXPR:
+ /* If this is an expression with side effects, don't warn; this
+ case commonly appears in macro expansions. */
+ if (TREE_SIDE_EFFECTS (exp))
+ return false;
+ goto warn;
+
+ case INDIRECT_REF:
+ /* 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)
+ {
+ exp = TREE_OPERAND (exp, 0);
+ goto restart;
+ }
+ /* Fall through. */
+
+ default:
+ /* Referencing a volatile value is a side effect, so don't warn. */
+ if ((DECL_P (exp) || REFERENCE_CLASS_P (exp))
+ && TREE_THIS_VOLATILE (exp))
+ return false;
+
+ /* If this is an expression which has no operands, there is no value
+ to be unused. There are no such language-independent codes,
+ but front ends may define such. */
+ if (EXPRESSION_CLASS_P (exp) && TREE_OPERAND_LENGTH (exp) == 0)
+ return false;
+
+ warn:
+ return warning_at (locus, OPT_Wunused_value, "value computed is not used");
+ }
+}
+
+
/* Print a warning about casts that might indicate violation
of strict aliasing rules if -Wstrict-aliasing is used and
strict aliasing mode is in effect. OTYPE is the original
TREE_TYPE of EXPR, and TYPE the type we're casting to. */
Index: gcc/c-family/c-common.h
===================================================================
--- gcc/c-family/c-common.h (revision 186200)
+++ gcc/c-family/c-common.h (working copy)
@@ -770,10 +770,11 @@ extern void constant_expression_warning
extern void constant_expression_error (tree);
extern bool strict_aliasing_warning (tree, tree, tree);
extern void warnings_for_convert_and_check (tree, tree, tree);
extern tree convert_and_check (tree, tree);
extern void overflow_warning (location_t, tree);
+extern bool warn_if_unused_value (const_tree, location_t);
extern void warn_logical_operator (location_t, enum tree_code, tree,
enum tree_code, tree, enum tree_code, tree);
extern void check_main_parameter_types (tree decl);
extern bool c_determine_visibility (tree);
extern bool same_scalar_type_ignoring_signedness (tree, tree);
Index: gcc/tree.h
===================================================================
--- gcc/tree.h (revision 186200)
+++ gcc/tree.h (working copy)
@@ -5209,11 +5209,10 @@ extern void change_decl_assembler_name (
extern tree unshare_expr (tree);
\f
/* In stmt.c */
extern void expand_expr_stmt (tree);
-extern int warn_if_unused_value (const_tree, location_t);
extern void expand_label (tree);
extern void expand_goto (tree);
extern rtx expand_stack_save (void);
extern void expand_stack_restore (tree);
Index: gcc/cp/cvt.c
===================================================================
--- gcc/cp/cvt.c (revision 186200)
+++ gcc/cp/cvt.c (working copy)
@@ -1106,11 +1106,11 @@ convert_to_void (tree expr, impl_conv_vo
/* Emit a warning (if enabled) when the "effect-less" INDIRECT_REF
operation is stripped off. Note that we don't warn about
- an expression with TREE_NO_WARNING set. (For an example of
such expressions, see build_over_call in call.c.)
- automatic dereferencing of references, since the user cannot
- control it. (See also warn_if_unused_value() in stmt.c.) */
+ control it. (See also warn_if_unused_value() in c-common.c.) */
if (warn_unused_value
&& implicit != ICV_CAST
&& (complain & tf_warning)
&& !TREE_NO_WARNING (expr)
&& !is_reference)
Index: gcc/stmt.c
===================================================================
--- gcc/stmt.c (revision 186200)
+++ gcc/stmt.c (working copy)
@@ -1470,106 +1470,10 @@ expand_expr_stmt (tree exp)
/* Free any temporaries used to evaluate this expression. */
free_temp_slots ();
}
-/* Warn if EXP contains any computations whose results are not used.
- Return 1 if a warning is printed; 0 otherwise. LOCUS is the
- (potential) location of the expression. */
-
-int
-warn_if_unused_value (const_tree exp, location_t locus)
-{
- restart:
- if (TREE_USED (exp) || TREE_NO_WARNING (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;
-
- if (EXPR_HAS_LOCATION (exp))
- locus = EXPR_LOCATION (exp);
-
- switch (TREE_CODE (exp))
- {
- case PREINCREMENT_EXPR:
- case POSTINCREMENT_EXPR:
- case PREDECREMENT_EXPR:
- case POSTDECREMENT_EXPR:
- case MODIFY_EXPR:
- case INIT_EXPR:
- case TARGET_EXPR:
- case CALL_EXPR:
- case TRY_CATCH_EXPR:
- case WITH_CLEANUP_EXPR:
- case EXIT_EXPR:
- case VA_ARG_EXPR:
- return 0;
-
- case BIND_EXPR:
- /* For a binding, warn if no side effect within it. */
- exp = BIND_EXPR_BODY (exp);
- goto restart;
-
- case SAVE_EXPR:
- case NON_LVALUE_EXPR:
- 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. */
- exp = TREE_OPERAND (exp, 1);
- goto restart;
-
- case COMPOUND_EXPR:
- 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;
- exp = TREE_OPERAND (exp, 1);
- goto restart;
-
- case COND_EXPR:
- /* If this is an expression with side effects, don't warn; this
- case commonly appears in macro expansions. */
- if (TREE_SIDE_EFFECTS (exp))
- return 0;
- goto warn;
-
- case INDIRECT_REF:
- /* 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)
- {
- exp = TREE_OPERAND (exp, 0);
- goto restart;
- }
- /* Fall through. */
-
- default:
- /* Referencing a volatile value is a side effect, so don't warn. */
- if ((DECL_P (exp) || REFERENCE_CLASS_P (exp))
- && TREE_THIS_VOLATILE (exp))
- return 0;
-
- /* If this is an expression which has no operands, there is no value
- to be unused. There are no such language-independent codes,
- but front ends may define such. */
- if (EXPRESSION_CLASS_P (exp) && TREE_OPERAND_LENGTH (exp) == 0)
- return 0;
-
- warn:
- warning_at (locus, OPT_Wunused_value, "value computed is not used");
- return 1;
- }
-}
-
\f
/* Generate RTL to return from the current function, with no value.
(That is, we do not do anything about returning any value.) */
void
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: move warning_if_unused_value to c-common.c
2012-04-10 15:26 move warning_if_unused_value to c-common.c Manuel López-Ibáñez
@ 2012-04-10 16:07 ` Gabriel Dos Reis
0 siblings, 0 replies; 2+ messages in thread
From: Gabriel Dos Reis @ 2012-04-10 16:07 UTC (permalink / raw)
To: Manuel López-Ibáñez
Cc: Gcc Patch List, Jason Merrill, Joseph S. Myers, Ian Lance Taylor
On Tue, Apr 10, 2012 at 10:25 AM, Manuel López-Ibáñez
<lopezibanez@gmail.com> wrote:
> It is a C-family FE function, not sure how it ended up in stmt.c.
>
> OK to commit?
OK.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-04-10 16:07 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-04-10 15:26 move warning_if_unused_value to c-common.c Manuel López-Ibáñez
2012-04-10 16:07 ` Gabriel Dos Reis
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).