aboutsummaryrefslogtreecommitdiff
path: root/gcc/ipa-prop.c
diff options
context:
space:
mode:
authorMartin Jambor <mjambor@suse.cz>2010-11-11 13:03:59 +0100
committerMartin Jambor <jamborm@gcc.gnu.org>2010-11-11 13:03:59 +0100
commit280fedf0677108f96d3c701815bccc182eff9fb4 (patch)
tree858b06e1bf0775f367e80028c2b76443c1c53791 /gcc/ipa-prop.c
parent778216a0c8f4c2050e074a4f0b2e0c067e32140c (diff)
downloadgcc-280fedf0677108f96d3c701815bccc182eff9fb4.zip
gcc-280fedf0677108f96d3c701815bccc182eff9fb4.tar.gz
gcc-280fedf0677108f96d3c701815bccc182eff9fb4.tar.bz2
re PR tree-optimization/46383 (ICE: in get_binfo_at_offset, at tree.c:10947)
2010-11-11 Martin Jambor <mjambor@suse.cz> PR tree-optimization/46383 * ipa-prop.c (compute_complex_assign_jump_func): Ignore negative offsets. (compute_complex_ancestor_jump_func): Likewise. * tree.c (get_binfo_at_offset): Return NULL_TREE if offset is negative. * testsuite/g++.dg/torture/pr46383.C: New test. From-SVN: r166598
Diffstat (limited to 'gcc/ipa-prop.c')
-rw-r--r--gcc/ipa-prop.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index b3d9f91..d0587b6 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -413,7 +413,8 @@ compute_complex_assign_jump_func (struct ipa_node_params *info,
offset += mem_ref_offset (op1).low * BITS_PER_UNIT;
op1 = TREE_OPERAND (op1, 0);
if (TREE_CODE (op1) != SSA_NAME
- || !SSA_NAME_IS_DEFAULT_DEF (op1))
+ || !SSA_NAME_IS_DEFAULT_DEF (op1)
+ || offset < 0)
return;
index = ipa_get_param_decl_index (info, SSA_NAME_VAR (op1));
@@ -490,7 +491,8 @@ compute_complex_ancestor_jump_func (struct ipa_node_params *info,
offset += mem_ref_offset (expr).low * BITS_PER_UNIT;
parm = TREE_OPERAND (expr, 0);
if (TREE_CODE (parm) != SSA_NAME
- || !SSA_NAME_IS_DEFAULT_DEF (parm))
+ || !SSA_NAME_IS_DEFAULT_DEF (parm)
+ || offset < 0)
return;
index = ipa_get_param_decl_index (info, SSA_NAME_VAR (parm));