From 0fc339a882e3c2095840b3eb7796c7f4aabe7783 Mon Sep 17 00:00:00 2001 From: phython <phython@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Sat, 8 Oct 2005 18:11:02 +0000 Subject: [PATCH] 2005-10-08 James A. Morrison <phython@gcc.gnu.org> PR c++/22172 * parser.c (cp_parser_postfix_expression) <RID_TYPENAME>: Treat nontype scopes as nondependent. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@105120 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/parser.c | 5 +++-- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/parse/crash30.C | 18 ++++++++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/parse/crash30.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f3f03619bb96..4055464a28a3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2005-10-08 James A. Morrison <phython@gcc.gnu.org> + + PR c++/22172 + * parser.c (cp_parser_postfix_expression) <RID_TYPENAME>: Treat nontype + scopes as nondependent. + 2005-10-06 Volker Reichelt <reichelt@igpm.rwth-aachen.de> * call.c (resolve_args): Remove redundant test. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 08af6e2f49b9..a4eedc178168 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -3986,8 +3986,9 @@ cp_parser_postfix_expression (cp_parser *parser, bool address_p, bool cast_p) return error_mark_node; /* If we look up a template-id in a non-dependent qualifying scope, there's no need to create a dependent type. */ - else if (TREE_CODE (id) == TYPE_DECL - && !dependent_type_p (parser->scope)) + if (TREE_CODE (id) == TYPE_DECL + && (!TYPE_P (scope) + || !dependent_type_p (parser->scope))) type = TREE_TYPE (id); /* Create a TYPENAME_TYPE to represent the type to which the functional cast is being performed. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d189677cebea..811c6cb6dbb6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-10-08 James A. Morrison <phython@gcc.gnu.org> + + PR c++/22172 + * g++.dg/parse/crash30.C: New test. + 2005-10-07 Richard Guenther <rguenther@suse.de> PR middle-end/24227 diff --git a/gcc/testsuite/g++.dg/parse/crash30.C b/gcc/testsuite/g++.dg/parse/crash30.C new file mode 100644 index 000000000000..9b68535faa48 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash30.C @@ -0,0 +1,18 @@ +// { dg-do compile } +namespace N { template<int> struct A { operator int() const; }; } +namespace M { template<int> struct A {}; } +namespace P { typedef int I; } + +template<typename> void foo() +{ + +typename N::A<0>(); // { dg-bogus "expected" } +} + +template<typename> void bar() +{ + +typename M::A<0>; // { dg-error "expected" } +} + +template<typename T> void baz() { + typename P::I i; // { dg-bogus "expected" } +} -- GitLab