Definition module_fifo : module := {|
   mf_rep := fifo;
   mf_Gimport := (mallocN_spec :: freeN_spec :: nil);
   mf_Gexport := (fifo_new_spec :: fifo_put_spec
    :: fifo_empty_spec :: fifo_get_spec :: nil);
   mf_Gintern := nil;
   mf_V := nil;
   mf_funs := ((_fifo_new, Internal f_fifo_new) ::
   (_fifo_put, Internal f_fifo_put) ::
   (_fifo_empty, Internal f_fifo_empty) ::
   (_fifo_get, Internal f_fifo_get) :: nil);
   mf_funs_correct := funcs_correct
|}.Definition Vprog : varspecs := nil.Definition Gprog : funspecs :=   ltac:(with_library prog
  (mallocN_spec :: freeN_spec ::
    (map (fun f => f module_fifo.(mf_rep)) module_fifo.(mf_Gexport))
   ++ make_elem_spec :: main_spec::nil)).Definition Gtot := do_builtins (prog_defs prog) ++ Gprog.

Lemma prog_correct: semax_prog prog Vprog Gprog.