let interp_annot state ca =
let fold state (pred,status_update) =
let result = eval_predicate state pred in
Value_parameters.result ~once:true ~current:true
"Assertion got status %s."
(match result with
| Unknown ->
status_update
(Checked {emitter = "value analysis";
valid = Maybe});
"unknown"
| True ->
status_update
(Checked {emitter = "value analysis";
valid = Cil_types.True});
"valid"
| False ->
status_update
(Checked {emitter = "value analysis";
valid = Cil_types.False});
"invalid (stopping propagation).");
( match result with
| False -> State_set.empty
| True | Unknown ->
reduce_by_disjunction
state
(Value_parameters.SemanticUnrollingLevel.get ())
pred)
in
List.fold_left fold state ca