From b2218da7a76e54ab5b82965cbb5dee3081012dc6 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 6 Jan 2012 18:19:05 -0500 Subject: [PATCH] DR 686 PR c++/47450 DR 686 PR c++/47450 * parser.c (cp_parser_new_expression): Set type_definition_forbidden_message. From-SVN: r182975 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/parser.c | 7 +++++++ gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/parse/new5.C | 4 ++++ 4 files changed, 20 insertions(+) create mode 100644 gcc/testsuite/g++.dg/parse/new5.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 041722d7179..e31b386eede 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2012-01-06 Jason Merrill + DR 686 + PR c++/47450 + * parser.c (cp_parser_new_expression): Set + type_definition_forbidden_message. + PR c++/6057 PR c++/48051 PR c++/50855 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 0ae55a25090..9be68d0e993 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -6668,10 +6668,17 @@ cp_parser_new_expression (cp_parser* parser) if (cp_lexer_next_token_is (parser->lexer, CPP_OPEN_PAREN)) { cp_token *token; + const char *saved_message = parser->type_definition_forbidden_message; + /* Consume the `('. */ cp_lexer_consume_token (parser->lexer); + /* Parse the type-id. */ + parser->type_definition_forbidden_message + = G_("types may not be defined in a new-expression"); type = cp_parser_type_id (parser); + parser->type_definition_forbidden_message = saved_message; + /* Look for the closing `)'. */ cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN); token = cp_lexer_peek_token (parser->lexer); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8fc06e4c6f5..cedc882385f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2012-01-06 Jason Merrill + + * g++.dg/parse/new5.C: New. + 2012-01-06 Patrick Marlier PR testsuite/51655 diff --git a/gcc/testsuite/g++.dg/parse/new5.C b/gcc/testsuite/g++.dg/parse/new5.C new file mode 100644 index 00000000000..83937c6e9c1 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/new5.C @@ -0,0 +1,4 @@ +// PR c++/47450 + +struct A { }; +A* ap = new(struct: A { }); // { dg-error "types may not be defined" } -- 2.30.2