Fix aliasing bug that also caused memory usage problems.
authorJames E Wilson <wilson@specifixinc.com>
Fri, 3 Sep 2004 22:33:46 +0000 (22:33 +0000)
committerJim Wilson <wilson@gcc.gnu.org>
Fri, 3 Sep 2004 22:33:46 +0000 (15:33 -0700)
* tree-ssa-alias.c (may_be_aliased): Move TREE_STATIC check after
DECL_EXTERNAL check.

From-SVN: r87057

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

index 175598c53e1c19cd1f10f712558df2506ee03c31..a8fbba528732796d081ca391ce83634f421a419b 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.
index 25c7cf0fa0f863c0195a3afefe4685ed48b4dad5..4027ec940e236ccb94a2ec659c207182580d269c 100644 (file)
@@ -2467,15 +2467,17 @@ may_be_aliased (tree var)
   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;
 
+  /* 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