summaryrefslogtreecommitdiff
path: root/src/FunsAnalysis.ml
diff options
context:
space:
mode:
authorSon Ho2022-06-30 06:46:52 +0200
committerSon Ho2022-06-30 06:46:52 +0200
commit4f33892c81cdaf6aefaad9b7cef1456dcfead67c (patch)
tree5cfe38e3cea5518179f3655d22171620287817aa /src/FunsAnalysis.ml
parent775b2473976075aa6458a51682f3beeee75dc17a (diff)
Take failing rvalues into account in FunsAnalysis.analyze_fun_decls
Diffstat (limited to '')
-rw-r--r--src/FunsAnalysis.ml8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/FunsAnalysis.ml b/src/FunsAnalysis.ml
index dc205eb9..b8dd17d8 100644
--- a/src/FunsAnalysis.ml
+++ b/src/FunsAnalysis.ml
@@ -9,6 +9,7 @@
open LlbcAst
open Modules
+module EU = ExpressionsUtils
type fun_info = {
can_fail : bool;
@@ -57,6 +58,13 @@ let analyze_module (m : llbc_module) (funs_map : fun_decl FunDeclId.Map.t)
can_fail := true;
super#visit_Assert env a
+ method! visit_rvalue _env rv =
+ match rv with
+ | Use _ | Ref _ | Discriminant _ | Aggregate _ -> ()
+ | UnaryOp (uop, _) -> can_fail := EU.unop_can_fail uop || !can_fail
+ | BinaryOp (bop, _, _) ->
+ can_fail := EU.binop_can_fail bop || !can_fail
+
method! visit_Call env call =
(match call.func with
| Regular id ->