aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2003-09-11 01:46:26 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2003-09-10 23:46:26 +0000
commitc4d2313d3995add6368990e90a0a0a5f562c8951 (patch)
tree22bcfe9ca78b5ac94352f8f6bf2d44214d49641a /gcc
parentf08545a8f225fe7adfbfab9a652bb8c325494d3c (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/cp/decl2.c23
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))