Pipeline phase breakdown from Phase: lines under --log-times
Σ infer_ast is the sum of every function's infer_ast body-inference timing (the same total as in the table above). overhead = fundef_pass − Σ infer_ast: time spent inside the Fundef loop that isn't attributed to any function body — PAst.transform per function, dispatch (StrMap lookups, idenv union), and GC between calls.
Functions typed as empty typed, but the inferred result is empty (bottom)
An empty return means inference found no usable value — usually a red flag, though it can be legitimate for bail-out helpers (e.g. bail_if-style functions that never return). Drill into a package and use the empty return only filter to see which functions.