diff options
author | Jason Merrill <jason@redhat.com> | 2017-01-10 14:04:22 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2017-01-10 14:04:22 -0500 |
commit | 2af5cb50138bbbf597b143740f42d4e9d1c37816 (patch) | |
tree | f5cce458015bffca437d25dc74c17219c8e3fe36 /gcc | |
parent | 491b3c5f229565df2e58ddfbf732eef82f9ad0ab (diff) | |
download | gcc-2af5cb50138bbbf597b143740f42d4e9d1c37816.zip gcc-2af5cb50138bbbf597b143740f42d4e9d1c37816.tar.gz gcc-2af5cb50138bbbf597b143740f42d4e9d1c37816.tar.bz2 |
FI 20, decomposition declaration with parenthesized initializer.
* parser.c (cp_parser_decomposition_declaration): Use
cp_parser_initializer.
From-SVN: r244282
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 21 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1z/decomp20.C | 10 |
3 files changed, 22 insertions, 15 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 5a84068..25f5a85 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2017-01-10 Jason Merrill <jason@redhat.com> + + FI 20, decomposition declaration with parenthesized initializer. + * parser.c (cp_parser_decomposition_declaration): Use + cp_parser_initializer. + 2017-01-09 Jason Merrill <jason@redhat.com> Implement P0195R2, C++17 variadic using. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index aa045c4..4517313 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -12923,7 +12923,7 @@ cp_parser_simple_declaration (cp_parser* parser, /* Helper of cp_parser_simple_declaration, parse a decomposition declaration. decl-specifier-seq ref-qualifier [opt] [ identifier-list ] - brace-or-equal-initializer ; */ + initializer ; */ static tree cp_parser_decomposition_declaration (cp_parser *parser, @@ -13022,21 +13022,12 @@ cp_parser_decomposition_declaration (cp_parser *parser, || cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)) { bool non_constant_p = false, is_direct_init = false; - tree initializer; *init_loc = cp_lexer_peek_token (parser->lexer)->location; - /* Parse the initializer. */ - if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) - { - initializer = cp_parser_braced_list (parser, &non_constant_p); - CONSTRUCTOR_IS_DIRECT_INIT (initializer) = 1; - is_direct_init = true; - } - else - { - /* Consume the `='. */ - cp_parser_require (parser, CPP_EQ, RT_EQ); - initializer = cp_parser_initializer_clause (parser, &non_constant_p); - } + tree initializer = cp_parser_initializer (parser, &is_direct_init, + &non_constant_p); + if (TREE_CODE (initializer) == TREE_LIST) + initializer = build_x_compound_expr_from_list (initializer, ELK_INIT, + tf_warning_or_error); if (decl != error_mark_node) { diff --git a/gcc/testsuite/g++.dg/cpp1z/decomp20.C b/gcc/testsuite/g++.dg/cpp1z/decomp20.C new file mode 100644 index 0000000..8831b71 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1z/decomp20.C @@ -0,0 +1,10 @@ +// { dg-options -std=c++1z } + +struct A { int i,j; }; + +A f(); + +int main() +{ + auto [i,j] (f()); +} |