Set Bullet Behavior "Strict Subproofs".
Definition acquire_spec := DECLARE _acquire acquire_spec.
Definition release_spec := DECLARE _release release_spec.
Definition makelock_spec := DECLARE _makelock (makelock_spec _).
Definition freelock_spec := DECLARE _freelock (freelock_spec _).
Definition makecond_spec := DECLARE _makecond (makecond_spec _).
Definition freecond_spec := DECLARE _freecond (freecond_spec _).
Definition wait_spec := DECLARE _waitcond (wait2_spec _).
Definition signal_spec := DECLARE _signalcond (signal_spec _).
Definition surely_malloc_spec := DECLARE _surely_malloc surely_malloc_spec'.
Definition q_new_spec := DECLARE _q_new q_new_spec'.
Definition q_del_spec := DECLARE _q_del q_del_spec'.
Definition q_add_spec := DECLARE _q_add q_add_spec'.
Definition q_remove_spec := DECLARE _q_remove q_remove_spec'.
Definition q_tryremove_spec := DECLARE _q_tryremove q_tryremove_spec'.
Definition Gprog : funspecs := ltac:(with_library prog
[surely_malloc_spec; acquire_spec; release_spec; makelock_spec; freelock_spec;
makecond_spec; freecond_spec; wait_spec; signal_spec;
q_new_spec; q_del_spec; q_add_spec; q_remove_spec; q_tryremove_spec]).
Definition extlink := ext_link_prog prog.
Definition Espec := add_funspecs (Concurrent_Espec unit _ extlink) extlink Gprog.
Existing Instance Espec.

Lemma prog_correct:
semax_prog prog tt Vprog Gprog.