From: Jason Merrill Date: Fri, 11 Mar 2011 22:47:59 +0000 (-0500) Subject: re PR c++/47144 (Doesn't reject attempt to define type in template argument; results... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=8318b14cae7802b2c9e2158dfccfaa7a63bed39a;p=gcc.git 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 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 29156efc4e3..64281fd684e 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 7e9b286c0ae..4260f6d135a 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 6734535f7bb..5ee1fcd9335 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 00000000000..9e899579ef6 --- /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;