11#include <stdint.h>
22#include <stdlib.h>
3- #include "../pulse_macros .h"
3+ #include "../include/PulseMacros .h"
44
55REQUIRES ("r |-> 'v" )
6- RETURNS (v )
6+ RETURNS (v : Pulse . Lib . C . Int32 . int32 )
77ENSURES ("r |-> 'v" )
88ENSURES ("pure (v == 'v)" )
99int value_of (int * r )
1010{
1111 return * r ;
1212}
1313
14- ERASED_ARG (w )
14+ ERASED_ARG (#w :erased _ )
1515REQUIRES (r |- > w )
16- RETURNS (v )
16+ RETURNS (v : Pulse . Lib . C . Int32 . int32 )
1717ENSURES (r |- > w )
1818ENSURES (pure (v == w ))
1919int value_of_explicit (int * r )
@@ -35,44 +35,45 @@ void assign_alt(int *r, int v)
3535 * r = v ;
3636}
3737
38- ERASED_ARG (w )
38+ ERASED_ARG (#w :erased _ )
3939REQUIRES (r |- > w )
40- REQUIRES (pure FStar . Int32 .(fits (v w + n )))
41- ENSURES (exists * ww . r |-> ww * * pure FStar . Int32 .(v ww == v w + n ))
40+ REQUIRES (pure Pulse . Lib . C . Int32 .(fits (+ ) ( as_int w ) ( as_int n )))
41+ ENSURES (exists * ww . ( r |- > ww ) * * pure Pulse . Lib . C . Int32 .(as_int ww == as_int w + as_int n ))
4242void add (int * r , int n )
4343{
4444 * r = * r + n ;
4545}
4646
47- ERASED_ARG (w : FStar . Int32 . t { FStar . Int32 .(fits (v w + n )) })
47+ ERASED_ARG (# w : erased _ { Pulse.Lib.C. Int32.(fits (+) (as_int w) (as_int n)) })
4848REQUIRES (r |- > w )
49- ENSURES (r |- > FStar .Int32 .(w + ^ n ))
49+ ENSURES (r |- > Pulse . Lib . C .Int32 .(w + ^ n ))
5050void add_alt (int * r , int n )
5151{
5252 * r = * r + n ;
5353}
5454
55- ERASED_ARG (w : FStar . Int32 . t { FStar . Int32 .fits ( 4 * v w ) })
55+ ERASED_ARG (# w : erased _ { Pulse.Lib.C. Int32.(fits op_Multiply 4 (as_int w) ) })
5656REQUIRES (r |- > w )
57- ENSURES (exists * ww . r |- > ww * * pure FStar . Int32 .(v ww == 4 * v w ))
57+ ENSURES (exists * ww . ( r |- > ww ) * * pure Pulse . Lib . C . Int32 .(as_int ww == 4 ` op_Multiply ` as_int w ))
5858void quadruple (int * r )
5959{
6060 add (r , * r ) ;
6161 add (r , * r );
6262}
6363
64- ERASED_ARG (w :FStar .Int32 .t )
64+
65+ ERASED_ARG (#w :erased _)
6566ERASED_ARG (p :perm )
6667REQUIRES (x |-> Frac p w )
67- RETURNS (i )
68+ RETURNS (i : Pulse . Lib . C . Int32 . int32 )
6869ENSURES (x |- > Frac p w )
6970ENSURES (pure (i == w ))
7071int value_of_perm (int * x )
7172{
7273 return * x ;
7374}
7475
75- ERASED_ARG (v )
76+ ERASED_ARG (#v :erased _ )
7677ERASED_ARG (p :perm )
7778REQUIRES (x |-> Frac p v )
7879ENSURES (x |- > Frac (p /. 2.0 R ) v )
@@ -82,8 +83,9 @@ void share_ref(int *x)
8283 LEMMA (share (x ));
8384}
8485
85- ERASED_ARG (v0 )
86- ERASED_ARG (v1 )
86+
87+ ERASED_ARG (#v0 :erased _)
88+ ERASED_ARG (#v1 :erased _)
8789ERASED_ARG (p :perm )
8890REQUIRES (x |-> Frac (p /. 2.0 R ) v0 )
8991REQUIRES (x |- > Frac (p /. 2.0 R ) v1 )
@@ -94,7 +96,8 @@ void gather_ref(int *x)
9496 LEMMA (gather (x ));
9597}
9698
97- ERASED_ARG (v )
99+
100+ ERASED_ARG (#v :erased _)
98101ERASED_ARG (p :perm )
99102REQUIRES (x |-> Frac p v )
100103REQUIRES (pure (~(p <=. 1.0 R )))
@@ -105,10 +108,10 @@ void max_perm (int *x)
105108 LEMMA (unreachable ());
106109}
107110
108- ERASED_ARG (v )
111+ ERASED_ARG (#v :erased _ )
109112ERASED_ARG (p :perm )
110113REQUIRES (r |-> Frac p v )
111- RETURNS (s )
114+ RETURNS (s : ref Pulse . Lib . C . Int32 . int32 )
112115ENSURES (s |- > Frac (p /. 2.0 R ) v )
113116ENSURES (s |- > Frac (p /. 2.0 R ) v )
114117ENSURES (pure (s == r ))
@@ -118,29 +121,33 @@ int* alias_ref(int *r)
118121 return r ;
119122}
120123
121- ERASED_ARG (vr )
124+
125+ ERASED_ARG (#vr :erased _)
122126REQUIRES (r |- > vr )
123- ENSURES (exists * w . r |- > w * * pure FStar .Int32 .(v w == v vr + 1 ))
127+ REQUIRES (pure Pulse .Lib .C .Int32 .(fits (+ ) (as_int vr ) 1 ))
128+ ENSURES (exists * w . (r |- > w ) * * pure Pulse .Lib .C .Int32 .(as_int w == as_int vr + 1 ))
124129int incr (int * r )
125130{
126131 * r = * r + 1 ;
127132}
128133
129-
130- RETURNS (i )
131- ENSURES (pure (i == 1l ))
134+ /**
135+ REQUIRES(emp)
136+ RETURNS(i:Pulse.Lib.C.Int32.int32)
137+ ENSURES(pure Pulse.Lib.C.Int32.(as_int i == 1))
132138int one()
133139{
134140 int i = 0;
135141 incr(&i);
136142 return i;
137143}
138144
145+ /*
139146EXPECT_FAILURE(19)
140147RETURNS(s)
141148ENSURES(s |-> 0l)
142149int* refs_are_scoped()
143150{
144151 int s = 0;
145152 return &s;
146- }
153+ }*/
0 commit comments