diff options
author | Martin Jambor <mjambor@suse.cz> | 2010-11-11 13:03:59 +0100 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2010-11-11 13:03:59 +0100 |
commit | 280fedf0677108f96d3c701815bccc182eff9fb4 (patch) | |
tree | 858b06e1bf0775f367e80028c2b76443c1c53791 /gcc/ipa-prop.c | |
parent | 778216a0c8f4c2050e074a4f0b2e0c067e32140c (diff) | |
download | gcc-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.c | 6 |
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)); |