Skip to content

Commit c52e25c

Browse files
Merge branch 'master' into issue_718
2 parents afd4153 + 4828e7b commit c52e25c

File tree

164 files changed

+4038
-1616
lines changed

Some content is hidden

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

164 files changed

+4038
-1616
lines changed

.github/workflows/locked.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ jobs:
6767
- name: Test incremental regression
6868
run: ruby scripts/update_suite.rb -i
6969

70+
- name: Test incremental regression with cfg comparison
71+
run: ruby scripts/update_suite.rb -c
72+
7073
extraction:
7174
if: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' }}
7275

.github/workflows/unlocked.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ jobs:
9595
- name: Test incremental regression
9696
run: ruby scripts/update_suite.rb -i
9797

98+
- name: Test incremental regression with cfg comparison
99+
run: ruby scripts/update_suite.rb -c
100+
98101
lower-bounds-downgrade:
99102
# use external 0install solver to downgrade: https://github.com/ocaml-opam/opam-0install-solver
100103
# TODO: will be built in in opam 2.2: https://github.com/ocaml/opam/pull/4909
@@ -174,6 +177,9 @@ jobs:
174177
- name: Test incremental regression
175178
run: ruby scripts/update_suite.rb -i
176179

180+
- name: Test incremental regression with cfg comparison
181+
run: ruby scripts/update_suite.rb -c
182+
177183
lower-bounds-docker:
178184
# use builtin-0install solver to remove and downgrade, opam normally compiled without, Docker images have it compiled
179185

@@ -265,3 +271,6 @@ jobs:
265271

