aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/toplev.c11
2 files changed, 15 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index fde381b..d951c37 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2003-12-03 Jan Hubicka <jh@suse.cz>
+
+ PR optimization/12324
+ * toplev.c (rest_of_decl_compilation): Do not deffer when compiling
+ in unit-at-a-time mode.
+
2003-12-03 Jakub Jelinek <jakub@redhat.com>
* expr.c (store_constructor): Only set RTX_UNCHANGING_P for
diff --git a/gcc/toplev.c b/gcc/toplev.c
index e413961..47cdc73 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -1920,8 +1920,15 @@ rest_of_decl_compilation (tree decl,
make_decl_rtl (decl, asmspec);
/* Don't output anything when a tentative file-scope definition
- is seen. But at end of compilation, do output code for them. */
- if ((at_end || !DECL_DEFER_OUTPUT (decl)) && !DECL_EXTERNAL (decl))
+ is seen. But at end of compilation, do output code for them.
+
+ We do output all variables when unit-at-a-time is active and rely on
+ callgraph code to defer them except for forward declarations
+ (see gcc.c-torture/compile/920624-1.c) */
+ if ((at_end
+ || !DECL_DEFER_OUTPUT (decl)
+ || (flag_unit_at_a_time && DECL_INITIAL (decl)))
+ && !DECL_EXTERNAL (decl))
{
if (flag_unit_at_a_time && !cgraph_global_info_ready
&& TREE_CODE (decl) != FUNCTION_DECL && top_level)