Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
209 commits
Select commit Hold shift + click to select a range
b1f548d
Add test
michael-schwarz Mar 3, 2026
ad88403
Merge branch 'master' into ghosts
michael-schwarz Apr 14, 2026
711c2c3
Inject ghost global variables from YAML witness into Cil file during …
michael-schwarz Apr 14, 2026
9748454
Instrument ghost updates from YAML witness into CIL AST (#2000)
Copilot Apr 15, 2026
7e064f2
Detect whether ghost variable is phase ghost (#2001)
michael-schwarz Apr 15, 2026
ba3ac74
Fix a reference
michael-schwarz Apr 20, 2026
667a909
Apply transfer functions to states split during pre-transfer `sync` (…
Copilot Apr 21, 2026
031e77b
Merge branch 'ghosts' into phase-digest
michael-schwarz Apr 21, 2026
c437774
Phase ghost split
michael-schwarz Apr 21, 2026
6039e7d
Emit eval query, add cram test
michael-schwarz Apr 21, 2026
f275fa3
Document PhaseGhostSplit
michael-schwarz Apr 21, 2026
ac12893
Record phase on return, use in join
michael-schwarz Apr 21, 2026
2691423
Add TODO
michael-schwarz Apr 21, 2026
120391a
Add `phaseDigest` query
michael-schwarz Apr 23, 2026
a00b85e
Add `phaseChange` event
michael-schwarz Apr 23, 2026
4c821de
Add ghost variants of privatizations
michael-schwarz Apr 23, 2026
4e81956
Add flag to indicate wether action on phaseChange is needed
michael-schwarz Apr 23, 2026
d7abdc7
BasePriv: Add phaseChange transfer function
michael-schwarz Apr 23, 2026
c9747d4
Record how the phase changed in event
michael-schwarz Apr 23, 2026
b7ce15c
Emit PhaseChange after Deadcode
michael-schwarz Apr 23, 2026
a06e4cb
Allow accessing raw digest-less globals
michael-schwarz Apr 23, 2026
cdb91bb
Progress
michael-schwarz Apr 23, 2026
bcf8331
Progress
michael-schwarz Apr 23, 2026
d7b7ff6
Progress
michael-schwarz Apr 24, 2026
cccc320
Add MHP TODO
michael-schwarz Apr 24, 2026
2b50644
Update test
michael-schwarz Apr 24, 2026
ebc47c8
Add test for rejecting witness if ghost hypothesis is not confirmed
michael-schwarz Apr 24, 2026
fad9199
Get rid of Object.magic
michael-schwarz Apr 24, 2026
9f052a7
Merge pull request #2007 from goblint/phase-digest
michael-schwarz Apr 24, 2026
1fc5dbc
Clarify propagation comment
michael-schwarz Apr 29, 2026
0d0911a
Add TODO about computing fixpoint under advance
michael-schwarz Apr 29, 2026
7680205
Add Zhendong's observation
michael-schwarz Apr 29, 2026
46dec9f
Add test that should fail
michael-schwarz Apr 30, 2026
3740e16
Fixpoint under advance (note about placement)
michael-schwarz Apr 30, 2026
b3e5c52
Comment
michael-schwarz May 6, 2026
1fa9cd2
Second sync after tf
michael-schwarz May 6, 2026
545cf48
Use MHP info
michael-schwarz May 6, 2026
af55d25
Use MHP more widely
michael-schwarz May 7, 2026
5bc4eed
Simplify to use all MHP information supplied by the framework
michael-schwarz May 7, 2026
4b5a654
Do not require _all_ ghosts to be phase ghosts
michael-schwarz May 7, 2026
8ef160f
`protection-atomic`: Properly handle unlock of atomicity mutex
michael-schwarz May 8, 2026
c19d70e
Example of heap usage
michael-schwarz May 8, 2026
ece5d48
Ignore errant result directories
michael-schwarz May 12, 2026
5e1815b
Propagate for heap-allocated vars
michael-schwarz May 12, 2026
1ffaa78
Check that non-phase ghosts are carried forward appropriately
michael-schwarz May 12, 2026
c0f487e
Comment out non-implemented variant
michael-schwarz May 12, 2026
d382be2
Change type to allow for lifters
michael-schwarz May 12, 2026
813337f
Merge branch 'master' into ghosts
michael-schwarz May 25, 2026
7ffafcd
Separate mutex to avoid deadlock
michael-schwarz May 25, 2026
6bb5bf5
Mutex Ghost and test
Ang9876 May 22, 2026
2889bc2
Merge branch 'master' into ghosts
michael-schwarz Jun 2, 2026
e835de3
WIP
michael-schwarz May 12, 2026
045d1a4
Progress
michael-schwarz May 12, 2026
2dd67a1
TODOs
michael-schwarz May 25, 2026
d97c4c6
Change confusing name
michael-schwarz May 26, 2026
c48adc9
Structure
michael-schwarz May 26, 2026
ae627d1
Simplify
michael-schwarz May 26, 2026
c70dc16
Further simplify
michael-schwarz May 26, 2026
616ef9d
Query to get set of all mutexes
michael-schwarz May 26, 2026
2dcea29
Propagate globals between phases
michael-schwarz May 26, 2026
9fc66b8
Finish handling of phaseChange for PerMutexMeetTIDPriv
michael-schwarz May 26, 2026
e1ad671
Make `mutex-meet-tid-ghost` activatable
michael-schwarz May 26, 2026
48a83ce
Remove TODO
michael-schwarz May 28, 2026
1c82e89
LMust workaround
michael-schwarz May 28, 2026
0010aba
Propagate LMust along phase changes
michael-schwarz Jun 2, 2026
3ac203a
Merge pull request #2028 from goblint/mm_phaseGhost
michael-schwarz Jun 2, 2026
3d92c0f
Add basic machinery
michael-schwarz Jun 2, 2026
38c08f6
Just copy relational `phase_change`?
michael-schwarz Jun 2, 2026
4769cd6
Towards machinery
michael-schwarz Jun 2, 2026
f05c393
Generalize mechanism
michael-schwarz Jun 3, 2026
90a0b64
Add working relational propagation (?)
michael-schwarz Jun 3, 2026
811d200
Add test
michael-schwarz Jun 3, 2026
8689b9a
Test + Options
michael-schwarz Jun 3, 2026
e7a8d39
Rm LMust query
michael-schwarz Jun 3, 2026
e2a6ba6
Rename
michael-schwarz Jun 3, 2026
cfe8f06
Continue rename
michael-schwarz Jun 3, 2026
c384d0f
Refactor
michael-schwarz Jun 3, 2026
e632d90
Potential fix for pull request finding
michael-schwarz Jun 3, 2026
49c5fa3
Fix test & comment to be about octagon
michael-schwarz Jun 3, 2026
419237d
Merge pull request #2051 from goblint/mm_rel_phaseGhost
michael-schwarz Jun 3, 2026
a5ac4e3
Ghost Mutex Validation (fail on is_unprotected)
Ang9876 Jun 3, 2026
d43fa68
WIP: Generalize phase ghost
michael-schwarz Jun 3, 2026
2a9fd95
Fix evaluation
michael-schwarz Jun 4, 2026
a6d6dba
Work around opam bug in make setup for opam < 2.2
sim642 May 24, 2026
d2d073e
Bump minimum dune version to 3.20 (closes #2045)
sim642 May 26, 2026
fc2657a
Add maintenance intent via dune instead of opam template
sim642 May 26, 2026
d34e758
Add test 11-heap/20-blob-zeroinit-join
sim642 May 15, 2026
a2cccd8
Improve HTML output of deadcode lifter top
sim642 May 15, 2026
aaba33a
Replace fake zeroinit lattice with flat lattice
sim642 May 15, 2026
809f25d
Add test 11-heap/21-blob-zeroinit-join-memcpy
sim642 May 19, 2026
5086a5c
Add TODO about questionable top ZeroInit
sim642 May 28, 2026
039dcf2
Remove unused Base.is_some_bot
sim642 May 28, 2026
5fe5f45
Remove unused Td3.exists_key
sim642 May 28, 2026
14912f2
Add test 74-invalid_deref/38-oob-alloc-array-mix
sim642 May 13, 2026
e74be3a
Improve memOutOfBounds precision for points-to sets which mix allocs …
sim642 May 13, 2026
f4d45e3
Add TODOs about BlobSize and EvalLength queries
sim642 May 28, 2026
0451867
Remove unused optional post_all argument in MCP
sim642 May 31, 2026
4732033
Use GobRef.wrap where possible
sim642 May 31, 2026
786d065
WIP
michael-schwarz May 12, 2026
2a6554a
Progress
michael-schwarz May 12, 2026
215bcdf
TODOs
michael-schwarz May 25, 2026
30e9552
Change confusing name
michael-schwarz May 26, 2026
022f0db
Structure
michael-schwarz May 26, 2026
46f0d30
Simplify
michael-schwarz May 26, 2026
ee5e820
Further simplify
michael-schwarz May 26, 2026
c8886a0
Query to get set of all mutexes
michael-schwarz May 26, 2026
f6ced53
Propagate globals between phases
michael-schwarz May 26, 2026
c7137f8
Finish handling of phaseChange for PerMutexMeetTIDPriv
michael-schwarz May 26, 2026
bfd0830
Make `mutex-meet-tid-ghost` activatable
michael-schwarz May 26, 2026
13a6991
Remove TODO
michael-schwarz May 28, 2026
b6f655b
LMust workaround
michael-schwarz May 28, 2026
5cd8dca
Propagate LMust along phase changes
michael-schwarz Jun 2, 2026
f7a5a32
Add basic machinery
michael-schwarz Jun 2, 2026
eafc7c7
Just copy relational `phase_change`?
michael-schwarz Jun 2, 2026
5290f21
Towards machinery
michael-schwarz Jun 2, 2026
22b1ced
Generalize mechanism
michael-schwarz Jun 3, 2026
e0aae19
Add working relational propagation (?)
michael-schwarz Jun 3, 2026
fcbefc6
Add test
michael-schwarz Jun 3, 2026
8dc6913
Test + Options
michael-schwarz Jun 3, 2026
f33319e
Rm LMust query
michael-schwarz Jun 3, 2026
4070ad8
Rename
michael-schwarz Jun 3, 2026
39b7741
Continue rename
michael-schwarz Jun 3, 2026
a1df654
Refactor
michael-schwarz Jun 3, 2026
855c784
Potential fix for pull request finding
michael-schwarz Jun 3, 2026
bebfaf0
Fix test & comment to be about octagon
michael-schwarz Jun 3, 2026
9eb9237
Mutex Ghost Checking, Invariant Validation, Tests
Ang9876 Jun 15, 2026
cb40b0b
Merge branch 'ghosts' into mutex-ghost
michael-schwarz Jun 15, 2026
dd6a5b9
Undo change to dune file
michael-schwarz Jun 15, 2026
5385316
Fix D.init, Comments, Warning -> Info
Ang9876 Jun 16, 2026
0c7a922
Generalize
michael-schwarz Jun 16, 2026
ba260e3
Merge pull request #2052 from goblint/ghost_generalize_phase
michael-schwarz Jun 16, 2026
e77822b
Comments, fix test cases
Ang9876 Jun 16, 2026
af236e6
Merge pull request #2055 from goblint/mutex-ghost
michael-schwarz Jun 17, 2026
3ea3e09
Make CI happy
michael-schwarz Jun 17, 2026
6257846
match mutex ghost pattern
Ang9876 Jun 25, 2026
c1a4880
remove debug info and generalize invariant pattern
Ang9876 Jun 25, 2026
ed54be1
fix dune
Ang9876 Jun 25, 2026
87aef50
Merge pull request #2064 from goblint/mutex-ghost
michael-schwarz Jun 26, 2026
6625a38
Do not complain about being unable to unassume ghost instrumentation.
michael-schwarz Jun 29, 2026
7df2a3e
Do not unassume expressions that contain ghosts
michael-schwarz Jun 29, 2026
6796a6f
Lenient loc
michael-schwarz Jun 30, 2026
9cbc171
Lenient loc
michael-schwarz Jun 30, 2026
1d9bba0
`witness.yaml.verdict-witness-only`
michael-schwarz Jun 30, 2026
2428c57
Ghost validate: mutex-meet privatization
michael-schwarz Jul 1, 2026
e687ae6
Example for 18
michael-schwarz Jul 2, 2026
7f748f4
Our first working example
michael-schwarz Jul 2, 2026
b5728a9
Add cram annotations
michael-schwarz Jul 2, 2026
7d7baee
Now we have two :-)
michael-schwarz Jul 2, 2026
ad7c399
Fix dune file
michael-schwarz Jul 2, 2026
03606d1
Progress
michael-schwarz Jul 2, 2026
6f92723
Actually confirm invariants
michael-schwarz Jul 2, 2026
53d06ec
Make CI happy?
michael-schwarz Jul 2, 2026
8a9dc10
Happy CI
michael-schwarz Jul 2, 2026
d25461f
Det warning
michael-schwarz Jul 2, 2026
23e1fae
No OS X here
michael-schwarz Jul 2, 2026
fba9834
Up to 4
michael-schwarz Jul 2, 2026
9fec604
Add test-8
michael-schwarz Jul 2, 2026
353714b
25/8 invariants
michael-schwarz Jul 2, 2026
0bc0e3c
Make CI happy
michael-schwarz Jul 2, 2026
6b9b2a1
Make CI happy again?
michael-schwarz Jul 3, 2026
fe6a58e
Unify configs
michael-schwarz Jul 3, 2026
3a28107
Add option to actually unassume
michael-schwarz Jul 3, 2026
cb0b51e
Add unassume tests
michael-schwarz Jul 3, 2026
8858e02
Merge pull request #2071 from goblint/ghost_examples
michael-schwarz Jul 3, 2026
80d5b26
22/19: Fix name
michael-schwarz Jul 6, 2026
8a00cee
Merge branch 'ghost_examples' into ghosts
michael-schwarz Jul 6, 2026
9289dee
Add test for pre-processed input
michael-schwarz Jul 6, 2026
879f35a
Add test massaged for ultimate
michael-schwarz Jul 6, 2026
c27ca18
Stateful: examples within reach for Ultimate
michael-schwarz Jul 6, 2026
d71d6ab
Progress
michael-schwarz Jul 6, 2026
64c1e5f
Remove unused hypothesis checking
michael-schwarz Jul 7, 2026
e52b805
19/20 ultimate
michael-schwarz Jul 7, 2026
2e6c744
19/23: Add raw test
michael-schwarz Jul 7, 2026
f3f6327
19/23 Ultimate compliant
michael-schwarz Jul 7, 2026
ac9a458
19/25: Ultimate version
michael-schwarz Jul 7, 2026
100cd52
19/22: Version on the i files
michael-schwarz Jul 7, 2026
31a0eee
Rename 19/25-Ultimate to 19/26 Ultimate
michael-schwarz Jul 7, 2026
935a953
19/22: Ultimate versions
michael-schwarz Jul 7, 2026
072070a
In evaluation, look atomic mutex
michael-schwarz Jul 7, 2026
68d0be0
Progress on crafting
michael-schwarz Jul 8, 2026
e15c27f
Update
michael-schwarz Jul 8, 2026
c1d4152
Explanation
michael-schwarz Jul 8, 2026
c0e35d2
Fix syncing behavior by not spawning in the middle of combine
michael-schwarz Jul 8, 2026
3836f0d
Merge branch 'ghosts' into ghosts-crafted
michael-schwarz Jul 8, 2026
00e4d04
Cleanup tests
michael-schwarz Jul 8, 2026
0408bf6
Progress
michael-schwarz Jul 8, 2026
adf1dc4
Progress
michael-schwarz Jul 8, 2026
7c11ab5
Description
michael-schwarz Jul 8, 2026
cfc17f8
19/05: Protect with mutex
michael-schwarz Jul 29, 2026
4c6c0ba
Defend against making things atomic by mistake
michael-schwarz Jul 29, 2026
4a42975
Defend against making things atomic that are not supposed to be atomic.
michael-schwarz Jul 29, 2026
372d64d
Fix tests
michael-schwarz Jul 29, 2026
cd308f7
Normalize octagon tests
michael-schwarz Jul 29, 2026
37de087
`Cilfacade`, `GoblintCil.var`
michael-schwarz Jul 29, 2026
f6068e1
19/19: `warn.deterministic`
michael-schwarz Jul 29, 2026
32080e8
Fix wrong observation
michael-schwarz Jul 29, 2026
7b1c899
Limit pulling apart to cases where it is potentially warrented
michael-schwarz Jul 29, 2026
c4ebd2b
Rm `extraGhost` option
michael-schwarz Jul 29, 2026
c723ba6
Convenience module for when phases are not used
michael-schwarz Jul 29, 2026
a3b55a1
Deatiled comment on `mutexEventsAnalysis`
michael-schwarz Jul 29, 2026
46dc7fc
Add back OS X CI
michael-schwarz Jul 29, 2026
e9a065d
Merge branch 'ghosts-crafted' into ghosts
michael-schwarz Jul 29, 2026
8a13f7b
WizWoz -> Goblint
michael-schwarz Jul 29, 2026
3bd2aa2
19/19: Deterministic warning
michael-schwarz Jul 29, 2026
c16ac8b
Fix some OS X qualms
michael-schwarz Jul 29, 2026
bfeaf3b
OS X: Disable octagon autotuner
michael-schwarz Jul 29, 2026
b9d5c00
19/22: Disable imprecise
michael-schwarz Jul 29, 2026
57d0d3c
Disable imprecise warnings
michael-schwarz Jul 29, 2026
8ce65e6
Correct expectation
michael-schwarz Jul 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 4 additions & 0 deletions .github/workflows/unlocked.yml
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,10 @@ jobs:
# if: ${{ matrix.apron }}
run: ruby scripts/update_suite.rb group apron-mukherjee -s

- name: Test concurency witnessesses # skipped by default but CI has apron, so explicitly test group (which ignores skipping -- it's now a feature!)
# if: ${{ matrix.apron }}
run: ruby scripts/update_suite.rb group ghost-witnesses -s

- name: Test marshal regression
run: ruby scripts/update_suite.rb -m -s

Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ tests/bench.txt
_build
*.native
*.byte
.codex
doc
doclist.odocl
autom4te.cache
Expand Down Expand Up @@ -106,3 +107,4 @@ site/
*.coverage
# bisect-ppx-report
_coverage/*
tests/regression/*/result/*
122 changes: 122 additions & 0 deletions conf/svcomp-ghost-validate.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
{
"ana": {
"sv-comp": {
"enabled": true,
"functions": true
},
"int": {
"def_exc": true,
"enums": false,
"interval": true
},
"float": {
"interval": true,
"evaluate_math_functions": true
},
"activated": [
"base",
"threadid",
"threadflag",
"threadreturn",
"mallocWrapper",
"mutexEvents",
"mutex",
"access",
"race",
"escape",
"expRelation",
"mhp",
"assert",
"var_eq",
"symb_locks",
"region",
"thread",
"threadJoins",
"abortUnless",
"mutexGhosts",
"pthreadMutexType"
],
"path_sens": [
"mutex",
"malloc_null",
"uninit",
"expsplit",
"activeSetjmp",
"memLeak",
"threadflag"
],
"context": {
"widen": false
},
"base": {
"arrays": {
"domain": "partitioned"
},
"invariant": {
"local": false,
"global": true
},
"privatization" : "mutex-meet"
},
"relation": {
"invariant": {
"local": false,
"global": true,
"one-var": false
}
},
"apron": {
"invariant": {
"diff-box": true
}
},
"var_eq": {
"invariant": {
"enabled": false
}
},
"race": {
"free": false,
"call": false
},
"autotune": {
"enabled": true,
"activated": [
"reduceAnalyses",
"mallocWrappers",
"noRecursiveIntervals",
"enums",
"congruence",
"octagon",
"wideningThresholds",
"loopUnrollHeuristic",
"memsafetySpecification",
"noOverflows",
"termination",
"tmpSpecialAnalysis"
]
}
},
"exp": {
"region-offsets": true
},
"solver": "td3",
"sem": {
"unknown_function": {
"spawn": false
},
"int": {
"signed_overflow": "assume_none"
},
"null-pointer": {
"dereference": "assume_none"
},
"malloc": {
"fail": false,
"zero": "pointer"
}
},
"pre": {
"enabled": false
}
}
2 changes: 2 additions & 0 deletions lib/sv-comp/stub/src/sv-comp.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,3 +53,5 @@ __VERIFIER_nondet2(void*, pointer)
// atomics are now special in Goblint
// void __VERIFIER_atomic_begin() { }
// void __VERIFIER_atomic_end() { }
// void __VERIFIER_atomic_instrument_begin() { }
// void __VERIFIER_atomic_instrument_end() { }
2 changes: 1 addition & 1 deletion src/analyses/accessAnalysis.ml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ struct
let init _ =
collect_local := get_bool "witness.yaml.enabled" && get_bool "witness.invariant.accessed";
let activated = get_string_list "ana.activated" in
emit_single_threaded := List.mem (ModifiedSinceSetjmp.Spec.name ()) activated || List.mem (PoisonVariables.Spec.name ()) activated || List.mem (UseAfterFree.Spec.name ()) activated (* TODO: some of these don't have access as dependency *)
emit_single_threaded := List.mem (ModifiedSinceSetjmp.Spec.name ()) activated || List.mem (PoisonVariables.Spec.name ()) activated || List.mem (UseAfterFree.Spec.name ()) activated || List.mem (PhaseGhost.Spec.name ()) activated (* TODO: some of these don't have access as dependency *)

let do_access (man: (D.t, G.t, C.t, V.t) man) (kind:AccessKind.t) (reach:bool) (e:exp) =
if M.tracing then M.trace "access" "do_access %a %a %B" d_exp e AccessKind.pretty kind reach;
Expand Down
9 changes: 8 additions & 1 deletion src/analyses/apron/relationAnalysis.apron.ml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ struct
let of_elt {priv; _} = of_elt priv
end

module AuxiliaryPhaseInfo = Priv.AuxiliaryPhaseInfo

module RV = RD.V

module PCU = PCU(RD)
Expand Down Expand Up @@ -659,6 +661,9 @@ struct
| _ -> Result.top q


let aux_phase_info man = ((Priv.aux_phase_info man.local):AuxiliaryPhaseInfo.t)
let consume_aux_phase_info = Priv.consume_aux_phase_info

(* Thread transfer functions. *)

let threadenter man ~multiple lval f args =
Expand Down Expand Up @@ -757,6 +762,8 @@ struct
st
| Events.Longjmped {lval} ->
Option.map_default (invalidate_one ask man st) st lval
| Events.PhaseChange {old_phase; new_phase} ->
Priv.phase_change ask old_phase new_phase man.global man.sideg st
| _ ->
st

Expand All @@ -778,7 +785,7 @@ struct
PCU.RH.replace results man.node new_value;
end;
WideningTokenLifter.with_local_side_tokens (fun () ->
Priv.sync (Analyses.ask_of_man man) man.global man.sideg man.local (reason :> [`Normal | `Join | `JoinCall of CilType.Fundec.t | `Return | `Init | `Thread])
Priv.sync (Analyses.ask_of_man man) man.global man.sideg man.local (reason :> [`Normal | `NormalInCallTF | `Join | `JoinCall of CilType.Fundec.t | `Return | `Init | `Thread])
)

let init marshal =
Expand Down
Loading
Loading