re PR c++/39551 (C++ frontend not warn about unused dereference operator with -Wunused-value)
PR c++/39551 * gcc/cp/call.c (build_over_call): Set TREE_NO_WARNING on the compiler-generated INDIRECT_REF expression. * gcc/cp/cvt.c (convert_to_void): Emit warning when stripping off INDIRECT_REF. * gcc/testsuite/g++.dg/warn/Wunused-13.C: New testcase. From-SVN: r146132
This commit is contained in:
parent
2470b60106
commit
041d7a2796
|
@ -1,3 +1,11 @@
|
|||
2009-04-15 Le-Chun Wu <lcwu@google.com>
|
||||
|
||||
PR c++/39551
|
||||
* call.c (build_over_call): Set TREE_NO_WARNING on the
|
||||
compiler-generated INDIRECT_REF expression.
|
||||
* cvt.c (convert_to_void): Emit warning when stripping off
|
||||
INDIRECT_REF.
|
||||
|
||||
2009-04-14 Diego Novillo <dnovillo@google.com>
|
||||
|
||||
* parser.c (cp_parser_type_specifier_seq): Move call to
|
||||
|
|
|
@ -5419,6 +5419,7 @@ build_over_call (struct z_candidate *cand, int flags, tsubst_flags_t complain)
|
|||
if (test)
|
||||
t = build3 (COND_EXPR, TREE_TYPE (t), test, arg0, t);
|
||||
val = cp_build_indirect_ref (t, 0, complain);
|
||||
TREE_NO_WARNING (val) = 1;
|
||||
}
|
||||
|
||||
return val;
|
||||
|
|
15
gcc/cp/cvt.c
15
gcc/cp/cvt.c
|
@ -870,7 +870,20 @@ convert_to_void (tree expr, const char *implicit, tsubst_flags_t complain)
|
|||
implicit ? implicit : "void context");
|
||||
}
|
||||
if (is_reference || !is_volatile || !is_complete || TREE_ADDRESSABLE (type))
|
||||
expr = TREE_OPERAND (expr, 0);
|
||||
{
|
||||
/* 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.) */
|
||||
if (warn_unused_value
|
||||
&& (complain & tf_warning)
|
||||
&& !TREE_NO_WARNING (expr)
|
||||
&& !is_reference)
|
||||
warning (OPT_Wunused_value, "value computed is not used");
|
||||
expr = TREE_OPERAND (expr, 0);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2009-04-15 Le-Chun Wu <lcwu@google.com>
|
||||
|
||||
PR c++/39551
|
||||
* g++.dg/warn/Wunused-13.C: New testcase.
|
||||
|
||||
2009-04-15 Ian Lance Taylor <iant@google.com>
|
||||
|
||||
* gcc.dg/Wenum-compare-1.c: New testcase.
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
// Test whether -Wunused handles effectless indirect_ref operation ('*').
|
||||
// { dg-do compile }
|
||||
// { dg-options "-Wunused" }
|
||||
|
||||
void Foo(int* x) {
|
||||
*x++; // { dg-warning "value computed is not used" }
|
||||
}
|
Loading…
Reference in New Issue