tree.h (struct tree_decl): Add comdat_flag.
authorMark Mitchell <mark@codesourcery.com>
Sun, 2 May 1999 17:43:33 +0000 (17:43 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Sun, 2 May 1999 17:43:33 +0000 (17:43 +0000)
* tree.h (struct tree_decl): Add comdat_flag.
(DECL_COMDAT): Define it.
* toplev.c (wrapup_global_declarations): Don't output a
DECL_COMDAT function just because it's public.

From-SVN: r26733

gcc/ChangeLog
gcc/toplev.c
gcc/tree.h

index c6c4125..29c83a7 100644 (file)
@@ -1,3 +1,10 @@
+Sun May  2 14:02:21 1999  Mark Mitchell  <mark@codesourcery.com>
+
+       * tree.h (struct tree_decl): Add comdat_flag.
+       (DECL_COMDAT): Define it.
+       * toplev.c (wrapup_global_declarations): Don't output a
+       DECL_COMDAT function just because it's public.
+
 Sun May  2 15:16:42 1999  Joseph S. Myers  <jsm28@cam.ac.uk>
 
        * pdp11.h (TARGET_SWITCHES): Fix error in previous change.
index cc0453c..1fe439a 100644 (file)
@@ -2753,7 +2753,7 @@ wrapup_global_declarations (vec, len)
              && DECL_INITIAL (decl) != 0
              && DECL_SAVED_INSNS (decl) != 0
              && (flag_keep_inline_functions
-                 || TREE_PUBLIC (decl)
+                 || (TREE_PUBLIC (decl) && !DECL_COMDAT (decl))
                  || TREE_SYMBOL_REFERENCED (DECL_ASSEMBLER_NAME (decl))))
            {
              reconsider = 1;
index e91902f..0d7ea84 100644 (file)
@@ -1246,6 +1246,17 @@ struct tree_type
    multiple translation units should be merged.  */
 #define DECL_ONE_ONLY(NODE) (DECL_CHECK (NODE)->decl.transparent_union)
 
+/* Used in a DECL to indicate that, even if it TREE_PUBLIC, it need
+   not be put out unless it is needed in this translation unit.
+   Entities like this are shared across translation units (like weak
+   entities), but are guaranteed to be generated by any translation
+   unit that needs them, and therefore need not be put out anywhere
+   where they are not needed.  DECL_COMDAT is just a hint to the
+   back-end; it is up to front-ends which set this flag to ensure
+   that there will never be any harm, other than bloat, in putting out
+   something which is DECL_COMDAT.  */
+#define DECL_COMDAT(NODE) (DECL_CHECK (NODE)->decl.comdat_flag)
+
 /* Used in FUNCTION_DECLs to indicate that function entry and exit should
    be instrumented with calls to support routines.  */
 #define DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT(NODE) ((NODE)->decl.no_instrument_function_entry_exit)
@@ -1321,6 +1332,7 @@ struct tree_decl
   unsigned non_addr_const_p : 1;
   unsigned no_instrument_function_entry_exit : 1;
   unsigned no_check_memory_usage : 1;
+  unsigned comdat_flag : 1;
 
   /* For a FUNCTION_DECL, if inline, this is the size of frame needed.
      If built-in, this is the code for which built-in function.