diff options
author | Martin Jambor <mjambor@suse.cz> | 2014-12-01 13:05:41 +0100 |
---|---|---|
committer | Martin Jambor <jamborm@gcc.gnu.org> | 2014-12-01 13:05:41 +0100 |
commit | 64e5228e15ec4f5ccd9ba9ea309ddbeea678f447 (patch) | |
tree | 01bfdf1c99d8e9258be4ae9df6c71221c857c54d /gcc/ipa-inline-analysis.c | |
parent | f37477e5098105e140d88f8cb767f5780ee71f1f (diff) | |
download | gcc-64e5228e15ec4f5ccd9ba9ea309ddbeea678f447.zip gcc-64e5228e15ec4f5ccd9ba9ea309ddbeea678f447.tar.gz gcc-64e5228e15ec4f5ccd9ba9ea309ddbeea678f447.tar.bz2 |
re PR tree-optimization/63551 (wrong code (segfaults) at -Os on x86_64-linux-gnu)
2014-12-01 Martin Jambor <mjambor@suse.cz>
PR ipa/63551
* ipa-inline-analysis.c (evaluate_conditions_for_known_args): Convert
value of the argument to the type of the value in the condition.
testsuite/
* gcc.dg/ipa/pr63551.c: New test.
* gcc.dg/ipa/pr64041.c: Likewise.
From-SVN: r218205
Diffstat (limited to 'gcc/ipa-inline-analysis.c')
-rw-r--r-- | gcc/ipa-inline-analysis.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/ipa-inline-analysis.c b/gcc/ipa-inline-analysis.c index 9d62722..71b56fd 100644 --- a/gcc/ipa-inline-analysis.c +++ b/gcc/ipa-inline-analysis.c @@ -880,7 +880,10 @@ evaluate_conditions_for_known_args (struct cgraph_node *node, } if (c->code == IS_NOT_CONSTANT || c->code == CHANGED) continue; - res = fold_binary_to_constant (c->code, boolean_type_node, val, c->val); + val = fold_unary (VIEW_CONVERT_EXPR, TREE_TYPE (c->val), val); + res = val + ? fold_binary_to_constant (c->code, boolean_type_node, val, c->val) + : NULL; if (res && integer_zerop (res)) continue; clause |= 1 << (i + predicate_first_dynamic_condition); |