diff options
author | Richard Guenther <rguenther@suse.de> | 2011-06-22 18:02:06 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2011-06-22 18:02:06 +0000 |
commit | 9c7c9f10c3bac5a7b3c5a46f52449cd095a767da (patch) | |
tree | 09cf8e6a4c12901e2c4ac308c41636ffb5c92b2f /gcc/tree-ssa-structalias.c | |
parent | 7b902b811ba4b83f0bbd3c684d1bf01b4660c650 (diff) | |
download | gcc-9c7c9f10c3bac5a7b3c5a46f52449cd095a767da.zip gcc-9c7c9f10c3bac5a7b3c5a46f52449cd095a767da.tar.gz gcc-9c7c9f10c3bac5a7b3c5a46f52449cd095a767da.tar.bz2 |
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 <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
Diffstat (limited to 'gcc/tree-ssa-structalias.c')
-rw-r--r-- | gcc/tree-ssa-structalias.c | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index faf4f6a..4127e03 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) |