Skip to content

Commit be08937

Browse files
Make interpreter handle typecast in pointer expr
The interpreter would fail to interpret expressions of type pointer which contained typecast. This fixes it by skiping the typecasts that are encountered.
1 parent 87e33ce commit be08937

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

src/goto-programs/interpreter_evaluate.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Author: Daniel Kroening, [email protected]
1818
#include <util/string_container.h>
1919

2020
#include <langapi/language_util.h>
21+
#include <util/expr_util.h>
2122

2223
/// Reads a memory address and loads it into the `dest` variable.
2324
/// Marks cell as `READ_BEFORE_WRITTEN` if cell has never been written.
@@ -347,12 +348,13 @@ void interpretert::evaluate(
347348
{
348349
if(expr.has_operands())
349350
{
350-
if(expr.op0().id() == ID_address_of)
351+
const exprt &object = skip_typecast(expr.op0());
352+
if(object.id() == ID_address_of)
351353
{
352-
evaluate(expr.op0(), dest);
354+
evaluate(object, dest);
353355
return;
354356
}
355-
else if(const auto i = numeric_cast<mp_integer>(expr.op0()))
357+
else if(const auto i = numeric_cast<mp_integer>(object))
356358
{
357359
dest.push_back(*i);
358360
return;

0 commit comments

Comments
 (0)