diff --git a/regression/cbmc/full_slice3/test.desc b/regression/cbmc/full_slice3/test.desc index e226d5314a3..9f1003d166a 100644 --- a/regression/cbmc/full_slice3/test.desc +++ b/regression/cbmc/full_slice3/test.desc @@ -1,4 +1,4 @@ -KNOWNBUG +CORE main.c --full-slice ^EXIT=0$ diff --git a/src/analyses/goto_rw.cpp b/src/analyses/goto_rw.cpp index 7912995025f..fb6fdab2bd0 100644 --- a/src/analyses/goto_rw.cpp +++ b/src/analyses/goto_rw.cpp @@ -163,8 +163,15 @@ void rw_range_sett::get_objects_byte_extract( be.op().type(), be.id()==ID_byte_extract_little_endian, ns); - range_spect offset = - range_start + map.map_bit(numeric_cast_v(*index)); + range_spect offset = range_start; + if(*index > 0) + offset += map.map_bit(numeric_cast_v(*index)); + else + { + // outside the bounds of immediate byte-extract operand, might still be in + // bounds of a parent object + offset += to_range_spect(*index); + } get_objects_rec(mode, be.op(), offset, size); } }