Skip to content
Snippets Groups Projects
Commit 54ca5b81 authored by David Bühler's avatar David Bühler Committed by Virgile Prevosto
Browse files

[Inout] Fixes the location computed for \exit_status in assigns clauses.

Handles \exit_status exactly as \result.
parent d8fd486b
No related branches found
No related tags found
No related merge requests found
...@@ -115,20 +115,21 @@ let eval_assigns kf state assigns = ...@@ -115,20 +115,21 @@ let eval_assigns kf state assigns =
not (Kernel_function.is_formal v kf) not (Kernel_function.is_formal v kf)
| Base.CLogic_Var _ | Base.Null | Base.String _ -> true) | Base.CLogic_Var _ | Base.Null | Base.String _ -> true)
in in
let out_term = out.it_content in
let outputs_under, outputs_over, deps = let outputs_under, outputs_over, deps =
try try
if Logic_utils.is_result out.it_content if Logic_const.(is_result out_term || is_exit_status out_term)
then (Zone.bottom, Zone.bottom, Zone.bottom) then (Zone.bottom, Zone.bottom, Zone.bottom)
else else
let loc_out_under, loc_out_over, deps = let loc_out_under, loc_out_over, deps =
!Db.Properties.Interp.loc_to_loc_under_over ~result:None state out.it_content !Db.Properties.Interp.loc_to_loc_under_over ~result:None state out_term
in in
(enumerate_valid_bits_under Write loc_out_under, (enumerate_valid_bits_under Write loc_out_under,
enumerate_valid_bits Write loc_out_over, enumerate_valid_bits Write loc_out_over,
clean_deps deps) clean_deps deps)
with Db.Properties.Interp.No_conversion -> with Db.Properties.Interp.No_conversion ->
Inout_parameters.warning ~current:true ~once:true Inout_parameters.warning ~current:true ~once:true
"failed to interpret assigns clause '%a'" Printer.pp_term out.it_content; "failed to interpret assigns clause '%a'" Printer.pp_term out_term;
(Zone.bottom, Zone.top, Zone.top) (Zone.bottom, Zone.top, Zone.top)
in in
(* Compute all inputs as a zone *) (* Compute all inputs as a zone *)
......
...@@ -11,8 +11,6 @@ ...@@ -11,8 +11,6 @@
[eva] Done for function f [eva] Done for function f
[eva] computing for function g <- main. [eva] computing for function g <- main.
Called from tests/spec/assigns_result.i:16. Called from tests/spec/assigns_result.i:16.
[inout] tests/spec/assigns_result.i:16: Warning:
failed to interpret assigns clause '\exit_status'
[eva] using specification for function g [eva] using specification for function g
[eva] tests/spec/assigns_result.i:16: Warning: [eva] tests/spec/assigns_result.i:16: Warning:
cannot interpret assigns clause \exit_status cannot interpret assigns clause \exit_status
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment