From 973edf6c9c6b411ec0a91287015ad369b1407363 Mon Sep 17 00:00:00 2001 From: karoliineh Date: Wed, 23 Aug 2023 15:03:03 +0300 Subject: [PATCH] Use ReachableFromA in useAfterFree --- src/analyses/useAfterFree.ml | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/analyses/useAfterFree.ml b/src/analyses/useAfterFree.ml index d5d2ba0266..4e28c49771 100644 --- a/src/analyses/useAfterFree.ml +++ b/src/analyses/useAfterFree.ml @@ -156,11 +156,18 @@ struct if D.is_empty caller_state then [caller_state, caller_state] else ( - let reachable_from_args = List.fold_left (fun acc arg -> Queries.LS.join acc (ctx.ask (ReachableFrom arg))) (Queries.LS.empty ()) args in - if Queries.LS.is_top reachable_from_args || D.is_top caller_state then + let reachable_from_args = List.fold_left (fun acc arg -> Queries.AD.join acc (ctx.ask (ReachableFromA arg))) (Queries.AD.empty ()) args in + if Queries.AD.is_top reachable_from_args || D.is_top caller_state then [caller_state, caller_state] else - let reachable_vars = List.map fst (Queries.LS.elements reachable_from_args) in + let reachable_vars = + let get_vars addr vs = + match addr with + | Queries.AD.Addr.Addr (v,_) -> v :: vs + | _ -> vs + in + Queries.AD.fold get_vars reachable_from_args [] + in let callee_state = D.filter (fun var -> List.mem var reachable_vars) caller_state in [caller_state, callee_state] )