let call_exit_only caller_env stmt kf args ~pre ~pexit ~assigns ~p_exit =
on_context caller_env "call_normal" p_exit Keep_opened Keep_assigns
(fun env assigns_method p_exit ->
add_dependencies (WpAnnot.get_called_assigns kf) ;
add_dependencies (WpAnnot.get_called_exit_conditions kf) ;
add_dependencies (WpAnnot.get_called_preconditions_at kf stmt) ;
let call = callenv env stmt args in
let x_status = L.exit_status env in
let env_pre = L.call_pre env kf call.v_args call.m_pre in
let env_exit = L.call_exit env kf call.v_args call.m_pre call.m_post x_status in
let p_called = do_hypothesis env_exit "exit-condition" pexit p_exit in
let p_called = D.forall [x_status] p_called in
let asgnd = assigned_of_assigns env_pre assigns in
let p_havoc = havoc_region WpPropId.StmtAssigns call.m_post asgnd p_called in
let p_before = do_hypothesis env_pre "pre-condition" pre p_havoc in
check_assigns call.m_pre assigns_method asgnd p_before)