Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
45c7bc1
Document --race-check instrumentation and fix help text
tautschnig Mar 3, 2026
f19a290
Set property_class on --race-check assertions
tautschnig Mar 3, 2026
0499b3f
Fix --race-check to instrument all instruction types that can use sha…
tautschnig Mar 3, 2026
8d7c7a4
Use dirty-locals analysis in --race-check to detect races on address-…
tautschnig Mar 3, 2026
b75321e
Add coverage gap report script and CI integration
tautschnig Mar 16, 2026
d64cabe
Add regression test for goto-diff --unified
tautschnig Mar 17, 2026
e0fee8f
Add regression tests for goto-diff --change-impact
tautschnig Mar 17, 2026
c35134f
Add regression tests for goto-cc compiler mode personalities
tautschnig Mar 17, 2026
9c9d4bb
Fix swapped conditions and target handling in loop acceleration path …
tautschnig Mar 17, 2026
207c291
Fix symex depth limit in loop acceleration scratch programs
tautschnig Mar 17, 2026
764c5c2
Fix polynomial coefficient extraction in loop acceleration
tautschnig Mar 17, 2026
0ec87e9
Skip overflow check for unsigned targets in polynomial fitting
tautschnig Mar 17, 2026
03a7270
Promote array_safe acceleration tests to CORE using Z3
tautschnig Mar 17, 2026
765a318
Document nested_unsafe1 KNOWNBUG reason
tautschnig Mar 17, 2026
3aa5983
Add regression test for goto-instrument --show-locations
tautschnig Mar 17, 2026
1af1a18
Add regression test for goto-instrument --skip-loops
tautschnig Mar 17, 2026
9c2627a
Add regression test for goto-instrument --havoc-loops
tautschnig Mar 17, 2026
8b85008
Add regression test for goto-instrument --list-undefined-functions
tautschnig Mar 17, 2026
a39204d
Add regression test for goto-instrument --list-calls-args
tautschnig Mar 17, 2026
5ae5a01
Add regression test for goto-instrument --show-points-to
tautschnig Mar 17, 2026
0d57796
Add regression test for goto-instrument --show-struct-alignment
tautschnig Mar 17, 2026
8526e1a
Add regression test for cbmc --show-loops
tautschnig Mar 17, 2026
c05e5b7
Add regression test for cbmc --show-goto-functions --xml-ui
tautschnig Mar 17, 2026
1de820e
Add regression test for cbmc --beautify
tautschnig Mar 17, 2026
f1ce5b5
Add regression test for goto-instrument --show-call-sequences
tautschnig Mar 17, 2026
c82d546
Add regression test for goto-instrument --branch
tautschnig Mar 17, 2026
302224e
Add regression test for goto-instrument --add-library
tautschnig Mar 17, 2026
f4fca75
Add regression test for goto-instrument --isr
tautschnig Mar 17, 2026
a33cdde
Add regression test for goto-instrument --show-threaded
tautschnig Mar 17, 2026
345cb93
Add regression test for goto-instrument --undefined-function-is-assum…
tautschnig Mar 17, 2026
e7c5e42
Add regression test for goto-instrument --function-enter
tautschnig Mar 17, 2026
1e59bad
Add regression test for goto-instrument --show-natural-loops
tautschnig Mar 17, 2026
8e3cb86
Add regression test for goto-instrument --show-sese-regions
tautschnig Mar 17, 2026
069a7cb
Add regression test for goto-instrument --show-reaching-definitions
tautschnig Mar 17, 2026
2da08c9
Add regression test for goto-instrument --show-dependence-graph
tautschnig Mar 17, 2026
9345b23
Add regression test for goto-instrument --escape-analysis
tautschnig Mar 17, 2026
e7d316e
Add regression test for goto-instrument --show-uninitialized
tautschnig Mar 17, 2026
0c9432a
Add regression test for goto-instrument --show-local-safe-pointers
tautschnig Mar 17, 2026
2f0804d
Add regression test for goto-instrument --show-local-bitvector-analysis
tautschnig Mar 17, 2026
6ea05ab
Add regression test for goto-instrument --show-value-sets
tautschnig Mar 17, 2026
a5dfb61
Add regression test for goto-instrument --custom-bitvector-analysis
tautschnig Mar 17, 2026
3b7530e
Fix crash in --show-global-may-alias on OTHER instructions
tautschnig Mar 17, 2026
1856c4d
Fix crash in --show-intervals by adding missing do_remove_returns()
tautschnig Mar 17, 2026
e4cc05f
Fix --mmio option: register it and add to analysis guard
tautschnig Mar 17, 2026
6222a35
Fix --concurrency option: register it in option definitions
tautschnig Mar 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .github/workflows/coverage.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,8 @@ jobs:
files: build/html/coverage.info
fail_ci_if_error: true
verbose: true
- name: Coverage gap report
if: always()
run: |
python3 scripts/coverage_report.py --markdown \
build/html/coverage.info >> "$GITHUB_STEP_SUMMARY"
1 change: 1 addition & 0 deletions doc/cprover-manual/properties.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ The goto-instrument program supports these checks:
| `--undefined-shift-check` | add range checks for shift distances |
| `--nan-check` | add floating-point NaN checks |
| `--uninitialized-check` | add checks for uninitialized locals (experimental) |
| `--race-check` | add data race checks for concurrent programs |
| `--error-label label` | check that given label is unreachable |

