Skip to content

Commit 57de946

Browse files
authored
Merge pull request #5065 from danpoe/refactor/remove-string-operations-handled-by-models
Remove string operations handled by models from string solver
2 parents fab409d + 48de77e commit 57de946

File tree

20 files changed

+16
-120
lines changed

20 files changed

+16
-120
lines changed

jbmc/regression/jbmc-strings/StringValueOf01/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
FUTURE
22
StringValueOf01.class
3-
--max-nondet-string-length 1000
3+
--max-nondet-string-length 1000 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$

jbmc/regression/jbmc-strings/StringValueOf02/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
StringValueOf02.class
3-
--max-nondet-string-length 1000
3+
--max-nondet-string-length 1000 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
44
^EXIT=10$
55
^SIGNAL=0$
66
^\[.*assertion\.1\] .* line 7 .* FAILURE$

jbmc/regression/jbmc-strings/StringValueOf03/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
StringValueOf03.class
3-
--max-nondet-string-length 1000
3+
--max-nondet-string-length 1000 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
44
^EXIT=10$
55
^SIGNAL=0$
66
^\[.*assertion\.1\] .* line 7 .* FAILURE$

jbmc/regression/jbmc-strings/StringValueOf04/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
StringValueOf04.class
3-
--max-nondet-string-length 1000
3+
--max-nondet-string-length 1000 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
44
^EXIT=10$
55
^SIGNAL=0$
66
^\[.*assertion\.1\] .* line 7 .* FAILURE$

jbmc/regression/jbmc-strings/StringValueOf05/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
StringValueOf05.class
3-
--max-nondet-string-length 1000
3+
--max-nondet-string-length 1000 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
44
^EXIT=10$
55
^SIGNAL=0$
66
^\[.*assertion\.1\] .* line 7 .* FAILURE$

jbmc/regression/jbmc-strings/StringValueOf06/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
StringValueOf06.class
3-
--max-nondet-string-length 1000
3+
--max-nondet-string-length 1000 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
44
^EXIT=10$
55
^SIGNAL=0$
66
^\[.*assertion\.1\] .* line 7 .* FAILURE$

jbmc/regression/jbmc-strings/StringValueOf07/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
StringValueOf07.class
3-
--max-nondet-string-length 1000
3+
--max-nondet-string-length 1000 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
44
^EXIT=10$
55
^SIGNAL=0$
66
^\[.*assertion\.1\] .* line 8 .* FAILURE$

jbmc/regression/jbmc-strings/StringValueOf08/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
StringValueOf08.class
3-
--max-nondet-string-length 100
3+
--max-nondet-string-length 100 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
44
^EXIT=10$
55
^SIGNAL=0$
66
^\[.*assertion\.1\] .* line 7 .* FAILURE$

jbmc/regression/jbmc-strings/StringValueOf09/test.desc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
CORE
1+
KNOWNBUG
22
StringValueOf09.class
3-
--max-nondet-string-length 1000
3+
--max-nondet-string-length 1000 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
44
^EXIT=10$
55
^SIGNAL=0$
66
^\[.*assertion\.1\] .* line 7 .* FAILURE$

jbmc/regression/jbmc-strings/StringValueOf10/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
FUTURE
22
StringValueOf10.class
3-
--max-nondet-string-length 1000
3+
--max-nondet-string-length 1000 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
44
^EXIT=10$
55
^SIGNAL=0$
66
^VERIFICATION FAILED$

jbmc/regression/jbmc-strings/StringValueOfInt/test_dependency.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
Test.class
3-
--function Test.checkWithDependency --depth 10000
3+
--function Test.checkWithDependency --depth 10000 --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
44
^EXIT=10$
55
^SIGNAL=0$
66
assertion at file Test.java line 63 .*: SUCCESS

jbmc/regression/jbmc-strings/StringValueOfInt/test_det.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
Test.class
3-
--function Test.checkDet
3+
--function Test.checkDet --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
44
^EXIT=10$
55
^SIGNAL=0$
66
assertion at file Test.java line 26 .*: FAILURE

jbmc/regression/jbmc-strings/StringValueOfInt/test_nondet.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
Test.class
3-
--function Test.checkNonDet
3+
--function Test.checkNonDet --cp `../../../../scripts/format_classpath.sh . ../../../lib/java-models-library/target/core-models.jar`
44
^EXIT=10$
55
^SIGNAL=0$
66
assertion at file Test.java line 55 .*: FAILURE

jbmc/regression/jbmc/no-main-multi-array-maybe-null2/test.desc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
CORE
22
Main.class
3-
--function Main.main
3+
--function Main.main --max-nondet-string-length 10000
44
^EXIT=10$
55
^SIGNAL=0$
66
^VERIFICATION FAILED$

jbmc/src/java_bytecode/java_string_library_preprocess.cpp

