@@ -25,7 +25,6 @@ Author: Daniel Kroening, kroening@kroening.com
2525#include < util/invariant.h>
2626#include < util/mathematical_expr.h>
2727#include < util/namespace.h>
28- #include < util/pointer_expr.h>
2928#include < util/pointer_offset_size.h>
3029#include < util/pointer_predicates.h>
3130#include < util/prefix.h>
@@ -233,10 +232,9 @@ void smt2_convt::write_footer()
233232
234233void smt2_convt::define_object_size (
235234 const irep_idt &id,
236- const exprt &expr)
235+ const object_size_exprt &expr)
237236{
238- PRECONDITION (expr.id () == ID_object_size);
239- const exprt &ptr = to_unary_expr (expr).op ();
237+ const exprt &ptr = expr.pointer ();
240238 std::size_t size_width = boolbv_width (expr.type ());
241239 std::size_t pointer_width = boolbv_width (ptr.type ());
242240 std::size_t number = 0 ;
@@ -2018,9 +2016,10 @@ void smt2_convt::convert_expr(const exprt &expr)
20182016
20192017 out << " )" ; // mk-... or concat
20202018 }
2021- else if (expr.id ()==ID_object_size)
2019+ else if (
2020+ const auto object_size = expr_try_dynamic_cast<object_size_exprt>(expr))
20222021 {
2023- out << " |" << object_sizes[expr ] << " |" ;
2022+ out << " |" << object_sizes[*object_size ] << " |" ;
20242023 }
20252024 else if (expr.id ()==ID_let)
20262025 {
@@ -4848,22 +4847,18 @@ void smt2_convt::find_symbols(const exprt &expr)
48484847 defined_expressions[expr]=id;
48494848 }
48504849 }
4851- else if (expr.id () == ID_object_size)
4850+ else if (
4851+ const auto object_size = expr_try_dynamic_cast<object_size_exprt>(expr))
48524852 {
4853- const exprt &op = to_unary_expr (expr).op ();
4854-
4855- if (op.type ().id ()==ID_pointer)
4853+ if (object_sizes.find (*object_size) == object_sizes.end ())
48564854 {
4857- if (object_sizes.find (expr)==object_sizes.end ())
4858- {
4859- const irep_idt id =
4860- " object_size." + std::to_string (object_sizes.size ());
4861- out << " (declare-fun |" << id << " | () " ;
4862- convert_type (expr.type ());
4863- out << " )" << " \n " ;
4855+ const irep_idt id = " object_size." + std::to_string (object_sizes.size ());
4856+ out << " (declare-fun |" << id << " | () " ;
4857+ convert_type (object_size->type ());
4858+ out << " )"
4859+ << " \n " ;
48644860
4865- object_sizes[expr]=id;
4866- }
4861+ object_sizes[*object_size] = id;
48674862 }
48684863 }
48694864 // clang-format off
0 commit comments