As all of these checks apply across the entire input program, we may wish to
Expand Down
2 changes: 1 addition & 1 deletion doc/man/goto-instrument.1
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ add checks for uninitialized locals (experimental)
add check that call stack size of non\-inlined functions never exceeds n
.TP
\fB\-\-race\-check\fR
add floating\-point data race checks
add data race checks for concurrent programs
.SS "Semantic transformations:"
.TP
\fB\-\-nondet\-volatile\fR
Expand Down
1 change: 1 addition & 0 deletions regression/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ else()
add_subdirectory(goto-cl)
endif()
add_subdirectory(goto-cc-cbmc)
add_subdirectory(goto-cc-modes)
add_subdirectory(cbmc-cpp)
add_subdirectory(goto-cc-goto-analyzer)
add_subdirectory(goto-analyzer-simplify)
Expand Down
5 changes: 3 additions & 2 deletions regression/acceleration/array_safe1/test.desc
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
CORE
CORE smt-backend
main.c
--no-unwinding-assertions
--no-unwinding-assertions --z3 --no-bounds-check --no-signed-overflow-check
^EXIT=0$
^SIGNAL=0$
^VERIFICATION SUCCESSFUL$
--
5 changes: 3 additions & 2 deletions regression/acceleration/array_safe2/test.desc
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
CORE
CORE smt-backend
main.c
--no-unwinding-assertions
--no-unwinding-assertions --z3 --no-bounds-check --no-signed-overflow-check
^EXIT=0$
^SIGNAL=0$
^VERIFICATION SUCCESSFUL$
--
5 changes: 3 additions & 2 deletions regression/acceleration/array_safe3/test.desc
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
CORE
CORE smt-backend
main.c
--no-unwinding-assertions
--no-unwinding-assertions --z3 --no-bounds-check --no-signed-overflow-check
^EXIT=0$
^SIGNAL=0$
^VERIFICATION SUCCESSFUL$
--
5 changes: 3 additions & 2 deletions regression/acceleration/array_safe4/test.desc
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
CORE
CORE smt-backend
main.c
--no-unwinding-assertions
--no-unwinding-assertions --z3 --no-bounds-check --no-signed-overflow-check
^EXIT=0$
^SIGNAL=0$
^VERIFICATION SUCCESSFUL$
--
3 changes: 1 addition & 2 deletions regression/acceleration/array_unsafe1/test.desc
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
KNOWNBUG
CORE
main.c
--no-unwinding-assertions
^EXIT=10$
^SIGNAL=0$
^VERIFICATION FAILED$
--
The result spuriously is VERIFICATION SUCCESSFUL.
3 changes: 1 addition & 2 deletions regression/acceleration/array_unsafe2/test.desc
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
KNOWNBUG
CORE
main.c
--no-unwinding-assertions
^EXIT=10$
^SIGNAL=0$
^VERIFICATION FAILED$
--
The result spuriously is VERIFICATION SUCCESSFUL.
3 changes: 1 addition & 2 deletions regression/acceleration/array_unsafe3/test.desc
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
KNOWNBUG
CORE
main.c
--no-unwinding-assertions
^EXIT=10$
^SIGNAL=0$
^VERIFICATION FAILED$
--
The result spuriously is VERIFICATION SUCCESSFUL.
3 changes: 1 addition & 2 deletions regression/acceleration/array_unsafe4/test.desc
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
KNOWNBUG
CORE
main.c
--no-unwinding-assertions
^EXIT=10$
^SIGNAL=0$
^VERIFICATION FAILED$
--
The result spuriously is VERIFICATION SUCCESSFUL.
2 changes: 1 addition & 1 deletion regression/acceleration/const_unsafe1/test.desc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
KNOWNBUG
CORE
main.c
--no-unwinding-assertions
^EXIT=10$
Expand Down
2 changes: 1 addition & 1 deletion regression/acceleration/diamond_unsafe1/test.desc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
KNOWNBUG
CORE
main.c
--no-unwinding-assertions
^EXIT=10$
Expand Down
2 changes: 1 addition & 1 deletion regression/acceleration/functions_unsafe1/test.desc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
KNOWNBUG
CORE
main.c
--no-unwinding-assertions
^EXIT=10$
Expand Down
6 changes: 5 additions & 1 deletion regression/acceleration/nested_unsafe1/test.desc
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,8 @@ main.c
^SIGNAL=0$
^VERIFICATION FAILED$
--
The result spuriously is VERIFICATION SUCCESSFUL.
The loop accelerator only handles innermost loops. The outer loop
(while x < 0x0fffffff) contains a nested inner loop (while y < 10),
so it is skipped by the contains_nested_loops check in accelerate_loop.
Only the inner loop is accelerated, which is insufficient to reach the
assertion after the outer loop within the --unwind bound.
2 changes: 1 addition & 1 deletion regression/acceleration/overflow_unsafe1/test.desc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
KNOWNBUG
CORE
main.c
--no-unwinding-assertions
^EXIT=10$
Expand Down
2 changes: 1 addition & 1 deletion regression/acceleration/phases_unsafe1/test.desc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
KNOWNBUG
CORE
main.c
--no-unwinding-assertions
^EXIT=10$
Expand Down
2 changes: 1 addition & 1 deletion regression/acceleration/simple_unsafe1/test.desc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
KNOWNBUG
CORE
main.c
--no-unwinding-assertions
^EXIT=10$
Expand Down
2 changes: 1 addition & 1 deletion regression/acceleration/simple_unsafe4/test.desc
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
KNOWNBUG
CORE
main.c
--no-unwinding-assertions
^EXIT=10$
Expand Down
7 changes: 7 additions & 0 deletions regression/cbmc/beautify1/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
int main()
{
int x;
if(x > 0)
__CPROVER_assert(x < 0, "should fail");
return 0;
}
8 changes: 8 additions & 0 deletions regression/cbmc/beautify1/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE broken-smt-backend broken-cprover-smt-backend no-new-smt
main.c
--beautify
^EXIT=10$
^SIGNAL=0$
^VERIFICATION FAILED$
--
^warning: ignoring
1 change: 1 addition & 0 deletions regression/cbmc/show-goto-functions-xml1/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
int main() { return 0; }
10 changes: 10 additions & 0 deletions regression/cbmc/show-goto-functions-xml1/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
CORE
main.c
--show-goto-functions --xml-ui
^EXIT=0$
^SIGNAL=0$
<functions>
<function.*name="main"
</functions>
--
^warning: ignoring
7 changes: 7 additions & 0 deletions regression/cbmc/show-loops1/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
int main()
{
int i;
for(i = 0; i < 10; i++)
;
return 0;
}
8 changes: 8 additions & 0 deletions regression/cbmc/show-loops1/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE
main.c
--show-loops
^EXIT=0$
^SIGNAL=0$
Loop main\.0:
--
^warning: ignoring
3 changes: 3 additions & 0 deletions regression/goto-cc-modes/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
add_test_pl_tests(
"${CMAKE_CURRENT_SOURCE_DIR}/modes.sh $<TARGET_FILE:goto-cc>"
)
12 changes: 12 additions & 0 deletions regression/goto-cc-modes/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
default: tests.log

