Skip to content

Commit 10af4e7

Browse files
Get rid of string_max_length field
In constraint generator, this was used for adding default axioms but is no longer used.
1 parent e3f9294 commit 10af4e7

File tree

6 files changed

+25
-37
lines changed

6 files changed

+25
-37
lines changed

src/cbmc/cbmc_solvers.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ std::unique_ptr<cbmc_solverst::solvert> cbmc_solverst::get_string_refinement()
177177
info.refinement_bound=DEFAULT_MAX_NB_REFINEMENT;
178178
info.ui=ui;
179179
if(options.get_bool_option("string-max-length"))
180-
info.string_max_length=options.get_signed_int_option("string-max-length");
180+
info.max_string_length = options.get_signed_int_option("string-max-length");
181181
info.trace=options.get_bool_option("trace");
182182
if(options.get_bool_option("max-node-refinement"))
183183
info.max_node_refinement=

src/solvers/refinement/string_constraint_generator.h

+1-9
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,7 @@ class string_constraint_generatort final
9494
// Used by format function
9595
class format_specifiert;
9696

97-
/// Arguments pack for the string_constraint_generator constructor
98-
struct infot
99-
{
100-
/// Max length of non-deterministic strings
101-
size_t string_max_length=std::numeric_limits<size_t>::max();
102-
};
103-
104-
string_constraint_generatort(const infot& info, const namespacet& ns);
97+
explicit string_constraint_generatort(const namespacet &ns);
10598

10699
/// Axioms are of three kinds: universally quantified string constraint,
107100
/// not contains string constraints and simple formulas.
@@ -401,7 +394,6 @@ class string_constraint_generatort final
401394

402395
// MEMBERS
403396
public:
404-
const size_t max_string_length;
405397
// Used to store information about witnesses for not_contains constraints
406398
std::map<string_not_contains_constraintt, symbol_exprt> witness;
407399
private:

src/solvers/refinement/string_constraint_generator_main.cpp

+2-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,8 @@ Author: Romain Brenguier, [email protected]
2828
#include <util/string_constant.h>
2929
#include <util/deprecate.h>
3030

31-
string_constraint_generatort::string_constraint_generatort(
32-
const string_constraint_generatort::infot &info,
33-
const namespacet &ns)
34-
: array_pool(fresh_symbol), max_string_length(info.string_max_length), ns(ns)
31+
string_constraint_generatort::string_constraint_generatort(const namespacet &ns)
32+
: array_pool(fresh_symbol), ns(ns)
3533
{
3634
}
3735

src/solvers/refinement/string_refinement.cpp

+13-10
Original file line numberDiff line numberDiff line change
@@ -165,11 +165,14 @@ static bool validate(const string_refinementt::infot &info)
165165
return true;
166166
}
167167

168-
string_refinementt::string_refinementt(const infot &info, bool):
169-
supert(info),
170-
config_(info),
171-
loop_bound_(info.refinement_bound),
172-
generator(info, *info.ns) { }
168+
string_refinementt::string_refinementt(const infot &info, bool)
169+
: supert(info),
170+
config_(info),
171+
loop_bound_(info.refinement_bound),
172+
max_string_length(info.max_string_length),
173+
generator(*info.ns)
174+
{
175+
}
173176

