diff options
author | Jakub Jelinek <jakub@redhat.com> | 2001-11-16 09:05:16 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2001-11-16 09:05:16 +0100 |
commit | 25e7f439857c2fb0e93f32906f6da0ff3d395047 (patch) | |
tree | 4a79da552d8d92dd6c4288af8f6d52ff415db7e6 /gcc/c-lang.c | |
parent | 38b3baaef415c904fba681f05f3ee44eb3d10ae6 (diff) | |
download | gcc-25e7f439857c2fb0e93f32906f6da0ff3d395047.zip gcc-25e7f439857c2fb0e93f32906f6da0ff3d395047.tar.gz gcc-25e7f439857c2fb0e93f32906f6da0ff3d395047.tar.bz2 |
c-lang.c (finish_file): Don't emit static inline functions if they weren't referenced.
* c-lang.c (finish_file): Don't emit static inline functions if
they weren't referenced.
* gcc.c-torture/execute/20011115-1.c: New test.
From-SVN: r47082
Diffstat (limited to 'gcc/c-lang.c')
-rw-r--r-- | gcc/c-lang.c | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/gcc/c-lang.c b/gcc/c-lang.c index 72d2536..5655d8c 100644 --- a/gcc/c-lang.c +++ b/gcc/c-lang.c @@ -271,13 +271,38 @@ void finish_file () { unsigned int i; + bool reconsider; for (i = 0; i < VARRAY_ACTIVE_SIZE (deferred_fns); i++) - /* Don't output the same function twice. We may run into such - situations when an extern inline function is later given a - non-extern-inline definition. */ - if (! TREE_ASM_WRITTEN (VARRAY_TREE (deferred_fns, i))) - c_expand_deferred_function (VARRAY_TREE (deferred_fns, i)); + { + tree decl = VARRAY_TREE (deferred_fns, i); + + if (! TREE_ASM_WRITTEN (decl) && TREE_PUBLIC (decl)) + { + c_expand_deferred_function (decl); + VARRAY_TREE (deferred_fns, i) = NULL; + } + } + + do + { + reconsider = false; + for (i = 0; i < VARRAY_ACTIVE_SIZE (deferred_fns); i++) + { + tree decl = VARRAY_TREE (deferred_fns, i); + + if (decl + && ! TREE_ASM_WRITTEN (decl) + && (flag_keep_inline_functions + || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl)))) + { + c_expand_deferred_function (decl); + VARRAY_TREE (deferred_fns, i) = NULL; + reconsider = true; + } + } + } while (reconsider); + VARRAY_FREE (deferred_fns); #ifndef ASM_OUTPUT_CONSTRUCTOR |