OSDN Git Service

Fix aliasing bug that also caused memory usage problems.
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 3 Sep 2004 22:33:46 +0000 (22:33 +0000)
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 3 Sep 2004 22:33:46 +0000 (22:33 +0000)
* tree-ssa-alias.c (may_be_aliased): Move TREE_STATIC check after
DECL_EXTERNAL check.

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

gcc/ChangeLog
gcc/tree-ssa-alias.c

index 175598c..a8fbba5 100644 (file)
@@ -1,3 +1,8 @@
+2004-09-03  James E Wilson  <wilson@specifixinc.com>
+
+       * tree-ssa-alias.c (may_be_aliased): Move TREE_STATIC check after
+       DECL_EXTERNAL check.
+
 2004-09-03  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        * final.c (output_in_slot): New global variable.
 2004-09-03  Eric Botcazou  <ebotcazou@libertysurf.fr>
 
        * final.c (output_in_slot): New global variable.
index 25c7cf0..4027ec9 100644 (file)
@@ -2467,15 +2467,17 @@ may_be_aliased (tree var)
   if (TREE_ADDRESSABLE (var))
     return true;
 
   if (TREE_ADDRESSABLE (var))
     return true;
 
-  /* Automatic variables can't have their addresses escape any other way.  */
-  if (!TREE_STATIC (var))
-    return false;
-
   /* Globally visible variables can have their addresses taken by other
      translation units.  */
   if (DECL_EXTERNAL (var) || TREE_PUBLIC (var))
     return true;
 
   /* Globally visible variables can have their addresses taken by other
      translation units.  */
   if (DECL_EXTERNAL (var) || TREE_PUBLIC (var))
     return true;
 
+  /* Automatic variables can't have their addresses escape any other way.
+     This must be after the check for global variables, as extern declarations
+     do not have TREE_STATIC set.  */
+  if (!TREE_STATIC (var))
+    return false;
+
   /* If we're in unit-at-a-time mode, then we must have seen all occurrences
      of address-of operators, and so we can trust TREE_ADDRESSABLE.  Otherwise
      we can only be sure the variable isn't addressable if it's local to the
   /* If we're in unit-at-a-time mode, then we must have seen all occurrences
      of address-of operators, and so we can trust TREE_ADDRESSABLE.  Otherwise
      we can only be sure the variable isn't addressable if it's local to the