From 38a979f288a4c7c7e62b334e99a34abd7d855b66 Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Tue, 19 Jan 2016 14:37:49 +0000 Subject: [PATCH] re PR c++/68965 (`-Wunused-parameter` is reported in variadic lambda or function using sizeof...(xs)) 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. From-SVN: r232569 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/pt.c | 7 ++++++- gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/g++.dg/cpp1y/parameter-pack-1.C | 23 +++++++++++++++++++++++ gcc/testsuite/g++.dg/cpp1y/parameter-pack-2.C | 21 +++++++++++++++++++++ 5 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp1y/parameter-pack-1.C create mode 100644 gcc/testsuite/g++.dg/cpp1y/parameter-pack-2.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f9fce9d..ac2bbae 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -6,6 +6,9 @@ * cp-tree.h (clear_cv_cache, clear_fold_cache): Declare. * decl.c (finish_enum_value_list): Call them. + PR c++/68965 + * pt.c (tsubst_copy): Mark elements in expanded vector as used. + 2016-01-18 Patrick Palka PR c++/11858 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 866b4b1..6062ebe 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -14010,7 +14010,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 f360afd..a75c88e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-01-19 Marek Polacek + + 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 PR target/69135 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 0000000..27a6bf9 --- /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 + 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 0000000..9520875 --- /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 + auto operator()(Ts&&... xs) // { dg-warning "unused parameter" } + { + } +}; + +int main() +{ + count(1,2,3); + count_struct{}(1,2,3); +} -- 2.7.4