Section InternalCall.
(****************The following three conditions are new******************)

Lemma MS_structured_match_callstack_alloc_variables_aux:
forall tm1 sp tm2 m1 vars e m2 cenv mu (cs:callstack) fn lenv te,
Mem.alloc tm1 0 (fn_stackspace fn) = (tm2, sp) ->
fn_stackspace fn <= Int.max_unsigned ->
alloc_variables empty_env m1 vars e m2 ->
list_norepet (map fst vars) ->
cenv_compat cenv vars (fn_stackspace fn) ->
cenv_separated cenv vars ->
(forall id ofs, cenv!id = Some ofs -> In id (map fst vars)) ->
REACH_closed m1 (vis mu) -> sm_valid mu m1 tm1 -> SM_wd mu ->
Mem.inject (as_inj mu) m1 tm1 ->
structured_match_callstack mu m1 tm1 cs (Mem.nextblock m1) (Mem.nextblock tm1) ->
match_temps (restrict (as_inj mu) (vis mu)) lenv te ->
exists mu',
structured_match_callstack mu' m2 tm2 (Frame cenv fn e lenv te sp (Mem.nextblock m1) (Mem.nextblock m2) :: cs)
(Mem.nextblock m2) (Mem.nextblock tm2)
/\ Mem.inject (as_inj mu') m2 tm2
/\ intern_incr mu mu'
/\ (forall b, Mem.valid_block m1 b -> (as_inj mu') b = (as_inj mu) b)
/\ (forall b b' d', as_inj mu b = None -> as_inj mu' b = Some (b',d') -> b' = sp)
/\ sm_locally_allocated mu mu' m1 tm1 m2 tm2
/\ SM_wd mu' /\ sm_valid mu' m2 tm2
/\ REACH_closed m2 (vis mu')
/\ forall mu'', SM_wd mu'' -> intern_incr mu' mu'' -> sm_inject_separated mu' mu'' m2 tm2 ->
sm_inject_separated mu mu'' m1 tm1.