Lines changed: 0 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1669,26 +1669,6 @@ void java_string_library_preprocesst::initialize_conversion_table()
16691669
cprover_equivalent_to_java_string_returning_function
16701670
["java::java.lang.String.trim:()Ljava/lang/String;"]=
16711671
ID_cprover_string_trim_func;
1672-
cprover_equivalent_to_java_string_returning_function
1673-
["java::java.lang.String.valueOf:(Z)Ljava/lang/String;"]=
1674-
ID_cprover_string_of_bool_func;
1675-
cprover_equivalent_to_java_string_returning_function
1676-
["java::java.lang.String.valueOf:(C)Ljava/lang/String;"]=
1677-
ID_cprover_string_of_char_func;
1678-
conversion_table["java::java.lang.String.valueOf:(F)Ljava/lang/String;"] =
1679-
std::bind(
1680-
&java_string_library_preprocesst::make_float_to_string_code,
1681-
this,
1682-
std::placeholders::_1,
1683-
std::placeholders::_2,
1684-
std::placeholders::_3,
1685-
std::placeholders::_4);
1686-
cprover_equivalent_to_java_string_returning_function
1687-
["java::java.lang.String.valueOf:(I)Ljava/lang/String;"]=
1688-
ID_cprover_string_of_int_func;
1689-
cprover_equivalent_to_java_string_returning_function
1690-
["java::java.lang.String.valueOf:(J)Ljava/lang/String;"]=
1691-
ID_cprover_string_of_long_func;
16921672

16931673
// StringBuilder library
16941674
conversion_table
@@ -1827,14 +1807,6 @@ void java_string_library_preprocesst::initialize_conversion_table()
18271807
conversion_table["java::java.lang.String.length:()I"];
18281808

