re PR c++/69095 (internal compiler error: in dependent_type_p, at cp/pt.c:19399)
authorPaolo Carlini <paolo.carlini@oracle.com>
Mon, 23 May 2016 19:24:22 +0000 (19:24 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 23 May 2016 19:24:22 +0000 (19:24 +0000)
/cp
2016-05-22  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/69095
* parser.c (cp_parser_default_argument): Call
check_for_bare_parameter_packs.
(cp_parser_late_parsing_default_args): Likewise.

/testsuite
2016-05-22  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/69095
* g++.dg/cpp0x/variadic168.C: New.

From-SVN: r236610

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/variadic168.C [new file with mode: 0644]

index e6f4ac98f9f6d6a9174f27f7f28e094e7de5deec..764754d54d126203fee059ff0221800e3de19330 100644 (file)
@@ -1,3 +1,8 @@
+2016-05-23  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/69095
+       * parser.c (cp_parser_initializer): Use check_for_bare_parameter_packs.
+
 2016-05-23  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * pt.c (check_for_bare_parameter_packs): Improve error message
index 076e7f368476e6fd9a3d099d0080f641acb3df7f..a68a510c6601519633d3f8a3ff0bcce655b153b6 100644 (file)
@@ -20800,6 +20800,9 @@ cp_parser_initializer (cp_parser* parser, bool* is_direct_init,
       init = error_mark_node;
     }
 
+  if (check_for_bare_parameter_packs (init))
+    init = error_mark_node;
+
   return init;
 }
 
index b4ca509c2e145a414374786fa4803468d828cc5a..80b62ad5225e0ec0ab4b84282f2a71cc947e75a5 100644 (file)
@@ -1,3 +1,8 @@
+2016-05-23  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/69095
+       * g++.dg/cpp0x/variadic168.C: New.
+
 2016-05-23  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * g++.dg/cpp0x/pr31445.C: Test column number too.
diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic168.C b/gcc/testsuite/g++.dg/cpp0x/variadic168.C
new file mode 100644 (file)
index 0000000..202897e
--- /dev/null
@@ -0,0 +1,18 @@
+// PR c++/69095
+// { dg-do compile { target c++11 } }
+
+struct B1 {
+  template <typename Ret, typename... Args, unsigned = sizeof(Args)> // { dg-error "parameter packs not expanded" }
+  void insert(Ret);
+};
+
+struct B2 {
+  template <typename Ret, typename... Args>
+  void insert(Ret, unsigned = sizeof(Args)); // { dg-error "parameter packs not expanded" }
+};
+
+template <typename Ret, typename... Args, unsigned = sizeof(Args)> // { dg-error "parameter packs not expanded" }
+void insert1(Ret);
+
+template <typename Ret, typename... Args>
+void insert2(Ret, unsigned = sizeof(Args)); // { dg-error "parameter packs not expanded" }