Skip to content

Commit 84fb8d3

Browse files
authored
Merge pull request #825 from xldenis/resolution-order
Change resolution order
2 parents e0734ec + 0567f3c commit 84fb8d3

File tree

75 files changed

+534
-520
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

75 files changed

+534
-520
lines changed

creusot/src/translation/function.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,9 @@ impl<'body, 'tcx> BodyTranslator<'body, 'tcx> {
285285
fn resolve_locals(&mut self, mut locals: BitSet<Local>) {
286286
locals.subtract(&self.erased_locals.to_hybrid());
287287

288-
for local in locals.iter() {
288+
// TODO determine resolution order based on outlives relation
289+
let locals = locals.iter().collect::<Vec<_>>();
290+
for local in locals.into_iter().rev() {
289291
self.emit_resolve(local.into());
290292
}
291293
}

creusot/tests/should_fail/bug/692.mlcfg

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -539,7 +539,7 @@ module C692_Incorrect
539539
clone CreusotContracts_Std1_Ops_Impl1_Unnest_Interface as Unnest0 with
540540
type args = (),
541541
type f = c
542-
clone CreusotContracts_Resolve_Resolve_Resolve_Interface as Resolve0 with
542+
clone CreusotContracts_Resolve_Resolve_Resolve_Interface as Resolve1 with
543543
type self = c
544544
clone CreusotContracts_Std1_Ops_Impl1_PostconditionMut_Interface as PostconditionMut0 with
545545
type args = (),
@@ -554,7 +554,7 @@ module C692_Incorrect
554554
type f = c,
555555
predicate PostconditionOnce0.postcondition_once = PostconditionOnce0.postcondition_once,
556556
predicate PostconditionMut0.postcondition_mut = PostconditionMut0.postcondition_mut,
557-
predicate Resolve0.resolve = Resolve0.resolve,
557+
predicate Resolve0.resolve = Resolve1.resolve,
558558
type Output0.output = bool,
559559
axiom .
560560
clone CreusotContracts_Std1_Ops_Impl1_UnnestTrans_Interface as UnnestTrans0 with
@@ -584,7 +584,7 @@ module C692_Incorrect
584584
type args = (),
585585
type f = c,
586586
predicate PostconditionOnce0.postcondition_once = PostconditionOnce0.postcondition_once,
587-
predicate Resolve0.resolve = Resolve0.resolve,
587+
predicate Resolve0.resolve = Resolve1.resolve,
588588
predicate Postcondition0.postcondition = Postcondition0.postcondition,
589589
type Output0.output = bool,
590590
axiom .
@@ -602,7 +602,7 @@ module C692_Incorrect
602602
clone CreusotContracts_Std1_Ops_Impl0_Precondition_Interface as Precondition0 with
603603
type args = (),
604604
type f = c
605-
clone CreusotContracts_Resolve_Resolve_Resolve_Interface as Resolve1 with
605+
clone CreusotContracts_Resolve_Resolve_Resolve_Interface as Resolve0 with
606606
type self = b
607607
let rec cfg incorrect [#"../692.rs" 8 0 8 76] [@cfg:stackify] [@cfg:subregion_analysis] (cond : c) (branch : b) : ()
608608
requires {[#"../692.rs" 5 0 6 87] Precondition0.precondition cond () /\ (forall b : bool . Precondition1.precondition branch (b) /\ (exists b : bool . forall b0 : bool . Postcondition0.postcondition cond () b0 -> b0 = b))}
@@ -616,8 +616,8 @@ module C692_Incorrect
616616
goto BB0
617617
}
618618
BB0 {
619-
assume { Resolve0.resolve cond };
620-
assume { Resolve1.resolve branch };
619+
assume { Resolve0.resolve branch };
620+
assume { Resolve1.resolve cond };
621621
goto BB1
622622
}
623623
BB1 {

creusot/tests/should_succeed/bdd.mlcfg

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3910,13 +3910,13 @@ module Bdd_Impl10_And
39103910
return _0
39113911
}
39123912
BB37 {
3913-
assume { Resolve2.resolve self };
39143913
assume { Resolve1.resolve _25 };
3914+
assume { Resolve2.resolve self };
39153915
goto BB4
39163916
}
39173917
BB38 {
3918-
assume { Resolve2.resolve self };
39193918
assume { Resolve1.resolve _25 };
3919+
assume { Resolve2.resolve self };
39203920
goto BB4
39213921
}
39223922
BB39 {
-3 Bytes
Binary file not shown.

creusot/tests/should_succeed/bug/eq_panic.mlcfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@ module EqPanic_Omg
134134
goto BB1
135135
}
136136
BB1 {
137-
assume { Resolve0.resolve x };
138137
assume { Resolve0.resolve y };
138+
assume { Resolve0.resolve x };
139139
return _0
140140
}
141141

creusot/tests/should_succeed/closures/04_generic_closure.mlcfg

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -713,9 +713,9 @@ module C04GenericClosure_Mapper_Closure0
713713
use export C04GenericClosure_Mapper_Closure0_Type
714714
use prelude.Borrow
715715
clone CreusotContracts_Resolve_Resolve_Resolve_Interface as Resolve1 with
716-
type self = a
717-
clone CreusotContracts_Resolve_Resolve_Resolve_Interface as Resolve0 with
718716
type self = c04genericclosure_mapper_closure0 a
717+
clone CreusotContracts_Resolve_Resolve_Resolve_Interface as Resolve0 with
718+
type self = a
719719
predicate resolve [#"../04_generic_closure.rs" 8 28 8 32] (_1 : c04genericclosure_mapper_closure0 a) =
720720
[#"../04_generic_closure.rs" 1 0 1 0] true
721721
predicate unnest [#"../04_generic_closure.rs" 8 28 8 32] (self : c04genericclosure_mapper_closure0 a) (_2 : c04genericclosure_mapper_closure0 a)
@@ -748,8 +748,8 @@ module C04GenericClosure_Mapper_Closure0
748748
}
749749
BB0 {
750750
_0 <- ();
751-
assume { Resolve0.resolve _1 };
752-
assume { Resolve1.resolve _a };
751+
assume { Resolve0.resolve _a };
752+
assume { Resolve1.resolve _1 };
753753
goto BB1
754754
}
755755
BB1 {

creusot/tests/should_succeed/closures/05_map.mlcfg

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,24 @@ module Core_Option_Option_Type
2323
| C_Some a -> a
2424
end
2525
end
26+
module CreusotContracts_Resolve_Resolve_Resolve_Stub
27+
type self
28+
predicate resolve (self : self)
29+
end
30+
module CreusotContracts_Resolve_Resolve_Resolve_Interface
31+
type self
32+
predicate resolve (self : self)
33+
val resolve (self : self) : bool
34+
ensures { result = resolve self }
35+
36+
end
37+
module CreusotContracts_Resolve_Resolve_Resolve
38+
type self
39+
predicate resolve (self : self)
40+
val resolve (self : self) : bool
41+
ensures { result = resolve self }
42+
43+
end
2644
module CreusotContracts_Resolve_Impl1_Resolve_Stub
2745
type t
2846
use prelude.Borrow
@@ -44,24 +62,6 @@ module CreusotContracts_Resolve_Impl1_Resolve
4462
val resolve (self : borrowed t) : bool
4563
ensures { result = resolve self }
4664

47-
end
48-
module CreusotContracts_Resolve_Resolve_Resolve_Stub
49-
type self
50-
predicate resolve (self : self)
51-
end
52-
module CreusotContracts_Resolve_Resolve_Resolve_Interface
53-
type self
54-
predicate resolve (self : self)
55-
val resolve (self : self) : bool
56-
ensures { result = resolve self }
57-
58-
end
59-
module CreusotContracts_Resolve_Resolve_Resolve
60-
type self
61-
predicate resolve (self : self)
62-
val resolve (self : self) : bool
63-
ensures { result = resolve self }
64-
6565
end
6666
module C05Map_FakeIterator_Item_Type
6767
type self
@@ -690,11 +690,11 @@ module C05Map_Impl0_Next
690690
predicate Precondition0.precondition = Precondition0.precondition,
691691
predicate Postcondition0.postcondition = Postcondition0.postcondition,
692692
type Output0.output = b
693-
clone CreusotContracts_Resolve_Resolve_Resolve_Interface as Resolve1 with
694-
type self = Core_Option_Option_Type.t_option a
695693
use C05Map_Map_Type as C05Map_Map_Type
696-
clone CreusotContracts_Resolve_Impl1_Resolve as Resolve0 with
694+
clone CreusotContracts_Resolve_Impl1_Resolve as Resolve1 with
697695
type t = C05Map_Map_Type.t_map i f
696+
clone CreusotContracts_Resolve_Resolve_Resolve_Interface as Resolve0 with
697+
type self = Core_Option_Option_Type.t_option a
698698
clone C05Map_FakeIterator_Next_Interface as Next0 with
699699
type self = i,
700700
type Item0.item = a
@@ -728,25 +728,25 @@ module C05Map_Impl0_Next
728728
BB3 {
729729
e <- Core_Option_Option_Type.some_0 _2;
730730
_2 <- (let Core_Option_Option_Type.C_Some a = _2 in Core_Option_Option_Type.C_Some (any a));
731-
assume { Resolve1.resolve _2 };
731+
assume { Resolve0.resolve _2 };
732732
goto BB6
733733
}
734734
BB4 {
735-
assume { Resolve0.resolve self };
736-
assume { Resolve1.resolve _2 };
735+
assume { Resolve0.resolve _2 };
736+
assume { Resolve1.resolve self };
737737
absurd
738738
}
739739
BB5 {
740-
assume { Resolve0.resolve self };
741-
assume { Resolve1.resolve _2 };
740+
assume { Resolve0.resolve _2 };
741+
assume { Resolve1.resolve self };
742742
_0 <- Core_Option_Option_Type.C_None;
743743
goto BB10
744744
}
745745
BB6 {
746746
goto BB7
747747
}
748748
BB7 {
749-
assume { Resolve0.resolve self };
749+
assume { Resolve1.resolve self };
750750
_0 <- Core_Option_Option_Type.C_Some ([#"../05_map.rs" 20 28 20 42] Call0.call (C05Map_Map_Type.map_func ( * self)) (e));
751751
e <- any a;
752752
goto BB8

creusot/tests/should_succeed/constrained_types.mlcfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,8 +353,8 @@ module ConstrainedTypes_UsesConcreteInstance
353353
goto BB1
354354
}
355355
BB1 {
356-
assume { Resolve0.resolve x };
357356
assume { Resolve0.resolve y };
357+
assume { Resolve0.resolve x };
358358
return _0
359359
}
360360

creusot/tests/should_succeed/hashmap.mlcfg

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,15 +1508,15 @@ module Hashmap_Impl5_Add
15081508
end
15091509
}
15101510
BB12 {
1511-
assume { Resolve3.resolve key };
15121511
assume { Resolve8.resolve tl1 };
1512+
assume { Resolve3.resolve key };
15131513
assume { Resolve4.resolve val' };
15141514
v <- { v with current = val' };
15151515
assume { Resolve4.resolve ( * v) };
15161516
assume { Resolve9.resolve v };
1517-
assume { Resolve6.resolve self };
1518-
assume { Resolve1.resolve l };
15191517
assume { Resolve1.resolve _19 };
1518+
assume { Resolve1.resolve l };
1519+
assume { Resolve6.resolve self };
15201520
assert { [@expl:assertion] [#"../hashmap.rs" 126 32 126 52] HashmapInv0.hashmap_inv ( * self) };
15211521
_0 <- ();
15221522
goto BB20
@@ -1552,8 +1552,8 @@ module Hashmap_Impl5_Add
15521552
goto BB19
15531553
}
15541554
BB19 {
1555-
assume { Resolve6.resolve self };
15561555
assume { Resolve1.resolve _19 };
1556+
assume { Resolve6.resolve self };
15571557
assert { [@expl:assertion] [#"../hashmap.rs" 134 24 134 44] HashmapInv0.hashmap_inv ( * self) };
15581558
_0 <- ();
15591559
goto BB20
@@ -1823,8 +1823,8 @@ module Hashmap_Impl5_Get
18231823
end
18241824
}
18251825
BB10 {
1826-
assume { Resolve2.resolve key };
18271826
assume { Resolve4.resolve tl };
1827+
assume { Resolve2.resolve key };
18281828
assume { Resolve5.resolve v };
18291829
_0 <- Core_Option_Option_Type.C_Some v;
18301830
goto BB13
@@ -1838,8 +1838,8 @@ module Hashmap_Impl5_Get
18381838
goto BB5
18391839
}
18401840
BB12 {
1841-
assume { Resolve2.resolve key };
18421841
assume { Resolve1.resolve l };
1842+
assume { Resolve2.resolve key };
18431843
_0 <- Core_Option_Option_Type.C_None;
18441844
goto BB13
18451845
}
@@ -2161,8 +2161,8 @@ module Hashmap_Impl5_Resize
21612161
goto BB11
21622162
}
21632163
BB11 {
2164-
assume { Resolve1.resolve _28 };
21652164
assume { Resolve1.resolve _29 };
2165+
assume { Resolve1.resolve _28 };
21662166
goto BB12
21672167
}
21682168
BB12 {

creusot/tests/should_succeed/hashmap/why3session.xml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
</transf>
7272
</goal>
7373
<goal name="add&#39;vc.12.0.2" expl="VC for add" proved="true">
74-
<proof prover="1"><result status="valid" time="0.280094" steps="38343"/></proof>
74+
<proof prover="1"><result status="valid" time="0.446058" steps="38360"/></proof>
7575
</goal>
7676
</transf>
7777
</goal>
@@ -125,15 +125,15 @@
125125
</transf>
126126
</goal>
127127
<goal name="add&#39;vc.24" expl="postcondition" proved="true">
128-
<proof prover="0"><result status="valid" time="0.216853" steps="362156"/></proof>
128+
<proof prover="0"><result status="valid" time="0.216853" steps="362150"/></proof>
129129
</goal>
130130
<goal name="add&#39;vc.25" expl="postcondition" proved="true">
131131
<transf name="split_vc" proved="true" >
132132
<goal name="add&#39;vc.25.0" expl="postcondition" proved="true">
133-
<proof prover="1"><result status="valid" time="0.818853" steps="97240"/></proof>
133+
<proof prover="1"><result status="valid" time="1.561048" steps="97240"/></proof>
134134
</goal>
135135
<goal name="add&#39;vc.25.1" expl="postcondition" proved="true">
136-
<proof prover="6"><result status="valid" time="0.411522" steps="7645"/></proof>
136+
<proof prover="6"><result status="valid" time="0.829766" steps="7644"/></proof>
137137
</goal>
138138
</transf>
139139
</goal>
@@ -142,7 +142,7 @@
142142
</theory>
143143
<theory name="Hashmap_Impl5_Get" proved="true">
144144
<goal name="get&#39;vc" expl="VC for get" proved="true">
145-
<proof prover="6"><result status="valid" time="0.155181" steps="4545"/></proof>
145+
<proof prover="6"><result status="valid" time="0.622829" steps="4521"/></proof>
146146
</goal>
147147
</theory>
148148
<theory name="Hashmap_Impl5_Resize" proved="true">
@@ -188,7 +188,7 @@
188188
<proof prover="6"><result status="valid" time="0.020000" steps="106"/></proof>
189189
</goal>
190190
<goal name="resize&#39;vc.13" expl="loop invariant init" proved="true">
191-
<proof prover="0"><result status="valid" time="0.367055" steps="558331"/></proof>
191+
<proof prover="0"><result status="valid" time="0.562446" steps="558331"/></proof>
192192
</goal>
193193
<goal name="resize&#39;vc.14" expl="loop invariant init" proved="true">
194194
<proof prover="6"><result status="valid" time="0.020000" steps="251"/></proof>
@@ -203,19 +203,19 @@
203203
<proof prover="6"><result status="valid" time="0.010000" steps="97"/></proof>
204204
</goal>
205205
<goal name="resize&#39;vc.18" expl="loop invariant preservation" proved="true">
206-
<proof prover="6"><result status="valid" time="0.050000" steps="957"/></proof>
206+
<proof prover="6"><result status="valid" time="0.174886" steps="957"/></proof>
207207
</goal>
208208
<goal name="resize&#39;vc.19" expl="loop invariant preservation" proved="true">
209-
<proof prover="6"><result status="valid" time="0.050000" steps="968"/></proof>
209+
<proof prover="6"><result status="valid" time="0.174438" steps="969"/></proof>
210210
</goal>
211211
<goal name="resize&#39;vc.20" expl="loop invariant preservation" proved="true">
212-
<proof prover="1"><result status="valid" time="0.210000" steps="33698"/></proof>
212+
<proof prover="1"><result status="valid" time="0.459211" steps="33696"/></proof>
213213
</goal>
214214
<goal name="resize&#39;vc.21" expl="loop invariant preservation" proved="true">
215215
<proof prover="0"><result status="valid" time="0.030000" steps="112407"/></proof>
216216
</goal>
217217
<goal name="resize&#39;vc.22" expl="loop invariant preservation" proved="true">
218-
<proof prover="6"><result status="valid" time="0.060000" steps="1193"/></proof>
218+
<proof prover="6"><result status="valid" time="0.224581" steps="1193"/></proof>
219219
</goal>
220220
<goal name="resize&#39;vc.23" expl="unreachable point" proved="true">
221221
<proof prover="6"><result status="valid" time="0.020000" steps="124"/></proof>
@@ -227,13 +227,13 @@
227227
<proof prover="6"><result status="valid" time="0.010000" steps="272"/></proof>
228228
</goal>
229229
<goal name="resize&#39;vc.26" expl="loop invariant preservation" proved="true">
230-
<proof prover="6"><result status="valid" time="0.020000" steps="144"/></proof>
230+
<proof prover="6"><result status="valid" time="0.020000" steps="145"/></proof>
231231
</goal>
232232
<goal name="resize&#39;vc.27" expl="loop invariant preservation" proved="true">
233233
<proof prover="6"><result status="valid" time="0.020000" steps="122"/></proof>
234234
</goal>
235235
<goal name="resize&#39;vc.28" expl="loop invariant preservation" proved="true">
236-
<proof prover="6"><result status="valid" time="0.020000" steps="286"/></proof>
236+
<proof prover="6"><result status="valid" time="0.020000" steps="287"/></proof>
237237
</goal>
238238
<goal name="resize&#39;vc.29" expl="loop invariant preservation" proved="true">
239239
<proof prover="6"><result status="valid" time="0.010000" steps="79"/></proof>

0 commit comments

Comments
 (0)