optimize.c (maybe_clone_body): Copy parameter names and locations.

cp:
	* optimize.c (maybe_clone_body): Copy parameter names and locations.
testsuite:
	* g++.old-deja/g++.other/warn7.C: New test.

From-SVN: r41627
This commit is contained in:
Nathan Sidwell 2001-04-27 12:47:22 +00:00 committed by Nathan Sidwell
parent 5f6eeeb362
commit 02a1a68c6a
4 changed files with 79 additions and 2 deletions

View File

@ -1,3 +1,7 @@
2001-04-27 Nathan Sidwell <nathan@codesourcery.com>
* optimize.c (maybe_clone_body): Copy parameter names and locations.
2001-04-27 Nathan Sidwell <nathan@codesourcery.com>
* cp-tree.h (adjust_clone_args): Prototype new function.

View File

@ -1019,6 +1019,7 @@ maybe_clone_body (fn)
{
inline_data id;
tree clone;
int first = 1;
/* We only clone constructors and destructors. */
if (!DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (fn)
@ -1032,7 +1033,7 @@ maybe_clone_body (fn)
list. */
for (clone = TREE_CHAIN (fn);
clone && DECL_CLONED_FUNCTION_P (clone);
clone = TREE_CHAIN (clone))
clone = TREE_CHAIN (clone), first = 0)
{
tree parm;
tree clone_parm;
@ -1053,6 +1054,30 @@ maybe_clone_body (fn)
DECL_NOT_REALLY_EXTERN (clone) = DECL_NOT_REALLY_EXTERN (fn);
TREE_PUBLIC (clone) = TREE_PUBLIC (fn);
/* Adjust the parameter names and locations. */
parm = DECL_ARGUMENTS (fn);
clone_parm = DECL_ARGUMENTS (clone);
if (DECL_HAS_IN_CHARGE_PARM_P (fn))
parm = TREE_CHAIN (parm);
if (DECL_HAS_VTT_PARM_P (fn))
parm = TREE_CHAIN (parm);
if (DECL_HAS_VTT_PARM_P (clone))
clone_parm = TREE_CHAIN (clone_parm);
for (; parm;
parm = TREE_CHAIN (parm), clone_parm = TREE_CHAIN (clone_parm))
{
DECL_ABSTRACT_ORIGIN (clone_parm) = parm;
/* The name may have changed from the declaration. */
DECL_NAME (clone_parm) = DECL_NAME (parm);
DECL_SOURCE_FILE (clone_parm) = DECL_SOURCE_FILE (parm);
DECL_SOURCE_LINE (clone_parm) = DECL_SOURCE_LINE (parm);
/* We should only give unused information for one clone. */
if (!first)
TREE_USED (clone_parm) = 1;
}
/* Start processing the function. */
push_to_top_level ();
start_function (NULL_TREE, clone, NULL_TREE, SF_PRE_PARSED);
@ -1115,7 +1140,6 @@ maybe_clone_body (fn)
function. */
else
{
DECL_ABSTRACT_ORIGIN (clone_parm) = parm;
splay_tree_insert (id.decl_map,
(splay_tree_key) parm,
(splay_tree_value) clone_parm);

View File

@ -1,3 +1,7 @@
2001-04-27 Nathan Sidwell <nathan@codesourcery.com>
* g++.old-deja/g++.other/warn7.C: New test.
2001-04-27 Nathan Sidwell <nathan@codesourcery.com>
* g++.old-deja/g++.other/defarg9.C: New test.

View File

@ -0,0 +1,45 @@
// Build don't link:
// Special g++ Options: -W -Wall
//
// Copyright (C) 2001 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 26 April 2001 <nathan@codesourcery.com>
// Bug 2356. Unused parameter information introduced in a ctor
// definition was not propagated to clones, leading to missed or
// unwarranted unused parameter warnings, possibly given twice.
struct X
{
X(int i);
void foo (int i);
};
void foo (int i);
X::X(int)
{
}
void X::foo (int)
{
}
void foo (int)
{
}
struct Y
{
Y(int);
void bar (int);
};
void bar (int);
Y::Y(int i)
{ // WARNING - unused parameter
}
void Y::bar (int i)
{ // WARNING - unused parameter
}
void bar (int i)
{ // WARNING - unused parameter
}