diff --git a/base/compiler/typeinfer.jl b/base/compiler/typeinfer.jl index 757f9f567a0c2..77e1fd02de8d0 100644 --- a/base/compiler/typeinfer.jl +++ b/base/compiler/typeinfer.jl @@ -369,10 +369,9 @@ end function transform_result_for_cache(interp::AbstractInterpreter, linfo::MethodInstance, valid_worlds::WorldRange, result::InferenceResult) inferred_result = result.src - # If we decided not to optimize, drop the OptimizationState now. - # External interpreters can override as necessary to cache additional information if inferred_result isa OptimizationState{typeof(interp)} - inferred_result = ir_to_codeinf!(inferred_result) + # TODO respect must_be_codeinf setting here? + result.src = inferred_result = ir_to_codeinf!(inferred_result) end if inferred_result isa CodeInfo inferred_result.min_world = first(valid_worlds) diff --git a/test/compiler/inline.jl b/test/compiler/inline.jl index 7920212537608..76ac7a60c8a86 100644 --- a/test/compiler/inline.jl +++ b/test/compiler/inline.jl @@ -705,6 +705,14 @@ mktempdir() do dir end end +# callsite inlining with cached frames +issue49823_events = @NamedTuple{evid::Int8, base_time::Float64}[ + (evid = 1, base_time = 0.0), (evid = -1, base_time = 0.0)] +issue49823(t, events) = @inline findlast(x -> x.evid ∈ (1, 4) && x.base_time <= t, events) +let src = @code_typed1 issue49823(0.0, issue49823_events) + @test count(isinvoke(:findlast), src.code) == 0 # successful inlining +end + # Issue #42264 - crash on certain union splits let f(x) = (x...,) # Test splatting with a Union of non-{Tuple, SimpleVector} types that require creating new `iterate` calls