Skip to content

Commit d86fe48

Browse files
authored
Merge pull request #1503 from goblint/priv-mval
Continue refactoring of must-locksets to use definite mvals instead of addresses
2 parents bccb230 + 90fc5aa commit d86fe48

File tree

7 files changed

+94
-102
lines changed

7 files changed

+94
-102
lines changed

src/analyses/apron/relationPriv.apron.ml

+14-14
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ module type S =
3333
the state when following conditional guards. *)
3434
val write_global: ?invariant:bool -> Q.ask -> (V.t -> G.t) -> (V.t -> G.t -> unit) -> relation_components_t -> varinfo -> varinfo -> relation_components_t
3535

36-
val lock: Q.ask -> (V.t -> G.t) -> relation_components_t -> LockDomain.Addr.t -> relation_components_t
37-
val unlock: Q.ask -> (V.t -> G.t) -> (V.t -> G.t -> unit) -> relation_components_t -> LockDomain.Addr.t -> relation_components_t
36+
val lock: Q.ask -> (V.t -> G.t) -> relation_components_t -> LockDomain.MustLock.t -> relation_components_t
37+
val unlock: Q.ask -> (V.t -> G.t) -> (V.t -> G.t -> unit) -> relation_components_t -> LockDomain.MustLock.t -> relation_components_t
3838

3939
val sync: Q.ask -> (V.t -> G.t) -> (V.t -> G.t -> unit) -> relation_components_t -> [`Normal | `Join | `JoinCall | `Return | `Init | `Thread] -> relation_components_t
4040

@@ -483,7 +483,7 @@ struct
483483

484484
let startstate () = ()
485485

486-
let atomic_mutex = LockDomain.Addr.of_var LibraryFunctions.verifier_atomic_var
486+
let atomic_mutex = LockDomain.MustLock.of_var LibraryFunctions.verifier_atomic_var
487487

488488
let get_m_with_mutex_inits ask getg m =
489489
let get_m = getg (V.mutex m) in
@@ -589,9 +589,9 @@ struct
589589
let write_escape = write_global_internal ~skip_meet:true
590590

591591
let lock ask getg (st: relation_components_t) m =
592-
let atomic = Param.handle_atomic && LockDomain.Addr.equal m (atomic_mutex) in
592+
let atomic = Param.handle_atomic && LockDomain.MustLock.equal m atomic_mutex in
593593
(* TODO: somehow actually unneeded here? *)
594-
if not atomic && Locksets.(not (Lockset.mem m (current_lockset ask))) then (
594+
if not atomic && Locksets.(not (MustLockset.mem m (current_lockset ask))) then (
595595
let rel = st.rel in
596596
let get_m = get_m_with_mutex_inits ask getg m in
597597
(* Additionally filter get_m in case it contains variables it no longer protects. E.g. in 36/22. *)
@@ -604,7 +604,7 @@ struct
604604
st (* sound w.r.t. recursive lock *)
605605

606606
let unlock ask getg sideg (st: relation_components_t) m: relation_components_t =
607-
let atomic = Param.handle_atomic && LockDomain.Addr.equal m (atomic_mutex) in
607+
let atomic = Param.handle_atomic && LockDomain.MustLock.equal m atomic_mutex in
608608
let rel = st.rel in
609609
if not atomic then (
610610
let rel_side = keep_only_protected_globals ask m rel in
@@ -721,7 +721,7 @@ module type ClusterArg = functor (RD: RelationDomain.RD) ->
721721
sig
722722
module LRD: Lattice.S
723723

724-
val keep_only_protected_globals: Q.ask -> LockDomain.Addr.t -> LRD.t -> LRD.t
724+
val keep_only_protected_globals: Q.ask -> LockDomain.MustLock.t -> LRD.t -> LRD.t
725725
val keep_global: varinfo -> LRD.t -> LRD.t
726726

727727
val lock: RD.t -> LRD.t -> LRD.t -> RD.t
@@ -980,7 +980,7 @@ struct
980980

981981
let get_m_with_mutex_inits inits ask getg m =
982982
let get_m = get_relevant_writes ask m (G.mutex @@ getg (V.mutex m)) in
983-
if M.tracing then M.traceli "relationpriv" "get_m_with_mutex_inits %a\n get=%a" LockDomain.Addr.pretty m LRD.pretty get_m;
983+
if M.tracing then M.traceli "relationpriv" "get_m_with_mutex_inits %a\n get=%a" LockDomain.MustLock.pretty m LRD.pretty get_m;
984984
let r =
985985
if not inits then
986986
get_m
@@ -993,7 +993,7 @@ struct
993993
if M.tracing then M.traceu "relationpriv" "-> %a" LRD.pretty r;
994994
r
995995

996-
let atomic_mutex = LockDomain.Addr.of_var LibraryFunctions.verifier_atomic_var
996+
let atomic_mutex = LockDomain.MustLock.of_var LibraryFunctions.verifier_atomic_var
997997

998998
let get_mutex_global_g_with_mutex_inits inits ask getg g =
999999
let get_mutex_global_g =
@@ -1106,8 +1106,8 @@ struct
11061106
{rel = rel_local; priv = (W.add g w,lmust,l)} (* Keep write local as if it were protected by the atomic section. *)
11071107

11081108
let lock ask getg (st: relation_components_t) m =
1109-
let atomic = Param.handle_atomic && LockDomain.Addr.equal m (atomic_mutex) in
1110-
if not atomic && Locksets.(not (Lockset.mem m (current_lockset ask))) then (
1109+
let atomic = Param.handle_atomic && LockDomain.MustLock.equal m atomic_mutex in
1110+
if not atomic && Locksets.(not (MustLockset.mem m (current_lockset ask))) then (
11111111
let rel = st.rel in
11121112
let _,lmust,l = st.priv in
11131113
let lm = LLock.mutex m in
@@ -1130,7 +1130,7 @@ struct
11301130
RD.keep_filter oct protected
11311131

11321132
let unlock ask getg sideg (st: relation_components_t) m: relation_components_t =
1133-
let atomic = Param.handle_atomic && LockDomain.Addr.equal m (atomic_mutex) in
1133+
let atomic = Param.handle_atomic && LockDomain.MustLock.equal m atomic_mutex in
11341134
let rel = st.rel in
11351135
let w,lmust,l = st.priv in
11361136
if not atomic then (
@@ -1314,7 +1314,7 @@ struct
13141314
r
13151315

13161316
let lock ask getg st m =
1317-
if M.tracing then M.traceli "relationpriv" "lock %a" LockDomain.Addr.pretty m;
1317+
if M.tracing then M.traceli "relationpriv" "lock %a" LockDomain.MustLock.pretty m;
13181318
if M.tracing then M.trace "relationpriv" "st: %a" RelComponents.pretty st;
13191319
let getg x =
13201320
let r = getg x in
@@ -1326,7 +1326,7 @@ struct
13261326
r
13271327

13281328
let unlock ask getg sideg st m =
1329-
if M.tracing then M.traceli "relationpriv" "unlock %a" LockDomain.Addr.pretty m;
1329+
if M.tracing then M.traceli "relationpriv" "unlock %a" LockDomain.MustLock.pretty m;
13301330
if M.tracing then M.trace "relationpriv" "st: %a" RelComponents.pretty st;
13311331
let getg x =
13321332
let r = getg x in

0 commit comments

Comments
 (0)