Skip to content

Commit f63c394

Browse files
authored
Merge pull request #4544 from romainbrenguier/clean-up/string-constraints1
Clean up in string solver
2 parents 47e86ca + db33b01 commit f63c394

14 files changed

+261
-296
lines changed

src/solvers/strings/array_pool.cpp

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,6 @@ array_poolt::find(const exprt &pointer, const exprt &length)
123123
return *created_strings_value.insert(array).first;
124124
}
125125

126-
const array_string_exprt &char_array_of_pointer(
127-
array_poolt &pool,
128-
const exprt &pointer,
129-
const exprt &length)
130-
{
131-
return pool.find(pointer, length);
132-
}
133-
134126
array_string_exprt of_argument(array_poolt &array_pool, const exprt &arg)
135127
{
136128
const auto string_argument = expr_checked_cast<struct_exprt>(arg);
@@ -141,5 +133,5 @@ array_string_exprt get_string_expr(array_poolt &pool, const exprt &expr)
141133
{
142134
PRECONDITION(is_refined_string_type(expr.type()));
143135
const refined_string_exprt &str = to_string_expr(expr);
144-
return char_array_of_pointer(pool, str.content(), str.length());
136+
return pool.find(str.content(), str.length());
145137
}

src/solvers/strings/array_pool.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,13 +97,6 @@ class array_poolt final
9797
/// are given as a struct containing a length and pointer to an array.
9898
array_string_exprt of_argument(array_poolt &array_pool, const exprt &arg);
9999

100-
/// Return the array associated to the given pointer or creates a new one
101-
DEPRECATED("use pool.find(pointer, length) instead")
102-
const array_string_exprt &char_array_of_pointer(
103-
array_poolt &pool,
104-
const exprt &pointer,
105-
const exprt &length);
106-
107100
/// Fetch the string_exprt corresponding to the given refined_string_exprt
108101
/// \param pool: pool of arrays representing strings
109102
/// \param expr: an expression of refined string type

src/solvers/strings/string_constraint_generator_code_points.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,6 @@ std::pair<exprt, string_constraintst> add_axioms_for_code_point_count(
196196
{
197197
PRECONDITION(f.arguments().size() == 3);
198198
string_constraintst constraints;
199-
const array_string_exprt str = get_string_expr(array_pool, f.arguments()[0]);
200199
const exprt &begin = f.arguments()[1];
201200
const exprt &end = f.arguments()[2];
202201
const typet &return_type = f.type();

src/solvers/strings/string_constraint_generator_concat.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_concat_code_point(
147147
{
148148
PRECONDITION(f.arguments().size() == 4);
149149
const array_string_exprt res =
150-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
150+
array_pool.find(f.arguments()[1], f.arguments()[0]);
151151
const array_string_exprt s1 = get_string_expr(array_pool, f.arguments()[2]);
152152
const typet &char_type = s1.content().type().subtype();
153153
const typet &index_type = s1.length().type();

src/solvers/strings/string_constraint_generator_constants.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,7 @@ std::pair<exprt, string_constraintst> add_axioms_from_literal(
117117
{
118118
const function_application_exprt::argumentst &args = f.arguments();
119119
PRECONDITION(args.size() == 3); // Bad args to string literal?
120-
const array_string_exprt res =
121-
char_array_of_pointer(array_pool, args[1], args[0]);
120+
const array_string_exprt res = array_pool.find(args[1], args[0]);
122121
return add_axioms_for_cprover_string(
123122
fresh_symbol, res, args[2], true_exprt());
124123
}

src/solvers/strings/string_constraint_generator_float.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,8 +165,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_string_of_float(
165165
const namespacet &ns)
166166
{
167167
PRECONDITION(f.arguments().size() == 3);
168-
array_string_exprt res =
169-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
168+
array_string_exprt res = array_pool.find(f.arguments()[1], f.arguments()[0]);
170169
return add_axioms_for_string_of_float(
171170
fresh_symbol, res, f.arguments()[2], array_pool, ns);
172171
}
@@ -551,7 +550,7 @@ std::pair<exprt, string_constraintst> add_axioms_from_float_scientific_notation(
551550
{
552551
PRECONDITION(f.arguments().size() == 3);
553552
const array_string_exprt res =
554-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
553+
array_pool.find(f.arguments()[1], f.arguments()[0]);
555554
const exprt &arg = f.arguments()[2];
556555
return add_axioms_from_float_scientific_notation(
557556
fresh_symbol, res, arg, array_pool, ns);

src/solvers/strings/string_constraint_generator_format.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -603,7 +603,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_format(
603603
{
604604
PRECONDITION(f.arguments().size() >= 3);
605605
const array_string_exprt res =
606-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
606+
array_pool.find(f.arguments()[1], f.arguments()[0]);
607607
const array_string_exprt s1 = get_string_expr(array_pool, f.arguments()[2]);
608608

609609
if(s1.length().id() == ID_constant && s1.content().id() == ID_array)

src/solvers/strings/string_constraint_generator_insert.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_insert(
111111
PRECONDITION(f.arguments().size() == 5 || f.arguments().size() == 7);
112112
array_string_exprt s1 = get_string_expr(pool, f.arguments()[2]);
113113
array_string_exprt s2 = get_string_expr(pool, f.arguments()[4]);
114-
array_string_exprt res =
115-
char_array_of_pointer(pool, f.arguments()[1], f.arguments()[0]);
114+
array_string_exprt res = pool.find(f.arguments()[1], f.arguments()[0]);
116115
const exprt &offset = f.arguments()[3];
117116
if(f.arguments().size() == 7)
118117
{
@@ -150,7 +149,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_insert_int(
150149
PRECONDITION(f.arguments().size() == 5);
151150
const array_string_exprt s1 = get_string_expr(array_pool, f.arguments()[2]);
152151
const array_string_exprt res =
153-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
152+
array_pool.find(f.arguments()[1], f.arguments()[0]);
154153
const exprt &offset = f.arguments()[3];
155154
const typet &index_type = s1.length().type();
156155
const typet &char_type = s1.content().type().subtype();
@@ -176,7 +175,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_insert_bool(
176175
PRECONDITION(f.arguments().size() == 5);
177176
const array_string_exprt s1 = get_string_expr(array_pool, f.arguments()[0]);
178177
const array_string_exprt res =
179-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
178+
array_pool.find(f.arguments()[1], f.arguments()[0]);
180179
const exprt &offset = f.arguments()[3];
181180
const typet &index_type = s1.length().type();
182181
const typet &char_type = s1.content().type().subtype();
@@ -200,7 +199,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_insert_char(
200199
{
201200
PRECONDITION(f.arguments().size() == 5);
202201
const array_string_exprt res =
203-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
202+
array_pool.find(f.arguments()[1], f.arguments()[0]);
204203
const array_string_exprt s1 = get_string_expr(array_pool, f.arguments()[2]);
205204
const exprt &offset = f.arguments()[3];
206205
const typet &index_type = s1.length().type();
@@ -228,7 +227,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_insert_double(
228227
{
229228
PRECONDITION(f.arguments().size() == 5);
230229
const array_string_exprt res =
231-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
230+
array_pool.find(f.arguments()[1], f.arguments()[0]);
232231
const array_string_exprt s1 = get_string_expr(array_pool, f.arguments()[2]);
233232
const exprt &offset = f.arguments()[3];
234233
const typet &index_type = s1.length().type();

src/solvers/strings/string_constraint_generator_main.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_constrain_characters(
173173
PRECONDITION(args[2].type().id() == ID_string);
174174
PRECONDITION(args[2].id() == ID_constant);
175175

176-
const array_string_exprt s =
177-
char_array_of_pointer(array_pool, args[1], args[0]);
176+
const array_string_exprt s = array_pool.find(args[1], args[0]);
178177
const irep_idt &char_set_string = to_constant_expr(args[2]).get_value();
179178
const exprt &start =
180179
args.size() >= 4 ? args[3] : from_integer(0, s.length().type());
@@ -340,8 +339,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_copy(
340339
{
341340
const auto &args = f.arguments();
342341
PRECONDITION(args.size() == 3 || args.size() == 5);
343-
const array_string_exprt res =
344-
char_array_of_pointer(array_pool, args[1], args[0]);
342+
const array_string_exprt res = array_pool.find(args[1], args[0]);
345343
const array_string_exprt str = get_string_expr(array_pool, args[2]);
346344
const typet &index_type = str.length().type();
347345
const exprt offset = args.size() == 3 ? from_integer(0, index_type) : args[3];

src/solvers/strings/string_constraint_generator_transformation.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_set_length(
4343
PRECONDITION(f.arguments().size() == 4);
4444
string_constraintst constraints;
4545
const array_string_exprt res =
46-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
46+
array_pool.find(f.arguments()[1], f.arguments()[0]);
4747
const array_string_exprt s1 = get_string_expr(array_pool, f.arguments()[2]);
4848
const exprt &k = f.arguments()[3];
4949
const typet &index_type = s1.length().type();
@@ -100,8 +100,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_substring(
100100
const function_application_exprt::argumentst &args = f.arguments();
101101
PRECONDITION(args.size() == 4 || args.size() == 5);
102102
const array_string_exprt str = get_string_expr(array_pool, args[2]);
103-
const array_string_exprt res =
104-
char_array_of_pointer(array_pool, args[1], args[0]);
103+
const array_string_exprt res = array_pool.find(args[1], args[0]);
105104
const exprt &i = args[3];
106105
const exprt j = args.size() == 5 ? args[4] : str.length();
107106
return add_axioms_for_substring(fresh_symbol, res, str, i, j);
@@ -190,7 +189,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_trim(
190189
string_constraintst constraints;
191190
const array_string_exprt &str = get_string_expr(array_pool, f.arguments()[2]);
192191
const array_string_exprt &res =
193-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
192+
array_pool.find(f.arguments()[1], f.arguments()[0]);
194193
const typet &index_type = str.length().type();
195194
const typet &char_type = str.content().type().subtype();
196195
const symbol_exprt idx = fresh_symbol("index_trim", index_type);
@@ -302,8 +301,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_replace(
302301
PRECONDITION(f.arguments().size() == 5);
303302
string_constraintst constraints;
304303
array_string_exprt str = get_string_expr(array_pool, f.arguments()[2]);
305-
array_string_exprt res =
306-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
304+
array_string_exprt res = array_pool.find(f.arguments()[1], f.arguments()[0]);
307305
if(
308306
const auto maybe_chars =
309307
to_char_pair(f.arguments()[3], f.arguments()[4], [&](const exprt &e) {
@@ -342,7 +340,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_delete_char_at(
342340
{
343341
PRECONDITION(f.arguments().size() == 4);
344342
const array_string_exprt res =
345-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
343+
array_pool.find(f.arguments()[1], f.arguments()[0]);
346344
const array_string_exprt str = get_string_expr(array_pool, f.arguments()[2]);
347345
exprt index_one = from_integer(1, str.length().type());
348346
return add_axioms_for_delete(
@@ -414,7 +412,7 @@ std::pair<exprt, string_constraintst> add_axioms_for_delete(
414412
{
415413
PRECONDITION(f.arguments().size() == 5);
416414
const array_string_exprt res =
417-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
415+
array_pool.find(f.arguments()[1], f.arguments()[0]);
418416
const array_string_exprt arg = get_string_expr(array_pool, f.arguments()[2]);
419417
return add_axioms_for_delete(
420418
fresh_symbol, res, arg, f.arguments()[3], f.arguments()[4], array_pool);

src/solvers/strings/string_constraint_generator_valueof.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ std::pair<exprt, string_constraintst> add_axioms_from_long(
5050
{
5151
PRECONDITION(f.arguments().size() == 3 || f.arguments().size() == 4);
5252
const array_string_exprt res =
53-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
53+
array_pool.find(f.arguments()[1], f.arguments()[0]);
5454
if(f.arguments().size() == 4)
5555
return add_axioms_for_string_of_int_with_radix(
5656
res, f.arguments()[2], f.arguments()[3], 0, ns);
@@ -70,7 +70,7 @@ std::pair<exprt, string_constraintst> add_axioms_from_bool(
7070
{
7171
PRECONDITION(f.arguments().size() == 3);
7272
const array_string_exprt res =
73-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
73+
array_pool.find(f.arguments()[1], f.arguments()[0]);
7474
return add_axioms_from_bool(res, f.arguments()[2]);
7575
}
7676

@@ -275,7 +275,7 @@ std::pair<exprt, string_constraintst> add_axioms_from_int_hex(
275275
{
276276
PRECONDITION(f.arguments().size() == 3);
277277
const array_string_exprt res =
278-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
278+
array_pool.find(f.arguments()[1], f.arguments()[0]);
279279
return add_axioms_from_int_hex(res, f.arguments()[2]);
280280
}
281281

@@ -296,7 +296,7 @@ std::pair<exprt, string_constraintst> add_axioms_from_char(
296296
{
297297
PRECONDITION(f.arguments().size() == 3);
298298
const array_string_exprt res =
299-
char_array_of_pointer(array_pool, f.arguments()[1], f.arguments()[0]);
299+
array_pool.find(f.arguments()[1], f.arguments()[0]);
300300
return add_axioms_from_char(res, f.arguments()[2]);
301301
}
302302

0 commit comments

Comments
 (0)