let check_non_overlapping state lvs1 lvs2 =
    List.iter
      (fun lv1 ->
         List.iter
           (fun lv2 ->
              let zone1 =
                Locations.valid_enumerate_bits ~for_writing:false
                  (lval_to_loc ~with_alarms:CilE.warn_none_mode state lv1)
              in
              let zone2 =
                Locations.valid_enumerate_bits ~for_writing:false
                  (lval_to_loc ~with_alarms:CilE.warn_none_mode state lv2)
              in
              if Locations.Zone.intersects zone1 zone2
              then begin
                CilE.set_syntactic_context
                  (CilE.SySep
                     (Cil.mkAddrOf ~loc:(CurrentLoc.get ()) lv1,
                      Cil.mkAddrOf ~loc:(CurrentLoc.get ()) lv2));
                CilE.warn_separated warn_all_mode
              end)
           lvs2)
      lvs1