re PR c++/9848 (missing 'unused parameter' warning.)

cp:
	PR c++/9848
	* optimize.c (maybe_clone_body): Don't set MARK_USED on parameters
	here.
	* semantics.c (expand_body): Set it here on the remaining clones.
testsuite:
	PR c++/9848
	* g++.dg/warn/Wunused-4.C: New test.

From-SVN: r71528
This commit is contained in:
Nathan Sidwell 2003-09-18 17:07:53 +00:00 committed by Nathan Sidwell
parent f857cb427e
commit 85b22f7857
5 changed files with 65 additions and 9 deletions

View File

@ -1,3 +1,10 @@
2003-09-18 Nathan Sidwell <nathan@codesourcery.com>
PR c++/9848
* optimize.c (maybe_clone_body): Don't set MARK_USED on parameters
here.
* semantics.c (expand_body): Set it here on the remaining clones.
2003-09-18 Roger Sayle <roger@eyesopen.com>
* lex.c (init_operators): Remove operator_name_info for FFS_EXPR.

View File

@ -120,7 +120,6 @@ bool
maybe_clone_body (tree fn)
{
tree clone;
bool first = true;
/* We only clone constructors and destructors. */
if (!DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn)
@ -139,7 +138,7 @@ maybe_clone_body (tree fn)
list. */
for (clone = TREE_CHAIN (fn);
clone && DECL_CLONED_FUNCTION_P (clone);
clone = TREE_CHAIN (clone), first = false)
clone = TREE_CHAIN (clone))
{
tree parm;
tree clone_parm;
@ -175,13 +174,8 @@ maybe_clone_body (tree fn)
clone_parm = TREE_CHAIN (clone_parm);
for (; parm;
parm = TREE_CHAIN (parm), clone_parm = TREE_CHAIN (clone_parm))
{
/* Update this parameter. */
update_cloned_parm (parm, clone_parm);
/* We should only give unused information for one clone. */
if (!first)
TREE_USED (clone_parm) = 1;
}
/* Update this parameter. */
update_cloned_parm (parm, clone_parm);
/* Start processing the function. */
push_to_top_level ();

View File

@ -2887,6 +2887,26 @@ expand_body (tree fn)
static duration objects. */
if (DECL_STATIC_DESTRUCTOR (fn))
static_dtors = tree_cons (NULL_TREE, fn, static_dtors);
if (DECL_CLONED_FUNCTION_P (fn))
{
/* If this is a clone, go through the other clones now and mark
their parameters used. We have to do that here, as we don't
know whether any particular clone will be expanded, and
therefore cannot pick one arbitrarily. */
tree probe;
for (probe = TREE_CHAIN (DECL_CLONED_FUNCTION (fn));
probe && DECL_CLONED_FUNCTION_P (probe);
probe = TREE_CHAIN (probe))
{
tree parms;
for (parms = DECL_ARGUMENTS (probe);
parms; parms = TREE_CHAIN (parms))
TREE_USED (parms) = 1;
}
}
}
/* Generate RTL for FN. */

View File

@ -1,3 +1,8 @@
2003-09-18 Nathan Sidwell <nathan@codesourcery.com>
PR c++/9848
* g++.dg/warn/Wunused-4.C: New test.
2003-09-18 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/12316

View File

@ -0,0 +1,30 @@
// { dg-do compile }
// { dg-options "-Wunused-parameter" }
// Copyright (C) 2003 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 15 Sep 2003 <nathan@codesourcery.com>
// Origin: yotamm@mellanox.co.il
// PR c++/9848. Missing warning
struct C1 {
// Only use in-charge ctor
C1(int bi) {} // { dg-warning "unused parameter" "" }
};
struct C2 {
// Only use base ctor
C2(int bi) {} // { dg-warning "unused parameter" "" }
};
struct D : C2
{
D (int) : C2 (1) {}
};
void show_compile_warning ()
{
C1 c1 (1);
D d (1);
}