cp-tree.h (note_decl_for_pch): New function.

* cp-tree.h (note_decl_for_pch): New function.
	* class.c (build_clone): Call note_decl_for_pch.
	* semantics.c (finish_member_declaration): Likewise.
	(note_decl_for_pch): New function.

From-SVN: r92402
This commit is contained in:
Mark Mitchell 2004-12-20 02:23:49 +00:00 committed by Mark Mitchell
parent 57829bc4f0
commit 5e2f4cd242
4 changed files with 44 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2004-12-19 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (note_decl_for_pch): New function.
* class.c (build_clone): Call note_decl_for_pch.
* semantics.c (finish_member_declaration): Likewise.
(note_decl_for_pch): New function.
2004-12-17 Steven Bosscher <stevenb@suse.de> 2004-12-17 Steven Bosscher <stevenb@suse.de>
* init.c (build_zero_init): max_index is the number of * init.c (build_zero_init): max_index is the number of

View File

@ -3786,6 +3786,8 @@ build_clone (tree fn, tree name)
DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result)); DECL_TEMPLATE_INFO (result) = copy_node (DECL_TEMPLATE_INFO (result));
DECL_TI_TEMPLATE (result) = clone; DECL_TI_TEMPLATE (result) = clone;
} }
else if (pch_file)
note_decl_for_pch (clone);
return clone; return clone;
} }

View File

@ -4188,6 +4188,7 @@ extern void check_accessibility_of_qualified_id (tree, tree, tree);
extern tree finish_qualified_id_expr (tree, tree, bool, bool); extern tree finish_qualified_id_expr (tree, tree, bool, bool);
extern void simplify_aggr_init_expr (tree *); extern void simplify_aggr_init_expr (tree *);
extern void finalize_nrv (tree *, tree, tree); extern void finalize_nrv (tree *, tree, tree);
extern void note_decl_for_pch (tree);
/* in tree.c */ /* in tree.c */
extern void lang_check_failed (const char *, int, extern void lang_check_failed (const char *, int,

View File

@ -2226,6 +2226,40 @@ finish_member_declaration (tree decl)
maybe_add_class_template_decl_list (current_class_type, decl, maybe_add_class_template_decl_list (current_class_type, decl,
/*friend_p=*/0); /*friend_p=*/0);
} }
if (pch_file)
note_decl_for_pch (decl);
}
/* DECL has been declared while we are building a PCH file. Perform
actions that we might normally undertake lazily, but which can be
performed now so that they do not have to be performed in
translation units which include the PCH file. */
void
note_decl_for_pch (tree decl)
{
gcc_assert (pch_file);
/* A non-template inline function with external linkage will always
be COMDAT. As we must eventually determine the linkage of all
functions, and as that causes writes to the data mapped in from
the PCH file, it's advantageous to mark the functions at this
point. */
if (TREE_CODE (decl) == FUNCTION_DECL
&& TREE_PUBLIC (decl)
&& DECL_DECLARED_INLINE_P (decl)
&& !DECL_IMPLICIT_INSTANTIATION (decl))
{
comdat_linkage (decl);
DECL_INTERFACE_KNOWN (decl) = 1;
}
/* There's a good chance that we'll have to mangle names at some
point, even if only for emission in debugging information. */
if (TREE_CODE (decl) == VAR_DECL
|| TREE_CODE (decl) == FUNCTION_DECL)
mangle_decl (decl);
} }
/* Finish processing a complete template declaration. The PARMS are /* Finish processing a complete template declaration. The PARMS are