Skip to content

Commit 8b50dcf

Browse files
committed
String solver: support bounded-length intermediate strings
This adds support for the string solver to use constant-sized arrays to store variable-length strings (which may be cheaper since smaller formulas are generally needed to represent them and their constraints to the solver) This is off-by-default for now since it has not been heavily studied: I expect constant-sized arrays would be expensive in the case where strings are numerous and sparsely constrained, but cheaper when there are many index expressions leading to an explosion of Ackermann constraints.
1 parent 06d473f commit 8b50dcf

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+592
-66
lines changed

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,7 @@ regression/**/tests-*.log
6060
regression/**/*.goto-cc-saved
6161
regression/**/*.gb
6262
regression/**/*.smt2
63-
jbmc/regression/**/tests.log
64-
jbmc/regression/**/tests-symex-driven-loading.log
63+
jbmc/regression/**/*.log
6564

6665
# regression/coverage file
6766
/regression/coverage_**

jbmc/regression/jbmc-strings/CMakeLists.txt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@ add_test_pl_tests(
22
"$<TARGET_FILE:jbmc> --validate-goto-model --validate-ssa-equation"
33
)
44

5+
add_test_pl_profile(
6+
"jbmc-strings-fixed-size-arrays"
7+
"$<TARGET_FILE:jbmc> --validate-goto-model --validate-ssa-equation --max-intermediate-string-length 100 --use-fixed-size-arrays-for-bounded-strings --no-array-field-sensitivity"
8+
"-C;-s;fixed-size-strings;-X;limited-size-strings-expected-failure"
9+
"CORE"
10+
)
11+
512
add_test_pl_profile(
613
"jbmc-strings-symex-driven-lazy-loading"
714
"$<TARGET_FILE:jbmc> --validate-goto-model --validate-ssa-equation --symex-driven-lazy-loading"

jbmc/regression/jbmc-strings/Makefile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,22 @@ include ../../src/config.inc
44

55
test:
66
@../$(CPROVER_DIR)/regression/test.pl -e -p -c "../../../src/jbmc/jbmc --validate-goto-model --validate-ssa-equation"
7+
@../$(CPROVER_DIR)/regression/test.pl -e -p -c "../../../src/jbmc/jbmc --validate-goto-model --validate-ssa-equation --max-intermediate-string-length 100 --use-fixed-size-arrays-for-bounded-strings --no-array-field-sensitivity" -X limited-size-strings-expected-failure -s fixed-size-strings
78
@../$(CPROVER_DIR)/regression/test.pl -e -p -c "../../../src/jbmc/jbmc --validate-goto-model --validate-ssa-equation --symex-driven-lazy-loading" -X symex-driven-lazy-loading-expected-failure -s symex-driven-loading
89

910
testfuture:
1011
@../$(CPROVER_DIR)/regression/test.pl -e -p -c "../../../src/jbmc/jbmc --validate-goto-model --validate-ssa-equation" -CF
12+
@../$(CPROVER_DIR)/regression/test.pl -e -p -c "../../../src/jbmc/jbmc --validate-goto-model --validate-ssa-equation --max-intermediate-string-length 100 --use-fixed-size-arrays-for-bounded-strings --no-array-field-sensitivity" -CF -X limited-size-strings-expected-failure -s fixed-size-strings
1113
@../$(CPROVER_DIR)/regression/test.pl -e -p -c "../../../src/jbmc/jbmc --validate-goto-model --validate-ssa-equation --symex-driven-lazy-loading" -X symex-driven-lazy-loading-expected-failure -CF -s symex-driven-loading
1214

1315
testall:
1416
@../$(CPROVER_DIR)/regression/test.pl -e -p -c "../../../src/jbmc/jbmc --validate-goto-model --validate-ssa-equation" -CFTK
17+
@../$(CPROVER_DIR)/regression/test.pl -e -p -c "../../../src/jbmc/jbmc --validate-goto-model --validate-ssa-equation --max-intermediate-string-length 100 --use-fixed-size-arrays-for-bounded-strings --no-array-field-sensitivity" -CFTK -X limited-size-strings-expected-failure -s fixed-size-strings
1518
@../$(CPROVER_DIR)/regression/test.pl -e -p -c "../../../src/jbmc/jbmc --validate-goto-model --validate-ssa-equation --symex-driven-lazy-loading" -X symex-driven-lazy-loading-expected-failure -CFTK -s symex-driven-loading
1619

1720
tests.log: ../$(CPROVER_DIR)/regression/test.pl
1821
@../$(CPROVER_DIR)/regression/test.pl -e -p -c "../../../src/jbmc/jbmc --validate-goto-model --validate-ssa-equation"
22+
@../$(CPROVER_DIR)/regression/test.pl -e -p -c "../../../src/jbmc/jbmc --validate-goto-model --validate-ssa-equation --max-intermediate-string-length 100 --use-fixed-size-arrays-for-bounded-strings --no-array-field-sensitivity" -X limited-size-strings-expected-failure -s fixed-size-strings
1923
@../$(CPROVER_DIR)/regression/test.pl -e -p -c "../../../src/jbmc/jbmc --validate-goto-model --validate-ssa-equation --symex-driven-lazy-loading" -X symex-driven-lazy-loading-expected-failure -s symex-driven-loading
2024

2125
show:

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CORE
1+
CORE limited-size-strings-expected-failure
22
Test
33
--function Test.check
44
^EXIT=10$
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
CORE
1+
CORE limited-size-strings-expected-failure
22
Test
33
--function Test.check --unwind 4 --max-nondet-string-length 3 --java-assume-inputs-non-null
44
^EXIT=0$
55
^SIGNAL=0$
66
^VERIFICATION SUCCESSFUL$
7+
--
8+
--
9+
Actually works fine with limited size strings, just takes a very long time.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CORE
1+
CORE limited-size-strings-expected-failure
22
Test
33
--function Test.det
44
^EXIT=10$

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CORE
1+
CORE limited-size-strings-expected-failure
22
Test
33
--function Test.nonDet --max-nondet-string-length 1000
44
^EXIT=10$

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ assertion at file Test.java line 50 .*: FAILURE
88
--
99
--
1010
Check that when there are dependencies, axioms are added correctly.
11+

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CORE
1+
CORE limited-size-strings-expected-failure
22
Test
33
--function Test.det
44
^EXIT=10$

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CORE
1+
CORE limited-size-strings-expected-failure
22
Test
33
--function Test.nonDet --max-nondet-string-length 1000
44
^EXIT=10$

0 commit comments

Comments
 (0)