re PR c++/63786 (crash on argument pack in switch case)
/cp 2014-11-25 Paolo Carlini <paolo.carlini@oracle.com> 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 <paolo.carlini@oracle.com> PR c++/63786 * g++.dg/cpp0x/variadic163.C: New. From-SVN: r218043
This commit is contained in:
parent
43ba1c6c3e
commit
a959b33fc4
4 changed files with 37 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
2014-11-25 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
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 <jwakely@redhat.com>
|
||||
Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2014-11-25 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/63786
|
||||
* g++.dg/cpp0x/variadic163.C: New.
|
||||
|
||||
2014-11-25 Ilya Enkovich <ilya.enkovich@intel.com>
|
||||
|
||||
PR target/64056
|
||||
|
|
21
gcc/testsuite/g++.dg/cpp0x/variadic163.C
Normal file
21
gcc/testsuite/g++.dg/cpp0x/variadic163.C
Normal file
|
@ -0,0 +1,21 @@
|
|||
// PR c++/63786
|
||||
// { dg-do compile { target c++11 } }
|
||||
// { dg-options "" }
|
||||
|
||||
template <int... Is>
|
||||
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);
|
||||
}
|
Loading…
Add table
Reference in a new issue