aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <merrill@gnu.org>1994-06-16 23:37:53 +0000
committerJason Merrill <merrill@gnu.org>1994-06-16 23:37:53 +0000
commit07af9d164b204b9a1d13cd701d2056ea12a36db6 (patch)
treec87d331dcfc281a55fe976ca1940f8085a2c3932
parent308018308fd5d06da46e18ffddc7565e785b576b (diff)
downloadgcc-07af9d164b204b9a1d13cd701d2056ea12a36db6.zip
gcc-07af9d164b204b9a1d13cd701d2056ea12a36db6.tar.gz
gcc-07af9d164b204b9a1d13cd701d2056ea12a36db6.tar.bz2
(compile_file): Unset DECL_DEFER_OUTPUT on decls considered at end of file.
(compile_file): Unset DECL_DEFER_OUTPUT on decls considered at end of file. (rest_of_compilation): Also postpone compilation of inlines with DECL_DEFER_OUTPUT set. (compile_file): Always emit postponed inlines if -fkeep-inline-functions. From-SVN: r7507
-rw-r--r--gcc/toplev.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/gcc/toplev.c b/gcc/toplev.c
index 2cd7943..7eb9ff1 100644
--- a/gcc/toplev.c
+++ b/gcc/toplev.c
@@ -2275,6 +2275,10 @@ compile_file (name)
for (i = 0; i < len; i++)
{
decl = vec[i];
+
+ /* We're not deferring this any longer. */
+ DECL_DEFER_OUTPUT (decl) = 0;
+
if (TREE_CODE (decl) == VAR_DECL && DECL_SIZE (decl) == 0
&& incomplete_decl_finalize_hook != 0)
(*incomplete_decl_finalize_hook) (decl);
@@ -2323,6 +2327,7 @@ compile_file (name)
&& ! TREE_ASM_WRITTEN (decl)
&& DECL_INITIAL (decl) != 0
&& (TREE_ADDRESSABLE (decl)
+ || flag_keep_inline_functions
|| TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (decl)))
&& ! DECL_EXTERNAL (decl))
{
@@ -2710,6 +2715,7 @@ rest_of_compilation (decl)
if ((specd || DECL_INLINE (decl))
&& ((! TREE_PUBLIC (decl) && ! TREE_ADDRESSABLE (decl)
&& ! flag_keep_inline_functions)
+ || DECL_DEFER_OUTPUT (decl)
|| DECL_EXTERNAL (decl)))
{
#ifdef DWARF_DEBUGGING_INFO
@@ -2749,6 +2755,9 @@ rest_of_compilation (decl)
}
}
+ if (DECL_DEFER_OUTPUT (decl))
+ goto exit_rest_of_compilation;
+
TREE_ASM_WRITTEN (decl) = 1;
/* Now that integrate will no longer see our rtl, we need not distinguish