let force_compute () =
  try
    let kf, library = Globals.entry_point () in
    ignore (compute_entry_point kf ~library);
    (* Move all alarms to Db *)
    Db.Properties.synchronize_alarms [ Db.Value.self ];
    Db.Value.mark_as_computed ();
    (* Cleanup trivially redundant alarms *)
    !Db.Scope.rm_asserts ()
  with
  | Db.Value.Aborted ->
      (* This case is reached only if [do_degenerate] did not raise another
         exception to handle abortion properly. See the behavior of the GUI
         in case of degeneration to understand the machinery. *)

      Db.Value.mark_as_computed ();
      Value_parameters.abort
        "Degeneration occured:@\nresults are not correct for lines of code that can be reached from the degeneration point."
  | Globals.No_such_entry_point _ as exn -> raise exn
  | exn -> Db.Value.mark_as_computed (); raise exn