From 7d3b2ef0999a8a738e89971fd6be60fe7d9cc49d Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Sat, 11 Apr 2020 12:33:17 -0400 Subject: [PATCH 022/179] FIXME: WIP on state --- gcc/analyzer/revamp-state.cc | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/gcc/analyzer/revamp-state.cc b/gcc/analyzer/revamp-state.cc index b24dccf1fbf..13d3c6fcba8 100644 --- a/gcc/analyzer/revamp-state.cc +++ b/gcc/analyzer/revamp-state.cc @@ -444,7 +444,7 @@ binding_cluster::bind (const extrinsic_state &ext_state, /* class store. */ store::store () -: m_map () +: m_map (new cluster_map_t ()) // FIXME: leak! { } @@ -812,8 +812,12 @@ revamp_state::get_lvalue (const extrinsic_state &ext_state, tree expr) } case MEM_REF: { - gcc_unreachable (); + tree ptr = TREE_OPERAND (expr, 0); + tree offset = TREE_OPERAND (expr, 1); + gcc_assert (zerop (offset)); // FIXME; for now + return as_a (get_rvalue (ext_state, ptr)); } + case PARM_DECL: case VAR_DECL: { @@ -840,6 +844,25 @@ revamp_state::get_rvalue (const extrinsic_state &ext_state, tree expr) case ARRAY_REF: return m_store->get_val_for_loc (ext_state, get_lvalue (ext_state, expr)); + + case MEM_REF: + { + tree ptr = TREE_OPERAND (expr, 0); + tree offset = TREE_OPERAND (expr, 1); + const sval *ptr_val = get_rvalue (ext_state, ptr); + const sval *offset_val = get_rvalue (ext_state, offset); + //return m_store-> + gcc_unreachable (); + } + + case VAR_DECL: + case PARM_DECL: + case SSA_NAME: + { + const loc_val *lval = get_lvalue (ext_state, expr); + return m_store->get_val_for_loc (ext_state, lval); + } + case INTEGER_CST: return eng->consolidate_sval (new cst_sval (expr)); default: -- 2.21.0