Module Float.
(* This experiment shows what kind of error message you get if you put the wrong LOCAL precondition. In fact, Vfloat x is wrong, leading to an unsatisfying precondition, it must be Vsingle. *)
Definition fabs_single_spec :=
DECLARE _fabs_single
WITH x: float
PRE [ _x OF Tfloat F32 noattr]
PROP() LOCAL(temp _x (Vfloat x)) SEP()
POST [ Tfloat F32 noattr ]
PROP() LOCAL (temp ret_temp (Vfloat (Float.abs x))) SEP().
Definition Gprog : funspecs :=
ltac:(with_library prog [ fabs_single_spec ]).

(* Specifications: *)
Lemma body_fabs_single: semax_body Vprog Gprog f_fabs_single fabs_single_spec.