aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-03-11 17:47:59 -0500
committerJason Merrill <jason@gcc.gnu.org>2011-03-11 17:47:59 -0500
commit8318b14cae7802b2c9e2158dfccfaa7a63bed39a (patch)
tree4ad1a877c178c9591fd93ebb4c1653444ebc4469
parentf231b5ff3ff72471bbe245863c3e37d96ed7d950 (diff)
downloadgcc-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/ChangeLog4
-rw-r--r--gcc/cp/parser.c8
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/parse/no-type-defn1.C5
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;