re PR c++/18729 (ICE on invalid typedef)
authorNathan Sidwell <nathan@codesourcery.com>
Wed, 1 Dec 2004 16:37:32 +0000 (16:37 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Wed, 1 Dec 2004 16:37:32 +0000 (16:37 +0000)
cp:
PR c++/18729
* parser.c (cp_parser_class_name): Check decl's type is not
error_mark_node.
testsuite:
PR C++/18729
* g++.dg/parse/crash20.C: New.

From-SVN: r91566

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

index 81d1dc80212d288a93e56fdd53084116763f9fdf..8b267c3031baf9ee499be8b3e76243acf1535f92 100644 (file)
@@ -1,5 +1,9 @@
 2004-12-01  Nathan Sidwell  <nathan@codesourcery.com>
 
+       PR c++/18729
+       * parser.c (cp_parser_class_name): Check decl's type is not
+       error_mark_node.
+
        PR c++/17431
        * call.c (standard_conversion): Add FLAGS parameter. Do not allow
        derived to base conversion when checking constructor
index 0e0dccd74d79dcb0d84f39543d82474bee9f010e..3e25076f07536292b55a86e99d2424b4888ec5cb 100644 (file)
@@ -12232,6 +12232,7 @@ cp_parser_class_name (cp_parser *parser,
     decl = TYPE_NAME (make_typename_type (scope, decl, tag_type, tf_error));
   else if (decl == error_mark_node
           || TREE_CODE (decl) != TYPE_DECL
+          || TREE_TYPE (decl) == error_mark_node
           || !IS_AGGR_TYPE (TREE_TYPE (decl)))
     {
       cp_parser_error (parser, "expected class-name");
index e9609959c188add80550ccdc6c0cbd0f5a772967..3e61438b4c55eb66a0580d8a6ee926ac06f62ff0 100644 (file)
@@ -1,5 +1,8 @@
 2004-12-01  Nathan Sidwell  <nathan@codesourcery.com>
 
+       PR C++/18729
+       * g++.dg/parse/crash20.C: New.
+
        PR c++/17431
        * g++.dg/overload/arg1.C: New.
        * g++.dg/overload/arg2.C: New.
diff --git a/gcc/testsuite/g++.dg/parse/crash20.C b/gcc/testsuite/g++.dg/parse/crash20.C
new file mode 100644 (file)
index 0000000..b39e572
--- /dev/null
@@ -0,0 +1,14 @@
+// { dg-do compile }
+
+// Copyright (C) 2004 Free Software Foundation, Inc.
+// Contributed by Nathan Sidwell 1 Dec 2004 <nathan@codesourcery.com>
+
+// PR 18729: ICE on ill formed
+// Origin: Volker Reichelt <reichelt@gcc.gnu.org>
+
+template<typename T> struct A
+{
+  typedef typename T::X Y; // { dg-error "not a class" "" }
+};
+
+A<int>::Y y; // { dg-error "instantiated from here" "" }