Skip to content

Commit de82c11

Browse files
Correct insert builtin function construction
The arguments were not in the right order. We also need to seperate construction of concatenation since it was using insertion.
1 parent 72debed commit de82c11

File tree

2 files changed

+19
-4
lines changed

2 files changed

+19
-4
lines changed

src/solvers/refinement/string_refinement_util.cpp

+15-2
Original file line numberDiff line numberDiff line change
@@ -210,13 +210,26 @@ string_insertion_builtin_functiont::string_insertion_builtin_functiont(
210210
const std::vector<exprt> &fun_args,
211211
array_poolt &array_pool)
212212
{
213-
PRECONDITION(fun_args.size() > 3);
213+
PRECONDITION(fun_args.size() > 4);
214+
const auto arg1 = expr_checked_cast<struct_exprt>(fun_args[2]);
215+
input1 = array_pool.find(arg1.op1(), arg1.op0());
216+
const auto arg2 = expr_checked_cast<struct_exprt>(fun_args[4]);
217+
input2 = array_pool.find(arg2.op1(), arg2.op0());
218+
result = array_pool.find(fun_args[1], fun_args[0]);
219+
args.push_back(fun_args[3]);
220+
args.insert(args.end(), fun_args.begin() + 5, fun_args.end());
221+
}
222+
223+
string_concatenation_builtin_functiont::string_concatenation_builtin_functiont(
224+
const std::vector<exprt> &fun_args,
225+
array_poolt &array_pool)
226+
{
227+
PRECONDITION(fun_args.size() == 4);
214228
const auto arg1 = expr_checked_cast<struct_exprt>(fun_args[2]);
215229
input1 = array_pool.find(arg1.op1(), arg1.op0());
216230
const auto arg2 = expr_checked_cast<struct_exprt>(fun_args[3]);
217231
input2 = array_pool.find(arg2.op1(), arg2.op0());
218232
result = array_pool.find(fun_args[1], fun_args[0]);
219-
args.insert(args.end(), fun_args.begin() + 4, fun_args.end());
220233
}
221234

222235
optionalt<std::vector<mp_integer>> eval_string(

src/solvers/refinement/string_refinement_util.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -242,15 +242,17 @@ class string_insertion_builtin_functiont : public string_builtin_functiont
242242

243243
optionalt<exprt>
244244
eval(const std::function<exprt(const exprt &)> &get_value) const override;
245+
246+
protected:
247+
string_insertion_builtin_functiont() = default;
245248
};
246249

247250
class string_concatenation_builtin_functiont final:
248251
public string_insertion_builtin_functiont
249252
{
250253
public:
251254
string_concatenation_builtin_functiont(
252-
const std::vector<exprt> &fun_args, array_poolt &array_pool):
253-
string_insertion_builtin_functiont(fun_args, array_pool) { }
255+
const std::vector<exprt> &fun_args, array_poolt &array_pool);
254256

255257
std::vector<mp_integer> eval(
256258
const std::vector<mp_integer> &input1_value,

0 commit comments

Comments
 (0)