diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 31e4df25e35c3601ebcf8145068138d1ba919dc6..bc9fb613629c5f9be24ce666d6832de478ea3e6f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2004-09-16  Diego Novillo  <dnovillo@redhat.com>
+
+	PR tree-optimization/17528
+	* tree-ssa-alias.c (compute_flow_insensitive_aliasing): Do not
+	erase the may-alias set for a tag when merging it with
+	another.
+
 2004-09-16  Kaz Kojima  <kkojima@gcc.gnu.org>
 
 	* config/sh/sh.md (call): Extend 32-bit addresses to DImode
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 801de5bfaa5bea5c7d7eb95342443e591d1ede28..d30dc38d6373f9b043b5b8c8b6887ea4cf2c7f16 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -977,7 +977,6 @@ compute_flow_insensitive_aliasing (struct alias_info *ai)
 	{
 	  struct alias_map_d *p_map2 = ai->pointers[j];
 	  tree tag2 = var_ann (p_map2->var)->type_mem_tag;
-	  var_ann_t tag2_ann = var_ann (tag2);
 	  sbitmap may_aliases2 = p_map2->may_aliases;
 
 	  /* If the pointers may not point to each other, do nothing.  */
@@ -999,8 +998,6 @@ compute_flow_insensitive_aliasing (struct alias_info *ai)
 	      EXECUTE_IF_SET_IN_SBITMAP (may_aliases2, 0, k,
 		  add_may_alias (tag1, referenced_var (k)));
 	      sbitmap_a_or_b (may_aliases1, may_aliases1, may_aliases2);
-	      sbitmap_zero (may_aliases2);
-	      tag2_ann->may_aliases = NULL;
 	    }
 	  else
 	    {