mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-19 01:09:20 +08:00
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:
parent
5f6eeeb362
commit
02a1a68c6a
@ -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.
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
|
45
gcc/testsuite/g++.old-deja/g++.other/warn7.C
Normal file
45
gcc/testsuite/g++.old-deja/g++.other/warn7.C
Normal 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
|
||||
}
|
Loading…
Reference in New Issue
Block a user