diff options
author | Jason Merrill <jason@redhat.com> | 2001-02-26 06:11:38 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2001-02-26 06:11:38 -0500 |
commit | 8cf8d8a27b3eb2b183511a3e2f449985a7aa320b (patch) | |
tree | ea9f084f1be947aa45bc7aed9c4985df654130c7 /gcc | |
parent | e5dd4aad7f83c3257f4302e100b31690000e1a26 (diff) | |
download | gcc-8cf8d8a27b3eb2b183511a3e2f449985a7aa320b.zip gcc-8cf8d8a27b3eb2b183511a3e2f449985a7aa320b.tar.gz gcc-8cf8d8a27b3eb2b183511a3e2f449985a7aa320b.tar.bz2 |
c-decl.c (finish_decl): Set DECL_DEFER_OUTPUT on tentative file-scope definitions.
* c-decl.c (finish_decl): Set DECL_DEFER_OUTPUT on tentative file-scope
definitions.
* toplev.c (rest_of_decl_compilation): Check DECL_DEFER_OUTPUT to
recognize a tentative definition. Lose obsolete code.
* toplev.c (wrapup_global_declarations): Don't emit DECL_COMDAT
variables unless necessary, either.
From-SVN: r40066
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/c-decl.c | 14 | ||||
-rw-r--r-- | gcc/toplev.c | 23 |
3 files changed, 28 insertions, 19 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3648e8a..22467dc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2001-02-26 Jason Merrill <jason@redhat.com> + + * c-decl.c (finish_decl): Set DECL_DEFER_OUTPUT on tentative file-scope + definitions. + * toplev.c (rest_of_decl_compilation): Check DECL_DEFER_OUTPUT to + recognize a tentative definition. Lose obsolete code. + + * toplev.c (wrapup_global_declarations): Don't emit DECL_COMDAT + variables unless necessary, either. + 2001-02-25 Richard Henderson <rth@redhat.com> * ifcvt.c (struct noce_if_info): Add test_bb. diff --git a/gcc/c-decl.c b/gcc/c-decl.c index cd6929f..c5420b0 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -3612,9 +3612,17 @@ finish_decl (decl, init, asmspec_tree) maybe_objc_check_decl (decl); if (!DECL_CONTEXT (decl)) - rest_of_decl_compilation (decl, asmspec, - (DECL_CONTEXT (decl) == 0 - || TREE_ASM_WRITTEN (decl)), 0); + { + if (DECL_INITIAL (decl) == NULL_TREE + || DECL_INITIAL (decl) == error_mark_node) + /* Don't output anything + when a tentative file-scope definition is seen. + But at end of compilation, do output code for them. */ + DECL_DEFER_OUTPUT (decl) = 1; + rest_of_decl_compilation (decl, asmspec, + (DECL_CONTEXT (decl) == 0 + || TREE_ASM_WRITTEN (decl)), 0); + } else { if (asmspec) diff --git a/gcc/toplev.c b/gcc/toplev.c index cc50fce..924c50b 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1940,8 +1940,8 @@ wrapup_global_declarations (vec, len) defined in a main file, as opposed to an include file. */ if (TREE_CODE (decl) == VAR_DECL && TREE_STATIC (decl) - && (! TREE_READONLY (decl) - || TREE_PUBLIC (decl) + && (((! TREE_READONLY (decl) || TREE_PUBLIC (decl)) + && !DECL_COMDAT (decl)) || (!optimize && flag_keep_static_consts && !DECL_ARTIFICIAL (decl)) @@ -2562,20 +2562,11 @@ rest_of_decl_compilation (decl, asmspec, top_level, at_end) { timevar_push (TV_VARCONST); make_decl_rtl (decl, asmspec); - /* Initialized extern variable exists to be replaced - with its value, or represents something that will be - output in another file. */ - if (! (TREE_CODE (decl) == VAR_DECL - && DECL_EXTERNAL (decl) && TREE_READONLY (decl) - && DECL_INITIAL (decl) != 0 - && DECL_INITIAL (decl) != error_mark_node)) - /* 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 && top_level - && (DECL_INITIAL (decl) == 0 - || DECL_INITIAL (decl) == error_mark_node))) - assemble_variable (decl, top_level, at_end, 0); + /* 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)) + assemble_variable (decl, top_level, at_end, 0); if (decl == last_assemble_variable_decl) { ASM_FINISH_DECLARE_OBJECT (asm_out_file, decl, |