summaryrefslogtreecommitdiff
path: root/gcc/cp/semantics.c
diff options
context:
space:
mode:
authornathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2003-09-18 17:07:53 +0000
committernathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>2003-09-18 17:07:53 +0000
commit0767cba934e92d31349601c9e58281878096a310 (patch)
treee282a8b31bbf685e2f19352bd0b60a68eddc7257 /gcc/cp/semantics.c
parent0deb47ed60e5ed86f389d3d6fe5b2afdceb897cb (diff)
downloadgcc-0767cba934e92d31349601c9e58281878096a310.tar.gz
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@71528 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/cp/semantics.c')
-rw-r--r--gcc/cp/semantics.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 37dca0a6a57..ef42579f349 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -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. */