test:
@../test.pl -e -p -c '../goto-cc-modes/modes.sh ../../../src/goto-cc/goto-cc'

tests.log: ../test.pl
@../test.pl -e -p -c '../goto-cc-modes/modes.sh ../../../src/goto-cc/goto-cc'

clean:
find . -name '*.out' -execdir $(RM) '{}' \;
find . -name '*.obj' -execdir $(RM) '{}' \;
$(RM) tests.log
1 change: 1 addition & 0 deletions regression/goto-cc-modes/goto-armcc-help/dummy.c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
int main() { return 0; }
8 changes: 8 additions & 0 deletions regression/goto-cc-modes/goto-armcc-help/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE
dummy.c
goto-armcc --help
^EXIT=0$
^SIGNAL=0$
goto-armcc understands the options of armcc
--
^warning: ignoring
1 change: 1 addition & 0 deletions regression/goto-cc-modes/goto-as-help/dummy.c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
int main() { return 0; }
8 changes: 8 additions & 0 deletions regression/goto-cc-modes/goto-as-help/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE
dummy.c
goto-as --help
^EXIT=0$
^SIGNAL=0$
goto-as understands the options of as
--
^warning: ignoring
1 change: 1 addition & 0 deletions regression/goto-cc-modes/goto-cl-compile/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
int main() { return 0; }
8 changes: 8 additions & 0 deletions regression/goto-cc-modes/goto-cl-compile/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE
main.c
goto-cl /c
^EXIT=0$
^SIGNAL=0$
main\.c
--
^warning: ignoring
1 change: 1 addition & 0 deletions regression/goto-cc-modes/goto-cl-help/dummy.c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
int main() { return 0; }
8 changes: 8 additions & 0 deletions regression/goto-cc-modes/goto-cl-help/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE
dummy.c
goto-cl --help
^EXIT=0$
^SIGNAL=0$
goto-cl understands the options of CL
--
^warning: ignoring
1 change: 1 addition & 0 deletions regression/goto-cc-modes/goto-cw-help/dummy.c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
int main() { return 0; }
8 changes: 8 additions & 0 deletions regression/goto-cc-modes/goto-cw-help/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE
dummy.c
goto-cw --help
^EXIT=0$
^SIGNAL=0$
goto-cw understands the options of gcc
--
^warning: ignoring
1 change: 1 addition & 0 deletions regression/goto-cc-modes/goto-link-help/dummy.c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
int main() { return 0; }
8 changes: 8 additions & 0 deletions regression/goto-cc-modes/goto-link-help/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE
dummy.c
goto-link --help
^EXIT=0$
^SIGNAL=0$
goto-link understands the options of link
--
^warning: ignoring
20 changes: 20 additions & 0 deletions regression/goto-cc-modes/modes.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#!/bin/bash
# Test script for goto-cc mode-specific tests.
# Usage: modes.sh <goto-cc-binary> <mode-name> [args...]
#
# test.pl invokes: CMD OPTIONS 'INPUT'
# So this receives: modes.sh <goto-cc> <mode> [mode-args...] <input-file>
#
# Creates a symlink with the mode name and runs it with the remaining args.