266272
- name: Test incremental regression
267273
run: ruby scripts/update_suite.rb -i
274+
275+
- name: Test incremental regression with cfg comparison
276+
run: ruby scripts/update_suite.rb -c

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,6 @@ gobview_out/*
8787
# witnesses
8888
witness.yml
8989
witness.certificate.yml
90+
91+
# transformations
92+
transformed.c

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
## v2.1.0
2+
Functionally equivalent to Goblint in SV-COMP 2023.
3+
4+
* Add automatic configuration tuning (#772).
5+
* Add many library function specifications (#865, #868, #878, #884, #886).
6+
* Reorganize library stubs (#814, #845).
7+
* Add Trace Event Format output to timing (#844).
8+
* Optimize domains for address and path sets (#803, #809).
9+
110
## v2.0.1
211
* Fix compilation with z3.
312

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,18 @@ Both for using an up-to-date version of Goblint or developing it, the best way i
1212

1313
### Linux
1414
1. Install [opam](https://opam.ocaml.org/doc/Install.html).
15-
2. Make sure the following are installed: `git patch m4 autoconf libgmp-dev libmpfr-dev pkg-config`.
15+
2. Make sure the following are installed: `git`, `patch`, `m4`, `autoconf`, `libgmp-dev`, `libmpfr-dev` and `pkg-config`.
1616
3. Run `make setup` to install OCaml and dependencies via opam.
1717
4. Run `make` to build Goblint itself.
1818
5. Run `make install` to install Goblint into the opam switch for usage via switch's `PATH`.
1919

2020
### MacOS
2121
1. Install GCC with `brew install gcc` (first run `xcode-select --install` if you don't want to build it from source). Goblint requires GCC while macOS's default `cpp` is Clang, which will not work.
2222
2. ONLY for M1 (ARM64) processor: homebrew changed its install location from `/usr/local/` to `/opt/homebrew/`. For packages to find their dependecies execute `sudo ln -s /opt/homebrew/{include,lib} /usr/local/`.
23-
3. Continue using Linux instructions (the formulae in brew for `patch libgmp-dev libmpfr-dev` are `gpatch gmp mpfr`, respectively).
23+
3. Continue using Linux instructions (the formulae in brew for `patch`, `libgmp-dev`, `libmpfr-dev` are `gpatch`, `gmp`, `mpfr`, respectively).
2424

2525
### Windows
26-
1. Install [WSL](https://docs.microsoft.com/en-us/windows/wsl/install-win10).
26+
1. Install [WSL2](https://docs.microsoft.com/en-us/windows/wsl/install-win10). Goblint is not compatible with WSL1.
2727
2. Continue using Linux instructions in WSL.
2828

2929
### Other

conf/svcomp.json

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
"enums": false,
1010
"interval": true
1111
},
12+
"float": {
13+
"interval": true
14+
},
1215
"activated": [
1316
"base",
1417
"threadid",
@@ -21,12 +24,13 @@
2124
"race",
2225
"escape",
2326
"expRelation",
24-
"assert",
2527
"mhp",
28+
"assert",
2629
"var_eq",
2730
"symb_locks",
2831
"region",
29-
"thread"
32+
"thread",
33+
"threadJoins"
3034
],
3135
"context": {
3236
"widen": false
@@ -55,6 +59,19 @@
5559
"arrays": {
5660
"domain": "partitioned"
5761
}
62+
},
63+
"autotune": {
64+
"enabled": true,
65+
"activated": [
66+
"singleThreaded",
67+
"mallocWrappers",
68+
"noRecursiveIntervals",
69+
"enums",
70+
"congruence",
71+
"octagon",
72+
"wideningThresholds",
73+
"loopUnrollHeuristic"
74+
]
5875
}
5976
},
6077
"exp": {

conf/svcomp23.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
"var_eq",
3030
"symb_locks",
3131
"region",
32-
"thread"
32+
"thread",
33+
"threadJoins"
3334
],
3435
"context": {
3536
"widen": false
@@ -66,9 +67,10 @@
6667
"mallocWrappers",
6768
"noRecursiveIntervals",
6869
"enums",
69-
"arrayDomain",
70+
"congruence",
7071
"octagon",
71-
"wideningThresholds"
72+
"wideningThresholds",
73+
"loopUnrollHeuristic"
7274
]
7375
}
7476
},

docs/developer-guide/developing.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Developing
22

3-
Running `make dev` does the following:
3+
For development, Goblint must be installed from source: <https://github.com/goblint/analyzer#installing>.
4+
5+
Then running `make dev` does the following:
46

57
1. Installs some additional opam packages useful for developing.
68
2. Installs a Git pre-commit hook for ocp-indent (see below).

docs/developer-guide/releasing.md

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# Releasing
22

3+
## opam
4+
35
1. Update list of authors and contributors in `.zenodo.json`, `CITATION.cff` and `dune-project`.
46
2. Update `CHANGELOG.md`:
57

@@ -36,7 +38,7 @@
3638
3. Run Docker container in extracted directory: `docker run -it --rm -v $(pwd):/goblint ocaml/opam:ubuntu-22.04-ocaml-4.14` (or newer).
3739
4. Navigate to distribution archive inside Docker container: `cd /goblint`.
3840
5. Pin package from distribution archive: `opam pin add --no-action .`.
39-
6. Install depexts: `opam depext goblint`.
41+
6. Install depexts: `opam depext --with-test goblint`.
4042
7. Install and test package: `opam install --with-test goblint`.
4143
8. Activate opam environment: `eval $(opam env)`.
4244
9. Check version: `goblint --version`.
@@ -50,3 +52,67 @@
5052

5153
13. Create an opam package: `dune-release opam pkg`.
5254
14. Submit the opam package to opam-repository: `dune-release opam submit`.
55+
56+
57+
## SV-COMP
58+
59+
### Before all preruns
60+
61+
1. Make sure you are running the same Ubuntu version as will be used for SV-COMP.
62+
2. Create conf file for SV-COMP year.
63+
3. Make sure this repository is checked out into a directory called `goblint`, not the default `analyzer`.
64+
65+
This is required such that the created archive would have everything in a single directory called `goblint`.
66+
67+
4. Update SV-COMP year in `sv-comp/archive.sh`.
68+
69+
This includes: git tag name, git tag message and zipped conf file.
70+
71+
### For each prerun
72+
73+
1. Update opam pins:
74+
75+
1. Make sure you have the same `goblint-cil` version pinned as `goblint.opam` specifies.
76+
2. Unpin `zarith.1.12-gob0`, because Gobview compatibility is not required.
77+
78+
2. Make sure you have nothing valuable that would be deleted by `make clean`.
79+
3. Delete git tag from previous prerun: `git tag -d svcompXY`.
80+
4. Create archive: `./sv-comp/archive.sh`.
81+
82+
The resulting archive is `sv-comp/goblint.zip`.
83+
84+
5. Check unextracted archive in latest SV-COMP container image: <https://gitlab.com/sosy-lab/benchmarking/competition-scripts/#container-image>.
85+
86+
Inside Docker:
87+
88+
1. Check version: `./goblint --version`.
89+
2. Mount some sv-benchmarks and properties, e.g. as `/tool-test`, and run Goblint on them manually.
90+
91+
This ensures that the environment and the archive have all the correct system libraries.
92+
93+
6. Commit and push the archive to an SV-COMP archives repository branch (but don't open a MR yet): <https://gitlab.com/sosy-lab/sv-comp/archives-2023#sparse-checkout> (SV-COMP 2023).
94+
7. Check pushed archive via CoveriTeam-Remote: <https://gitlab.com/sosy-lab/software/coveriteam/-/blob/main/doc/competition-help.md>.
95+
96+
1. Clone coveriteam repository.
97+
2. Locally modify `actors/goblint.yml` archive location to the raw URL of the pushed archive.
98+
3. Run Goblint on some sv-benchmarks and properties via CoveriTeam.
99+
100+
This ensures that Goblint runs on SoSy-Lab servers.
101+
102+
8. Open MR to the SV-COMP archives repository.
103+
104+
### After all preruns
105+
106+
1. Push git tag from last prerun: `git push origin svcompXY`.
107+
2. Temporarily disable Zenodo webhook.
108+
109+
This is because we don't want a new out-of-place version of Goblint in our Zenodo artifact.
110+
A separate Zenodo artifact for the SV-COMP version can be created later if tool paper is submitted.
111+
112+
3. Create GitHub release from the git tag and attach latest submitted archive as a download.
113+
4. Manually run `docker` workflow on `svcompXY` git tag and targeting `svcompXY` Docker tag.
114+
115+
This is because the usual `docker` workflow only handles semver releases.
116+
117+
5. Re-enable Zenodo webhook.
118+
6. Release new semver version on opam. See above.

docs/developer-guide/testing.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ incrementally (activating the option `incremental.load`) with some changes to th
3333
configuration. The respective `asserts` and expected results are checked in both runs.
3434

3535
### Running
36-
The incremental tests can be run with `./scripts/update_suite.rb -i`.
36+
The incremental tests can be run with `./scripts/update_suite.rb -i`. With `./scripts/update_suite.rb -c` the
37+
incremental tests are run using the more fine-grained cfg-based change detection.
3738

3839
### Writing
3940
An incremental test case consists of three files with the same file name: the `.c` file with the initial program, a

0 commit comments

Comments
 (0)