Definition weak_mapsto_ sh e rho :=
match (eval_expr e rho) with
| Vptr b o => (mapsto_ sh (typeof e) (Vptr b o)) ||
(mapsto_ sh (typeof e) (Vptr b o))
| _ => FF
end.

Lemma semax_set_forward':
forall (Delta: tycontext) (P: assert) id e t,
typeof_temp Delta id = Some t ->
is_neutral_cast (typeof e) t = true ->
semax Espec Delta
(fun rho =>
|> ((tc_expr Delta e rho) && P rho))
(Sset id e)
(normal_ret_assert
(fun rho => (EX old:val,
!! (eval_id id rho =  subst id old (eval_expr e) rho) &&
subst id old P rho))).