@@ -207,6 +207,18 @@ size_t memory_snapshot_harness_generatort::pointer_depth(const typet &t) const
207
207
return pointer_depth (t.subtype ()) + 1 ;
208
208
}
209
209
210
+ bool memory_snapshot_harness_generatort::refers_to (
211
+ const exprt &expr,
212
+ const irep_idt &name) const
213
+ {
214
+ if (expr.id () == ID_symbol)
215
+ return to_symbol_expr (expr).get_identifier () == name;
216
+ return std::any_of (
217
+ expr.operands ().begin (),
218
+ expr.operands ().end (),
219
+ [this , name](const exprt &subexpr) { return refers_to (subexpr, name); });
220
+ }
221
+
210
222
code_blockt memory_snapshot_harness_generatort::add_assignments_to_globals (
211
223
const symbol_tablet &snapshot,
212
224
goto_modelt &goto_model) const
@@ -230,8 +242,11 @@ code_blockt memory_snapshot_harness_generatort::add_assignments_to_globals(
230
242
ordered_snapshot_symbols.begin (),
231
243
ordered_snapshot_symbols.end (),
232
244
[this ](const snapshot_pairt &left, const snapshot_pairt &right) {
233
- return pointer_depth (left.second .symbol_expr ().type ()) <
234
- pointer_depth (right.second .symbol_expr ().type ());
245
+ if (refers_to (right.second .value , left.first ))
246
+ return true ;
247
+ else
248
+ return pointer_depth (left.second .symbol_expr ().type ()) <
249
+ pointer_depth (right.second .symbol_expr ().type ());
235
250
});
236
251
237
252
code_blockt code;
0 commit comments