Skip to content
Merged
Show file tree
Hide file tree
Changes from 181 commits
Commits
Show all changes
500 commits
Select commit Hold shift + click to select a range
a72735d
Merge branch 'master' into interactive
sim642 Jan 26, 2022
792457e
Merge branch 'master' into interactive
sim642 Jan 27, 2022
4b7df8b
Add option for restarting unknowns belonging to global variables sele…
jerhard Jan 27, 2022
b7d195e
Add test for manual restarting
jerhard Jan 27, 2022
37aefd6
Add test for manual restarting of globals when reads and writes occur…
jerhard Jan 27, 2022
1e20f20
Change global_from_name to globals_from_names working on a list, remo…
jerhard Jan 27, 2022
c501575
Issue warning if both automatic and manual restarting are active inst…
jerhard Jan 27, 2022
f9d0124
Remove unnecessary debug printout
jerhard Jan 27, 2022
253a44c
Add logic for destabilize_front, handling superstable to destabilize_…
jerhard Jan 27, 2022
7fcc4b2
Reformat code for user-triggered global restarting
jerhard Jan 27, 2022
83dab64
Collect varinfos instead of Cil.globals for manually restarted globals
jerhard Jan 27, 2022
2e6f194
Reuse Printable.String instead of creating a new module for it
jerhard Jan 27, 2022
dd8cf51
Annotate that earlyglobs is reason for imprecision
jerhard Jan 27, 2022
e7d591e
Comment that check is a hack to determine whether unknown relates to …
jerhard Jan 27, 2022
f5ee094
Allow manual restarting of functions
jerhard Jan 28, 2022
3589663
Add test case for manual restarting of function with partial contexts
jerhard Jan 28, 2022
1133721
Remove VarQuery example from TD3
sim642 Jan 28, 2022
50ae696
Merge branch 'interactive' into issue-544-2-td3
sim642 Jan 28, 2022
c8431cd
Merge pull request #549 from goblint/issue-544-2-td3
sim642 Jan 28, 2022
87dc088
Merge branch 'interactive' into messages-node
sim642 Jan 28, 2022
6350753
Merge pull request #533 from goblint/messages-node
sim642 Jan 28, 2022
2e688a2
Fix json in diff so to restart function foo
jerhard Jan 28, 2022
ebb9b60
Change call to destabilize to destabilize_normal.
jerhard Jan 28, 2022
2f98aa0
Manual restarting: check whether unkown is a leaf, and warn if it is …
jerhard Jan 31, 2022
293ba9e
Add pretty printing of unknown in printout.
jerhard Jan 31, 2022
6afc783
Manual global restarting: Warn about globals that should be restarted…
jerhard Jan 31, 2022
2a1665b
Move contents from cilUtil to varQuery
jerhard Jan 31, 2022
8268dc0
Move documentation comment to .mli file
jerhard Feb 1, 2022
58394c0
Merge branch 'master' into interactive
sim642 Feb 2, 2022
ac4cb98
Rename option incremental.restart_globs.globs to incremental.restart.…
jerhard Feb 11, 2022
37d1542
Merge branch 'master' into interactive
sim642 Feb 11, 2022
42df507
Fix forgotten Constraints assign
sim642 Feb 11, 2022
6851659
Merge pull request #573 from goblint/issue_543
jerhard Feb 15, 2022
4bf34df
Move VarQuery.Node documentation to .mli
sim642 Feb 15, 2022
7528ed4
Derive hash for Messages.Location
sim642 Feb 15, 2022
b6b9b44
Merge branch 'master' into interactive
sim642 Feb 16, 2022
a240454
Add test case for precision refinement with reluctant destabilization
jerhard Feb 16, 2022
7601be8
Set incremental.verify to false for test case, so that fix-point not …
jerhard Feb 16, 2022
3cff7e1
Destabilize the entry points of force-reanalyzed functions, even when…
jerhard Feb 16, 2022
d2ff7fe
Reluctant analysis: For functions in force-analyze, destabilize entry…
jerhard Feb 17, 2022
870ddff
Fix indentation
jerhard Feb 17, 2022
176be87
Add test for reluctant analysis with changing in-code precision annot…
jerhard Feb 17, 2022
625818a
Add unkowns from partially changed functions to obsolete_prim when re…
jerhard Feb 18, 2022
433b646
Query option incremental.reluctant.on only once in td3 and store it i…
jerhard Feb 18, 2022
2b465c3
Add tests case for adding in-code precision annotation for a dynamica…
jerhard Feb 18, 2022
dc01a29
Add comment on why we can ommit check whether partially changed funct…
jerhard Feb 18, 2022
2e05e88
Add force-reanalyze as field to change_info
jerhard Feb 18, 2022
a24dd86
Add additional field for functions to be force-reanalyzed in change i…
jerhard Feb 21, 2022
610d548
Fix typo in test case annotation
jerhard Feb 21, 2022
b47e01d
Collect varinfos of force-reanalyze functions in set, instead of fund…
jerhard Feb 21, 2022
fbe16e9
Fix comments in compareCIL.
jerhard Feb 21, 2022
6b2e0da
Merge pull request #600 from goblint/issue_508
jerhard Feb 22, 2022
7389730
Merge branch 'master' into interactive
sim642 Feb 28, 2022
97ca8d0
Improve calculated state for undefined function warnings with IDs
sim642 Mar 7, 2022
7ceca64
Remove unnecessary initial parsing in server mode with reparse (close…
sim642 Mar 7, 2022
6b1eb94
Fix server mode with reparse not updating version_map
sim642 Mar 7, 2022
6eb05a6
Add resetting of UpdateCil.location_map in server mode
sim642 Mar 7, 2022
4348dbe
Add Cilfacade.pseudo_return_to_fun resetting to server mode
sim642 Mar 7, 2022
696a22d
Improve calculated state for undefined function message
sim642 Mar 7, 2022
63fe367
Merge branch 'master' into interactive
sim642 Mar 8, 2022
eeab39b
Merge branch 'master' into interactive
sim642 Mar 8, 2022
8ffbdc6
Add incremental race fix test which needs global restart
sim642 Mar 8, 2022
fa99c7b
Disable dbg.compare_runs.glob in test-incremental.sh
sim642 Mar 8, 2022
05ef196
Add TD3 incremental sided restart fuel for limiting transitivity
sim642 Mar 8, 2022
c88f534
Add incremental tests with fuel for going through wrapper function
sim642 Mar 9, 2022
efc092b
Add option incremental.restart.sided.fuel-only-global
sim642 Mar 9, 2022
4ac2da7
Remove unused Basetype.Variables functions
sim642 Mar 9, 2022
f9eeab8
Merge pull request #625 from goblint/issue-623
sim642 Mar 10, 2022
e122956
Add write-only sides rho to optimize access restarting
sim642 Mar 10, 2022
490c4d6
Add is_write_only function to solver unknowns
sim642 Mar 10, 2022
7ffb6c8
Remove postsolving write-only validation hacks
sim642 Mar 10, 2022
4e4bd9e
Rename Printable.W -> Analyses.SpecSysVar
sim642 Mar 10, 2022
75caf54
Extract default is_write_only to StdV
sim642 Mar 10, 2022
92fd35f
Deduplicate DomVariantSysVar
sim642 Mar 10, 2022
61b9654
Extract IncrWrite postsolver in TD3
sim642 Mar 10, 2022
56baff8
Add incremental pruning of rho_write in TD3
sim642 Mar 10, 2022
8f394f3
Optimize IncrWrite.one_side
sim642 Mar 10, 2022
e87a91b
Remove now-unused rho_write argument from postsolver
sim642 Mar 10, 2022
df2e205
Update Verify postsolver comment about hack
sim642 Mar 10, 2022
3ea3f9e
Prevent unnecessary write-only side restarting
sim642 Mar 10, 2022
b98ee7f
Fix SolverTest compilation
sim642 Mar 10, 2022
44d206a
Add incremental test with access through wrapper function
sim642 Mar 10, 2022
e86b9da
Move write-only sided restart incremental tests to 13-restart-write
sim642 Mar 10, 2022
1d011cc
Add incremental test 13-restart-write/03-mutex-simple-nochange
sim642 Mar 10, 2022
1aafc77
Update commented-out debug prints for write-only incremental restarting
sim642 Mar 10, 2022
d224f50
Enable allglobs in test-incremental.sh
sim642 Mar 10, 2022
faaf8d7
Fix retriggered superstable write sides not being reachable
sim642 Mar 10, 2022
37a330f
Add incremental test 11-restart/07-local-wpoint-nochange
sim642 Mar 10, 2022
4b23cc7
Fix rho_write relift in TD3
sim642 Mar 10, 2022
574185f
Add write-only sides to stable
sim642 Mar 10, 2022
f987963
Document TD3 IncrWrite postsolver
sim642 Mar 11, 2022
42dc20c
Merge branch 'master' into interactive
sim642 Mar 11, 2022
2c058b1
Fix partitioned array option in additional test
sim642 Mar 11, 2022
a27d978
Merge pull request #634 from goblint/incremental-write-only
sim642 Mar 14, 2022
0a9673f
Merge branch 'master' into interactive
sim642 Mar 15, 2022
c56b285
Merge branch 'master' into interactive
sim642 Mar 16, 2022
aacdaab
exclude functions with changed header from reluctant destabilization
stilscher Mar 7, 2022
3d23659
named parameter for unchangedHeader
stilscher Mar 30, 2022
140769b
remove duplicate code
stilscher Mar 30, 2022
c04a1ca
Merge branch 'master' into interactive
sim642 Mar 31, 2022
5835a5d
Merge pull request #663 from goblint/incremental/restrict-rel-destab
stilscher Apr 1, 2022
d3ef557
Merge branch 'master' into interactive
sim642 Apr 1, 2022
e42d041
Merge branch 'master' into interactive
sim642 Apr 4, 2022
d1e5423
Fix missed solverdiffs renames during merge
sim642 Apr 4, 2022
c839866
Disable interactive sided and wpoint restart by default
sim642 Apr 4, 2022
e0c574f
Merge branch 'master' into interactive
sim642 Apr 4, 2022
cb984e9
Merge branch 'master' into interactive
sim642 Apr 5, 2022
b516cd4
Fix TD3 incremental warning not removing hook
sim642 Apr 5, 2022
2841d76
Update incremental restarting test confs
sim642 Apr 5, 2022
dd9e4ad
Merge branch 'master' into interactive
sim642 Apr 5, 2022
0d899d0
Merge branch 'master' into interactive
sim642 Apr 6, 2022
e17d86e
Merge branch 'master' into interactive
sim642 Apr 7, 2022
6d89b0e
Merge branch 'master' into interactive
sim642 Apr 11, 2022
076660b
Return location of if stmts to only be the head!
vesalvojdani Apr 14, 2022
b30ef61
Revert "Return location of if stmts to only be the head!"
vesalvojdani Apr 14, 2022
3ab91d0
Merge branch 'master' into interactive
sim642 Apr 20, 2022
ab48997
Add conf for precise zstd race detection
sim642 Apr 20, 2022
d1b0b32
Renumber 45-apron2 -> 46-apron2
sim642 Apr 22, 2022
0c6cef6
Enable deadcode and success in zstd-race conf for debugging
sim642 Apr 22, 2022
337e61b
Merge branch 'master' into interactive
sim642 Apr 25, 2022
a1a9c5a
Disable unknown function globals invalidate in zstd-race conf
sim642 Apr 25, 2022
28c3089
Disable ana.thread.include-node in zstd-race conf
sim642 Apr 26, 2022
964f974
Merge branch 'master' into interactive
sim642 Apr 27, 2022
616c0ed
Add test for incremental warnings not removed with reluctant destabil…
sim642 Apr 27, 2022
60b756b
Fix incremental unknown deletion to apply to incremental postsolving …
sim642 Apr 27, 2022
428cda0
Add test where warning should remain.
vesalvojdani Apr 27, 2022
b4fd3cb
Add test for incremental warnings not added with reluctant destabiliz…
sim642 Apr 28, 2022
aca39c3
Fix reluctantly not destabilized functions not being postsolved (PR #…
sim642 Apr 28, 2022
a33457a
Add example where incremental postsolver does not remove warnings
michael-schwarz Apr 28, 2022
bda1100
Steps towards cheap full reachability
michael-schwarz Apr 30, 2022
080d474
Add fundamental problem where multi-threaded code becomes dead
michael-schwarz Apr 30, 2022
5d8d36d
Newline for dep log
michael-schwarz May 1, 2022
b9252dc
dep: Relift VS too
michael-schwarz May 1, 2022
ee55218
Simplify
michael-schwarz May 2, 2022
c1933db
Undo unneeded modifications
michael-schwarz May 2, 2022
5850d93
minimize diff
michael-schwarz May 2, 2022
83ec1a1
Move incr_verify specific changes back
michael-schwarz May 2, 2022
ddda093
Cleanup
michael-schwarz May 2, 2022
f45f194
Cleanup
michael-schwarz May 2, 2022
9940dea
Add incremental test where race in removed call remains
sim642 Mar 18, 2022
da4564d
Record less in `dep`, do not clear `side_infl` and `side_dep`
michael-schwarz May 2, 2022
8b7d4d3
Print same solver stats consistently
michael-schwarz May 2, 2022
50fed60
Typo
michael-schwarz May 2, 2022
db84ba3
Merge pull request #709 from goblint/interactive-reluctant-warn
sim642 May 2, 2022
56d230f
Merge branch 'interactive' into interactive_postsolver_pruning
michael-schwarz May 3, 2022
d622611
Comment about resetting side_infl
michael-schwarz May 3, 2022
3f96c77
Rename incremental.verify -> incremental.postsolver.enabled
michael-schwarz May 3, 2022
44f1efa
Add option `incremental.postsolver.superstable-reached`
michael-schwarz May 3, 2022
9326978
Merge pull request #713 from goblint/interactive_postsolver_pruning
michael-schwarz May 3, 2022
e117878
Add rho_write size to TD3 stats
sim642 Mar 18, 2022
00dd10b
Add incremental test where race to old malloc node remains
sim642 Mar 18, 2022
ed2ad3a
Annotate incremental 13-restart-write/04-malloc-node for races
sim642 May 3, 2022
121fcc1
Add test for if condition race location
sim642 Apr 20, 2022
9c60ef1
Change Cilfacade.get_stmtLoc to expression locations (where possible)…
sim642 May 3, 2022
6bfc853
Add EvalAssert TODO-s about not using Cilfacade for locations
sim642 May 3, 2022
47494e8
Merge branch 'master' into interactive
sim642 May 3, 2022
71c7e1c
Disable free races and args invalidation in zstd-race conf
sim642 May 3, 2022
75798a5
Option to only destabilize access globals
michael-schwarz May 4, 2022
79ac8c0
Merge pull request #717 from goblint/issue-689
sim642 May 4, 2022
05cb11b
mv tests
michael-schwarz May 4, 2022
19a5229
fix patch
michael-schwarz May 4, 2022
5cec6c2
Add comment on origin to test
michael-schwarz May 4, 2022
3ab211e
Merge branch 'master' into interactive
sim642 May 4, 2022
5a780a6
Merge pull request #721 from goblint/access_restart
sim642 May 4, 2022
0709d82
Add symb_locks test with irrelevant index access
sim642 May 5, 2022
30c1d7a
Add var_eq EqualSet tracing
sim642 May 5, 2022
11cc869
Quick fix var_eq eq_set_clos for IndexPI
sim642 May 5, 2022
dd43200
Add chrony Name2IPAddress extracted test for symb_locks
sim642 May 5, 2022
1ba9590
Add symb_locks tracing
sim642 May 5, 2022
f5c4e89
Quick fix symb_locks toEl for IndexPI
sim642 May 5, 2022
752d16c
Fix symb_locks toEl for StartOf
sim642 May 5, 2022
180ed23
Fix VarEq.may_change with constant
sim642 May 5, 2022
653d0bb
Enable all code paths in chrony-name2ipaddress
sim642 May 5, 2022
a4be262
Add var_eq add_eq tracing
sim642 May 5, 2022
f753df5
Quick fix var_eq interesting for IndexPI
sim642 May 5, 2022
e10102e
Add __goblint_assume_join test
sim642 May 5, 2022
428a609
typo
michael-schwarz May 5, 2022
4a8aa85
Implement __goblint_assume_join in threadJoins analysis
sim642 May 5, 2022
ed6b2e4
Fix MHP.must_be_joined for top joined set
sim642 May 5, 2022
c5cf526
Quick fix realloc read accesses to be shallow
sim642 May 5, 2022
2b60af7
Add option sem.unknown_function.read.args
sim642 May 5, 2022
d69de4e
Limit restarting
michael-schwarz May 5, 2022
ea05ea8
Fix 02-base/78-realloc-free write-free race
sim642 May 5, 2022
69933ef
Merge branch 'master' into interactive
sim642 May 5, 2022
59f7343
Merge branch 'interactive' into chrony
sim642 May 5, 2022
d099985
Allow for actual imprecision
michael-schwarz May 5, 2022
d56e9c8
Merge branch 'access_restart' into interactive
michael-schwarz May 5, 2022
7e5ab0a
Correct strcat; add strncat.
vesalvojdani May 5, 2022
d660f1a
Add a few more libraryfuns.
vesalvojdani May 6, 2022
2f66be2
Add minimal-ish example of what causes deadcode in smtprc.
vesalvojdani May 6, 2022
69fd28b
Self-documenting code for arinc deobfuscation.
vesalvojdani May 6, 2022
99ed43e
Set memcpy and strcpy to top; these can overwrite partially.
vesalvojdani May 6, 2022
089cc2a
Extract addr_type_of_exp.
vesalvojdani May 6, 2022
a7faf9d
Merge branch 'interactive' into restart-sided-fuel
sim642 May 7, 2022
b58b89c
Merge branch 'master' into interactive
sim642 May 10, 2022
577f6f3
Add test that's unsound because of __goblint_assume_join(...)
michael-schwarz May 11, 2022
76f9b29
Add threadJoins test where recreated threads should be removed from m…
sim642 May 12, 2022
84a98bf
Make threadspawn remove must-joined threads
sim642 May 12, 2022
b09b1fd
Add SKIP to 36-apron2/03-other-assume like other Apron tests
sim642 May 12, 2022
f2b8673
Fix __goblint_assume_join with Apron mutex-meet-tid privatization
sim642 May 12, 2022
d5a0c27
Add __goblint_assume_join to annotating docs
sim642 May 12, 2022
a4db1a0
Add assume join test with unknown thread ID
sim642 May 13, 2022
e6e33b2
Change assume join behavior with unknown thread ID
sim642 May 13, 2022
9d71c07
Revert "Merge pull request #364 from goblint/td3-solve-tf-abort"
sim642 May 13, 2022
9306991
Use deriving show for TD3 phase
sim642 May 13, 2022
6016835
Add example where `__goblint_assume_join` causes unneccessary precisi…
michael-schwarz May 13, 2022
22d6da8
Add problematic index access
michael-schwarz May 13, 2022
a482bd1
Fix Apron mutex-meet-tid imprecision by force joining must-joined thr…
sim642 May 16, 2022
67211c2
Fix annotations in 06-symbeq/39-funloop_index_bad
sim642 May 16, 2022
92c7ea4
Replace symb_locks and var_eq IndexPI handling with very ad-hoc one
sim642 May 16, 2022
94fd11f
Handle IndexPI in Exp.interesting to fix string_fortified.h race in 0…
sim642 May 16, 2022
3ec784c
Extract CurrentVarEqConstrSys from TD3
sim642 May 17, 2022
8c9777c
Document incremental TD3 data structures
sim642 May 17, 2022
b073cce
Add descriptions for new incremental TD3 options
sim642 May 17, 2022
21e75ec
Rename option incremental.reluctant.on -> incremental.reluctant.enabl…
sim642 May 17, 2022
93ece0f
Merge branch 'interactive' into restart-sided-fuel
sim642 May 18, 2022
dee744e
Renumber incremental fuel tests
sim642 May 18, 2022
99f8b20
Fix incremental fuel tests by adding option incremental.restart.write…
sim642 May 18, 2022
49cd2ce
Revert fuel change to incremental 13-restart-write/01-mutex-simple
sim642 May 18, 2022
77b3fca
Add descriptions to fuel options
sim642 May 18, 2022
c491dbb
Re-allow All threads must joined for chrony story, but warn about it
sim642 May 19, 2022
ab3ddff
Merge pull request #724 from goblint/chrony
sim642 May 19, 2022
e35d86e
Merge pull request #729 from goblint/smtprc
sim642 May 19, 2022
41d3cd4
Fix var_eq eq_set_clos indentation (PR #724)
sim642 May 19, 2022
da790e0
Fix more var_eq eq_set_clos indentation (PR #724)
sim642 May 19, 2022
3d9bf4b
Add server command pre_files (closes #739)
sim642 May 19, 2022
f60b16c
Optimize server pre_files by not merging files
sim642 May 19, 2022
49d319e
Merge pull request #629 from goblint/restart-sided-fuel
sim642 May 23, 2022
bf4dd81
Merge branch 'master' into interactive
sim642 May 30, 2022
8f5a8e0
Merge branch 'master' into interactive
sim642 May 31, 2022
10e0c21
Merge branch 'master' into interactive
sim642 Jun 20, 2022
edd5c1d
Fix 34-localwn_restart/04-hh PARAMs
sim642 Jun 20, 2022
d409f68
Merge branch 'master' into interactive
sim642 Jul 8, 2022
7b8e346
Add info about assume-joining ambiguous thread ID
sim642 Aug 3, 2022
f4c3228
Merge branch 'master' into interactive
sim642 Aug 4, 2022
9d1e8ad
Fix indentation after merge
sim642 Aug 4, 2022
9dd1ded
Remove solvers.td3.narrow-reuse-verify
sim642 Aug 4, 2022
9f329fc
Fix YamlWitness mismerge in d409f68c9fc2f939a2283c6eebb734119cd9cca3
sim642 Aug 4, 2022
9dfec7b
Merge branch 'master' into interactive
sim642 Aug 4, 2022
7aa89e9
Remove broken incremental.restart.sided.destab-with-sides option
sim642 Aug 4, 2022
4ec572b
Add option incremental.restart.sided.vars
sim642 Aug 4, 2022
8fc9b36
Merge branch 'interactive' into issue-739
sim642 Aug 9, 2022
712e5dd
Merge pull request #740 from goblint/issue-739
sim642 Aug 9, 2022
664c26f
Merge branch 'master' into interactive
sim642 Aug 9, 2022
aa563a6
Add test annotations to 06-symbeq/38-chrony-name2ipaddress
sim642 Aug 10, 2022
af06a08
Add test annotations to 51-threadjoins
sim642 Aug 10, 2022
c732728
Merge branch 'master' into interactive
sim642 Aug 10, 2022
769e28d
Renumber incremental branch tests to avoid renumbering master branch …
sim642 Aug 11, 2022
26aa6b7
Restore most recent g2html
sim642 Aug 11, 2022
4b5e3d9
Merge branch 'master' into interactive
sim642 Aug 11, 2022
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
3 changes: 2 additions & 1 deletion docs/user-guide/configuring.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ In `.vscode/settings.json` add the following:
"json.schemas": [
{
"fileMatch": [
"/conf/*.json"
"/conf/*.json",
"/tests/incremental/*/*.json"
],
"url": "/src/util/options.schema.json"
}
Expand Down
19 changes: 19 additions & 0 deletions scripts/creduce-abort-verify.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env bash

set -e

gcc -c -Werror=implicit-function-declaration ./abort-verify.c

GOBLINTDIR="/mnt/goblint-svcomp/sv-comp/goblint"
OPTS="--conf $GOBLINTDIR/conf/svcomp.json --enable solvers.td3.abort --enable solvers.td3.abort-verify --sets ana.specification /mnt/goblint-svcomp/benchexec/sv-benchmarks/c/properties/unreach-call.prp --sets exp.architecture 64bit ./abort-verify.c"
INTERESTING="TD3 abort verify: should not abort"
OUTDIR="creduce-abort-verify"


mkdir -p $OUTDIR

LOG="$OUTDIR/out.log"
$GOBLINTDIR/goblint $OPTS -v --enable dbg.debug &> $LOG || true
grep -F "Function definition missing" $LOG && exit 1

grep -F "$INTERESTING" $LOG
9 changes: 9 additions & 0 deletions scripts/fix_patch_headers.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#!/bin/bash
#Run from root, e.g.,: ./scripts/fix_patch_headers.sh tests/incremental/11-restart/*.patch
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is this script needed for?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is something from @vesalvojdani.

for file in "$@"
do
echo $file
cfile="${file%.patch}.c"
efile="${cfile//\//\\/}"
perl -0777 -i -pe "s/.*?@/--- $efile\n+++ $efile\n@/is" $file
done
5 changes: 5 additions & 0 deletions scripts/update_suite.rb
Original file line number Diff line number Diff line change
Expand Up @@ -406,8 +406,13 @@ def create_test_set(lines)
super(lines)
@testset.p = self
`patch -p0 -b <#{patch_path}`
status = $?.exitstatus
lines_incr = IO.readlines(path)
`patch -p0 -b -R <#{patch_path}`
if status != 0
puts "Failed to apply patch: #{patch_path}"
exit 1
end
@testset_incr = parse_tests(lines_incr)
@testset_incr.p = self
@testset_incr.warnfile = File.join($testresults, group, name + ".incr.warn.txt")
Expand Down
1 change: 1 addition & 0 deletions src/framework/analyses.ml
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ struct

let pretty_trace () ((n,c) as x) =
if get_bool "dbg.trace.context" then dprintf "(%a, %a) on %a \n" Node.pretty_trace n LD.pretty c CilType.Location.pretty (getLocation x)
(* if get_bool "dbg.trace.context" then dprintf "(%a, %d) on %a" Node.pretty_trace n (LD.tag c) CilType.Location.pretty (getLocation x) *)
else dprintf "%a on %a" Node.pretty_trace n CilType.Location.pretty (getLocation x)

let printXml f (n,c) =
Expand Down
95 changes: 63 additions & 32 deletions src/framework/constraints.ml
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ module FromSpec (S:Spec) (Cfg:CfgBackward) (I: Increment)
and module GVar = GVarF (S.V)
and module D = S.D
and module G = S.G
val tf : MyCFG.node * S.C.t -> (Cil.location * MyCFG.edge) list * MyCFG.node -> ((MyCFG.node * S.C.t) -> S.D.t) -> (MyCFG.node * S.C.t -> S.D.t -> unit) -> (GVar.t -> G.t) -> (GVar.t -> G.t -> unit) -> D.t
val tf : MyCFG.node * S.C.t -> (Cil.location * MyCFG.edge) list * MyCFG.node -> D.t -> ((MyCFG.node * S.C.t) -> S.D.t) -> (MyCFG.node * S.C.t -> S.D.t -> unit) -> (GVar.t -> G.t) -> (GVar.t -> G.t -> unit) -> D.t
end
=
struct
Expand Down Expand Up @@ -684,53 +684,64 @@ struct
let tf var getl sidel getg sideg prev_node (_,edge) d (f,t) =
let old_loc = !Tracing.current_loc in
let old_loc2 = !Tracing.next_loc in
let _ = Tracing.current_loc := f in
let _ = Tracing.next_loc := t in
let d = tf var getl sidel getg sideg prev_node edge d in
let _ = Tracing.current_loc := old_loc in
let _ = Tracing.next_loc := old_loc2 in
d

let tf (v,c) (edges, u) getl sidel getg sideg =
let pval = getl (u,c) in
Tracing.current_loc := f;
Tracing.next_loc := t;
Fun.protect ~finally:(fun () ->
Tracing.current_loc := old_loc;
Tracing.next_loc := old_loc2
) (fun () ->
let d = tf var getl sidel getg sideg prev_node edge d in
d
)

let tf (v,c) (edges, u) pval getl sidel getg sideg =
(* let pval = getl (u,c) in *)
let _, locs = List.fold_right (fun (f,e) (t,xs) -> f, (f,t)::xs) edges (Node.location v,[]) in
List.fold_left2 (|>) pval (List.map (tf (v,Obj.repr (fun () -> c)) getl sidel getg sideg u) edges) locs

let tf (v,c) (e,u) getl sidel getg sideg =
let tf (v,c) (e,u) pval getl sidel getg sideg =
let old_node = !current_node in
let old_context = !M.current_context in
let _ = current_node := Some u in
current_node := Some u;
M.current_context := Some (Obj.repr c);
let d = tf (v,c) (e,u) getl sidel getg sideg in
let _ = current_node := old_node in
M.current_context := old_context;
d
Fun.protect ~finally:(fun () ->
current_node := old_node;
M.current_context := old_context
) (fun () ->
let d = tf (v,c) (e,u) pval getl sidel getg sideg in
d
)

let system (v,c) =
match v with
| FunctionEntry _ ->
None
| _ ->
let tf getl sidel getg sideg =
let tf' eu = tf (v,c) eu getl sidel getg sideg in
let get_pval (_, u) = getl (u, c) in
let tf' eu pval = tf (v,c) eu pval getl sidel getg sideg in

match NodeH.find_option CfgTools.node_scc_global v with
| Some scc when NodeH.mem scc.prev v && NodeH.length scc.prev = 1 ->
(* Limited to loops with only one entry node. Otherwise unsound as is. *)
(* TODO: Is it possible to do soundly for multi-entry loops? *)
let stricts = NodeH.find_all scc.prev v in
let xs_stricts = List.map tf' stricts in
let pvals_stricts = List.map get_pval stricts in (* get pvals before executing any tf to maximize abort *)
let xs_stricts = List.map2 tf' stricts pvals_stricts in
if List.for_all S.D.is_bot xs_stricts then
S.D.bot ()
else
let xs_strict = List.fold_left S.D.join (S.D.bot ()) xs_stricts in
let equal = [%eq: (CilType.Location.t * Edge.t) list * Node.t] in
let is_strict eu = List.exists (equal eu) stricts in
let non_stricts = List.filter (neg is_strict) (Cfg.prev v) in
let xs_non_stricts = List.map tf' non_stricts in
let pvals_non_stricts = List.map get_pval non_stricts in (* get pvals before executing any tf to maximize abort *)
let xs_non_stricts = List.map2 tf' non_stricts pvals_non_stricts in
List.fold_left S.D.join xs_strict xs_non_stricts
| _ ->
let xs = List.map tf' (Cfg.prev v) in
let prevs = Cfg.prev v in
let pvals = List.map get_pval prevs in (* get pvals before executing any tf to maximize abort *)
let xs = List.map2 tf' prevs pvals in
List.fold_left S.D.join (S.D.bot ()) xs
in
Some tf
Expand Down Expand Up @@ -1096,14 +1107,19 @@ struct
f_eq ()
else if b1 then begin
if get_bool "solverdiffs" then
ignore (Pretty.printf "Global %a is more precise using left:\n%a\n" Sys.GVar.pretty_trace k G.pretty_diff (v1,v2));
ignore (Pretty.printf "Global %a is more precise using left:\n%a\n" Sys.GVar.pretty_trace k G.pretty_diff (v2,v1));
f_le ()
end else if b2 then begin
if get_bool "solverdiffs" then
ignore (Pretty.printf "Global %a is more precise using right:\n%a\n" Sys.GVar.pretty_trace k G.pretty_diff (v1,v2));
f_gr ()
end else
end else begin
if get_bool "solverdiffs" then (
ignore (Pretty.printf "Global %a is incomparable (diff):\n%a\n" Sys.GVar.pretty_trace k G.pretty_diff (v1,v2));
ignore (Pretty.printf "Global %a is incomparable (reverse diff):\n%a\n" Sys.GVar.pretty_trace k G.pretty_diff (v2,v1));
);
f_uk ()
end
in
GH.iter f g1;
Printf.printf "globals:\tequal = %d\tleft = %d\tright = %d\tincomparable = %d\n" !eq !le !gr !uk
Expand All @@ -1119,14 +1135,19 @@ struct
incr eq
else if b1 then begin
if get_bool "solverdiffs" then
ignore (Pretty.printf "%a @@ %a is more precise using left:\n%a\n" Node.pretty_plain k CilType.Location.pretty (Node.location k) D.pretty_diff (v1,v2));
ignore (Pretty.printf "%a @@ %a is more precise using left:\n%a\n" Node.pretty_plain k CilType.Location.pretty (Node.location k) D.pretty_diff (v2,v1));
incr le
end else if b2 then begin
if get_bool "solverdiffs" then
ignore (Pretty.printf "%a @@ %a is more precise using right:\n%a\n" Node.pretty_plain k CilType.Location.pretty (Node.location k) D.pretty_diff (v1,v2));
incr gr
end else
end else begin
if get_bool "solverdiffs" then (
ignore (Pretty.printf "%a @@ %a is incomparable (diff):\n%a\n" Node.pretty_plain k CilType.Location.pretty (Node.location k) D.pretty_diff (v1,v2));
ignore (Pretty.printf "%a @@ %a is incomparable (reverse diff):\n%a\n" Node.pretty_plain k CilType.Location.pretty (Node.location k) D.pretty_diff (v2,v1));
);
incr uk
end
in
PP.iter f h1;
(* let k1 = Set.of_enum @@ PP.keys h1 in
Expand All @@ -1137,7 +1158,7 @@ struct
Printf.printf "locals: \tequal = %d\tleft = %d\tright = %d\tincomparable = %d\n" !eq !le !gr !uk

let compare_locals_ctx h1 h2 =
let eq, le, gr, uk, no2 = ref 0, ref 0, ref 0, ref 0, ref 0 in
let eq, le, gr, uk, no2, no1 = ref 0, ref 0, ref 0, ref 0, ref 0, ref 0 in
let f_eq () = incr eq in
let f_le () = incr le in
let f_gr () = incr gr in
Expand All @@ -1150,22 +1171,31 @@ struct
if b1 && b2 then
f_eq ()
else if b1 then begin
(* if get_bool "solverdiffs" then *)
(* ignore (Pretty.printf "%a @@ %a is more precise using left:\n%a\n" pretty_node k CilType.Location.pretty (getLoc k) D.pretty_diff (v1,v2)); *)
if get_bool "solverdiffs" then
ignore (Pretty.printf "%a is more precise using left:\n%a\n" Sys.LVar.pretty_trace k D.pretty_diff (v2,v1));
f_le ()
end else if b2 then begin
(* if get_bool "solverdiffs" then *)
(* ignore (Pretty.printf "%a @@ %a is more precise using right:\n%a\n" pretty_node k CilType.Location.pretty (getLoc k) D.pretty_diff (v1,v2)); *)
if get_bool "solverdiffs" then
ignore (Pretty.printf "%a is more precise using right:\n%a\n" Sys.LVar.pretty_trace k D.pretty_diff (v1,v2));
f_gr ()
end else
end else begin
if get_bool "solverdiffs" then (
ignore (Pretty.printf "%a is incomparable (diff):\n%a\n" Sys.LVar.pretty_trace k D.pretty_diff (v1,v2));
ignore (Pretty.printf "%a is incomparable (reverse diff):\n%a\n" Sys.LVar.pretty_trace k D.pretty_diff (v2,v1));
);
f_uk ()
end
in
LH.iter f h1;
let f k v2 =
if not (LH.mem h1 k) then incr no1
in
LH.iter f h2;
(* let k1 = Set.of_enum @@ PP.keys h1 in *)
(* let k2 = Set.of_enum @@ PP.keys h2 in *)
(* let o1 = Set.cardinal @@ Set.diff k1 k2 in *)
(* let o2 = Set.cardinal @@ Set.diff k2 k1 in *)
Printf.printf "locals_ctx:\tequal = %d\tleft = %d\tright = %d\tincomparable = %d\tno_ctx_in_right = %d\n" !eq !le !gr !uk !no2
Printf.printf "locals_ctx:\tequal = %d\tleft = %d\tright = %d\tincomparable = %d\tno_ctx_in_right = %d\tno_ctx_in_left = %d\n" !eq !le !gr !uk !no2 !no1

let compare (name1,name2) (l1,g1) (l2,g2) =
let one_ctx (n,_) v h =
Expand Down Expand Up @@ -1200,7 +1230,8 @@ struct

let compare (name1, name2) vh1 vh2 =
Printf.printf "\nComparing precision of %s (left) with %s (right) as EqConstrSys:\n" name1 name2;
let (_, msg) = Compare.compare ~name1 vh1 ~name2 vh2 in
let verbose = get_bool "solverdiffs" in
let (_, msg) = Compare.compare ~verbose ~name1 vh1 ~name2 vh2 in
ignore (Pretty.printf "Comparison summary: %t\n" (fun () -> msg));
print_newline ();
end
23 changes: 13 additions & 10 deletions src/framework/control.ml
Original file line number Diff line number Diff line change
Expand Up @@ -298,11 +298,15 @@ struct

GU.global_initialization := true;
GU.earlyglobs := get_bool "exp.earlyglobs";
if get_string "load_run" <> "" then (
Spec.init (Some (Serialize.unmarshal (Filename.concat (get_string "load_run") "spec_marshal")))
)
else
Spec.init None;
let marshal =
if get_string "load_run" <> "" then
Some (Serialize.unmarshal (Filename.concat (get_string "load_run") "spec_marshal"))
else if Serialize.results_exist () && get_bool "incremental.load" then
Some (Serialize.load_data Serialize.AnalysisData)
else
None
in
Spec.init marshal;
Access.init file;

let test_domain (module D: Lattice.S): unit =
Expand Down Expand Up @@ -508,10 +512,6 @@ struct
(* Most warnings happen before durin postsolver, but some happen later (e.g. in finalize), so enable this for the rest (if required by option). *)
Goblintutil.should_warn := PostSolverArg.should_warn;

if GobConfig.get_bool "incremental.save" then (
Serialize.move_tmp_results_to_results () (* Move new incremental results to place where they will be reused *)
);

let insrt k _ s = match k with
| (MyCFG.Function fn,_) -> if not (get_bool "exp.forward") then Set.Int.add fn.svar.vid s else s
| (MyCFG.FunctionEntry fn,_) -> if (get_bool "exp.forward") then Set.Int.add fn.svar.vid s else s
Expand Down Expand Up @@ -643,7 +643,10 @@ struct
if get_string "save_run" <> "" then (
Serialize.marshal marshal (Filename.concat (get_string "save_run") "spec_marshal")
);

if get_bool "incremental.save" then (
Serialize.store_data marshal Serialize.AnalysisData;
Serialize.move_tmp_results_to_results ()
);
if get_bool "dbg.verbose" && get_string "result" <> "none" then print_endline ("Generating output: " ^ get_string "result");
Result.output (lazy local_xml) gh make_global_fast_xml file
end
Expand Down
4 changes: 3 additions & 1 deletion src/incremental/serialize.ml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ let goblint_dirname = "incremental_data"
let version_map_filename = "version.data"
let cil_file_name = "ast.data"
let solver_data_file_name = "solver.data"
let analysis_data_file_name = "analysis.data"
let results_dir = "results"
let results_tmp_dir = "results_tmp"
let gob_directory () = let src_dir = !base_directory in
Expand All @@ -31,12 +32,13 @@ let results_exist () =
Sys.file_exists r && Sys.is_directory r

(* Convenience enumeration of the different data types we store for incremental analysis, so file-name logic is concentrated in one place *)
type incremental_data_kind = SolverData | CilFile | VersionData
type incremental_data_kind = SolverData | CilFile | VersionData | AnalysisData

let type_to_file_name = function
| SolverData -> solver_data_file_name
| CilFile -> cil_file_name
| VersionData -> version_map_filename
| AnalysisData -> analysis_data_file_name

(** Loads data for incremental runs from the appropriate file *)
let load_data (data_type: incremental_data_kind) =
Expand Down
4 changes: 2 additions & 2 deletions src/maingoblint.ml
Original file line number Diff line number Diff line change
Expand Up @@ -319,7 +319,7 @@ let merge_preprocessed cpp_file_names =
let do_stats () =
if get_bool "printstats" then (
print_newline ();
ignore (Pretty.printf "vars = %d evals = %d \n" !Goblintutil.vars !Goblintutil.evals);
ignore (Pretty.printf "vars = %d evals = %d narrow_reuses = %d aborts = %d\n" !Goblintutil.vars !Goblintutil.evals !Goblintutil.narrow_reuses !Goblintutil.aborts);
print_newline ();
Stats.print (Messages.get_out "timing" Legacy.stderr) "Timings:\n";
flush_all ()
Expand Down Expand Up @@ -431,7 +431,7 @@ let check_arguments () =
if get_bool "ana.base.context.int" && not (get_bool "ana.base.context.non-ptr") then (set_bool "ana.base.context.int" false; warn "ana.base.context.int implicitly disabled by ana.base.context.non-ptr");
(* order matters: non-ptr=false, int=true -> int=false cascades to interval=false with warning *)
if get_bool "ana.base.context.interval" && not (get_bool "ana.base.context.int") then (set_bool "ana.base.context.interval" false; warn "ana.base.context.interval implicitly disabled by ana.base.context.int");
if get_bool "incremental.only-rename" then (set_bool "incremental.load" true; warn "incremental.only-rename implicitly activates incremental.rename-load. Previous AST is loaded for diff and rename, but analyis results are not reused.")
if get_bool "incremental.only-rename" then (set_bool "incremental.load" true; warn "incremental.only-rename implicitly activates incremental.load. Previous AST is loaded for diff and rename, but analyis results are not reused.")

let handle_extraspecials () =
let funs = get_string_list "exp.extraspecials" in
Expand Down
3 changes: 3 additions & 0 deletions src/solvers/generic.ml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ struct
Goblintutil.evals := !Goblintutil.evals + 1;
if (get_bool "dbg.solver-progress") then (incr stack_d; print_int !stack_d; flush stdout)

let abort_rhs_event x =
incr Goblintutil.aborts

let update_var_event x o n =
if tracing then increase x;
if full_trace || ((not (Dom.is_bot o)) && Option.is_some !max_var && Var.equal (Option.get !max_var) x) then begin
Expand Down
Loading