Skip to content

Commit 0f78f98

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 3899e65 commit 0f78f98

File tree

2 files changed

+19
-6
lines changed

2 files changed

+19
-6
lines changed

src/solvers/refinement/string_refinement_util.cpp

+15-2
Original file line numberDiff line numberDiff line change
@@ -214,13 +214,26 @@ string_insertion_builtin_functiont::string_insertion_builtin_functiont(
214214
const std::vector<exprt> &fun_args,
215215
array_poolt &array_pool)
216216
{
217-
PRECONDITION(fun_args.size() > 3);
217+
PRECONDITION(fun_args.size() > 4);
218+
const auto arg1 = expr_checked_cast<struct_exprt>(fun_args[2]);
219+
input1 = array_pool.find(arg1.op1(), arg1.op0());
220+
const auto arg2 = expr_checked_cast<struct_exprt>(fun_args[4]);
221+
input2 = array_pool.find(arg2.op1(), arg2.op0());
222+
result = array_pool.find(fun_args[1], fun_args[0]);
223+
args.push_back(fun_args[3]);
224+
args.insert(args.end(), fun_args.begin() + 5, fun_args.end());
225+
}
226+
227+
string_concatenation_builtin_functiont::string_concatenation_builtin_functiont(
228+
const std::vector<exprt> &fun_args,
229+
array_poolt &array_pool)
230+
{
231+
PRECONDITION(fun_args.size() == 4);
218232
const auto arg1 = expr_checked_cast<struct_exprt>(fun_args[2]);
219233
input1 = array_pool.find(arg1.op1(), arg1.op0());
220234
const auto arg2 = expr_checked_cast<struct_exprt>(fun_args[3]);
221235
input2 = array_pool.find(arg2.op1(), arg2.op0());
222236
result = array_pool.find(fun_args[1], fun_args[0]);
223-
args.insert(args.end(), fun_args.begin() + 4, fun_args.end());
224237
}
225238

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

src/solvers/refinement/string_refinement_util.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,9 @@ class string_insertion_builtin_functiont : public string_builtin_functiont
246246

247247
optionalt<exprt>
248248
eval(const std::function<exprt(const exprt &)> &get_value) const override;
249+
250+
protected:
251+
string_insertion_builtin_functiont() = default;
249252
};
250253

251254
class string_concatenation_builtin_functiont final
@@ -254,10 +257,7 @@ class string_concatenation_builtin_functiont final
254257
public:
255258
string_concatenation_builtin_functiont(
256259
const std::vector<exprt> &fun_args,
257-
array_poolt &array_pool)
258-
: string_insertion_builtin_functiont(fun_args, array_pool)
259-
{
260-
}
260+
array_poolt &array_pool);
261261

262262
std::vector<mp_integer> eval(
263263
const std::vector<mp_integer> &input1_value,

0 commit comments

Comments
 (0)