diff --git a/src/plugins/from/callwise.ml b/src/plugins/from/callwise.ml
index 38efe4f744c25a49d651aab296356be8af914794..71038fdbbc65415215314d7133d10747a5dcd439 100644
--- a/src/plugins/from/callwise.ml
+++ b/src/plugins/from/callwise.ml
@@ -68,14 +68,13 @@ let call_for_individual_froms (call_type, value_initial_state, call_stack) =
   if From_parameters.ForceCallDeps.get () then begin
     let current_function, call_site = List.hd call_stack in
     let register_from froms =
-      try
-        let { table_for_calls = table } = List.hd !call_froms_stack in
-        merge_call_froms table call_site froms;
-        record_callwise_dependencies_in_db call_site froms;
-      with Failure _ ->
-        From_parameters.fatal
-          "calldeps internal error 23 empty callfromsstack %a"
-          Kernel_function.pretty current_function
+      record_callwise_dependencies_in_db call_site froms;
+      match !call_froms_stack with
+      | { table_for_calls } :: _ ->
+        merge_call_froms table_for_calls call_site froms;
+      | [] ->
+        (* Empty call stack: this is the main entry point with no call site. *)
+        assert (call_site = Cil_types.Kglobal);
     in
     let compute_from_behaviors bhv =
       let assigns = Ast_info.merge_assigns bhv in