diff options
author | Richard Guenther <rguenther@suse.de> | 2008-12-09 11:06:34 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-12-09 11:06:34 +0000 |
commit | b3b30b2401e192a42d4a75728dd198223573dd81 (patch) | |
tree | 177e1eca8dc59d171ca5d3c5e070b02640e36abb /gcc | |
parent | 30da611174c5fe050203f6ff0faa237c522f96ff (diff) | |
download | gcc-b3b30b2401e192a42d4a75728dd198223573dd81.zip gcc-b3b30b2401e192a42d4a75728dd198223573dd81.tar.gz gcc-b3b30b2401e192a42d4a75728dd198223573dd81.tar.bz2 |
re PR tree-optimization/38445 (ICE in tree-ssa-struct-alias when compiling grub-0.97)
2008-12-09 Richard Guenther <rguenther@suse.de>
PR tree-optimization/38445
* tree-ssa-structalias.c (emit_pointer_definition): Only visit
names once.
(emit_alias_warning): Adjust.
From-SVN: r142590
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/tree-ssa-structalias.c | 15 |
2 files changed, 18 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 6f4c937..ae10870 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2008-12-09 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/38445 + * tree-ssa-structalias.c (emit_pointer_definition): Only visit + names once. + (emit_alias_warning): Adjust. + 2008-12-09 Andrew Haley <aph@redhat.com> * fixed-value.c (do_fixed_add): Add comment. diff --git a/gcc/tree-ssa-structalias.c b/gcc/tree-ssa-structalias.c index 46781b8..3d64c1c 100644 --- a/gcc/tree-ssa-structalias.c +++ b/gcc/tree-ssa-structalias.c @@ -4704,8 +4704,9 @@ static bool have_alias_info = false; /* Emit a note for the pointer initialization point DEF. */ static void -emit_pointer_definition (gimple def) +emit_pointer_definition (tree ptr, bitmap visited) { + gimple def = SSA_NAME_DEF_STMT (ptr); if (gimple_code (def) == GIMPLE_PHI) { use_operand_p argp; @@ -4715,7 +4716,10 @@ emit_pointer_definition (gimple def) { tree arg = USE_FROM_PTR (argp); if (TREE_CODE (arg) == SSA_NAME) - emit_pointer_definition (SSA_NAME_DEF_STMT (arg)); + { + if (bitmap_set_bit (visited, SSA_NAME_VERSION (arg))) + emit_pointer_definition (arg, visited); + } else inform (0, "initialized from %qE", arg); } @@ -4729,7 +4733,6 @@ emit_pointer_definition (gimple def) static void emit_alias_warning (tree ptr) { - gimple def = SSA_NAME_DEF_STMT (ptr); gimple use; imm_use_iterator ui; unsigned warned = 0; @@ -4777,7 +4780,11 @@ emit_alias_warning (tree ptr) } } if (warned > 0) - emit_pointer_definition (def); + { + bitmap visited = BITMAP_ALLOC (NULL); + emit_pointer_definition (ptr, visited); + BITMAP_FREE (visited); + } } /* Given a pointer variable P, fill in its points-to set, or return |