diff options
author | Jakub Jelinek <jakub@redhat.com> | 2017-03-01 09:35:55 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2017-03-01 09:35:55 +0100 |
commit | e3e9e8ca83de62be68d8b589e9ddf9638f0e8366 (patch) | |
tree | 277c2735ad213472aae49be30030f050ae3f2f41 /gcc | |
parent | 0f3f4ffeafae6e4ae50bba50fae11ed82ab1b33b (diff) | |
download | gcc-e3e9e8ca83de62be68d8b589e9ddf9638f0e8366.zip gcc-e3e9e8ca83de62be68d8b589e9ddf9638f0e8366.tar.gz gcc-e3e9e8ca83de62be68d8b589e9ddf9638f0e8366.tar.bz2 |
re PR c++/79746 (Confusing -Wunused-but-set-parameter warning with virtual inheritance)
PR c++/79746
* init.c (emit_mem_initializers): When not constructing vbases of
abstract classes, mark arguments as read for
-Wunused-but-set-parameter.
* g++.dg/warn/Wunused-parm-9.C: New test.
From-SVN: r245802
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/init.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/warn/Wunused-parm-9.C | 12 |
4 files changed, 28 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b0e589c..1c3f1e8 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2017-03-01 Jakub Jelinek <jakub@redhat.com> + + PR c++/79746 + * init.c (emit_mem_initializers): When not constructing vbases of + abstract classes, mark arguments as read for + -Wunused-but-set-parameter. + 2017-02-28 Jason Merrill <jason@redhat.com> Class template argument deduction refinements diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 5520963..7ded37e 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1217,6 +1217,12 @@ emit_mem_initializers (tree mem_inits) /* C++14 DR1658 Means we do not have to construct vbases of abstract classes. */ construct_virtual_base (subobject, arguments); + else + /* When not constructing vbases of abstract classes, at least mark + the arguments expressions as read to avoid + -Wunused-but-set-parameter false positives. */ + for (tree arg = arguments; arg; arg = TREE_CHAIN (arg)) + mark_exp_read (TREE_VALUE (arg)); if (inherited_base) pop_deferring_access_checks (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3692337..4cce675 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2017-03-01 Jakub Jelinek <jakub@redhat.com> + PR c++/79746 + * g++.dg/warn/Wunused-parm-9.C: New test. + PR tree-optimization/79734 * g++.dg/opt/pr79734.C: New test. diff --git a/gcc/testsuite/g++.dg/warn/Wunused-parm-9.C b/gcc/testsuite/g++.dg/warn/Wunused-parm-9.C new file mode 100644 index 0000000..0dcc229 --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/Wunused-parm-9.C @@ -0,0 +1,12 @@ +// PR c++/79746 +// { dg-do compile } +// { dg-options "-Wunused-but-set-parameter" } + +struct A { + A (const char *x) : a(x) {} // { dg-bogus "set but not used" } + virtual int foo () = 0; + const char *a; +}; +struct B : public virtual A { + B (const char *x) : A(x) {} // { dg-bogus "set but not used" } +}; |