aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMarek Polacek <polacek@redhat.com>2016-01-19 14:37:49 +0000
committerMarek Polacek <mpolacek@gcc.gnu.org>2016-01-19 14:37:49 +0000
commit38a979f288a4c7c7e62b334e99a34abd7d855b66 (patch)
tree592ae28558a7ceb3f24a65532f147d690ffdac82 /gcc
parentf4d0971224c2218b6e954db26627933f3f2a49da (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/pt.c7
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/parameter-pack-1.C23
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/parameter-pack-2.C21
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);
+}