(*From Cminorgenproof*)
Remark val_inject_function_pointer:
  forall v fd j tv,
  Genv.find_funct ge v = Some fd ->
  globalfunction_ptr_inject j ->
  val_inject j v tv ->
  tv = v.

Lemma match_env_alloc_variables: forall vars e1 m1 e2 m2, Clight.alloc_variables e1 m1 vars e2 m2 -> forall mu te1 tm1, match_env (restrict (as_inj mu) (vis mu)) e1 te1 -> Mem.inject (as_inj mu) m1 tm1 -> SM_wd mu -> sm_valid mu m1 tm1 -> exists te2 tm2 mu', Csharpminor.alloc_variables te1 tm1 (map transl_var vars) te2 tm2 /\ match_env (restrict (as_inj mu') (vis mu')) e2 te2 /\ Mem.inject (as_inj mu') m2 tm2 /\ intern_incr mu mu' /\ sm_inject_separated mu mu' m1 tm1 /\ sm_locally_allocated mu mu' m1 tm1 m2 tm2 /\ SM_wd mu' /\ sm_valid mu' m2 tm2 /\ (REACH_closed m1 (vis mu) -> REACH_closed m2 (vis mu')).