From: Richard Guenther Date: Wed, 22 Jun 2011 18:02:06 +0000 (+0000) Subject: re PR tree-optimization/49493 (ICE: in insert_vi_for_tree, at tree-ssa-structalias... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9c7c9f10c3bac5a7b3c5a46f52449cd095a767da;p=gcc.git re PR tree-optimization/49493 (ICE: in insert_vi_for_tree, at tree-ssa-structalias.c:2637 with -O -fipa-pta) 2011-06-22 Richard Guenther 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ea2042157ae..bfb27d6ee22 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2011-06-22 Richard Guenther + + 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 * config/arm/arm.h (OPTION_DEFAULT_SPECS): Fix -mtls-dialect diff --git a/gcc/cgraph.h b/gcc/cgraph.h index dd08febaf12..f912af2a393 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -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; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2ca3b573059..189cd396730 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-06-22 Richard Guenther + + PR tree-optimization/49493 + * gcc.dg/ipa/ipa-pta-17.c: New testcase. + 2011-06-22 Jason Merrill 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 index 00000000000..e409e4cfb62 --- /dev/null +++ b/gcc/testsuite/gcc.dg/ipa/ipa-pta-17.c @@ -0,0 +1,6 @@ +/* { dg-do compile } */ +/* { dg-options "-O -fipa-pta" } */ + +static int i; +extern int j __attribute__ ((alias ("i"))); +int *p = &j; diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index faf4f6a56d4..4127e037632 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -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)