let verify_unmodified uses fdefs curiosh defiosh =
UD.VS.fold (fun vi b ->
let curido = RD.iosh_singleton_lookup curiosh vi in
let defido = RD.iosh_singleton_lookup defiosh vi in
match curido, defido with
Some(curid), Some(defid) ->
(if !debug then (Kernel.debug "verify_unmodified: curido: %d defido: %d" curid defid);
curid = defid && b)
| None, None ->
if not(UD.VS.mem vi fdefs) then
(if !debug then (Kernel.debug "verify_unmodified: %s not defined in function" vi.vname);
b)
else
let curios = try IH.find curiosh vi.vid
with Not_found -> RD.IOS.empty in
let defios = try IH.find defiosh vi.vid
with Not_found -> RD.IOS.empty in
RD.IOS.compare curios defios == 0 && b
| _, _ ->
(if !debug then Kernel.debug "verify_unmodified: %s has conflicting definitions. cur: %a\n def: %a"
vi.vname RD.ReachingDef.pretty ((),0,curiosh)
RD.ReachingDef.pretty ((),0,defiosh);
false))
uses true