mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 03:46:53 -05:00
re PR c++/33959 (ICE in instantiate_class_template, at cp/pt.c:6649)
PR c++/33959
* pt.c (tsubst_aggr_type): Make sure our context is complete.
From-SVN: r131725
This commit is contained in:
committed by
Jason Merrill
parent
dab3cc758a
commit
d4175b9f4b
@@ -1,3 +1,8 @@
|
||||
2008-01-21 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/33959
|
||||
* pt.c (tsubst_aggr_type): Make sure our context is complete.
|
||||
|
||||
2008-01-02 Volker Reichelt <reichelt@netcologne.de>
|
||||
|
||||
Backport:
|
||||
|
||||
@@ -6325,8 +6325,13 @@ tsubst_aggr_type (tree t,
|
||||
up. */
|
||||
context = TYPE_CONTEXT (t);
|
||||
if (context)
|
||||
context = tsubst_aggr_type (context, args, complain,
|
||||
in_decl, /*entering_scope=*/1);
|
||||
{
|
||||
context = tsubst_aggr_type (context, args, complain,
|
||||
in_decl, /*entering_scope=*/1);
|
||||
/* If context is a nested class inside a class template,
|
||||
it may still need to be instantiated (c++/33959). */
|
||||
complete_type (context);
|
||||
}
|
||||
|
||||
/* Then, figure out what arguments are appropriate for the
|
||||
type we are trying to find. For example, given:
|
||||
|
||||
19
gcc/testsuite/g++.dg/template/nested5.C
Normal file
19
gcc/testsuite/g++.dg/template/nested5.C
Normal file
@@ -0,0 +1,19 @@
|
||||
// PR c++/33959
|
||||
|
||||
template <typename T> struct A
|
||||
{
|
||||
struct C
|
||||
{
|
||||
template <typename U> struct D {};
|
||||
};
|
||||
template <typename S> static C::D<S> bar (S const &);
|
||||
};
|
||||
|
||||
struct E {};
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
E e;
|
||||
A<E>::bar (e);
|
||||
}
|
||||
Reference in New Issue
Block a user