re PR target/51726 (LTO and attribute 'selectany')
authorKai Tietz <ktietz70@googlemail.com>
Fri, 2 Oct 2015 08:06:52 +0000 (08:06 +0000)
committerKai Tietz <ktietz@gcc.gnu.org>
Fri, 2 Oct 2015 08:06:52 +0000 (10:06 +0200)
PR target/51726
* config/i386/winnt.c (ix86_handle_selectany_attribute): Handle
selectany within this function without need to keep attribute.
(i386_pe_encode_section_info): Remove selectany-code.

From-SVN: r228370

gcc/ChangeLog
gcc/config/i386/winnt.c

index bcc33bd245e5c7b0167c7a4d38f882e9c454be9d..b9d21ec119291464cc6a21b158587833aaebbe32 100644 (file)
@@ -1,3 +1,10 @@
+2015-10-02  Kai Tietz  <ktietz70@googlemail.com>
+
+       PR target/51726
+       * config/i386/winnt.c (ix86_handle_selectany_attribute): Handle
+       selectany within this function without need to keep attribute.
+       (i386_pe_encode_section_info): Remove selectany-code.
+
 2015-10-02  Richard Biener  <rguenther@suse.de>
 
        * tree-ssa-sccvn.c (has_VN_INFO): New function.
index 362ef492a2bbe94f3bd28f2c48d8ec8da4df25c3..e9efec0007134c5b89eecc9f1a0ea3adedc3e131 100644 (file)
@@ -89,17 +89,23 @@ tree
 ix86_handle_selectany_attribute (tree *node, tree name, tree, int,
                                 bool *no_add_attrs)
 {
+  tree decl = *node;
   /* The attribute applies only to objects that are initialized and have
      external linkage.  However, we may not know about initialization
-     until the language frontend has processed the decl. We'll check for
-     initialization later in encode_section_info.  */
-  if (TREE_CODE (*node) != VAR_DECL || !TREE_PUBLIC (*node))
-    {  
-      error ("%qE attribute applies only to initialized variables"
-                    " with external linkage", name);
-      *no_add_attrs = true;
+     until the language frontend has processed the decl.   Therefore
+     we make sure that variable isn't initialized as common.  */
+  if (TREE_CODE (decl) != VAR_DECL || !TREE_PUBLIC (decl))
+    error ("%qE attribute applies only to initialized variables"
+                  " with external linkage", name);
+  else
+    {
+      make_decl_one_only (decl, DECL_ASSEMBLER_NAME (decl));
+      /* A variable with attribute selectany never can be common.  */
+      DECL_COMMON (decl) = 0;
     }
 
+  /* We don't need to keep attribute itself.  */
+  *no_add_attrs = true;
   return NULL_TREE;
 }
 
@@ -320,23 +326,7 @@ i386_pe_encode_section_info (tree decl, rtx rtl, int first)
   switch (TREE_CODE (decl))
     {
     case FUNCTION_DECL:
-      break;
-
     case VAR_DECL:
-      if (lookup_attribute ("selectany", DECL_ATTRIBUTES (decl)))
-       {
-         if (DECL_INITIAL (decl)
-             /* If an object is initialized with a ctor, the static
-                initialization and destruction code for it is present in
-                each unit defining the object.  The code that calls the
-                ctor is protected by a link-once guard variable, so that
-                the object still has link-once semantics,  */
-             || TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl)))
-           make_decl_one_only (decl, DECL_ASSEMBLER_NAME (decl));
-         else
-           error ("%q+D:'selectany' attribute applies only to "
-                  "initialized objects", decl);
-       }
       break;
 
     default: