From: paolo Date: Tue, 25 Nov 2014 13:48:49 +0000 (+0000) Subject: /cp X-Git-Tag: upstream/5.3.0~3724 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=18adeccd008553a7634794c9b8a8209619742902;p=platform%2Fupstream%2Flinaro-gcc.git /cp 2014-11-25 Paolo Carlini PR c++/63786 * parser.c (cp_parser_label_for_labeled_statement): Check the case with check_for_bare_parameter_packs. /testsuite 2014-11-25 Paolo Carlini PR c++/63786 * g++.dg/cpp0x/variadic163.C: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@218043 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7f17929..f1ef2e0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-11-25 Paolo Carlini + + PR c++/63786 + * parser.c (cp_parser_label_for_labeled_statement): Check the case + with check_for_bare_parameter_packs. + 2014-11-24 Jonathan Wakely Paolo Carlini diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index b106f3b..b8e182a 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -9820,14 +9820,17 @@ cp_parser_label_for_labeled_statement (cp_parser* parser, tree attributes) cp_lexer_consume_token (parser->lexer); /* Parse the constant-expression. */ expr = cp_parser_constant_expression (parser); + if (check_for_bare_parameter_packs (expr)) + expr = error_mark_node; ellipsis = cp_lexer_peek_token (parser->lexer); if (ellipsis->type == CPP_ELLIPSIS) { /* Consume the `...' token. */ cp_lexer_consume_token (parser->lexer); - expr_hi = - cp_parser_constant_expression (parser); + expr_hi = cp_parser_constant_expression (parser); + if (check_for_bare_parameter_packs (expr_hi)) + expr_hi = error_mark_node; /* We don't need to emit warnings here, as the common code will do this for us. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d8a82d6..b577824 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-11-25 Paolo Carlini + + PR c++/63786 + * g++.dg/cpp0x/variadic163.C: New. + 2014-11-25 Ilya Enkovich PR target/64056 diff --git a/gcc/testsuite/g++.dg/cpp0x/variadic163.C b/gcc/testsuite/g++.dg/cpp0x/variadic163.C new file mode 100644 index 0000000..1f3d909 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/variadic163.C @@ -0,0 +1,21 @@ +// PR c++/63786 +// { dg-do compile { target c++11 } } +// { dg-options "" } + +template +int f(int i) { + switch (i) { + case Is: // { dg-error "not expanded" } + return 0; + } + + switch (i) { + case 0 ...Is: // { dg-error "not expanded" } + return 0; + } + return 0; +} + +int main() { + f<1,2,3>(1); +}