From 8318b14cae7802b2c9e2158dfccfaa7a63bed39a Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Fri, 11 Mar 2011 17:47:59 -0500 Subject: re PR c++/47144 (Doesn't reject attempt to define type in template argument; results in weird parse) PR c++/47144 * parser.c (cp_parser_template_type_arg): Set type_definition_forbidden_message. From-SVN: r170888 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/parser.c | 8 +++++++- gcc/testsuite/ChangeLog | 2 ++ gcc/testsuite/g++.dg/parse/no-type-defn1.C | 5 +++++ 4 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/parse/no-type-defn1.C (limited to 'gcc') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 29156ef..64281fd 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2011-03-11 Jason Merrill + PR c++/47144 + * parser.c (cp_parser_template_type_arg): Set + type_definition_forbidden_message. + PR c++/47808 * decl.c (compute_array_index_type): Discard folding if it didn't produce a constant. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 7e9b286..4260f6d 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -15685,7 +15685,13 @@ static tree cp_parser_type_id (cp_parser *parser) static tree cp_parser_template_type_arg (cp_parser *parser) { - return cp_parser_type_id_1 (parser, true, false); + tree r; + const char *saved_message = parser->type_definition_forbidden_message; + parser->type_definition_forbidden_message + = G_("types may not be defined in template arguments"); + r = cp_parser_type_id_1 (parser, true, false); + parser->type_definition_forbidden_message = saved_message; + return r; } static tree cp_parser_trailing_type_id (cp_parser *parser) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6734535..5ee1fcd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,7 @@ 2011-03-11 Jason Merrill + * g++.dg/parse/no-type-defn1.C: New. + * g++.dg/ext/attrib40.C: New. * g++.dg/cpp0x/regress/array1.C: New. diff --git a/gcc/testsuite/g++.dg/parse/no-type-defn1.C b/gcc/testsuite/g++.dg/parse/no-type-defn1.C new file mode 100644 index 0000000..9e89957 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/no-type-defn1.C @@ -0,0 +1,5 @@ +// PR c++/47144 + +template struct A { }; +A< struct B { }* >::SomeNonSense // { dg-error "types may not be defined" } +int y; -- cgit v1.1