OSDN Git Service

2005-04-11 Daniel Berlin <dberlin@dberlin.org>
authordberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 11 Apr 2005 20:15:33 +0000 (20:15 +0000)
committerdberlin <dberlin@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 11 Apr 2005 20:15:33 +0000 (20:15 +0000)
Fix PR tree-optimization/20926

* tree-ssa-alias.c (add_type_alias): Handle subvars.

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

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

index 0818b49..beb69e7 100644 (file)
@@ -1,3 +1,9 @@
+2005-04-11  Daniel Berlin  <dberlin@dberlin.org>
+
+       Fix PR tree-optimization/20926
+       
+       * tree-ssa-alias.c (add_type_alias): Handle subvars.
+       
 2005-04-11  Devang Patel  <dpatel@apple.com>
 
        * config/rs6000.c (rs6000_emit_vector_select): Fix vector select
index 0f70017..7d8e783 100644 (file)
@@ -2704,6 +2704,7 @@ add_type_alias (tree ptr, tree var)
   varray_type aliases;
   tree tag;
   var_ann_t ann = var_ann (ptr);
+  subvar_t svars;
 
   if (ann->type_mem_tag == NULL_TREE)
     {
@@ -2748,7 +2749,18 @@ found_tag:
      for PTR's type tag.  */
   gcc_assert (var_ann (var)->type_mem_tag == NOT_A_TAG);
   tag = ann->type_mem_tag;
-  add_may_alias (tag, var);
+
+  /* If VAR has subvars, add the subvars to the tag instead of the
+     actual var.  */
+  if (var_can_have_subvars (var)
+      && (svars = get_subvars_for_var (var)))
+    {
+      subvar_t sv;      
+      for (sv = svars; sv; sv = sv->next)
+       add_may_alias (tag, sv->var);
+    }
+  else
+    add_may_alias (tag, var);
 
   /* TAG and its set of aliases need to be marked for renaming.  */
   mark_sym_for_renaming (tag);