mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-03 06:20:27 +08:00
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:
parent
430f2d1f6f
commit
3cdabe3b06
@ -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
|
||||
|
@ -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)));
|
||||
|
@ -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
|
||||
|
15
gcc/testsuite/g++.dg/other/crash-9.C
Normal file
15
gcc/testsuite/g++.dg/other/crash-9.C
Normal 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() {}
|
||||
|
Loading…
x
Reference in New Issue
Block a user