Skip to content

Commit b83182f

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 d726577 commit b83182f

File tree

6 files changed

+25
-37
lines changed

6 files changed

+25
-37
lines changed

src/cbmc/cbmc_solvers.cpp

Lines changed: 1 addition & 1 deletion
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

Lines changed: 1 addition & 9 deletions
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

Lines changed: 2 additions & 4 deletions
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

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -166,11 +166,14 @@ static bool validate(const string_refinementt::infot &info)
166166
return true;
167167
}
168168

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

175178
string_refinementt::string_refinementt(const infot &info):
176179
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);
@@ -2143,7 +2146,7 @@ exprt string_refinementt::get(const exprt &expr) const
21432146

21442147
if(
21452148
const auto arr_model_opt =
2146-
get_array(super_get, ns, generator.max_string_length, debug(), arr))
2149+
get_array(super_get, ns, max_string_length, debug(), arr))
21472150
return *arr_model_opt;
21482151

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

src/solvers/refinement/string_refinement.h

Lines changed: 2 additions & 1 deletion
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

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -195,8 +195,7 @@ SCENARIO("instantiate_not_contains",
195195
// Generating the corresponding axioms and simplifying, recording info
196196
symbol_tablet symtab;
197197
const namespacet empty_ns(symtab);
198-
string_constraint_generatort::infot info;
199-
string_constraint_generatort generator(info, ns);
198+
string_constraint_generatort generator(ns);
200199
exprt res=generator.add_axioms_for_function_application(func);
201200
std::string axioms;
202201
std::vector<string_not_contains_constraintt> nc_axioms;
@@ -297,8 +296,7 @@ SCENARIO("instantiate_not_contains",
297296
// Create witness for axiom
298297
symbol_tablet symtab;
299298
const namespacet empty_ns(symtab);
300-
string_constraint_generatort::infot info;
301-
string_constraint_generatort generator(info, ns);
299+
string_constraint_generatort generator(ns);
302300
generator.witness[vacuous]=
303301
generator.fresh_symbol("w", t.witness_type());
304302

@@ -353,8 +351,7 @@ SCENARIO("instantiate_not_contains",
353351
// Create witness for axiom
354352
symbol_tablet symtab;
355353
const namespacet ns(symtab);
356-
string_constraint_generatort::infot info;
357-
string_constraint_generatort generator(info, ns);
354+
string_constraint_generatort generator(ns);
358355
generator.witness[trivial]=
359356
generator.fresh_symbol("w", t.witness_type());
360357

@@ -410,8 +407,7 @@ SCENARIO("instantiate_not_contains",
410407
// Create witness for axiom
411408
symbol_tablet symtab;
412409
const namespacet empty_ns(symtab);
413-
string_constraint_generatort::infot info;
414-
string_constraint_generatort generator(info, ns);
410+
string_constraint_generatort generator(ns);
415411
generator.witness[trivial]=
416412
generator.fresh_symbol("w", t.witness_type());
417413

@@ -470,8 +466,7 @@ SCENARIO("instantiate_not_contains",
470466
symbol_tablet symtab;
471467
const namespacet empty_ns(symtab);
472468

473-
string_constraint_generatort::infot info;
474-
string_constraint_generatort generator(info, ns);
469+
string_constraint_generatort generator(ns);
475470
generator.witness[trivial]=
476471
generator.fresh_symbol("w", t.witness_type());
477472

@@ -527,8 +522,7 @@ SCENARIO("instantiate_not_contains",
527522
// Create witness for axiom
528523
symbol_tablet symtab;
529524
const namespacet empty_ns(symtab);
530-
string_constraint_generatort::infot info;
531-
string_constraint_generatort generator(info, ns);
525+
string_constraint_generatort generator(ns);
532526
generator.witness[trivial]=
533527
generator.fresh_symbol("w", t.witness_type());
534528

0 commit comments

Comments
 (0)