From 07c65e005e3c402d07297b9ce4df2e5ef5f433e2 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Wed, 1 Dec 2004 16:37:32 +0000 Subject: [PATCH] re PR c++/18729 (ICE on invalid typedef) 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 | 4 ++++ gcc/cp/parser.c | 1 + gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/parse/crash20.C | 14 ++++++++++++++ 4 files changed, 22 insertions(+) create mode 100644 gcc/testsuite/g++.dg/parse/crash20.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 81d1dc80212..8b267c3031b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2004-12-01 Nathan Sidwell + 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 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 0e0dccd74d7..3e25076f075 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -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"); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e9609959c18..3e61438b4c5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2004-12-01 Nathan Sidwell + 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 index 00000000000..b39e572c39a --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash20.C @@ -0,0 +1,14 @@ +// { dg-do compile } + +// Copyright (C) 2004 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 1 Dec 2004 + +// PR 18729: ICE on ill formed +// Origin: Volker Reichelt + +template struct A +{ + typedef typename T::X Y; // { dg-error "not a class" "" } +}; + +A::Y y; // { dg-error "instantiated from here" "" } -- 2.30.2