Skip to content

Commit 3e2578a

Browse files
m-yacEddy Westbrook
and
Eddy Westbrook
authored
[Heapster] Reduce catchpoints and add more Mbox proofs (#1413)
* add proofs for mbox_len, _concat_chains, _drop, add Ltac Profiling cmds * changed how the catch rule is translated, so that branches that could fail are pruned in favor of branches that are guaranteed not to * update generated examples, get proofs working again * finish mbox_drop, mbox_concat_chains proofs, remove commented-out bits * small tweak to the code to address a suggestion from Matt Y Co-authored-by: Eddy Westbrook <[email protected]>
1 parent 6f49ec1 commit 3e2578a

File tree

9 files changed

+318
-301
lines changed

9 files changed

+318
-301
lines changed

heapster-saw/examples/arrays.v

+66-100
Large diffs are not rendered by default.

heapster-saw/examples/clearbufs.v

+1-105
Large diffs are not rendered by default.

heapster-saw/examples/iter_linked_list.v

+2-2
Large diffs are not rendered by default.

heapster-saw/examples/iter_linked_list_proofs.v

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Proof.
3939
try destruct e_assuming0 as [?e_assuming ?e_assuming];
4040
try destruct e_assuming1 as [?e_assuming ?e_assuming]; simpl in *.
4141
(* All but one of the remaining goals are taken care of by assumptions we have in scope: *)
42-
all: try (split; [| rewrite appendList_Nil_r]); eauto.
42+
all: try rewrite appendList_Nil_r; try split; eauto.
4343
(* We just have to show this case is impossible by virtue of our loop invariant: *)
4444
apply isBvult_to_isBvule_suc in e_assuming0.
4545
apply bvule_msb_l in e_assuming0; try assumption.

heapster-saw/examples/mbox.v

+30-30
Large diffs are not rendered by default.

heapster-saw/examples/mbox_proofs.v

+140-19
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,6 @@ Import mbox.
2222
Import SAWCorePrelude.
2323

2424

25-
Lemma Mbox_rect_id (m : Mbox) :
26-
Mbox_rect (fun _ => Mbox) Mbox_nil
27-
(fun strt len _ rec vec => Mbox_cons strt len rec vec) m = m.
28-
Proof.
29-
induction m; simpl; eauto.
30-
rewrite IHm; reflexivity.
31-
Qed.
32-
33-
3425
Definition unfoldMbox_nil :
3526
unfoldMbox Mbox_nil = Left _ _ tt :=
3627
reflexivity _.
@@ -79,7 +70,44 @@ Proof.
7970
simpl; f_equal; eauto.
8071
Qed.
8172

82-
Hint Rewrite transMbox_Mbox_nil_r : refinesM.
73+
Lemma transMbox_assoc m1 m2 m3 :
74+
transMbox (transMbox m1 m2) m3 = transMbox m1 (transMbox m2 m3).
75+
Proof.
76+
induction m1; eauto.
77+
simpl; f_equal; eauto.
78+
Qed.
79+
80+
Hint Rewrite transMbox_Mbox_nil_r transMbox_assoc : refinesM.
81+
82+
83+
(* ========================================================================== *)
84+
85+
86+
Lemma no_errors_mbox_drop
87+
: refinesFun mbox_drop (fun _ _ => noErrorsSpec).
88+
Proof.
89+
unfold mbox_drop, mbox_drop__tuple_fun, noErrorsSpec.
90+
(* Set Ltac Profiling. *)
91+
time "no_errors_mbox_drop" prove_refinement.
92+
(* Show Ltac Profile. Reset Ltac Profile. *)
93+
Time Qed.
94+
95+
Definition mbox_drop_spec : Mbox -> BV64 -> Mbox :=
96+
Mbox__rec _ (fun _ => Mbox_nil) (fun strt len next rec d ix =>
97+
if bvuge 64 (projT1 ix) (projT1 len)
98+
then Mbox_cons (existT _ (intToBv 64 0) tt) (existT _ (intToBv 64 0) tt)
99+
(rec (existT _ (bvSub 64 (projT1 ix) (projT1 len)) tt)) d
100+
else Mbox_cons (existT _ (bvAdd 64 (projT1 ix) (projT1 strt)) tt)
101+
(existT _ (bvSub 64 (projT1 len) (projT1 ix)) tt) next d).
102+
103+
Lemma mbox_drop_spec_ref
104+
: refinesFun mbox_drop (fun x ix => returnM (mbox_drop_spec x ix)).
105+
Proof.
106+
unfold mbox_drop, mbox_drop__tuple_fun, mbox_drop_spec.
107+
(* Set Ltac Profiling. *)
108+
time "mbox_drop_spec_ref" prove_refinement.
109+
(* Show Ltac Profile. Reset Ltac Profile. *)
110+
Time Qed.
83111

84112

85113
Lemma mbox_free_chain_spec_ref
@@ -89,7 +117,9 @@ Proof.
89117
prove_refinement_match_letRecM_l.
90118
- exact (fun _ => returnM (mkBV32 (intToBv 32 0))).
91119
unfold mkBV32.
120+
(* Set Ltac Profiling. *)
92121
time "mbox_free_chain_spec_ref" prove_refinement.
122+
(* Show Ltac Profile. Reset Ltac Profile. *)
93123
Time Qed.
94124

95125
Lemma no_errors_mbox_free_chain
@@ -105,7 +135,9 @@ Lemma no_errors_mbox_concat
105135
: refinesFun mbox_concat (fun _ _ => noErrorsSpec).
106136
Proof.
107137
unfold mbox_concat, mbox_concat__tuple_fun, noErrorsSpec.
138+
(* Set Ltac Profiling. *)
108139
time "no_errors_mbox_concat" prove_refinement.
140+
(* Show Ltac Profile. Reset Ltac Profile. *)
109141
Time Qed.
110142

111143
Definition mbox_concat_spec (x y : Mbox) : Mbox :=
@@ -115,15 +147,56 @@ Lemma mbox_concat_spec_ref
115147
: refinesFun mbox_concat (fun x y => returnM (mbox_concat_spec x y)).
116148
Proof.
117149
unfold mbox_concat, mbox_concat__tuple_fun, mbox_concat_spec.
150+
(* Set Ltac Profiling. *)
151+
time "mbox_concat_spec_ref" prove_refinement.
152+
(* Show Ltac Profile. Reset Ltac Profile. *)
153+
Time Qed.
154+
155+
(* Add `mbox_concat_spec_ref` to the hint database. Unfortunately, Coq will not unfold refinesFun
156+
and mbox_concat_spec when rewriting, and the only workaround I know right now is this :/ *)
157+
Definition mbox_concat_spec_ref' : ltac:(let tp := type of mbox_concat_spec_ref in
158+
let tp' := eval unfold refinesFun, mbox_concat_spec in tp
159+
in exact tp') := mbox_concat_spec_ref.
160+
Hint Rewrite mbox_concat_spec_ref' : refinement_proofs.
161+
162+
163+
Lemma no_errors_mbox_concat_chains
164+
: refinesFun mbox_concat_chains (fun _ _ => noErrorsSpec).
165+
Proof.
166+
unfold mbox_concat_chains, mbox_concat_chains__tuple_fun.
167+
prove_refinement_match_letRecM_l.
168+
- exact (fun _ _ _ _ _ _ => noErrorsSpec).
169+
unfold noErrorsSpec.
170+
(* Set Ltac Profiling. *)
171+
time "no_errors_mbox_concat_chains" prove_refinement with NoRewrite.
172+
(* Show Ltac Profile. Reset Ltac Profile. *)
173+
Time Qed.
174+
175+
Definition mbox_concat_chains_spec (x y : Mbox) : Mbox :=
176+
Mbox__rec (fun _ => Mbox) Mbox_nil (fun _ _ _ _ _ =>
177+
Mbox__rec (fun _ => Mbox) x (fun _ _ _ _ _ =>
178+
transMbox x y) y) x.
179+
180+
Lemma mbox_concat_chains_spec_ref
181+
: refinesFun mbox_concat_chains (fun x y => returnM (mbox_concat_chains_spec x y)).
182+
Proof.
183+
unfold mbox_concat_chains, mbox_concat_chains__tuple_fun.
184+
prove_refinement_match_letRecM_l.
185+
- intros x y strt len next d.
186+
exact (returnM (transMbox x (Mbox_cons strt len (transMbox next y) d))).
187+
unfold mbox_concat_chains_spec.
118188
time "mbox_concat_spec_ref" prove_refinement.
189+
simpl; repeat rewrite transMbox_Mbox_nil_r; reflexivity.
119190
Time Qed.
120191

121192

122193
Lemma no_errors_mbox_detach
123194
: refinesFun mbox_detach (fun _ => noErrorsSpec).
124195
Proof.
125196
unfold mbox_detach, mbox_detach__tuple_fun, noErrorsSpec.
197+
(* Set Ltac Profiling. *)
126198
time "no_errors_mbox_detach" prove_refinement.
199+
(* Show Ltac Profile. Reset Ltac Profile. *)
127200
Time Qed.
128201

129202
Definition mbox_detach_spec : Mbox -> Mbox * (Mbox * unit) :=
@@ -134,7 +207,52 @@ Lemma mbox_detach_spec_ref
134207
: refinesFun mbox_detach (fun x => returnM (mbox_detach_spec x)).
135208
Proof.
136209
unfold mbox_detach, mbox_detach__tuple_fun, mbox_detach, mbox_detach_spec.
210+
(* Set Ltac Profiling. *)
137211
time "mbox_detach_spec_ref" prove_refinement.
212+
(* Show Ltac Profile. Reset Ltac Profile. *)
213+
Time Qed.
214+
215+
(* Add `mbox_detach_spec_ref` to the hint database. Unfortunately, Coq will not unfold refinesFun
216+
and mbox_detach_spec when rewriting, and the only workaround I know right now is this :/ *)
217+
Definition mbox_detach_spec_ref' : ltac:(let tp := type of mbox_detach_spec_ref in
218+
let tp' := eval unfold refinesFun, mbox_detach_spec in tp
219+
in exact tp') := mbox_detach_spec_ref.
220+
Hint Rewrite mbox_detach_spec_ref' : refinement_proofs.
221+
222+
223+
Lemma no_errors_mbox_len
224+
: refinesFun mbox_len (fun _ => noErrorsSpec).
225+
Proof.
226+
unfold mbox_len, mbox_len__tuple_fun.
227+
prove_refinement_match_letRecM_l.
228+
- exact (fun _ _ _ => noErrorsSpec).
229+
unfold noErrorsSpec.
230+
(* Set Ltac Profiling. *)
231+
time "no_errors_mbox_len" prove_refinement.
232+
(* Show Ltac Profile. Reset Ltac Profile. *)
233+
Time Qed.
234+
235+
Definition mbox_len_spec : Mbox -> bitvector 64 :=
236+
Mbox__rec (fun _ => bitvector 64) (intToBv 64 0)
237+
(fun strt len m rec d => bvAdd 64 rec (projT1 len)).
238+
239+
Lemma mbox_len_spec_ref
240+
: refinesFun mbox_len (fun m => returnM (m, (existT _ (mbox_len_spec m) tt, tt))).
241+
Proof.
242+
unfold mbox_len, mbox_len__tuple_fun.
243+
prove_refinement_match_letRecM_l.
244+
- exact (fun m1 rec m2 => returnM (transMbox m1 m2, (existT _ (bvAdd 64 (projT1 rec) (mbox_len_spec m2)) tt, tt))).
245+
unfold mbox_len_spec.
246+
(* Set Ltac Profiling. *)
247+
time "mbox_len_spec_ref" prove_refinement.
248+
(* Show Ltac Profile. Reset Ltac Profile. *)
249+
(* Most of the remaining cases are taken care of with just bvAdd_id_l and bvAdd_id_r *)
250+
all: try rewrite bvAdd_id_r; try rewrite bvAdd_id_l; try reflexivity.
251+
(* The remaining case just needs a few more rewrites *)
252+
- do 3 f_equal.
253+
rewrite bvAdd_assoc; f_equal.
254+
rewrite bvAdd_comm; reflexivity.
255+
- cbn; rewrite transMbox_Mbox_nil_r; reflexivity.
138256
Time Qed.
139257

140258

@@ -207,9 +325,11 @@ Proof.
207325
try unfold llvm__x2ememcpy__x2ep0i8__x2ep0i8__x2ei64.
208326
try unfold llvm__x2eobjectsize__x2ei64__x2ep0i8, __memcpy_chk.
209327
Set Printing Depth 1000.
210-
(* Expect this to take on the order of 25 seconds, removing the `NoRewrite`
328+
(* Expect this to take on the order of 15 seconds, removing the `NoRewrite`
211329
adds another 5 seconds and only simplifies the proof in the one noted spot *)
330+
(* Set Ltac Profiling. *)
212331
time "mbox_copy_spec_ref" prove_refinement with NoRewrite.
332+
(* Show Ltac Profile. Reset Ltac Profile. *)
213333
all: try discriminate e_either.
214334
- rewrite e_forall in e_maybe.
215335
discriminate e_maybe.
@@ -220,19 +340,13 @@ Proof.
220340
discriminate e_maybe1.
221341
- rewrite a1 in e_maybe2.
222342
discriminate e_maybe2.
223-
- replace a2 with e_forall; [ replace a3 with e_forall0 | ].
343+
- rewrite transMbox_Mbox_nil_r. (* <- this would go away if we removed "NoRewrite" *)
344+
replace a2 with e_forall; [ replace a3 with e_forall0 | ].
224345
destruct strt, len, u, u0; cbn.
225346
unfold conjSliceBVVec; simpl projT1.
226347
reflexivity.
227348
- apply BoolDecidableEqDepSet.UIP.
228349
- apply BoolDecidableEqDepSet.UIP.
229-
- replace a2 with e_forall; [ replace a3 with e_forall0 | ].
230-
destruct strt, len, u, u0; cbn.
231-
unfold conjSliceBVVec; simpl projT1.
232-
(* Without the `NoRewrite` this next line is just `reflexivity` *)
233-
rewrite Mbox_rect_id; reflexivity.
234-
- apply BoolDecidableEqDepSet.UIP.
235-
- apply BoolDecidableEqDepSet.UIP.
236350
- rewrite <- e_assuming in e_if.
237351
vm_compute in e_if; discriminate e_if.
238352
- rewrite <- isBvult_to_isBvslt_pos in e_if.
@@ -252,3 +366,10 @@ Proof.
252366
induction a; simpl in *.
253367
all: repeat prove_refinement.
254368
Qed.
369+
370+
(* Add `mbox_copy_spec_ref` to the hint database. Unfortunately, Coq will not unfold refinesFun
371+
and mbox_copy_spec when rewriting, and the only workaround I know right now is this :/ *)
372+
Definition mbox_copy_spec_ref' : ltac:(let tp := type of mbox_copy_spec_ref in
373+
let tp' := eval unfold refinesFun, mbox_copy_spec, mbox_copy_spec_cons, empty_mbox_d in tp
374+
in exact tp') := mbox_copy_spec_ref.
375+
Hint Rewrite mbox_copy_spec_ref' : refinement_proofs.

heapster-saw/examples/rust_lifetimes.v

+7-6
Original file line numberDiff line numberDiff line change
@@ -96,17 +96,18 @@ Definition use_mux_mut_refs__tuple_fun : @CompM.lrtTupleType (@CompM.LRT_Cons (@
9696
let var__1 := @sigT var__0 (fun (x_ex0 : var__0) => unit) in
9797
CompM (prod var__1 (prod var__1 unit))) (prod (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) unit)) => @bindM CompM _ (prod (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) (prod (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) => unit)) unit)) (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) (@llvm__x2euadd__x2ewith__x2eoverflow__x2ei64 (SAWCoreScaffolding.fst (SAWCoreScaffolding.snd call_ret_val)) (@existT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit) (intToBv 64 1%Z) tt)) (fun (call_ret_val1 : prod (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) (prod (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) => unit)) unit)) => @bindM CompM _ (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) => unit)) (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) (@llvm__x2eexpect__x2ei1 (SAWCoreScaffolding.fst (SAWCoreScaffolding.snd call_ret_val1)) (@existT (@SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) => unit) (intToBv 1 0%Z) tt)) (fun (call_ret_val2 : @sigT (@SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) => unit)) => if @SAWCoreScaffolding.not (@SAWCorePrelude.bvEq 1 (@projT1 (@SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) (fun (x_elimEx0 : @SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) => unit) call_ret_val2) (intToBv 1 0%Z)) then @errorM CompM _ (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) "At internal ($0 = resolveGlobal saw:llvm_memory ""_ZN4core9panicking5panic17hfb3ef93dcafb964cE"")
9898
Regs:
99-
Input perms: ghost1:llvmframe [ghost2:8, ghost3:8], ghost2:true,
100-
ghost3:true
99+
Input perms: ghost_frm:llvmframe [ghost_ptr:8, ghost_ptr1:8],
100+
ghost_ptr:true, ghost_ptr1:true
101101
Type-checking failure:
102102
LLVM_ResolveGlobal: no perms for global _ZN4core9panicking5panic17hfb3ef93dcafb964cE
103103

