Open
Description
openedon Jan 5, 2024
Just a small bug in the @code_typed
information for a function that calls a no-inlined callee (with side effects), whose return value is unused:
julia> @noinline f() = (println(); true)
f (generic function with 1 method)
julia> f1(x) = (f(); return x+1)
f1 (generic function with 1 method)
julia> @code_typed f1(10)
CodeInfo(
1 ─ invoke Main.f()::Any
│ %2 = Base.add_int(x, 1)::Int64
└── return %2
) => Int64
The incorrect line is: invoke Main.f()::Any
.
This should instead be: invoke Main.f()::Bool
.
Of course, since the return value is unused, this isn't very consequential, but it confused me as a red herring for a bit in a more complicated scenario earlier today.
Finally, it's worth noting that the compiler does know the true return type, since @code_llvm
shows it return an i8
:
julia> @code_llvm f1(10)
; Function Signature: f1(Int64)
; @ REPL[16]:1 within `f1`
define i64 @julia_f1_2311(i64 signext %"x::Int64") #0 {
top:
%0 = call i8 @j_f_2314()
; ┌ @ int.jl:87 within `+`
%1 = add i64 %"x::Int64", 1
; └
ret i64 %1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment