]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/19397 (ICE with invalid typedef)
authorVolker Reichelt <reichelt@igpm.rwth-aachen.de>
Wed, 7 Dec 2005 19:40:24 +0000 (19:40 +0000)
committerVolker Reichelt <reichelt@gcc.gnu.org>
Wed, 7 Dec 2005 19:40:24 +0000 (19:40 +0000)
PR c++/19397
PR c++/19762
PR c++/19764
* parser.c (cp_parser_declarator_id): Check for error_mark_node
before building a SCOPE_REF.

* g++.dg/template/typedef3.C: New test.
* g++.dg/template/dtor3.C: Fix error markers.

From-SVN: r108174

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

index 4f884dba1582b363d9fd6278811a6e3d054ffd2c..cdfb99314674fa28a9a9fba211c9fc91caa9617e 100644 (file)
@@ -1,3 +1,11 @@
+2005-12-07  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+       PR c++/19397
+       PR c++/19762
+       PR c++/19764
+       * parser.c (cp_parser_declarator_id): Check for error_mark_node
+       before building a SCOPE_REF.
+
 2005-12-07  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
        Backport:
index c52fa16a300326257a87e1e42f98db52074ad0dd..24b802b33fa84b2f12ae4e1e664aff78bb532ff9 100644 (file)
@@ -10905,7 +10905,7 @@ cp_parser_declarator_id (cp_parser* parser)
                                           /*declarator_p=*/true);
   /* If the name was qualified, create a SCOPE_REF to represent 
      that.  */
-  if (parser->scope)
+  if (parser->scope && id_expression != error_mark_node)
     {
       id_expression = build_nt (SCOPE_REF, parser->scope, id_expression);
       parser->scope = NULL_TREE;
index 51c272d4c8292b2dc9a5c0f010c3a1ed55963261..436925ca823f6eb3f2e173dc7610599bd34abf17 100644 (file)
@@ -1,3 +1,12 @@
+2005-12-07  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
+
+       PR c++/19397
+       * g++.dg/template/typedef3.C: New test.
+
+       PR c++/19762
+       PR c++/19764
+       * g++.dg/template/dtor3.C: Fix error markers.
+
 2005-12-07  Volker Reichelt  <reichelt@igpm.rwth-aachen.de>
 
        Backport:
index 7f4099861fb667f6a86682237f115074fb9e205b..98c2ef6c18acf6e219b277d289e7f02203a0f881 100644 (file)
@@ -1,4 +1,4 @@
 // PR c++/19762
 
 template<int> struct A { ~A(){} }; // { dg-error "" }
-template A<>::~A(); // { dg-error "" }
+template A<>::~A(); // { dg-error "template|declaration" }
diff --git a/gcc/testsuite/g++.dg/template/typedef3.C b/gcc/testsuite/g++.dg/template/typedef3.C
new file mode 100644 (file)
index 0000000..481f451
--- /dev/null
@@ -0,0 +1,7 @@
+// PR c++/19397
+// { dg-do compile }
+
+template<typename> struct A
+{
+    typedef int ::template; // { dg-error "template" }
+};