Commit e4d91027 by Richard Henderson Committed by Richard Henderson

decl2.c (finish_file): Avoid out-of-bounds array reference during memmove.

        * decl2.c (finish_file): Avoid out-of-bounds array reference
        during memmove.

From-SVN: r71261
parent e62f462e
2003-09-09 Richard Henderson <rth@redhat.com> 2003-09-09 Richard Henderson <rth@redhat.com>
* decl2.c (finish_file): Avoid out-of-bounds array reference
during memmove.
2003-09-09 Richard Henderson <rth@redhat.com>
* decl2.c (mark_member_pointers): Rename from * decl2.c (mark_member_pointers): Rename from
mark_member_pointers_and_eh_handlers and don't check eh handlers. mark_member_pointers_and_eh_handlers and don't check eh handlers.
......
...@@ -2705,12 +2705,12 @@ finish_file () ...@@ -2705,12 +2705,12 @@ finish_file ()
them to the beginning of the array, then get rid of the them to the beginning of the array, then get rid of the
leftovers. */ leftovers. */
n_new = VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) - n_old; n_new = VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) - n_old;
memmove (&VARRAY_TREE (unemitted_tinfo_decls, 0), if (n_new)
&VARRAY_TREE (unemitted_tinfo_decls, n_old), memmove (&VARRAY_TREE (unemitted_tinfo_decls, 0),
n_new * sizeof (tree)); &VARRAY_TREE (unemitted_tinfo_decls, n_old),
n_new * sizeof (tree));
memset (&VARRAY_TREE (unemitted_tinfo_decls, n_new), memset (&VARRAY_TREE (unemitted_tinfo_decls, n_new),
0, 0, n_old * sizeof (tree));
n_old * sizeof (tree));
VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) = n_new; VARRAY_ACTIVE_SIZE (unemitted_tinfo_decls) = n_new;
/* The list of objects with static storage duration is built up /* The list of objects with static storage duration is built up
......
...@@ -2935,62 +2935,12 @@ expand_or_defer_fn (tree fn) ...@@ -2935,62 +2935,12 @@ expand_or_defer_fn (tree fn)
if (flag_syntax_only) if (flag_syntax_only)
return; return;
if (flag_unit_at_a_time && cgraph_global_info_ready) /* Compute the appropriate object-file linkage for inline functions. */
abort (); if (DECL_DECLARED_INLINE_P (fn))
import_export_decl (fn);
if (flag_unit_at_a_time && !cgraph_global_info_ready)
{
if (at_eof)
{
/* Compute the appropriate object-file linkage for inline
functions. */
if (DECL_DECLARED_INLINE_P (fn))
import_export_decl (fn);
cgraph_finalize_function (fn, DECL_SAVED_TREE (fn));
}
else
{
if (!DECL_EXTERNAL (fn))
{
DECL_NOT_REALLY_EXTERN (fn) = 1;
DECL_EXTERNAL (fn) = 1;
}
/* Remember this function. In finish_file we'll decide if
we actually need to write this function out. */
defer_fn (fn);
/* Let the back-end know that this function exists. */
(*debug_hooks->deferred_inline_function) (fn);
}
return;
}
/* If possible, avoid generating RTL for this function. Instead,
just record it as an inline function, and wait until end-of-file
to decide whether to write it out or not. */
if (/* We have to generate RTL if it's not an inline function. */
(DECL_INLINE (fn) || DECL_COMDAT (fn))
/* Or if we have to emit code for inline functions anyhow. */
&& !flag_keep_inline_functions
/* Or if we actually have a reference to the function. */
&& !DECL_NEEDED_P (fn))
{
/* Set DECL_EXTERNAL so that assemble_external will be called as
necessary. We'll clear it again in finish_file. */
if (!DECL_EXTERNAL (fn))
{
DECL_NOT_REALLY_EXTERN (fn) = 1;
DECL_EXTERNAL (fn) = 1;
}
/* Remember this function. In finish_file we'll decide if
we actually need to write this function out. */
defer_fn (fn);
/* Let the back-end know that this function exists. */
(*debug_hooks->deferred_inline_function) (fn);
return;
}
expand_body (fn); /* Expand or defer, at the whim of the compilation unit manager. */
cgraph_finalize_function (fn, DECL_SAVED_TREE (fn));
} }
/* Helper function for walk_tree, used by finish_function to override all /* Helper function for walk_tree, used by finish_function to override all
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment