]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/18757 (ICE (on invalid) in get_innermost_template_args)
authorAlexandre Oliva <aoliva@redhat.com>
Thu, 23 Dec 2004 16:25:50 +0000 (16:25 +0000)
committerAlexandre Oliva <aoliva@gcc.gnu.org>
Thu, 23 Dec 2004 16:25:50 +0000 (16:25 +0000)
gcc/cp/ChangeLog:
PR c++/18757
* parser.c (cp_parser_template_id): Don't create a CPP_TEMPLATE_ID
if parsing failed.
gcc/testsuite/ChangeLog:
* g++.dg/parse/typename5.C: Adjust for new error.
* g++.dg/parse/typename7.C: New.

From-SVN: r92554

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/typename5.C

index 97185f93205892b3b8a80d50f0b72e604d60d1ee..569ad1064e57878ba09305f12ac586aa6117a56c 100644 (file)
@@ -1,3 +1,9 @@
+2004-12-23  Alexandre Oliva  <aoliva@redhat.com>
+
+       PR c++/18757
+       * parser.c (cp_parser_template_id): Don't create a CPP_TEMPLATE_ID
+       if parsing failed.
+
 2004-12-17  Nathan Sidwell  <nathan@codesourcery.com>
 
        PR c++/18975
index 636c2c31e6d18a52cbffdf9211f234d0d2676d46..2a3ce9258bf7686a5dd516694770297bc1a75f37 100644 (file)
@@ -8014,7 +8014,7 @@ cp_parser_template_id (cp_parser *parser,
      the effort required to do the parse, nor will we issue duplicate
      error messages about problems during instantiation of the
      template.  */
-  if (start_of_id >= 0)
+  if (start_of_id >= 0 && !cp_parser_error_occurred (parser))
     {
       cp_token *token;
 
index 77835acc15c2e0daa6eb798be7ff486cd44e4b47..c0e3af3a09dc8bd0e91e3cafa25f2d293c70bb42 100644 (file)
@@ -1,3 +1,8 @@
+2004-12-23  Alexandre Oliva  <aoliva@redhat.com>
+
+       * g++.dg/parse/typename5.C: Adjust for new error.
+       * g++.dg/parse/typename7.C: New.
+
 2004-12-20  Andrew Pinski  <pinskia@physics.uc.edu>
 
        PR other/19093
index 6b2ed894a86d5bf735fa6da15aa12fc1b7fa5644..36647519fe61b3de710066237c60f6105e849de5 100644 (file)
@@ -8,5 +8,5 @@ template <typename> struct A {};
 
 template <typename> struct B
 {
-    typedef A<typename X::Y> C; // { dg-error "declared|invalid|no type" }
+    typedef A<typename X::Y> C; // { dg-error "declared|invalid|no type|expected" }
 };