Skip to content

Commit bce261a

Browse files
Merge pull request #1641 from goblint/witness_val_fail_cherrypick
Fixes for Self-Validation Issues
2 parents ef56bc7 + a716017 commit bce261a

File tree

7 files changed

+548
-2
lines changed

7 files changed

+548
-2
lines changed

src/analyses/apron/relationAnalysis.apron.ml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ struct
5656
Priv.read_global ask getg st g x
5757
else (
5858
let rel = st.rel in
59-
let g_var = RV.global g in
59+
(* If it has escaped and we have never been multi-threaded, we can still refer to the local *)
60+
let g_var = if g.vglob then RV.global g else RV.local g in
6061
let x_var = RV.local x in
6162
let rel' = RD.add_vars rel [g_var] in
6263
let rel' = RD.assign_var rel' x_var g_var in
@@ -602,6 +603,10 @@ struct
602603
| Some (Local v) ->
603604
if VH.mem v_ins_inv v then
604605
keep_global
606+
else if ThreadEscape.has_escaped ask v then
607+
(* Escaped local variables should be read in via their v#in# variables, this apron var may refer to stale values only *)
608+
(* and is not a sound description of the C variable. *)
609+
false
605610
else
606611
keep_local
607612
| _ -> false
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// CRAM SKIP PARAM: --set ana.activated[+] apron --set ana.path_sens[+] threadflag --set ana.relation.privatization mutex-meet-tid-cluster12 --set witness.yaml.validate 95-witness-mm-escape.yml
2+
#include <pthread.h>
3+
#include <goblint.h>
4+
5+
int *b;
6+
pthread_mutex_t e;
7+
8+
void main() {
9+
10+
int g = 8;
11+
int a;
12+
if(a) {
13+
g = 10;
14+
}
15+
16+
b = &g;
17+
18+
pthread_mutex_lock(&e);
19+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
$ goblint --set ana.activated[+] apron --set ana.path_sens[+] threadflag --set ana.relation.privatization mutex-meet-tid-cluster12 --set witness.yaml.validate 95-witness-mm-escape.yml 95-witness-mm-escape.c
2+
[Info][Deadcode] Logical lines of code (LLoC) summary:
3+
live: 7
4+
dead: 0
5+
total lines: 7
6+
[Success][Witness] invariant confirmed: 0 <= g (95-witness-mm-escape.c:19:1)
7+
[Success][Witness] invariant confirmed: 0 <= *b (95-witness-mm-escape.c:19:1)
8+
[Success][Witness] invariant confirmed: g <= 127 (95-witness-mm-escape.c:19:1)
9+
[Success][Witness] invariant confirmed: *b <= 127 (95-witness-mm-escape.c:19:1)
10+
[Success][Witness] invariant confirmed: -8LL + (long long )g >= 0LL (95-witness-mm-escape.c:19:1)
11+
[Success][Witness] invariant confirmed: 2147483648LL + (long long )a >= 0LL (95-witness-mm-escape.c:19:1)
12+
[Success][Witness] invariant confirmed: (2147483638LL + (long long )a) + (long long )g >= 0LL (95-witness-mm-escape.c:19:1)
13+
[Success][Witness] invariant confirmed: (2147483637LL - (long long )a) + (long long )g >= 0LL (95-witness-mm-escape.c:19:1)
14+
[Success][Witness] invariant confirmed: 10LL - (long long )g >= 0LL (95-witness-mm-escape.c:19:1)
15+
[Success][Witness] invariant confirmed: 2147483647LL - (long long )a >= 0LL (95-witness-mm-escape.c:19:1)
16+
[Success][Witness] invariant confirmed: (2147483658LL + (long long )a) - (long long )g >= 0LL (95-witness-mm-escape.c:19:1)
17+
[Success][Witness] invariant confirmed: (2147483657LL - (long long )a) - (long long )g >= 0LL (95-witness-mm-escape.c:19:1)
18+
[Success][Witness] invariant confirmed: b == & g (95-witness-mm-escape.c:19:1)
19+
[Success][Witness] invariant confirmed: g != 0 (95-witness-mm-escape.c:19:1)
20+
[Success][Witness] invariant confirmed: *b != 0 (95-witness-mm-escape.c:19:1)
21+
[Info][Witness] witness validation summary:
22+
confirmed: 15
23+
unconfirmed: 0
24+
refuted: 0
25+
error: 0
26+
unchecked: 0
27+
unsupported: 0
28+
disabled: 0
29+
total validation entries: 15

0 commit comments

Comments
 (0)