From 1ac80ff1d74c17066be01e0029996bf19a0bbc44 Mon Sep 17 00:00:00 2001 From: Virgile Prevosto <virgile.prevosto@m4x.org> Date: Fri, 15 Nov 2019 09:54:37 +0100 Subject: [PATCH] [logic] fix error handling in extensions Don't treat as fatal internal error of the extension exceptions that are raised as part of the standard error mechanism provided by the typing context. --- src/kernel_services/ast_queries/logic_typing.ml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/kernel_services/ast_queries/logic_typing.ml b/src/kernel_services/ast_queries/logic_typing.ml index 5920671ad02..9a4e7782568 100644 --- a/src/kernel_services/ast_queries/logic_typing.ml +++ b/src/kernel_services/ast_queries/logic_typing.ml @@ -544,11 +544,16 @@ module Extensions = struct with Not_found -> Kernel.fatal ~source:(fst loc) "unsupported clause of name '%s'" name in + let normal_error = ref false in + let has_error () = normal_error := true in + let wrapper = + typing_context.on_error (typer ~typing_context ~loc) has_error + in try - status, typer ~typing_context ~loc p + status, wrapper p with | (Log.AbortError _ | Log.AbortFatal _) as exn -> raise exn - | exn -> + | exn when not !normal_error -> Kernel.fatal "Typechecking ACSL extension %s raised exception %s" name (Printexc.to_string exn) end -- GitLab