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 extern_correct: semax_func Vprog Gtot ((_mallocN,(External (EF_external _mallocN (mksignature (AST.Tint :: nil) (Some AST.Tint))) (Tcons tint Tnil) (tptr tvoid))) :: (_freeN, (External (EF_external _freeN (mksignature (AST.Tint :: AST.Tint :: nil) None)) (Tcons (tptr tvoid) (Tcons tint Tnil)) tvoid)) :: nil) (mallocN_spec::freeN_spec::nil).