diff options
author | Jason Merrill <jason@redhat.com> | 2011-03-11 17:47:59 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-03-11 17:47:59 -0500 |
commit | 8318b14cae7802b2c9e2158dfccfaa7a63bed39a (patch) | |
tree | 4ad1a877c178c9591fd93ebb4c1653444ebc4469 | |
parent | f231b5ff3ff72471bbe245863c3e37d96ed7d950 (diff) | |
download | gcc-8318b14cae7802b2c9e2158dfccfaa7a63bed39a.zip gcc-8318b14cae7802b2c9e2158dfccfaa7a63bed39a.tar.gz gcc-8318b14cae7802b2c9e2158dfccfaa7a63bed39a.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/parser.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/no-type-defn1.C | 5 |
4 files changed, 18 insertions, 1 deletions
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 <jason@redhat.com> + 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 <jason@redhat.com> + * 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<typename> struct A { }; +A< struct B { }* >::SomeNonSense // { dg-error "types may not be defined" } +int y; |