diff options
author | Nathan Sidwell <nathan@codesourcery.com> | 2004-12-01 16:37:32 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2004-12-01 16:37:32 +0000 |
commit | 07c65e005e3c402d07297b9ce4df2e5ef5f433e2 (patch) | |
tree | 5a37eb2fb4fc35e6cc3cd6c36dce910c1b94477d | |
parent | f8e7ffa67339a806d5ae5d8a3fb0f37353bd53e5 (diff) | |
download | gcc-07c65e005e3c402d07297b9ce4df2e5ef5f433e2.zip gcc-07c65e005e3c402d07297b9ce4df2e5ef5f433e2.tar.gz gcc-07c65e005e3c402d07297b9ce4df2e5ef5f433e2.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/parser.c | 1 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/crash20.C | 14 |
4 files changed, 22 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 81d1dc8..8b267c3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 0e0dccd..3e25076 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 e960995..3e61438 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..b39e572 --- /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 <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" "" } |