diff options
author | Marek Polacek <polacek@redhat.com> | 2016-01-19 14:37:49 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2016-01-19 14:37:49 +0000 |
commit | 38a979f288a4c7c7e62b334e99a34abd7d855b66 (patch) | |
tree | 592ae28558a7ceb3f24a65532f147d690ffdac82 | |
parent | f4d0971224c2218b6e954db26627933f3f2a49da (diff) | |
download | gcc-38a979f288a4c7c7e62b334e99a34abd7d855b66.zip gcc-38a979f288a4c7c7e62b334e99a34abd7d855b66.tar.gz gcc-38a979f288a4c7c7e62b334e99a34abd7d855b66.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/pt.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-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, 59 insertions, 1 deletions
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 <ppalka@gcc.gnu.org> 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 <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> 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<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 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<typename... Ts> + auto operator()(Ts&&... xs) // { dg-warning "unused parameter" } + { + } +}; + +int main() +{ + count(1,2,3); + count_struct{}(1,2,3); +} |