Skip to content

Commit 2505982

Browse files
Lukasz A.J. Wronaromainbrenguier
Lukasz A.J. Wrona
authored andcommitted
Extra preconditions in string solver
1 parent 6378400 commit 2505982

5 files changed

+17
-1
lines changed

src/solvers/refinement/string_constraint_generator_code_points.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ exprt string_constraint_generatort::add_axioms_for_code_point_at(
127127
{
128128
const typet &return_type = f.type();
129129
PRECONDITION(return_type.id()==ID_signedbv);
130+
PRECONDITION(f.arguments().size() == 2);
130131
const string_exprt str = get_string_expr(f.arguments()[0]);
131132
const exprt &pos = f.arguments()[1];
132133

@@ -186,6 +187,7 @@ exprt string_constraint_generatort::add_axioms_for_code_point_before(
186187
exprt string_constraint_generatort::add_axioms_for_code_point_count(
187188
const function_application_exprt &f)
188189
{
190+
PRECONDITION(f.arguments().size() == 3);
189191
const string_exprt str = get_string_expr(f.arguments()[0]);
190192
const exprt &begin = f.arguments()[1];
191193
const exprt &end = f.arguments()[2];
@@ -208,6 +210,7 @@ exprt string_constraint_generatort::add_axioms_for_code_point_count(
208210
exprt string_constraint_generatort::add_axioms_for_offset_by_code_point(
209211
const function_application_exprt &f)
210212
{
213+
PRECONDITION(f.arguments().size() == 3);
211214
const string_exprt str = get_string_expr(f.arguments()[0]);
212215
const exprt &index = f.arguments()[1];
213216
const exprt &offset = f.arguments()[2];

src/solvers/refinement/string_constraint_generator_comparison.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ exprt string_constraint_generatort::add_axioms_for_equals(
2323
const function_application_exprt &f)
2424
{
2525
PRECONDITION(f.type()==bool_typet() || f.type().id()==ID_c_bool);
26+
PRECONDITION(f.arguments().size() == 2);
2627

2728
string_exprt s1 = get_string_expr(f.arguments()[0]);
2829
string_exprt s2 = get_string_expr(f.arguments()[1]);
@@ -100,6 +101,7 @@ exprt string_constraint_generatort::add_axioms_for_equals_ignore_case(
100101
const function_application_exprt &f)
101102
{
102103
PRECONDITION(f.type()==bool_typet() || f.type().id()==ID_c_bool);
104+
PRECONDITION(f.arguments().size() == 2);
103105
const symbol_exprt eq = fresh_boolean("equal_ignore_case");
104106
const string_exprt s1 = get_string_expr(f.arguments()[0]);
105107
const string_exprt s2 = get_string_expr(f.arguments()[1]);
@@ -151,6 +153,7 @@ exprt string_constraint_generatort::add_axioms_for_equals_ignore_case(
151153
exprt string_constraint_generatort::add_axioms_for_hash_code(
152154
const function_application_exprt &f)
153155
{
156+
PRECONDITION(f.arguments().size() == 1);
154157
const string_exprt str = get_string_expr(f.arguments()[0]);
155158
const typet &return_type = f.type();
156159
const typet &index_type = str.length().type();
@@ -186,7 +189,9 @@ exprt string_constraint_generatort::add_axioms_for_hash_code(
186189
exprt string_constraint_generatort::add_axioms_for_compare_to(
187190
const function_application_exprt &f)
188191
{
192+
PRECONDITION(f.arguments().size() == 2);
189193
const typet &return_type=f.type();
194+
PRECONDITION(return_type.id() == ID_signedbv);
190195
const string_exprt &s1 = get_string_expr(f.arguments()[0]);
191196
const string_exprt &s2 = get_string_expr(f.arguments()[1]);
192197
const symbol_exprt res = fresh_symbol("compare_to", return_type);

src/solvers/refinement/string_constraint_generator_indexof.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,7 @@ exprt string_constraint_generatort::add_axioms_for_index_of(
231231
const function_application_exprt &f)
232232
{
233233
const function_application_exprt::argumentst &args=f.arguments();
234+
PRECONDITION(args.size() == 2 || args.size() == 3);
234235
const string_exprt str = get_string_expr(args[0]);
235236
const exprt &c=args[1];
236237
const typet &index_type = str.length().type();
@@ -325,6 +326,7 @@ exprt string_constraint_generatort::add_axioms_for_last_index_of(
325326
const function_application_exprt &f)
326327
{
327328
const function_application_exprt::argumentst &args=f.arguments();
329+
PRECONDITION(args.size() == 2 || args.size() == 3);
328330
const string_exprt str = get_string_expr(args[0]);
329331
const exprt c = args[1];
330332
const typet &index_type = str.length().type();

src/solvers/refinement/string_constraint_generator_testing.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ exprt string_constraint_generatort::add_axioms_for_is_prefix(
7474
{
7575
const function_application_exprt::argumentst &args=f.arguments();
7676
PRECONDITION(f.type()==bool_typet() || f.type().id()==ID_c_bool);
77+
PRECONDITION(args.size() == 2 || args.size() == 3);
7778
const string_exprt s0 = get_string_expr(args[swap_arguments ? 1 : 0]);
7879
const string_exprt s1 = get_string_expr(args[swap_arguments ? 0 : 1]);
7980
const exprt offset =
@@ -89,7 +90,7 @@ exprt string_constraint_generatort::add_axioms_for_is_empty(
8990
const function_application_exprt &f)
9091
{
9192
PRECONDITION(f.type()==bool_typet() || f.type().id()==ID_c_bool);
92-
93+
PRECONDITION(f.arguments().size() == 1);
9394
// We add axioms:
9495
// a1 : is_empty => |s0| = 0
9596
// a2 : s0 => is_empty

src/util/string_expr.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,14 @@ class string_exprt: public struct_exprt
6262
binary_relation_exprt axiom_for_length_ge(
6363
const exprt &rhs) const
6464
{
65+
PRECONDITION(rhs.type() == length().type());
6566
return binary_relation_exprt(length(), ID_ge, rhs);
6667
}
6768

6869
binary_relation_exprt axiom_for_length_gt(
6970
const exprt &rhs) const
7071
{
72+
PRECONDITION(rhs.type() == length().type());
7173
return binary_relation_exprt(rhs, ID_lt, length());
7274
}
7375

@@ -91,6 +93,7 @@ class string_exprt: public struct_exprt
9193
binary_relation_exprt axiom_for_length_le(
9294
const exprt &rhs) const
9395
{
96+
PRECONDITION(rhs.type() == length().type());
9497
return binary_relation_exprt(length(), ID_le, rhs);
9598
}
9699

@@ -108,6 +111,7 @@ class string_exprt: public struct_exprt
108111
binary_relation_exprt axiom_for_length_lt(
109112
const exprt &rhs) const
110113
{
114+
PRECONDITION(rhs.type() == length().type());
111115
return binary_relation_exprt(length(), ID_lt, rhs);
112116
}
113117

@@ -119,6 +123,7 @@ class string_exprt: public struct_exprt
119123

120124
equal_exprt axiom_for_has_length(const exprt &rhs) const
121125
{
126+
PRECONDITION(rhs.type() == length().type());
122127
return equal_exprt(length(), rhs);
123128
}
124129

0 commit comments

Comments
 (0)