re PR c++/17936 (Declaration of specialization rejected)

PR c++/17936
	* cp-tree.h (CLASSTYPE_TEMPLATE_SPECIALIZATION): Add a comment.
	* pt.c (optimize_specialization_lookup_p): Do not optimize lookups
	for members of partial or explicit specializations.

	PR c++/17936
	* g++.dg/template/spec18.C: New test.

From-SVN: r88905
This commit is contained in:
Mark Mitchell 2004-10-11 22:50:00 +00:00 committed by Mark Mitchell
parent f713f22977
commit 1ca939e5ec
5 changed files with 32 additions and 0 deletions

View File

@ -1,5 +1,10 @@
2004-10-11 Mark Mitchell <mark@codesourcery.com>
PR c++/17936
* cp-tree.h (CLASSTYPE_TEMPLATE_SPECIALIZATION): Add a comment.
* pt.c (optimize_specialization_lookup_p): Do not optimize lookups
for members of partial or explicit specializations.
PR c++/17929
* decl2.c (finish_anon_union): Robustify.

View File

@ -2713,6 +2713,9 @@ struct lang_decl GTY(())
#define DECL_TEMPLATE_SPECIALIZATION(NODE) (DECL_USE_TEMPLATE (NODE) == 2)
#define SET_DECL_TEMPLATE_SPECIALIZATION(NODE) (DECL_USE_TEMPLATE (NODE) = 2)
/* Returns true for an explicit or partial specialization of a class
template. */
#define CLASSTYPE_TEMPLATE_SPECIALIZATION(NODE) \
(CLASSTYPE_USE_TEMPLATE (NODE) == 2)
#define SET_CLASSTYPE_TEMPLATE_SPECIALIZATION(NODE) \

View File

@ -774,6 +774,12 @@ optimize_specialization_lookup_p (tree tmpl)
/* DECL_CLASS_SCOPE_P holds of T::f even if T is a template
parameter. */
&& CLASS_TYPE_P (DECL_CONTEXT (tmpl))
/* The optimized lookup depends on the fact that the
template arguments for the member function template apply
purely to the containing class, which is not true if the
containing class is an explicit or partial
specialization. */
&& !CLASSTYPE_TEMPLATE_SPECIALIZATION (DECL_CONTEXT (tmpl))
&& !DECL_MEMBER_TEMPLATE_P (tmpl)
&& !DECL_CONV_FN_P (tmpl)
/* It is possible to have a template that is not a member

View File

@ -1,3 +1,8 @@
2004-10-11 Mark Mitchell <mark@codesourcery.com>
PR c++/17936
* g++.dg/template/spec18.C: New test.
2004-10-11 Steve Ellcey <sje@cup.hp.com>
* testsuite/gcc.dg/ia64-asm-1.c: Add prototype for abort

View File

@ -0,0 +1,13 @@
// PR c++/17936
template<int, int N> struct A
{
void foo();
};
template<int N> struct A<1, N>
{
void foo();
};
template<> void A<1, 2>::foo();