Local Open Scope nat.
Local Open Scope logic.
Definition fsig_of_funspec (fs: funspec)  :=
match fs with mk_funspec fsig _ _ _ _ _ _=> fsig end.
Local Arguments nested_field_type cs t gfs : simpl never.

Lemma semax_call_id0_alt:
forall Espec {cs: compspecs} Delta P Q R id bl argsig tfun retty cc A x Pre Post
(GLBL: (var_types Delta) ! id = None),
(glob_specs Delta) ! id = Some (NDmk_funspec (argsig, retty) cc A Pre Post) ->
(glob_types Delta) ! id = Some (type_of_funspec (NDmk_funspec (argsig, retty) cc A Pre Post)) ->
tfun = type_of_params argsig ->
@semax cs Espec Delta (tc_exprlist Delta (argtypes argsig) bl
&& |>((`(Pre x) (make_args' (argsig,retty) (eval_exprlist (argtypes argsig) bl))
* PROPx P (LOCALx Q (SEPx R)))))
(Scall None (Evar id (Tfunction tfun retty cc)) bl)
(normal_ret_assert
((ifvoid retty (`(Post x) (make_args nil nil))
(EX v:val, `(Post x) (make_args (ret_temp::nil) (v::nil))))
* PROPx P (LOCALx Q (SEPx R)))).