re PR tree-optimization/49493 (ICE: in insert_vi_for_tree, at tree-ssa-structalias...
authorRichard Guenther <rguenther@suse.de>
Wed, 22 Jun 2011 18:02:06 +0000 (18:02 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 22 Jun 2011 18:02:06 +0000 (18:02 +0000)
2011-06-22  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/49493
* tree-ssa-structalias.c (get_constraint_for_ssa_var):
Refer to the alias target of variables.
(associate_varinfo_to_alias_1): Remove.
(ipa_pta_execute): Do not associate aliases with anything.
* cgraph.h (varpool_alias_aliased_node): Fix cut&paste errors.
(cgraph_function_node): Likewise.
(cgraph_function_or_thunk_node): Likewise.
(varpool_variable_node): Likewise.

* gcc.dg/ipa/ipa-pta-17.c: New testcase.

From-SVN: r175300

gcc/ChangeLog
gcc/cgraph.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/ipa/ipa-pta-17.c [new file with mode: 0644]
gcc/tree-ssa-structalias.c

index ea2042157aef2df15144358dfa5fe84f00422463..bfb27d6ee22a6f2d2b20c451d019dfeaaa72c011 100644 (file)
@@ -1,3 +1,15 @@
+2011-06-22  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/49493
+       * tree-ssa-structalias.c (get_constraint_for_ssa_var):
+       Refer to the alias target of variables.
+       (associate_varinfo_to_alias_1): Remove.
+       (ipa_pta_execute): Do not associate aliases with anything.
+       * cgraph.h (varpool_alias_aliased_node): Fix cut&paste errors.
+       (cgraph_function_node): Likewise.
+       (cgraph_function_or_thunk_node): Likewise.
+       (varpool_variable_node): Likewise.
+
 2011-06-22  Nathan Sidwell  <nathan@codesourcery.com>
 
        * config/arm/arm.h (OPTION_DEFAULT_SPECS): Fix -mtls-dialect
index dd08febaf124be293520f64fb3c4d303e3169130..f912af2a39363094c65fc2a9998e754350df9732 100644 (file)
@@ -981,7 +981,7 @@ varpool_alias_aliased_node (struct varpool_node *n)
 
   ipa_ref_list_reference_iterate (&n->ref_list, 0, ref);
   gcc_checking_assert (ref->use == IPA_REF_ALIAS);
-  if (ref->refered_type == IPA_REF_CGRAPH)
+  if (ref->refered_type == IPA_REF_VARPOOL)
     return ipa_ref_varpool_node (ref);
   return NULL;
 }
@@ -1011,7 +1011,7 @@ cgraph_function_node (struct cgraph_node *node, enum availability *availability)
            *availability = a;
        }
     }
-  if (*availability)
+  if (availability)
     *availability = AVAIL_NOT_AVAILABLE;
   return NULL;
 }
@@ -1039,7 +1039,7 @@ cgraph_function_or_thunk_node (struct cgraph_node *node, enum availability *avai
            *availability = a;
        }
     }
-  if (*availability)
+  if (availability)
     *availability = AVAIL_NOT_AVAILABLE;
   return NULL;
 }
@@ -1067,7 +1067,7 @@ varpool_variable_node (struct varpool_node *node, enum availability *availabilit
            *availability = a;
        }
     }
-  if (*availability)
+  if (availability)
     *availability = AVAIL_NOT_AVAILABLE;
   return NULL;
 }
index 2ca3b5730595cdc2107e3c09e09e70bea9f6d8dc..189cd3967309ff2fa05af2616147fbb289063dba 100644 (file)
@@ -1,3 +1,8 @@
+2011-06-22  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/49493
+       * gcc.dg/ipa/ipa-pta-17.c: New testcase.
+
 2011-06-22  Jason Merrill  <jason@redhat.com>
 
        PR c++/49260
diff --git a/gcc/testsuite/gcc.dg/ipa/ipa-pta-17.c b/gcc/testsuite/gcc.dg/ipa/ipa-pta-17.c
new file mode 100644 (file)
index 0000000..e409e4c
--- /dev/null
@@ -0,0 +1,6 @@
+/* { dg-do compile } */
+/* { dg-options "-O -fipa-pta" } */
+
+static int i;
+extern int j __attribute__ ((alias ("i")));
+int *p = &j;
index faf4f6a56d44ce5dbbaf637a5f063265ab09f3ca..4127e0376323504a82ca7f1612b0dadb3828d1cf 100644 (file)
@@ -2746,6 +2746,18 @@ get_constraint_for_ssa_var (tree t, VEC(ce_s, heap) **results, bool address_p)
       return;
     }
 
+  /* For global variables resort to the alias target.  */
+  if (TREE_CODE (t) == VAR_DECL
+      && (TREE_STATIC (t) || DECL_EXTERNAL (t)))
+    {
+      struct varpool_node *node = varpool_get_node (t);
+      if (node && node->alias)
+       {
+         node = varpool_variable_node (node, NULL);
+         t = node->decl;
+       }
+    }
+
   vi = get_vi_for_tree (t);
   cexpr.var = vi->id;
   cexpr.type = SCALAR;
@@ -6703,16 +6715,6 @@ associate_varinfo_to_alias (struct cgraph_node *node, void *data)
   return false;
 }
 
-/* Associate node with varinfo DATA. Worker for
-   varpool_for_node_and_aliases.  */
-static bool
-associate_varinfo_to_alias_1 (struct varpool_node *node, void *data)
-{
-  if (node->alias)
-    insert_vi_for_tree (node->decl, (varinfo_t)data);
-  return false;
-}
-
 /* Execute the driver for IPA PTA.  */
 static unsigned int
 ipa_pta_execute (void)
@@ -6744,12 +6746,10 @@ ipa_pta_execute (void)
   /* Create constraints for global variables and their initializers.  */
   for (var = varpool_nodes; var; var = var->next)
     {
-      varinfo_t vi;
       if (var->alias)
        continue;
 
-      vi = get_vi_for_tree (var->decl);
-      varpool_for_node_and_aliases (var, associate_varinfo_to_alias_1, vi, true);
+      get_vi_for_tree (var->decl);
     }
 
   if (dump_file)