summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormpolacek <mpolacek@138bc75d-0d04-0410-961f-82ee72b054a4>2016-01-19 17:11:53 +0000
committermpolacek <mpolacek@138bc75d-0d04-0410-961f-82ee72b054a4>2016-01-19 17:11:53 +0000
commit75082c6e724480e65b64854bc187823c95b02589 (patch)
treea727fdf25337af5379fd90f6c1e5c94f67cdf12e
parent6d76ce582040b9fb58c48abeaa57cd1c92d31f65 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/cp/pt.c7
-rw-r--r--gcc/testsuite/ChangeLog9
-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, 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);
+}