diff options
author | Andrew MacLeod <amacleod@redhat.com> | 2022-09-22 10:27:17 -0400 |
---|---|---|
committer | Andrew MacLeod <amacleod@redhat.com> | 2022-09-22 14:48:28 -0400 |
commit | a7a6649f4e7c459a95dee1600554ad06aaeb1cf6 (patch) | |
tree | bbdabc2730cb81be7c2803dca5196223fe0b8aa3 /gcc | |
parent | 51ce06385bf259a092f830f1a6dcc4b98757919e (diff) | |
download | gcc-a7a6649f4e7c459a95dee1600554ad06aaeb1cf6.zip gcc-a7a6649f4e7c459a95dee1600554ad06aaeb1cf6.tar.gz gcc-a7a6649f4e7c459a95dee1600554ad06aaeb1cf6.tar.bz2 |
Fix calc_op1 for undefined op2_range.
Unary operations pass the type of operand 1 into op1_range. If that
range is undefined, the routine blindly picks the type of operand 2,
which in the case of a unary op, does not exist and traps.
* gimple-range-op.cc (gimple_range_op_handler::calc_op1): Use
operand 1 for second range if there is no operand 2.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/gimple-range-op.cc | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/gcc/gimple-range-op.cc b/gcc/gimple-range-op.cc index f03125a..ab5b389 100644 --- a/gcc/gimple-range-op.cc +++ b/gcc/gimple-range-op.cc @@ -208,10 +208,14 @@ gimple_range_op_handler::calc_op1 (vrange &r, const vrange &lhs_range, // If op2 is undefined, solve as if it is varying. if (op2_range.undefined_p ()) { - // This is sometimes invoked on single operand stmts. if (gimple_num_ops (m_stmt) < 3) return false; - tree op2_type = TREE_TYPE (operand2 ()); + tree op2_type; + // This is sometimes invoked on single operand stmts. + if (operand2 ()) + op2_type = TREE_TYPE (operand2 ()); + else + op2_type = TREE_TYPE (operand1 ()); Value_Range trange (op2_type); trange.set_varying (op2_type); return op1_range (r, type, lhs_range, trange); |