Skip to content

Commit 1d4a8d1

Browse files
peterschrammelEnrico Steffinlongo
authored and
Enrico Steffinlongo
committed
Correctly set value-set dereference pointer
1 parent 46135da commit 1d4a8d1

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

src/pointer-analysis/value_set_dereference.cpp

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Author: Daniel Kroening, [email protected]
1717

1818
#include <util/arith_tools.h>
1919
#include <util/byte_operators.h>
20+
#include <util/c_types.h>
2021
#include <util/config.h>
2122
#include <util/cprover_prefix.h>
2223
#include <util/expr_iterator.h>
@@ -661,8 +662,21 @@ value_set_dereferencet::valuet value_set_dereferencet::build_reference_to(
661662
result.pointer = typecast_exprt::conditional_cast(
662663
address_of_exprt{skip_typecast(o.root_object())}, pointer_type);
663664

664-
if(!memory_model(result.value, dereference_type, offset, ns))
665+
if(memory_model(result.value, dereference_type, offset, ns))
666+
{
667+
// set pointer correctly
668+
result.pointer = typecast_exprt::conditional_cast(
669+
plus_exprt(
670+
typecast_exprt(
671+
result.pointer,
672+
pointer_typet(char_type(), pointer_type.get_width())),
673+
offset),
674+
pointer_type);
675+
}
676+
else
677+
{
665678
return {}; // give up, no way that this is ok
679+
}
666680

667681
return result;
668682
}

0 commit comments

Comments
 (0)