|
25 | 25 | #include <util/invariant.h>
|
26 | 26 | #include <util/mathematical_expr.h>
|
27 | 27 | #include <util/namespace.h>
|
28 |
| -#include <util/pointer_expr.h> |
29 | 28 | #include <util/pointer_offset_size.h>
|
30 | 29 | #include <util/pointer_predicates.h>
|
31 | 30 | #include <util/prefix.h>
|
@@ -233,10 +232,9 @@ void smt2_convt::write_footer()
|
233 | 232 |
|
234 | 233 | void smt2_convt::define_object_size(
|
235 | 234 | const irep_idt &id,
|
236 |
| - const exprt &expr) |
| 235 | + const object_size_exprt &expr) |
237 | 236 | {
|
238 |
| - PRECONDITION(expr.id() == ID_object_size); |
239 |
| - const exprt &ptr = to_unary_expr(expr).op(); |
| 237 | + const exprt &ptr = expr.pointer(); |
240 | 238 | std::size_t size_width = boolbv_width(expr.type());
|
241 | 239 | std::size_t pointer_width = boolbv_width(ptr.type());
|
242 | 240 | std::size_t number = 0;
|
@@ -2018,9 +2016,10 @@ void smt2_convt::convert_expr(const exprt &expr)
|
2018 | 2016 |
|
2019 | 2017 | out << ")"; // mk-... or concat
|
2020 | 2018 | }
|
2021 |
| - else if(expr.id()==ID_object_size) |
| 2019 | + else if( |
| 2020 | + const auto object_size = expr_try_dynamic_cast<object_size_exprt>(expr)) |
2022 | 2021 | {
|
2023 |
| - out << "|" << object_sizes[expr] << "|"; |
| 2022 | + out << "|" << object_sizes[*object_size] << "|"; |
2024 | 2023 | }
|
2025 | 2024 | else if(expr.id()==ID_let)
|
2026 | 2025 | {
|
@@ -4848,22 +4847,18 @@ void smt2_convt::find_symbols(const exprt &expr)
|
4848 | 4847 | defined_expressions[expr]=id;
|
4849 | 4848 | }
|
4850 | 4849 | }
|
4851 |
| - else if(expr.id() == ID_object_size) |
| 4850 | + else if( |
| 4851 | + const auto object_size = expr_try_dynamic_cast<object_size_exprt>(expr)) |
4852 | 4852 | {
|
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()) |
4856 | 4854 | {
|
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"; |
4864 | 4860 |
|
4865 |
| - object_sizes[expr]=id; |
4866 |
| - } |
| 4861 | + object_sizes[*object_size] = id; |
4867 | 4862 | }
|
4868 | 4863 | }
|
4869 | 4864 | // clang-format off
|
|
0 commit comments