diff --git a/src/plugins/e-acsl/src/analyses/typing.ml b/src/plugins/e-acsl/src/analyses/typing.ml index 18ebf2bfe89ffd54989c2ec9ce42d36e10bc8600..9520deba969efcb50069e926bea167be9f96da46 100644 --- a/src/plugins/e-acsl/src/analyses/typing.ml +++ b/src/plugins/e-acsl/src/analyses/typing.ml @@ -882,6 +882,7 @@ and type_predicate ~lenv p = "preprocessing of quantified predicate" Bound_variables.get_preprocessed_quantifier p + Printer.pp_predicate in let guards = List.map @@ -938,9 +939,9 @@ let unsafe_set t ?ctx ~lenv ty = (******************************************************************************) let get_number_ty ~lenv t = - (Error.retrieve_preprocessing "typing" (Memo.get ~lenv) t).ty + (Error.retrieve_preprocessing "typing" (Memo.get ~lenv) t Printer.pp_term).ty let get_integer_op ~lenv t = - (Error.retrieve_preprocessing "typing" (Memo.get ~lenv) t).op + (Error.retrieve_preprocessing "typing" (Memo.get ~lenv) t Printer.pp_term).op let get_integer_op_of_predicate ~lenv p = (type_predicate ~lenv p).op (* {!typ_of_integer}, but handle the not-integer cases. *) @@ -956,15 +957,18 @@ let extract_typ t ty = | Larrow _ -> Error.not_yet "unsupported logic type: type arrow" let get_typ ~lenv t = - let info = Error.retrieve_preprocessing "typing" (Memo.get ~lenv) t in + let info = + Error.retrieve_preprocessing "typing" (Memo.get ~lenv) t Printer.pp_term in extract_typ t info.ty let get_op ~lenv t = - let info = Error.retrieve_preprocessing "typing" (Memo.get ~lenv) t in + let info = + Error.retrieve_preprocessing "typing" (Memo.get ~lenv) t Printer.pp_term in extract_typ t info.op let get_cast ~lenv t = - let info = Error.retrieve_preprocessing "typing" (Memo.get ~lenv) t in + let info = + Error.retrieve_preprocessing "typing" (Memo.get ~lenv) t Printer.pp_term in try Option.map typ_of_number_ty info.cast with Not_a_number -> None diff --git a/src/plugins/e-acsl/src/code_generator/quantif.ml b/src/plugins/e-acsl/src/code_generator/quantif.ml index 2a5e0a68adecde5556a6eee78f339655f409245d..ee06ec1a361e00a594d3074f20d374b0b81886d2 100644 --- a/src/plugins/e-acsl/src/code_generator/quantif.ml +++ b/src/plugins/e-acsl/src/code_generator/quantif.ml @@ -71,6 +71,7 @@ let convert kf env loc ~is_forall quantif = "preprocessing of quantified predicate" Bound_variables.get_preprocessed_quantifier quantif + Printer.pp_predicate in match has_empty_quantif_with_false_negative bound_vars, is_forall with | true, true -> diff --git a/src/plugins/e-acsl/src/libraries/error.ml b/src/plugins/e-acsl/src/libraries/error.ml index 6062ebdf0d6976ed1537f90c9d10dbda579798cd..795d4ec294c495ffb28985aaa455db0ed4d63fd2 100644 --- a/src/plugins/e-acsl/src/libraries/error.ml +++ b/src/plugins/e-acsl/src/libraries/error.ml @@ -79,13 +79,17 @@ let handle f x = generic_handle f x x type 'a or_error = Res of 'a | Err of exn -let retrieve_preprocessing analyse_name getter parameter = +let retrieve_preprocessing analyse_name getter parameter pp = try match getter parameter with | Res res -> res | Err exn -> raise exn with Not_memoized -> - Options.fatal "%s was not performed on construct" analyse_name + Options.fatal + "%s was not performed on construct %a" + analyse_name + pp + parameter (* Local Variables: diff --git a/src/plugins/e-acsl/src/libraries/error.mli b/src/plugins/e-acsl/src/libraries/error.mli index 9dcc0355b6138e532e11a285244655646958be28..36224e573ca34b68f0359dc57d1a0064184c31a3 100644 --- a/src/plugins/e-acsl/src/libraries/error.mli +++ b/src/plugins/e-acsl/src/libraries/error.mli @@ -59,10 +59,15 @@ val nb_not_yet: unit -> int val print_not_yet: string -> unit (** Print the "not yet" message without raising an exception. *) -val retrieve_preprocessing: string -> ('a -> 'b or_error) -> 'a -> 'b +val retrieve_preprocessing: + string -> + ('a -> 'b or_error) -> + 'a -> + (Format.formatter -> 'a -> unit) -> + 'b (** Retrieve the result of a preprocessing phase, which possibly failed. - The [string] argument is used to display a message in case the preprocessing - phase did not compute the required result. *) + The [string] argument and the formatter are used to display a message in + case the preprocessing phase did not compute the required result. *) (* Local Variables: