decl.c (duplicate_decls): Handle template specializations correctly.
Mon Oct 20 11:44:20 1997 Mark Mitchell <mmitchell@usa.net> * decl.c (duplicate_decls): Handle template specializations correctly. * error.c (dump_function_name): Fix printing of specializations of member functions that are not member templates. * cp-tree.h (processing_specialization): Make global. * pt.c (processing_specialization): Likewise. * lex.c (cons_up_default_function): Save and restore processing_specialization to avoid confusion. From-SVN: r16101
This commit is contained in:
parent
a6967cc077
commit
92eca6404c
7 changed files with 26 additions and 4 deletions
|
@ -1,3 +1,14 @@
|
|||
Mon Oct 20 11:44:20 1997 Mark Mitchell <mmitchell@usa.net>
|
||||
|
||||
* decl.c (duplicate_decls): Handle template specializations
|
||||
correctly.
|
||||
* error.c (dump_function_name): Fix printing of specializations of
|
||||
member functions that are not member templates.
|
||||
* cp-tree.h (processing_specialization): Make global.
|
||||
* pt.c (processing_specialization): Likewise.
|
||||
* lex.c (cons_up_default_function): Save and restore
|
||||
processing_specialization to avoid confusion.
|
||||
|
||||
Mon Oct 20 10:52:22 1997 Jason Merrill <jason@yorick.cygnus.com>
|
||||
|
||||
* decl.c (init_decl_processing): Give null_node unknown* type.
|
||||
|
|
|
@ -2093,7 +2093,7 @@ finish_struct_methods (t, fn_fields, nonprivate_method)
|
|||
tree f;
|
||||
tree spec_args;
|
||||
|
||||
/* If there is a template, and t uses template parms, wer
|
||||
/* If there is a template, and t uses template parms, we
|
||||
are dealing with a specialization of a member
|
||||
template in a template class, and we must grab the
|
||||
template, rather than the function. */
|
||||
|
|
|
@ -2352,6 +2352,7 @@ extern tree most_specialized_class PROTO((tree, tree));
|
|||
extern int more_specialized_class PROTO((tree, tree));
|
||||
extern void do_pushlevel PROTO((void));
|
||||
extern int is_member_template PROTO((tree));
|
||||
extern int processing_specialization;
|
||||
|
||||
/* in repo.c */
|
||||
extern void repo_template_used PROTO((tree));
|
||||
|
|
|
@ -2866,6 +2866,9 @@ duplicate_decls (newdecl, olddecl)
|
|||
|
||||
if (TREE_CODE (newdecl) == FUNCTION_DECL)
|
||||
{
|
||||
if (DECL_TEMPLATE_INSTANTIATION (olddecl) &&
|
||||
!DECL_TEMPLATE_INSTANTIATION (newdecl))
|
||||
DECL_USE_TEMPLATE (olddecl) = DECL_USE_TEMPLATE (newdecl);
|
||||
DECL_THIS_INLINE (newdecl) |= DECL_THIS_INLINE (olddecl);
|
||||
|
||||
/* If either decl says `inline', this fn is inline, unless its
|
||||
|
|
|
@ -925,7 +925,8 @@ dump_function_name (t)
|
|||
else
|
||||
dump_decl (name, 0);
|
||||
|
||||
if (DECL_TEMPLATE_SPECIALIZATION (t) || DECL_IMPLICIT_INSTANTIATION (t))
|
||||
if ((DECL_TEMPLATE_SPECIALIZATION (t) || DECL_IMPLICIT_INSTANTIATION (t))
|
||||
&& (DECL_CLASS_CONTEXT (t) == NULL_TREE || is_member_template (t)))
|
||||
{
|
||||
tree args = DECL_TEMPLATE_INFO (t)
|
||||
? DECL_TI_ARGS (t) : NULL_TREE;
|
||||
|
|
|
@ -1988,10 +1988,16 @@ cons_up_default_function (type, full_name, kind)
|
|||
|
||||
{
|
||||
tree declarator = make_call_declarator (name, args, NULL_TREE, NULL_TREE);
|
||||
int saved_processing_specialization;
|
||||
if (retref)
|
||||
declarator = build_parse_node (ADDR_EXPR, declarator);
|
||||
|
||||
|
||||
/* The following is in case we're generating the default
|
||||
implementation in the midst of handling a specialization. */
|
||||
saved_processing_specialization = processing_specialization;
|
||||
processing_specialization = 0;
|
||||
fn = grokfield (declarator, declspecs, NULL_TREE, NULL_TREE, NULL_TREE);
|
||||
processing_specialization = saved_processing_specialization;
|
||||
}
|
||||
|
||||
if (fn == void_type_node)
|
||||
|
|
|
@ -60,7 +60,7 @@ static tree *maybe_template_tail = &maybe_templates;
|
|||
|
||||
int minimal_parse_mode;
|
||||
|
||||
static int processing_specialization;
|
||||
int processing_specialization;
|
||||
static int template_header_count;
|
||||
|
||||
#define obstack_chunk_alloc xmalloc
|
||||
|
|
Loading…
Add table
Reference in a new issue