@@ -668,7 +668,11 @@ function maybe_internal(itrig::InferenceTrigger)
668668 if isa (linfo, MethodInstance)
669669 m = linfo. def
670670 if isa (m, Method)
671- m. module === Base && m. name === :include_string && return false
671+ if m. module === Base
672+ m. name === :include_string && return false
673+ m. name === :_include_from_serialized && return false
674+ m. name === :return_types && return false # from `@inferred`
675+ end
672676 m. name === :eval && return false
673677 end
674678 end
@@ -747,9 +751,11 @@ function skiphigherorder(itrig::InferenceTrigger; exact::Bool=true)
747751 ft = Base. unwrap_unionall (Base. unwrap_unionall (MethodInstance (itrig. node). specTypes). parameters[1 ])
748752 sfs, idx = itrig. callerframes, itrig. btidx
749753 while idx < length (itrig. node. bt)
750- callermi = sfs[end ]. linfo
751- if ! hasparameter (callermi. specTypes, ft, exact)
752- return InferenceTrigger (itrig. node, sfs, idx)
754+ if ! isempty (sfs)
755+ callermi = sfs[end ]. linfo
756+ if ! hasparameter (callermi. specTypes, ft, exact)
757+ return InferenceTrigger (itrig. node, sfs, idx)
758+ end
753759 end
754760 ret = next_julia_frame (itrig. node. bt, idx)
755761 ret === nothing && return InferenceTrigger (itrig. node, sfs, idx)
@@ -905,8 +911,8 @@ The empty horizontal periods in the flamegraph correspond to times when somethin
905911The total width of the flamegraph is set from the `ROOT` node.
906912"""
907913function FlameGraphs. flamegraph (tinf:: InferenceTimingNode ; tmin = 0.0 , excluded_modules= Set ([Main:: Module ]), mode= nothing )
914+ isROOT (tinf) && isempty (tinf. children) && error (" root node has no children" )
908915 io = IOBuffer ()
909-
910916 # Compute a "root" frame for the top-level node, to cover the whole profile
911917 node_data, _ = _flamegraph_frame (io, tinf, tinf. start_time, true , excluded_modules, mode; toplevel= true )
912918 root = Node (node_data)
0 commit comments