104104
"%string else @bindM CompM _ (prod (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) (prod (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) unit)) (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) (SAWCoreScaffolding.fst call_ret_val (pair (SAWCoreScaffolding.fst call_ret_val1) tt)) (fun (endl_ps0 : prod (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) (prod (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) unit)) => @bindM CompM _ (prod (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) (prod (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) => unit)) unit)) (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) (@llvm__x2euadd__x2ewith__x2eoverflow__x2ei64 (SAWCoreScaffolding.fst (SAWCoreScaffolding.snd endl_ps0)) (@existT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit) (intToBv 64 1%Z) tt)) (fun (call_ret_val3 : prod (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) (prod (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) => unit)) unit)) => @bindM CompM _ (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) => unit)) (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) (@llvm__x2eexpect__x2ei1 (SAWCoreScaffolding.fst (SAWCoreScaffolding.snd call_ret_val3)) (@existT (@SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) => unit) (intToBv 1 0%Z) tt)) (fun (call_ret_val4 : @sigT (@SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) => unit)) => if @SAWCoreScaffolding.not (@SAWCorePrelude.bvEq 1 (@projT1 (@SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) (fun (x_elimEx0 : @SAWCoreVectorsAsCoqVectors.Vec 1 (@SAWCoreScaffolding.Bool)) => unit) call_ret_val4) (intToBv 1 0%Z)) then @errorM CompM _ (@sigT (@SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) (fun (x_ex0 : @SAWCoreVectorsAsCoqVectors.Vec 64 (@SAWCoreScaffolding.Bool)) => unit)) "At internal ($0 = resolveGlobal saw:llvm_memory ""_ZN4core9panicking5panic17hfb3ef93dcafb964cE"")
105105
Regs:
106-
Input perms: ghost1:llvmframe [ghost2:8, ghost5:8],
107-
ghost2:memblock(W, 8, 0, emptysh)*ptr((W,0) |-> eq(ghost3)),
108-
ghost5:memblock(W, 0, 8, u64<>), ghost3:eq(ghost4),
109-
ghost4:int64<>
106+
Input perms: ghost_frm:llvmframe [ghost_ptr:8, ghost_ptr3:8],
107+
ghost_ptr:memblock(W, 8, 0, emptysh)
108+
*ptr((W,0) |-> eq(ghost_ptr1)),
109+
ghost_ptr3:memblock(W, 0, 8, u64<>), ghost_ptr1:eq(ghost_ptr2),
110+
ghost_ptr2:int64<>
110111
Type-checking failure:
111112
LLVM_ResolveGlobal: no perms for global _ZN4core9panicking5panic17hfb3ef93dcafb964cE
112113

0 commit comments

Comments
 (0)