diff options
author | mpolacek <mpolacek@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-01-19 17:11:53 +0000 |
---|---|---|
committer | mpolacek <mpolacek@138bc75d-0d04-0410-961f-82ee72b054a4> | 2016-01-19 17:11:53 +0000 |
commit | 75082c6e724480e65b64854bc187823c95b02589 (patch) | |
tree | a727fdf25337af5379fd90f6c1e5c94f67cdf12e | |
parent | 6d76ce582040b9fb58c48abeaa57cd1c92d31f65 (diff) | |
download | gcc-75082c6e724480e65b64854bc187823c95b02589.tar.gz |
PR c++/68965
* pt.c (tsubst_copy): Mark elements in expanded vector as used.
* g++.dg/cpp1y/parameter-pack-1.C: New test.
* g++.dg/cpp1y/parameter-pack-2.C: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-5-branch@232574 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/cp/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/cp/pt.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/parameter-pack-1.C | 23 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/parameter-pack-2.C | 21 |
5 files changed, 67 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 1bdf35ba8e8..731205741f3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +2016-01-19 Marek Polacek <polacek@redhat.com> + + Backported from mainline + 2016-01-19 Marek Polacek <polacek@redhat.com> + + PR c++/68965 + * pt.c (tsubst_copy): Mark elements in expanded vector as used. + 2016-01-08 Marek Polacek <polacek@redhat.com> PR c++/68449 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 3069c28181b..c0ceaa44cb4 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -13248,7 +13248,12 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl) --c_inhibit_evaluation_warnings; if (TREE_CODE (expanded) == TREE_VEC) - len = TREE_VEC_LENGTH (expanded); + { + len = TREE_VEC_LENGTH (expanded); + /* Set TREE_USED for the benefit of -Wunused. */ + for (int i = 0; i < len; i++) + TREE_USED (TREE_VEC_ELT (expanded, i)) = true; + } if (expanded == error_mark_node) return error_mark_node; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e662aaf9343..b46e679db51 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2016-01-19 Marek Polacek <polacek@redhat.com> + + Backported from mainline + 2016-01-19 Marek Polacek <polacek@redhat.com> + + PR c++/68965 + * g++.dg/cpp1y/parameter-pack-1.C: New test. + * g++.dg/cpp1y/parameter-pack-2.C: New test. + 2016-01-19 Kyrylo Tkachov <kyrylo.tkachov@arm.com> Backport from mainline diff --git a/gcc/testsuite/g++.dg/cpp1y/parameter-pack-1.C b/gcc/testsuite/g++.dg/cpp1y/parameter-pack-1.C new file mode 100644 index 00000000000..27a6bf9dedb --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/parameter-pack-1.C @@ -0,0 +1,23 @@ +// PR c++/68965 +// { dg-do compile { target c++14 } } +// { dg-options "-Wall -Wextra" } + +auto count = [](auto&&... xs) +{ + return sizeof...(xs); +}; + +struct count_struct +{ + template<typename... Ts> + auto operator()(Ts&&... xs) + { + return sizeof...(xs); + } +}; + +int main() +{ + count(1,2,3); + count_struct{}(1,2,3); +} diff --git a/gcc/testsuite/g++.dg/cpp1y/parameter-pack-2.C b/gcc/testsuite/g++.dg/cpp1y/parameter-pack-2.C new file mode 100644 index 00000000000..95208758a6b --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/parameter-pack-2.C @@ -0,0 +1,21 @@ +// PR c++/68965 +// { dg-do compile { target c++14 } } +// { dg-options "-Wall -Wextra" } + +auto count = [](auto&&... xs) // { dg-warning "unused parameter" } +{ +}; + +struct count_struct +{ + template<typename... Ts> + auto operator()(Ts&&... xs) // { dg-warning "unused parameter" } + { + } +}; + +int main() +{ + count(1,2,3); + count_struct{}(1,2,3); +} |