174177
string_refinementt::string_refinementt(const infot &info):
175178
string_refinementt(info, validate(info)) { }
@@ -734,13 +737,13 @@ decision_proceduret::resultt string_refinementt::dec_solve()
734737
{
735738
bool satisfied;
736739
std::vector<exprt> counter_examples;
737-
std::tie(satisfied, counter_examples)=check_axioms(
740+
std::tie(satisfied, counter_examples) = check_axioms(
738741
axioms,
739742
generator,
740743
get,
741744
debug(),
742745
ns,
743-
generator.max_string_length,
746+
max_string_length,
744747
config_.use_counter_example,
745748
supert::config_.ui,
746749
symbol_resolve);
@@ -778,13 +781,13 @@ decision_proceduret::resultt string_refinementt::dec_solve()
778781
{
779782
bool satisfied;
780783
std::vector<exprt> counter_examples;
781-
std::tie(satisfied, counter_examples)=check_axioms(
784+
std::tie(satisfied, counter_examples) = check_axioms(
782785
axioms,
783786
generator,
784787
get,
785788
debug(),
786789
ns,
787-
generator.max_string_length,
790+
max_string_length,
788791
config_.use_counter_example,
789792
supert::config_.ui,
790793
symbol_resolve);
@@ -2138,7 +2141,7 @@ exprt string_refinementt::get(const exprt &expr) const
21382141

21392142
if(
21402143
const auto arr_model_opt =
2141-
get_array(super_get, ns, generator.max_string_length, debug(), arr))
2144+
get_array(super_get, ns, max_string_length, debug(), arr))
21422145
return *arr_model_opt;
21432146

21442147
if(generator.get_created_strings().count(arr))

src/solvers/refinement/string_refinement.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,11 @@ class string_refinementt final: public bv_refinementt
4343
/// Concretize strings after solver is finished
4444
bool trace=false;
4545
bool use_counter_example=true;
46+
std::size_t max_string_length;
4647
};
4748
public:
4849
/// string_refinementt constructor arguments
4950
struct infot : public bv_refinementt::infot,
50-
public string_constraint_generatort::infot,
5151
public configt
5252
{
5353
};
@@ -69,6 +69,7 @@ class string_refinementt final: public bv_refinementt
6969

7070
const configt config_;
7171
std::size_t loop_bound_;
72+
std::size_t max_string_length;
7273
string_constraint_generatort generator;
7374

7475
// Simple constraints that have been given to the solver

unit/solvers/refinement/string_constraint_instantiation/instantiate_not_contains.cpp

+6-12
Original file line numberDiff line numberDiff line change
@@ -192,8 +192,7 @@ SCENARIO("instantiate_not_contains",
192192
// Generating the corresponding axioms and simplifying, recording info
193193
symbol_tablet symtab;
194194
const namespacet empty_ns(symtab);
195-
string_constraint_generatort::infot info;
196-
string_constraint_generatort generator(info, ns);
195+
string_constraint_generatort generator(ns);
197196
exprt res=generator.add_axioms_for_function_application(func);
198197
std::string axioms;
199198
std::vector<string_not_contains_constraintt> nc_axioms;
@@ -288,8 +287,7 @@ SCENARIO("instantiate_not_contains",
288287
// Create witness for axiom
289288
symbol_tablet symtab;
290289
const namespacet empty_ns(symtab);
291-
string_constraint_generatort::infot info;
292-
string_constraint_generatort generator(info, ns);
290+
string_constraint_generatort generator(ns);
293291
generator.witness[vacuous]=
294292
generator.fresh_symbol("w", t.witness_type());
295293

@@ -342,8 +340,7 @@ SCENARIO("instantiate_not_contains",
342340
// Create witness for axiom
343341
symbol_tablet symtab;
344342
const namespacet ns(symtab);
345-
string_constraint_generatort::infot info;
346-
string_constraint_generatort generator(info, ns);
343+
string_constraint_generatort generator(ns);
347344
generator.witness[trivial]=
348345
generator.fresh_symbol("w", t.witness_type());
349346

@@ -397,8 +394,7 @@ SCENARIO("instantiate_not_contains",
397394
// Create witness for axiom
398395
symbol_tablet symtab;
399396
const namespacet empty_ns(symtab);
400-
string_constraint_generatort::infot info;
401-
string_constraint_generatort generator(info, ns);
397+
string_constraint_generatort generator(ns);
402398
generator.witness[trivial]=
403399
generator.fresh_symbol("w", t.witness_type());
404400

@@ -455,8 +451,7 @@ SCENARIO("instantiate_not_contains",
455451
symbol_tablet symtab;
456452
const namespacet empty_ns(symtab);
457453

458-
string_constraint_generatort::infot info;
459-
string_constraint_generatort generator(info, ns);
454+
string_constraint_generatort generator(ns);
460455
generator.witness[trivial]=
461456
generator.fresh_symbol("w", t.witness_type());
462457

@@ -510,8 +505,7 @@ SCENARIO("instantiate_not_contains",
510505
// Create witness for axiom
511506
symbol_tablet symtab;
512507
const namespacet empty_ns(symtab);
513-
string_constraint_generatort::infot info;
514-
string_constraint_generatort generator(info, ns);
508+
string_constraint_generatort generator(ns);
515509
generator.witness[trivial]=
516510
generator.fresh_symbol("w", t.witness_type());
517511

0 commit comments

Comments
 (0)