decl.c (grokdeclarator): Don't presume DECL_LANG_SPECIFIC indicates anything special about template depth.

cp:
	* decl.c (grokdeclarator): Don't presume DECL_LANG_SPECIFIC
	indicates anything special about template depth. Make sure we
	only count the user visible template classes.
testsuite:
	* g++.old-deja/g++.pt/spec37.C: New test.

From-SVN: r39198
This commit is contained in:
Nathan Sidwell 2001-01-23 10:44:18 +00:00 committed by Nathan Sidwell
parent 4cff6abe40
commit 92ecdfb74c
4 changed files with 38 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2001-01-23 Nathan Sidwell <nathan@codesourcery.com>
* decl.c (grokdeclarator): Don't presume DECL_LANG_SPECIFIC
indicates anything special about template depth. Make sure we
only count the user visible template classes.
2001-01-23 Nathan Sidwell <nathan@codesourcery.com>
* call.c (build_conv): Typo in comment.

View File

@ -10807,14 +10807,12 @@ grokdeclarator (declarator, declspecs, decl_context, initialized, attrlist)
the definition of `S<int>::f'. */
if (CLASSTYPE_TEMPLATE_INFO (t)
&& (CLASSTYPE_TEMPLATE_INSTANTIATION (t)
|| uses_template_parms (CLASSTYPE_TI_ARGS (t))))
|| uses_template_parms (CLASSTYPE_TI_ARGS (t)))
&& PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))
template_count += 1;
t = TYPE_MAIN_DECL (t);
if (DECL_LANG_SPECIFIC (t))
t = DECL_CONTEXT (t);
else
t = NULL_TREE;
t = DECL_CONTEXT (t);
}
if (sname == NULL_TREE)

View File

@ -1,3 +1,7 @@
2001-01-23 Nathan Sidwell <nathan@codesourcery.com>
* g++.old-deja/g++.pt/spec37.C: New test.
2001-01-23 Nathan Sidwell <nathan@codesourcery.com>
* g++.old-deja/g++.pt/overload14.C: New test.

View File

@ -0,0 +1,25 @@
// Build don't link:
//
// Copyright (C) 2000 Free Software Foundation, Inc.
// Contributed by Nathan Sidwell 21 Jan 2001 <nathan@codesourcery.com>
// Bug 1728. We started sorting things when there were 7 fields. Our
// template_count algorithm was rather fragile ...
template <int dim> struct X
{
struct Y
{
int x1;
int x2;
int x3;
int x4;
int x5;
int x6;
int x7;
void Foo ();
};
};
template <> void X<1>::Y::Foo () {}