GOTO_CC=$1
shift

MODE=$1
shift

TMPDIR=$(mktemp -d)
trap "rm -rf $TMPDIR" EXIT

ln -sf "$(realpath "$GOTO_CC")" "$TMPDIR/$MODE"
"$TMPDIR/$MODE" "$@"
10 changes: 10 additions & 0 deletions regression/goto-diff/change-impact1/a.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
int helper(int v)
{
return v + 1;
}

int main()
{
int x = helper(0);
return x;
}
10 changes: 10 additions & 0 deletions regression/goto-diff/change-impact1/b.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
int helper(int v)
{
return v + 2;
}

int main()
{
int x = helper(0);
return x;
}
8 changes: 8 additions & 0 deletions regression/goto-diff/change-impact1/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE
a.c
b.c --change-impact
^EXIT=0$
^SIGNAL=0$
\*\* helper \*\*
--
^warning: ignoring
14 changes: 14 additions & 0 deletions regression/goto-diff/change-impact2/a.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
int compute(int v)
{
return v * 2;
}

int process(int v)
{
return compute(v) + 1;
}

int main()
{
return process(5);
}
14 changes: 14 additions & 0 deletions regression/goto-diff/change-impact2/b.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
int compute(int v)
{
return v * 3;
}

int process(int v)
{
return compute(v) + 1;
}

int main()
{
return process(5);
}
8 changes: 8 additions & 0 deletions regression/goto-diff/change-impact2/test.desc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
CORE
a.c
b.c --forward-impact
^EXIT=0$
^SIGNAL=0$
\*\* compute \*\*
--
^warning: ignoring
10 changes: 10 additions & 0 deletions regression/goto-diff/unified-diff1/a.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
int main()
{
int x;
return 0;
}

void foo()
{
int y;
}
Loading
Loading