diff options
author | Jason Merrill <jason@redhat.com> | 2018-04-04 20:09:05 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2018-04-04 20:09:05 -0400 |
commit | 0dd285f9a8da75fd01a36acb6b427a9afbd189ce (patch) | |
tree | 782fbaacb947cb7b2b6af84577f39a2d168e5b10 /gcc | |
parent | 01e1df9ff6f1742b31a033fdb65c8ebb5ea0e983 (diff) | |
download | gcc-0dd285f9a8da75fd01a36acb6b427a9afbd189ce.zip gcc-0dd285f9a8da75fd01a36acb6b427a9afbd189ce.tar.gz gcc-0dd285f9a8da75fd01a36acb6b427a9afbd189ce.tar.bz2 |
PR c++/84936 - ICE with unexpanded pack in mem-initializer.
* parser.c (cp_parser_mem_initializer_list): Call
check_for_bare_parameter_packs.
From-SVN: r259107
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/variadic175.C | 10 |
3 files changed, 23 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a691763..62f61ea 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-04-04 Jason Merrill <jason@redhat.com> + + PR c++/84936 - ICE with unexpanded pack in mem-initializer. + * parser.c (cp_parser_mem_initializer_list): Call + check_for_bare_parameter_packs. + 2018-04-04 Jakub Jelinek <jakub@redhat.com> PR inline-asm/85172 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index f6fbcf6..59eb822 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -14381,10 +14381,15 @@ cp_parser_mem_initializer_list (cp_parser* parser) /* Parse the mem-initializer. */ mem_initializer = cp_parser_mem_initializer (parser); /* If the next token is a `...', we're expanding member initializers. */ - if (cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS)) + bool ellipsis = cp_lexer_next_token_is (parser->lexer, CPP_ELLIPSIS); + if (ellipsis + || (mem_initializer != error_mark_node + && check_for_bare_parameter_packs (TREE_PURPOSE + (mem_initializer)))) { /* Consume the `...'. */ - cp_lexer_consume_token (parser->lexer); + if (ellipsis) + cp_lexer_consume_token (parser->lexer); /* The TREE_PURPOSE must be a _TYPE, because base-specifiers can be expanded but members cannot. */ diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic175.C b/gcc/testsuite/g++.dg/cpp0x/variadic175.C new file mode 100644 index 0000000..969f4b0 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic175.C @@ -0,0 +1,10 @@ +// PR c++/84936 +// { dg-do compile { target c++11 } } + +struct A +{ + template<typename... T> A(T... t) + : decltype(t)() {} // { dg-error "parameter pack" } +}; + +A a; |