re PR c++/42915 (ICE: same canonical type node for different types in recent builds)

Fix PR c++/42915

gcc/cp/ChangeLog:
	PR c++/42915
	* typeck.c (get_template_parms_of_dependent_type): Try getting
	the template parameters fromt the type itself first.

gcc/testsuite/ChangeLog:
	PR c++/42915
	g++.dg/other/crash-9.C: New test.

From-SVN: r156514
This commit is contained in:
Dodji Seketeli 2010-02-05 08:28:24 +00:00 committed by Dodji Seketeli
parent 430f2d1f6f
commit 3cdabe3b06
4 changed files with 31 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2010-02-05 Dodji Seketeli <dodji@redhat.com>
PR c++/42915
* typeck.c (get_template_parms_of_dependent_type): Try getting
the template parameters fromt the type itself first.
2010-02-03 Jason Merrill <jason@redhat.com>
PR c++/4926

View File

@ -1106,9 +1106,13 @@ get_template_parms_of_dependent_type (tree t)
{
tree tinfo = NULL_TREE, tparms = NULL_TREE;
/* First, try the obvious case of getting the
template info from T itself. */
if ((tinfo = get_template_info (t)))
;
/* If T1 is a typedef or whatever has a template info associated
to its context, get the template parameters from that context. */
if (typedef_variant_p (t)
else if (typedef_variant_p (t)
&& DECL_CONTEXT (TYPE_NAME (t))
&& !NAMESPACE_SCOPE_P (TYPE_NAME (t)))
tinfo = get_template_info (DECL_CONTEXT (TYPE_NAME (t)));

View File

@ -1,3 +1,8 @@
2010-02-05 Dodji Seketeli <dodji@redhat.com>
PR c++/42915
g++.dg/other/crash-9.C: New test.
2010-02-05 Paul Thomas <pault@gcc.gnu.org>
PR fortran/42309

View File

@ -0,0 +1,15 @@
// Origin: PR c++/42915
// { dg-do compile }
template <typename T>
class A
{
template <typename U>
class B
{
B foo();
};
};
template <typename T> template <typename U>
A<T>::B<U> A<T>::B<U>::foo() {}