Definition call_setup2
(cs: compspecs) Qtemp Qvar GV a Delta P Q R R'
fs argsig retty cc (A: rmaps.TypeTree)  Pre Post NEPre NEPost
(bl: list expr) (vl : list val)
(Qactuals : PTree.t _)
(witness: functors.MixVariantFunctor._functor (rmaps.dependent_type_functor_rec nil A) mpred)
(Frame: list mpred)
(Ppre: list Prop) (Qpre : list localdef) (Rpre: list mpred)
(Qpre_temp : PTree.t _) GV':=
call_setup1 cs Qtemp Qvar GV a Delta P Q R R' fs argsig retty cc A Pre Post NEPre NEPost bl vl Qactuals /\
Pre nil witness = PROPx Ppre (LOCALx Qpre (SEPx Rpre)) /\
local2ptree Qpre = (Qpre_temp, PTree.empty _, nil, GV') /\
ENTAIL Delta, PROPx P (LOCALx Q (SEPx R))
|-- !! Forall (check_one_temp_spec Qactuals) (PTree.elements Qpre_temp) /\
check_gvars_spec GV GV' /\
fold_right_sepcon R |-- fold_right_sepcon Rpre * fold_right_sepcon Frame.

Lemma semax_call_id1_x_wow:
forall  (cs: compspecs) Qtemp Qvar GV a Delta P Q R R'
fs argsig retty' cc (A: rmaps.TypeTree)  Pre Post NEPre NEPost
(witness: functors.MixVariantFunctor._functor (rmaps.dependent_type_functor_rec nil A) mpred)
(Frame: list mpred)
(bl: list expr)
(Ppre: list Prop) (Qpre : list localdef) (Rpre: list mpred)
(Qactuals Qpre_temp : PTree.t _) GV'
(vl : list val)
(SETUP: call_setup2 cs Qtemp Qvar GV a Delta P Q R R' fs argsig retty' cc A Pre Post NEPre NEPost bl vl Qactuals
witness Frame Ppre Qpre Rpre Qpre_temp GV')
retty  Espec ret ret'
(Post2: environ -> mpred)
(Qnew: list localdef)
(B: Type)
(Ppost: B -> list Prop)
(F: B -> val)
(Rpost: B -> list mpred)
(TYret: typeof_temp Delta ret = Some retty)
(RETinit: (temp_types Delta) ! ret' = Some retty')
(OKretty: check_retty retty)
(OKretty': check_retty retty')
(NEUTRAL: is_neutral_cast retty' retty = true)
(NEret: ret <> ret')
(POST1: Post nil witness = EX vret:B, PROPx (Ppost vret)
(LOCALx (temp ret_temp (F vret) :: nil)
(SEPx (Rpost vret))))
(DELETE: remove_localdef_temp ret Q = Qnew)
(DELETE' : remove_localdef_temp ret' Q = Q)
(H0: Post2 = EX vret:B, PROPx (P++ Ppost vret)
(LOCALx (temp ret (F vret) :: Qnew)
(SEPx (Rpost vret ++ Frame))))
(PPRE: fold_right_and True Ppre),
@semax cs Espec Delta (PROPx P (LOCALx Q (SEPx R')))
(Ssequence (Scall (Some ret') a bl)
(Sset ret (Ecast (Etempvar ret' retty') retty)))
(normal_ret_assert Post2).