OSDN Git Service

2011-12-06 Richard Guenther <rguenther@suse.de>
authorrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Dec 2011 13:26:09 +0000 (13:26 +0000)
committerrguenth <rguenth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Dec 2011 13:26:09 +0000 (13:26 +0000)
PR middle-end/50601
* varasm.c (assemble_alias): Move DECL_EXTERNAL implementation
quirk adjustjment ...
* passes.c (rest_of_decl_compilation): ... here.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@182048 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/passes.c
gcc/varasm.c

index 76c8b18..f0cb27a 100644 (file)
@@ -1,5 +1,12 @@
 2011-12-06  Richard Guenther  <rguenther@suse.de>
 
 2011-12-06  Richard Guenther  <rguenther@suse.de>
 
+       PR middle-end/50601
+       * varasm.c (assemble_alias): Move DECL_EXTERNAL implementation
+       quirk adjustjment ...
+       * passes.c (rest_of_decl_compilation): ... here.
+
+2011-12-06  Richard Guenther  <rguenther@suse.de>
+
        PR middle-end/51436
        * gimple-fold.c (gimplify_and_update_call_from_tree): Guard
        vdef check for the fact we do not have virtual operands when
        PR middle-end/51436
        * gimple-fold.c (gimplify_and_update_call_from_tree): Guard
        vdef check for the fact we do not have virtual operands when
index a351241..d060bb4 100644 (file)
@@ -156,6 +156,11 @@ rest_of_decl_compilation (tree decl,
       {
        alias = TREE_VALUE (TREE_VALUE (alias));
        alias = get_identifier (TREE_STRING_POINTER (alias));
       {
        alias = TREE_VALUE (TREE_VALUE (alias));
        alias = get_identifier (TREE_STRING_POINTER (alias));
+       /* A quirk of the initial implementation of aliases required that the
+          user add "extern" to all of them.  Which is silly, but now
+          historical.  Do note that the symbol is in fact locally defined.  */
+       if (!lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
+         DECL_EXTERNAL (decl) = 0;
        assemble_alias (decl, alias);
       }
   }
        assemble_alias (decl, alias);
       }
   }
index 8d55548..78dc4cd 100644 (file)
@@ -5794,14 +5794,11 @@ void
 assemble_alias (tree decl, tree target)
 {
   tree target_decl;
 assemble_alias (tree decl, tree target)
 {
   tree target_decl;
-  bool is_weakref = false;
 
   if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
     {
       tree alias = DECL_ASSEMBLER_NAME (decl);
 
 
   if (lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)))
     {
       tree alias = DECL_ASSEMBLER_NAME (decl);
 
-      is_weakref = true;
-
       ultimate_transparent_alias_target (&target);
 
       if (alias == target)
       ultimate_transparent_alias_target (&target);
 
       if (alias == target)
@@ -5839,12 +5836,6 @@ assemble_alias (tree decl, tree target)
     }
   TREE_USED (decl) = 1;
 
     }
   TREE_USED (decl) = 1;
 
-  /* A quirk of the initial implementation of aliases required that the user
-     add "extern" to all of them.  Which is silly, but now historical.  Do
-     note that the symbol is in fact locally defined.  */
-  if (! is_weakref)
-    DECL_EXTERNAL (decl) = 0;
-
   /* Allow aliases to aliases.  */
   if (TREE_CODE (decl) == FUNCTION_DECL)
     cgraph_get_create_node (decl)->alias = true;
   /* Allow aliases to aliases.  */
   if (TREE_CODE (decl) == FUNCTION_DECL)
     cgraph_get_create_node (decl)->alias = true;