let unary_arithmetic_function ~with_alarms info f e1 =
try
let v1 = project_ival e1 in
inject_ival (f v1)
with Not_based_on_null ->
(match with_alarms.imprecision_tracing with
| Aignore -> ()
| Acall f -> f ()
| Alog _ -> match e1 with
| Map _ ->
Kernel.warning ~once:true ~current:true
"Operation %s %a incurs a loss of precision"
info pretty e1
| _ -> ());
topify_arith_origin e1