diff options
-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); +} |