18291809
// Other libraries
1830-
conversion_table["java::java.lang.Float.toString:(F)Ljava/lang/String;"] =
1831-
std::bind(
1832-
&java_string_library_preprocesst::make_float_to_string_code,
1833-
this,
1834-
std::placeholders::_1,
1835-
std::placeholders::_2,
1836-
std::placeholders::_3,
1837-
std::placeholders::_4);
18381810
cprover_equivalent_to_java_function
18391811
["java::java.lang.Integer.parseInt:(Ljava/lang/String;)I"]=
18401812
ID_cprover_string_parse_int_func;
@@ -1850,18 +1822,6 @@ void java_string_library_preprocesst::initialize_conversion_table()
18501822
cprover_equivalent_to_java_string_returning_function
18511823
["java::java.lang.Integer.toHexString:(I)Ljava/lang/String;"]=
18521824
ID_cprover_string_of_int_hex_func;
1853-
cprover_equivalent_to_java_string_returning_function
1854-
["java::java.lang.Integer.toString:(I)Ljava/lang/String;"]=
1855-
ID_cprover_string_of_int_func;
1856-
cprover_equivalent_to_java_string_returning_function
1857-
["java::java.lang.Integer.toString:(II)Ljava/lang/String;"]=
1858-
ID_cprover_string_of_int_func;
1859-
cprover_equivalent_to_java_string_returning_function
1860-
["java::java.lang.Long.toString:(J)Ljava/lang/String;"]=
1861-
ID_cprover_string_of_int_func;
1862-
cprover_equivalent_to_java_string_returning_function
1863-
["java::java.lang.Long.toString:(JI)Ljava/lang/String;"]=
1864-
ID_cprover_string_of_int_func;
18651825
conversion_table["java::org.cprover.CProver.classIdentifier:("
18661826
"Ljava/lang/Object;)Ljava/lang/String;"] =
18671827
std::bind(

src/solvers/README.md

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -499,9 +499,6 @@ This is described in more detail \link string_builtin_functiont here. \endlink
499499
* `cprover_string_of_float_scientific_notation` :
500500
\copybrief string_constraint_generatort::add_axioms_from_float_scientific_notation
501501
\link string_constraint_generatort::add_axioms_from_float_scientific_notation More... \endlink
502-
* `cprover_string_of_char` :
503-
\copybrief string_constraint_generatort::add_axioms_from_char(const function_application_exprt &f)
504-
\link string_constraint_generatort::add_axioms_from_char(const function_application_exprt &f) More... \endlink
505502
* `cprover_string_parse_int` :
506503
\copybrief string_constraint_generatort::add_axioms_for_parse_int
507504
\link string_constraint_generatort::add_axioms_for_parse_int More... \endlink
@@ -530,8 +527,6 @@ This is described in more detail \link string_builtin_functiont here. \endlink
530527
* `cprover_string_delete_char_at` : A call to
531528
`cprover_string_delete_char_at(s, i)` would be the same thing as
532529
`cprover_string_delete(s, i, i+1)`.
533-
* `cprover_string_of_bool` :
534-
Language dependent, should be implemented in the models.
535530
* `cprover_string_copy` : Same as `cprover_string_substring(s, 0)`.
536531
* `cprover_string_of_int_hex` : Same as `cprover_string_of_int(s, 16)`.
537532
* `cprover_string_of_double` : Same as `cprover_string_of_float`.

src/solvers/strings/string_constraint_generator_main.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -273,10 +273,6 @@ string_constraint_generatort::add_axioms_for_function_application(
273273
return add_axioms_from_double(expr);
274274
else if(id == ID_cprover_string_of_long_func)
275275
return add_axioms_from_long(expr);
276-
else if(id == ID_cprover_string_of_bool_func)
277-
return add_axioms_from_bool(expr);
278-
else if(id == ID_cprover_string_of_char_func)
279-
return add_axioms_from_char(expr);
280276
else if(id == ID_cprover_string_set_length_func)
281277
return add_axioms_for_set_length(expr);
282278
else if(id == ID_cprover_string_delete_func)

src/solvers/strings/string_constraint_generator_valueof.cpp

Lines changed: 0 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,6 @@ string_constraint_generatort::add_axioms_from_long(
5555
return add_axioms_for_string_of_int(res, f.arguments()[2], 0);
5656
}
5757

58-
/// Add axioms corresponding to the String.valueOf(Z) java function.
59-
/// \deprecated This is Java specific and should be implemented in Java instead
60-
/// \param f: function application with a Boolean argument
61-
/// \return a new string expression
62-
DEPRECATED(SINCE(2017, 10, 5, "Java specific, should be implemented in Java"))
63-
std::pair<exprt, string_constraintst>
64-
string_constraint_generatort::add_axioms_from_bool(
65-
const function_application_exprt &f)
66-
{
67-
PRECONDITION(f.arguments().size() == 3);
68-
const array_string_exprt res =
69-
array_pool.find(f.arguments()[1], f.arguments()[0]);
70-
return add_axioms_from_bool(res, f.arguments()[2]);
71-
}
72-
7358
/// Add axioms stating that the returned string equals "true" when the Boolean
7459
/// expression is true and "false" when it is false.
7560
/// \deprecated This is Java specific and should be implemented in Java instead
@@ -281,44 +266,6 @@ string_constraint_generatort::add_axioms_from_int_hex(
281266
return add_axioms_from_int_hex(res, f.arguments()[2]);
282267
}
283268

284-
/// Conversion from char to string
285-
///
286-
// NOLINTNEXTLINE
287-
/// \copybrief add_axioms_from_char(const array_string_exprt &res, const exprt &c)
288-
// NOLINTNEXTLINE
289-
/// \link add_axioms_from_char(const array_string_exprt &res, const exprt &c)
290-
/// (More...) \endlink
291-
/// \param f: function application with arguments integer `|res|`, character
292-
/// pointer `&res[0]` and character `c`
293-
/// \return code 0 on success
294-
std::pair<exprt, string_constraintst>
295-
string_constraint_generatort::add_axioms_from_char(
296-
const function_application_exprt &f)
297-
{
298-
PRECONDITION(f.arguments().size() == 3);
299-
const array_string_exprt res =
300-
array_pool.find(f.arguments()[1], f.arguments()[0]);
301-
return add_axioms_from_char(res, f.arguments()[2]);
302-
}
303-
304-
/// Add axiom stating that string `res` has length 1 and the character
305-
/// it contains equals `c`.
306-
///
307-
/// This axiom is: \f$ |{\tt res}| = 1 \land {\tt res}[0] = {\tt c} \f$.
308-
/// \param res: array of characters expression
309-
/// \param c: character expression
310-
/// \return code 0 on success
311-
std::pair<exprt, string_constraintst>
312-
string_constraint_generatort::add_axioms_from_char(
313-
const array_string_exprt &res,
314-
const exprt &c)
315-
{
316-
string_constraintst constraints;
317-
constraints.existential = {and_exprt(
318-
equal_exprt(res[0], c), equal_to(array_pool.get_or_create_length(res), 1))};
319-
return {from_integer(0, get_return_code_type()), std::move(constraints)};
320-
}
321-
322269
/// Add axioms making the return value true if the given string is a correct
323270
/// number in the given radix
324271
/// \param str: string expression

src/util/irep_ids.def

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -619,11 +619,9 @@ IREP_ID_ONE(cprover_string_length_func)
619619
IREP_ID_ONE(cprover_string_of_int_func)
620620
IREP_ID_ONE(cprover_string_of_int_hex_func)
621621
IREP_ID_ONE(cprover_string_of_long_func)
622-
IREP_ID_ONE(cprover_string_of_bool_func)
623622
IREP_ID_ONE(cprover_string_of_float_func)
624623
IREP_ID_ONE(cprover_string_of_float_scientific_notation_func)
625624
IREP_ID_ONE(cprover_string_of_double_func)
626-
IREP_ID_ONE(cprover_string_of_char_func)
627625
IREP_ID_ONE(cprover_string_parse_int_func)
628626
IREP_ID_ONE(cprover_string_replace_func)
629627
IREP_ID_ONE(cprover_string_set_length_func)

0 commit comments

Comments
 (0)