From a6a8cd29c2e46463347f945e495a4ff6231a3e38 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Mon, 27 Apr 2020 17:07:13 -0400 Subject: [PATCH 081/179] FIXME: support unaryop and binaryops --- gcc/analyzer/region-model2.cc | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/gcc/analyzer/region-model2.cc b/gcc/analyzer/region-model2.cc index f1a5f82ec2d..1eafc514e40 100644 --- a/gcc/analyzer/region-model2.cc +++ b/gcc/analyzer/region-model2.cc @@ -4030,15 +4030,15 @@ region_model2::on_gassign (const supernode */*snode*/, } break; -#if 0 case NEGATE_EXPR: case BIT_NOT_EXPR: { - // TODO: unary ops - - // TODO: constant? - - set_to_new_unknown_value (lhs_reg, TREE_TYPE (lhs), ctxt); + /* Unary ops. */ + svalue2 *rhs1_sval = get_rvalue (rhs1, ctxt); + svalue2 *sval_unaryop + = m_mgr->get_or_create_unaryop (TREE_TYPE (lhs), op, + rhs1_sval); + set_value (lhs_reg, sval_unaryop, ctxt); } break; @@ -4061,23 +4061,12 @@ region_model2::on_gassign (const supernode */*snode*/, svalue2 *rhs1_sval = get_rvalue (rhs1, ctxt); svalue2 *rhs2_sval = get_rvalue (rhs2, ctxt); - if (tree rhs1_cst = maybe_get_constant (rhs1_sval)) - if (tree rhs2_cst = maybe_get_constant (rhs2_sval)) - { - tree result = fold_binary (op, TREE_TYPE (lhs), - rhs1_cst, rhs2_cst); - if (result && CONSTANT_CLASS_P (result)) - { - svalue2 *result_sval - = get_or_create_constant_svalue2 (result); - set_value (lhs_reg, result_sval, ctxt); - return; - } - } - set_to_new_unknown_value (lhs_reg, TREE_TYPE (lhs), ctxt); + svalue2 *sval_binop + = m_mgr->get_or_create_binop (TREE_TYPE (lhs), op, + rhs1_sval, rhs2_sval); + set_value (lhs_reg, sval_binop, ctxt); } break; -#endif } return true; -- 2.21.0