Definition elemrep (rep: elemtype QS) (p: val) : mpred :=
  field_at Tsh t_struct_elem _a p (Vint (fst rep)) *
  (field_at Tsh t_struct_elem _b p (Vint (snd rep)) *
   (field_at_ Tsh t_struct_elem _next p)).Definition fifotype := forall  (contents: list (elemtype QS)) (p: val), mpred.Definition Gimport := mallocN_spec :: freeN_spec :: nil.Definition Gexport :=  fifo_new_spec :: fifo_put_spec
    :: fifo_empty_spec :: fifo_get_spec :: nil.Definition Gintern : list (fifotype -> ident*funspec) := nil.Definition G := Gimport ++
               (map (fun f => f fifo) (Gexport ++ Gintern)).Definition V: varspecs := nil.

(* Specifications: *)
Lemma body_fifo_new: semax_body V G f_fifo_new (fifo_new_spec fifo).
Lemma body_fifo_put: semax_body V G f_fifo_put (fifo_put_spec fifo).
Lemma body_fifo_empty: semax_body V G f_fifo_empty (fifo_empty_spec fifo).
Lemma body_fifo_get: semax_body V G f_fifo_get (fifo_get_spec fifo).