|
|
@ -372,14 +372,14 @@ module Domain : AbstractDomain.S with type t = astate = struct
|
|
|
|
Memory.fold (one_addr state.subst) state.astate.heap (Memory.empty, true)
|
|
|
|
Memory.fold (one_addr state.subst) state.astate.heap (Memory.empty, true)
|
|
|
|
in
|
|
|
|
in
|
|
|
|
if has_converged then (
|
|
|
|
if has_converged then (
|
|
|
|
L.d_strln "Join unified addresses:" ;
|
|
|
|
let pp_union_find_classes f subst =
|
|
|
|
L.d_increase_indent () ;
|
|
|
|
Container.iter subst ~fold:AddressUF.fold_sets
|
|
|
|
Container.iter state.subst ~fold:AddressUF.fold_sets
|
|
|
|
~f:(fun ((repr : AddressUF.Repr.t), set) ->
|
|
|
|
~f:(fun ((repr : AddressUF.Repr.t), set) ->
|
|
|
|
F.fprintf f "%a=%a@;" AbstractAddress.pp
|
|
|
|
L.d_printfln "%a=%a" AbstractAddress.pp
|
|
|
|
(repr :> AbstractAddress.t)
|
|
|
|
(repr :> AbstractAddress.t)
|
|
|
|
AddressUnionSet.pp set )
|
|
|
|
AddressUnionSet.pp set ) ;
|
|
|
|
in
|
|
|
|
L.d_decrease_indent () ;
|
|
|
|
L.d_printfln "Join unified addresses:@\n@[<v2> %a@]" pp_union_find_classes state.subst ;
|
|
|
|
let stack = Stack.map (to_canonical_address state.subst) state.astate.stack in
|
|
|
|
let stack = Stack.map (to_canonical_address state.subst) state.astate.stack in
|
|
|
|
{heap; stack} )
|
|
|
|
{heap; stack} )
|
|
|
|
else normalize {state with astate= {state.astate with heap}}
|
|
|
|
else normalize {state with astate= {state.astate with heap}}
|
|
|
|