let import_function ~topify_arith_origin ~with_alarms info f e1 e2 =
    try
      let v1 = project_ival e1 in
      let v2 = project_ival e2 in
      inject_ival (f v1 v2)
    with Not_based_on_null  ->
      (match with_alarms.imprecision_tracing with
       | Aignore -> ()
       | Acall f -> f ()
       | Alog ->
           match e1,e2 with
           | Map _, Map _ ->
               CilE.warn_once "Operation %a %s %a incurs a loss of precision"
                 pretty e1
                 info
                 pretty e2
           | _ -> ());
      join (topify_arith_origin e1) (topify_arith_origin e2)