diff options
author | Jan Hubicka <jh@suse.cz> | 2003-09-11 01:46:26 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2003-09-10 23:46:26 +0000 |
commit | c4d2313d3995add6368990e90a0a0a5f562c8951 (patch) | |
tree | 22bcfe9ca78b5ac94352f8f6bf2d44214d49641a /gcc | |
parent | f08545a8f225fe7adfbfab9a652bb8c325494d3c (diff) | |
download | gcc-c4d2313d3995add6368990e90a0a0a5f562c8951.zip gcc-c4d2313d3995add6368990e90a0a0a5f562c8951.tar.gz gcc-c4d2313d3995add6368990e90a0a0a5f562c8951.tar.bz2 |
decl2.c (var_finalized_p): New.
* decl2.c (var_finalized_p): New.
(maybe_emit_vtables, write_out_vars, finish_file): Use it.
From-SVN: r71284
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/decl2.c | 23 |
2 files changed, 19 insertions, 9 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 918d5da..55a1914 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2003-09-10 Jan Hubicka <jh@suse.cz> + + * decl2.c (var_finalized_p): New. + (maybe_emit_vtables, write_out_vars, finish_file): Use it. + 2003-09-10 Richard Henderson <rth@redhat.com> * decl2.c (cxx_callgraph_analyze_expr): New, from corpse of diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 8e2c6c7..ac428bb 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -1621,6 +1621,17 @@ import_export_class (tree ctype) } } +/* Return true if VAR has already been provided to the back end; in that + case VAR should not be modified further by the front end. */ +static bool +var_finalized_p (tree var) +{ + if (flag_unit_at_a_time) + return TREE_ASM_WRITTEN (var); + else + return cgraph_varpool_node (var)->finalized; +} + /* If necessary, write out the vtables for the dynamic class CTYPE. Returns true if any vtables were emitted. */ @@ -1634,9 +1645,7 @@ maybe_emit_vtables (tree ctype) /* If the vtables for this class have already been emitted there is nothing more to do. */ primary_vtbl = CLASSTYPE_VTABLES (ctype); - if (TREE_ASM_WRITTEN (primary_vtbl) - || (flag_unit_at_a_time - && cgraph_varpool_node (primary_vtbl)->finalized)) + if (var_finalized_p (primary_vtbl)) return false; /* Ignore dummy vtables made by get_vtable_decl. */ if (TREE_TYPE (primary_vtbl) == void_type_node) @@ -2454,9 +2463,7 @@ write_out_vars (tree vars) tree v; for (v = vars; v; v = TREE_CHAIN (v)) - if (! TREE_ASM_WRITTEN (TREE_VALUE (v)) - && (!flag_unit_at_a_time - || !cgraph_varpool_node (TREE_VALUE (v))->finalized)) + if (!var_finalized_p (TREE_VALUE (v))) rest_of_decl_compilation (TREE_VALUE (v), 0, 1, 1); } @@ -2846,9 +2853,7 @@ finish_file () for (i = 0; i < pending_statics_used; ++i) { tree decl = VARRAY_TREE (pending_statics, i); - if (TREE_ASM_WRITTEN (decl) - || (flag_unit_at_a_time - && cgraph_varpool_node (decl)->finalized)) + if (var_finalized_p (decl)) continue; import_export_decl (decl); if (DECL_NOT_REALLY_EXTERN (decl) && ! DECL_IN_AGGR_P (decl)) |