let compute_actual ~with_alarms (one_library_fun, all_library_funs) state e =
  let interpreted_expr, o = match e with
    | { enode = Lval l }
        when (* make sure not a bit-field *) not (is_bitfield l ()) ->
        let _, _, interpreted_expr =
          eval_lval ~conflate_bottom:false ~with_alarms None state l
        in
        if one_library_fun then
          ignore (eval_lval ~conflate_bottom:true ~with_alarms None state l);
        if V.is_bottom interpreted_expr
        then begin
          if not one_library_fun then (* alarm *)
            ignore (eval_lval ~conflate_bottom:true ~with_alarms None state l);
          if all_library_funs
          then begin
            Value_parameters.result ~current:true
              "Non-termination@ in@ evaluation@ of@ library function@ call@ lvalue@ argument@ @[%a@]" (!d_lval) l;
          end;
          raise Got_bottom;
        end;
        let r = do_cast ~with_alarms (typeOf e) interpreted_expr in
        let o = offsetmap_of_lv ~with_alarms state l in
        (match o with
           | Some o -> r, o
           | None ->
               Format.printf "failure in evaluation of function arguments@\nlval %a -> %a@." !d_lval l V.pretty interpreted_expr;
               assert false)
    | _ ->
        let interpreted_expr = eval_expr ~with_alarms state e in
        if V.is_bottom interpreted_expr
        then begin
          Value_parameters.result ~current:true
            "Non-termination@ in@ evaluation@ of@ function@ call@ expression@ argument@ @[%a@]"
            (!d_exp) e;
            raise Got_bottom
          end;
          let typ = Cil.typeOf e in
          interpreted_expr,
          Builtins.offsetmap_of_value ~typ interpreted_expr
    in
    e, interpreted_expr, o