let assigns_goal m1 region m2 =
    let zones =
      match region with
        | [] -> dzone_empty ()
        | [a] -> dzone_assigned m1 a
        | a::others ->
            List.fold_left
              (fun dz a ->
                 dzone_union dz (dzone_assigned m1 a)
              ) (dzone_assigned m1 a) others
    in
    RtLib.is_havoc (F.var m1.valloc) (F.var m1.vbits) zones (F.var m2.vbits)