aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2012-01-06 18:19:05 -0500
committerJason Merrill <jason@gcc.gnu.org>2012-01-06 18:19:05 -0500
commitb2218da7a76e54ab5b82965cbb5dee3081012dc6 (patch)
treeff89be9d6e542c3db00f07a240ac0ab4679c3bc1 /gcc
parent0850f694fb46cd1500ca89364c5240ddf29cfd9c (diff)
downloadgcc-b2218da7a76e54ab5b82965cbb5dee3081012dc6.zip
gcc-b2218da7a76e54ab5b82965cbb5dee3081012dc6.tar.gz
gcc-b2218da7a76e54ab5b82965cbb5dee3081012dc6.tar.bz2
DR 686 PR c++/47450
DR 686 PR c++/47450 * parser.c (cp_parser_new_expression): Set type_definition_forbidden_message. From-SVN: r182975
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/parser.c7
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/parse/new5.C4
4 files changed, 20 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 041722d..e31b386 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,10 @@
2012-01-06 Jason Merrill <jason@redhat.com>
+ 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 0ae55a2..9be68d0 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 8fc06e4..cedc882 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2012-01-06 Jason Merrill <jason@redhat.com>
+
+ * g++.dg/parse/new5.C: New.
+
2012-01-06 Patrick Marlier <patrick.marlier@gmail.com>
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 0000000..83937c6
--- /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" }