aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2003-09-18 17:07:53 +0000
committerNathan Sidwell <nathan@gcc.gnu.org>2003-09-18 17:07:53 +0000
commit85b22f7857a745d8ec12d88d61b770a598208ecf (patch)
treee282a8b31bbf685e2f19352bd0b60a68eddc7257 /gcc
parentf857cb427e56de666cafa31769bb6208358c374c (diff)
downloadgcc-85b22f7857a745d8ec12d88d61b770a598208ecf.zip
gcc-85b22f7857a745d8ec12d88d61b770a598208ecf.tar.gz
gcc-85b22f7857a745d8ec12d88d61b770a598208ecf.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/optimize.c12
-rw-r--r--gcc/cp/semantics.c20
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/warn/Wunused-4.C30
5 files changed, 65 insertions, 9 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 1d3c8b2..ad41de2 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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.
diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c
index 3204311..2b7df6c 100644
--- a/gcc/cp/optimize.c
+++ b/gcc/cp/optimize.c
@@ -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 ();
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 37dca0a..ef42579 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. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dcef4f4..4315a0f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
diff --git a/gcc/testsuite/g++.dg/warn/Wunused-4.C b/gcc/testsuite/g++.dg/warn/Wunused-4.C
new file mode 100644
index 0000000..9018e92e
--- /dev/null
+++ b/gcc/testsuite/g++.dg/warn/Wunused-4.C
@@ -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);
+}