PR c++/81257 - ICE with invalid ::template.
authorJason Merrill <jason@redhat.com>
Fri, 30 Jun 2017 21:08:53 +0000 (17:08 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 30 Jun 2017 21:08:53 +0000 (17:08 -0400)
PR c++/54769 - wrong lookup of dependent template-name.
* parser.c (cp_parser_template_name): Revert part of last change.

From-SVN: r249855

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/g++.dg/parse/template-keyword1.C [new file with mode: 0644]

index ff57214535f00f6730b6d80dde9d997a6601b657..eeeaeec5363ee2de500570b661641e6e78144dd5 100644 (file)
@@ -1,3 +1,9 @@
+2017-06-30  Jason Merrill  <jason@redhat.com>
+
+       PR c++/81257 - ICE with invalid ::template.
+       PR c++/54769 - wrong lookup of dependent template-name.
+       * parser.c (cp_parser_template_name): Revert part of last change.
+
 2017-06-30  Nathan Sidwell  <nathan@acm.org>
 
        * config-lang.in (gtfiles): Add cp/lex.c.
index ea5a5103565eb3e5596f6586a9216aeb4b3815f8..a9623ae08410b904210d856c74410890cf4bf6e3 100644 (file)
@@ -15911,11 +15911,6 @@ cp_parser_template_name (cp_parser* parser,
                                /*ambiguous_decls=*/NULL,
                                token->location);
 
-  /* If the lookup failed and we got the 'template' keyword, believe it.  */
-  if (decl == error_mark_node && template_keyword_p
-      && processing_template_decl)
-    return identifier;
-
   decl = strip_using_decl (decl);
 
   /* If DECL is a template, then the name was a template-name.  */
diff --git a/gcc/testsuite/g++.dg/parse/template-keyword1.C b/gcc/testsuite/g++.dg/parse/template-keyword1.C
new file mode 100644 (file)
index 0000000..0a1298e
--- /dev/null
@@ -0,0 +1,3 @@
+// PR c++/81257
+
+template < typename ::template A < int > >; // { dg-error "" }