From aec5ba601b0ebaaca5362d32cebc9612aa6d2005 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Tue, 23 Aug 2005 12:35:42 +0000 Subject: [PATCH] re PR c++/23044 (ICE on valid code) cp: PR c++/23044 * pt.c (tsubst_qualified_id): A SCOPE_REF can still remain. testsuite: PR c++/23044 * g++.dg/template/instantiate8.C: New. From-SVN: r103395 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/pt.c | 3 ++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/instantiate8.C | 17 +++++++++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/template/instantiate8.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 25c0610c5d0..305cf5179c2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2005-08-23 Nathan Sidwell + + PR c++/23044 + * pt.c (tsubst_qualified_id): A SCOPE_REF can still remain. + 2005-08-22 James E Wilson PR tree-optimization/23426 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index f217198faa2..71ac3189193 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -7680,7 +7680,8 @@ tsubst_qualified_id (tree qualified_id, tree args, expr = finish_qualified_id_expr (scope, expr, done, address_p); } - expr = convert_from_reference (expr); + if (TREE_CODE (expr) != SCOPE_REF) + expr = convert_from_reference (expr); return expr; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fe03c798c45..b37317b4e51 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-08-23 Nathan Sidwell + + PR c++/23044 + * g++.dg/template/instantiate8.C: New. + 2005-08-23 J"orn Rennecke PR middle-end/23467 diff --git a/gcc/testsuite/g++.dg/template/instantiate8.C b/gcc/testsuite/g++.dg/template/instantiate8.C new file mode 100644 index 00000000000..9004a86d766 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/instantiate8.C @@ -0,0 +1,17 @@ +// Copyright (C) 2005 Free Software Foundation, Inc. +// Contributed by Nathan Sidwell 18 Aug 2005 + +// PR 22044: ICE +// Origin: Andrew Pinski + +struct no_context { + template< class Event > void no_function( const Event & ); +}; +template< class Event, class TransitionContext = no_context, +void ( TransitionContext::*pTransitionAction )( const Event & ) = &no_context::no_function< Event > > +struct transition +{ + struct EvFlipBit {}; + typedef transition type; +}; + -- 2.30.2