let cast_float_to_int ~with_alarms v =
   try
     let v1 = project_ival v in
     let f = Ival.project_float v1 in
     inject_ival (Ival.cast_float_to_int f)
   with Ival.Float_abstract.Nan_or_infinite | Not_based_on_null ->
     (match with_alarms.imprecision_tracing with
      | Aignore -> ()
      | Acall f -> f ()
      | Alog -> warn_once "cast float to int : alarm (TODO)");
     topify_arith_origin v