]> gcc.gnu.org Git - gcc.git/commitdiff
c-decl.c (finish_decl): Set DECL_DEFER_OUTPUT on tentative file-scope definitions.
authorJason Merrill <jason@redhat.com>
Mon, 26 Feb 2001 11:11:38 +0000 (06:11 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 26 Feb 2001 11:11:38 +0000 (06:11 -0500)
        * 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

gcc/ChangeLog
gcc/c-decl.c
gcc/toplev.c

index 3648e8aa9da28e23c25ca056f956a1e585d17237..22467dca8e9a8cf6a6f8e6011b4f1f2d5e014332 100644 (file)
@@ -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.
index cd6929f8576d8add0cf51f2f1e4b1330233a5b5f..c5420b0913174e54fe1761abb77e468af3ed93f5 100644 (file)
@@ -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)
index cc50fce594f2764a4fb8d90312efa55f97013660..924c50bc1fb460021e7ee9fa72a286cb59691575 100644 (file)
@@ -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,
This page took 0.084591 seconds and 5 git commands to generate.