Skip to content

Commit 411744b

Browse files
authored
Merge pull request #771 from PrincetonUniversity/funcptr_validpointer
Changed definition of valid_pointer' wrt locations with PURE resource…
2 parents 56e6886 + 1fb9af5 commit 411744b

File tree

9 files changed

+698
-26
lines changed

9 files changed

+698
-26
lines changed

Diff for: Makefile

+5-5
Original file line numberDiff line numberDiff line change
@@ -504,7 +504,7 @@ FLOYD_FILES= \
504504
for_lemmas.v semax_tactics.v diagnosis.v simple_reify.v simpl_reptype.v \
505505
freezer.v deadvars.v Clightnotations.v unfold_data_at.v hints.v reassoc_seq.v \
506506
SeparationLogicAsLogicSoundness.v SeparationLogicAsLogic.v SeparationLogicFacts.v \
507-
subsume_funspec.v linking.v data_at_lemmas.v Funspec_old_Notation.v assoclists.v VSU.v VSU_DrySafe.v quickprogram.v PTops.v Component.v QPcomposite.v \
507+
subsume_funspec.v linking.v data_at_lemmas.v Funspec_old_Notation.v assoclists.v VSU.v quickprogram.v PTops.v Component.v QPcomposite.v \
508508
data_at_list_solver.v step.v fastforward.v finish.v
509509
#real_forward.v
510510

@@ -515,7 +515,7 @@ PROGS32_FILES= \
515515
insertionsort.v reverse.v reverse_client.v queue.v sumarray.v message.v string.v object.v \
516516
revarray.v verif_revarray.v insertionsort.v append.v min.v min64.v int_or_ptr.v \
517517
dotprod.v strlib.v fib.v \
518-
verif_min.v verif_min64.v verif_float.v verif_global.v verif_ptr_compare.v \
518+
verif_min.v verif_min64.v verif_float.v verif_global.v verif_ptr_compare.v\
519519
verif_nest3.v verif_nest2.v verif_load_demo.v verif_store_demo.v \
520520
logical_compare.v verif_logical_compare.v field_loadstore.v verif_field_loadstore.v \
521521
even.v verif_even.v odd.v verif_odd.v verif_evenodd_spec.v \
@@ -535,14 +535,14 @@ PROGS32_FILES= \
535535
C64_ORDINARY = reverse.c revarray.c sumarray.c append.c bin_search.c \
536536
bst.c field_loadstore.c float.c object.c \
537537
global.c min.c min64.c nest2.c nest3.c \
538-
logical_compare.c \
538+
logical_compare.c fptr_cmp.c \
539539
strlib.c switch.c union.c message.c
540540

541541
V64_ORDINARY = verif_reverse2.v verif_revarray.v verif_sumarray.v \
542542
verif_append2.v verif_bin_search.v \
543543
verif_bst.v verif_field_loadstore.v verif_float.v verif_object.v \
544544
verif_global.v verif_min.v verif_min64.v verif_nest2.v verif_nest3.v \
545-
verif_logical_compare.v \
545+
verif_logical_compare.v verif_fptr_cmp.v\
546546
verif_strlib.v verif_switch.v verif_union.v verif_message.v verif_incr.v
547547

548548
SHA_FILES= \
@@ -624,7 +624,7 @@ AES_FILES = \
624624
# LINKED_C_FILES are those that need to be clightgen'd in a batch with others
625625

626626
SINGLE_C_FILES = reverse.c reverse_client.c revarray.c queue.c queue2.c message.c object.c insertionsort.c float.c global.c logical_compare.c nest2.c nest3.c ptr_compare.c load_demo.c store_demo.c dotprod.c string.c field_loadstore.c merge.c append.c bin_search.c bst.c bst_oo.c min.c min64.c switch.c funcptr.c floyd_tests.c cond.c sumarray.c sumarray2.c int_or_ptr.c union.c cast_test.c strlib.c tree.c fib.c loop_minus1.c libglob.c peel.c structcopy.c printf.c stackframe_demo.c rotate.c \
627-
objectSelf.c objectSelfFancy.c objectSelfFancyOverriding.c io.c io_mem.c
627+
objectSelf.c objectSelfFancy.c objectSelfFancyOverriding.c io.c io_mem.c fptr_cmp.c
628628

629629

630630
LINKED_C_FILES = even.c odd.c

Diff for: floyd/client_lemmas.v

+6
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ Definition ListClassicalSep_environ := @LiftClassicalSep environ.
6464
Definition func_ptr' f v := func_ptr f v && emp.
6565

6666
#[export] Hint Resolve func_ptr_isptr: saturate_local.
67+
#[export] Hint Resolve SeparationLogic.func_ptr_valid_pointer: valid_pointer.
6768

6869
Lemma func_ptr'_isptr: forall f v, func_ptr' f v |-- !! isptr v.
6970
Proof.
@@ -73,6 +74,11 @@ apply andp_left1. apply func_ptr_isptr.
7374
Qed.
7475
#[export] Hint Resolve func_ptr'_isptr: saturate_local.
7576

77+
Lemma func_ptr'_valid_pointer: forall spec f, func_ptr' spec f |-- valid_pointer f.
78+
Proof. intros. unfold func_ptr'.
79+
apply andp_left1. apply SeparationLogic.func_ptr_valid_pointer. Qed.
80+
#[export] Hint Resolve func_ptr'_valid_pointer : valid_pointer.
81+
7682
Lemma split_func_ptr':
7783
forall fs p, func_ptr' fs p = func_ptr' fs p * func_ptr' fs p.
7884
Proof.

Diff for: progs64/fptr_cmp.c

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
int id (int x) { return x; }
2+
3+
int test_id1 () {
4+
if (&id) return(1); else return(0);
5+
}
6+
7+
int test_fptr (int (*f)(int)) {
8+
if (f) return(1); else return(0);
9+
}
10+
11+
int test_id2 () {
12+
return (test_fptr (&id)); }
13+
14+
int test_fptr_fptr () {
15+
return ((&test_id1)==(&test_id2)); }
16+
17+
int main (){
18+
return (test_id1() + test_id2() + test_fptr_fptr());
19+
}

0 commit comments

Comments
 (0)