Skip to content

@code_native crashes Julia on master #44694

@petvana

Description

@petvana

While playing with dict, I found Julia may crash when printing @code_native, but the llvm code runs fine. Prefetch is important for SIMD implementation. It is not from my head

https://github.com/JuliaCollections/DataStructures.jl/blob/f90dd8ceb1808123136d96599fbf41407ef4fadc/src/swiss_dict.jl#L103-L105

Julia 1.7.2

julia> _prefetchr(p::Ptr) = ccall("llvm.prefetch", llvmcall, Cvoid, 
           (Ref{Int8}, Int32, Int32, Int32), Ptr{Int8}(p), 0, 3, 1);

julia> a = [1];

julia> _prefetchr(pointer(a))

julia> @code_llvm _prefetchr(pointer(a))
;  @ REPL[6]:1 within `_prefetchr`
define void @julia__prefetchr_197(i64 zeroext %0) #0 {
top:
  %1 = inttoptr i64 %0 to i8*
  call void @llvm.prefetch.p0i8(i8* %1, i32 0, i32 3, i32 1)
  ret void
}

julia> @code_native _prefetchr(pointer(a))
        .text
; ┌ @ REPL[6]:1 within `_prefetchr`
        prefetcht0      (%rdi)
        retq
        nopw    %cs:(%rax,%rax)
; └
}

Master

julia> _prefetchr(p::Ptr) = ccall("llvm.prefetch", llvmcall, Cvoid, 
           (Ref{Int8}, Int32, Int32, Int32), Ptr{Int8}(p), 0, 3, 1);

julia> a = [1];

julia> _prefetchr(pointer(a))

julia> @code_llvm _prefetchr(pointer(a))
;  @ REPL[1]:1 within `_prefetchr`
define void @julia__prefetchr_134(i64 zeroext %0) #0 {
top:
  %1 = inttoptr i64 %0 to i8*
  call void @llvm.prefetch.p0i8(i8* %1, i32 0, i32 3, i32 1)
  ret void
}

julia> @code_native _prefetchr(pointer(a))
Intrinsic name not mangled correctly for type arguments! Should be: llvm.prefetch.p0i8
void (i8*, i32, i32, i32)* @llvm.prefetch
in function julia__prefetchr_158
LLVM ERROR: Broken function found, compilation aborted!

signal (6): Aborted
in expression starting at REPL[5]:1
gsignal at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
abort at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
_ZN4llvm18report_fatal_errorERKNS_5TwineEb at /home/petr/software/julia/julia-petvana/usr/bin/../lib/libLLVM-13jl.so (unknown line)
_ZN4llvm18report_fatal_errorEPKcb at /home/petr/software/julia/julia-petvana/usr/bin/../lib/libLLVM-13jl.so (unknown line)
_ZN12_GLOBAL__N_118VerifierLegacyPass13runOnFunctionERN4llvm8FunctionE at /home/petr/software/julia/julia-petvana/usr/bin/../lib/libLLVM-13jl.so (unknown line)
_ZN4llvm13FPPassManager13runOnFunctionERNS_8FunctionE at /home/petr/software/julia/julia-petvana/usr/bin/../lib/libLLVM-13jl.so (unknown line)
_ZN4llvm13FPPassManager11runOnModuleERNS_6ModuleE at /home/petr/software/julia/julia-petvana/usr/bin/../lib/libLLVM-13jl.so (unknown line)
_ZN4llvm6legacy15PassManagerImpl3runERNS_6ModuleE at /home/petr/software/julia/julia-petvana/usr/bin/../lib/libLLVM-13jl.so (unknown line)
jl_dump_function_asm_impl at /home/petr/software/julia/julia-petvana/src/disasm.cpp:1250
_dump_function_linfo_native at /home/petr/software/julia/julia-petvana/usr/share/julia/stdlib/v1.9/InteractiveUtils/src/codeview.jl:194
_dump_function at /home/petr/software/julia/julia-petvana/usr/share/julia/stdlib/v1.9/InteractiveUtils/src/codeview.jl:171
_dump_function at /home/petr/software/julia/julia-petvana/usr/share/julia/stdlib/v1.9/InteractiveUtils/src/codeview.jl:152 [inlined]
#code_native#31 at /home/petr/software/julia/julia-petvana/usr/share/julia/stdlib/v1.9/InteractiveUtils/src/codeview.jl:254
code_native##kw at /home/petr/software/julia/julia-petvana/usr/share/julia/stdlib/v1.9/InteractiveUtils/src/codeview.jl:254
unknown function (ip: 0x7fe83602fc04)
_jl_invoke at /home/petr/software/julia/julia-petvana/src/gf.c:2367 [inlined]
ijl_apply_generic at /home/petr/software/julia/julia-petvana/src/gf.c:2549
#code_native#32 at /home/petr/software/julia/julia-petvana/usr/share/julia/stdlib/v1.9/InteractiveUtils/src/codeview.jl:261
code_native at /home/petr/software/julia/julia-petvana/usr/share/julia/stdlib/v1.9/InteractiveUtils/src/codeview.jl:261
unknown function (ip: 0x7fe83602f166)
_jl_invoke at /home/petr/software/julia/julia-petvana/src/gf.c:2367 [inlined]
ijl_apply_generic at /home/petr/software/julia/julia-petvana/src/gf.c:2549
jl_apply at /home/petr/software/julia/julia-petvana/src/julia.h:1832 [inlined]
do_call at /home/petr/software/julia/julia-petvana/src/interpreter.c:126
eval_value at /home/petr/software/julia/julia-petvana/src/interpreter.c:215
eval_stmt_value at /home/petr/software/julia/julia-petvana/src/interpreter.c:166 [inlined]
eval_body at /home/petr/software/julia/julia-petvana/src/interpreter.c:612
jl_interpret_toplevel_thunk at /home/petr/software/julia/julia-petvana/src/interpreter.c:750
jl_toplevel_eval_flex at /home/petr/software/julia/julia-petvana/src/toplevel.c:906
jl_toplevel_eval_flex at /home/petr/software/julia/julia-petvana/src/toplevel.c:850
ijl_toplevel_eval_in at /home/petr/software/julia/julia-petvana/src/toplevel.c:965
eval at ./boot.jl:370 [inlined]
eval_user_input at /home/petr/software/julia/julia-petvana/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:151
repl_backend_loop at /home/petr/software/julia/julia-petvana/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:247
start_repl_backend at /home/petr/software/julia/julia-petvana/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:232
#run_repl#47 at /home/petr/software/julia/julia-petvana/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:369
run_repl at /home/petr/software/julia/julia-petvana/usr/share/julia/stdlib/v1.9/REPL/src/REPL.jl:356
jfptr_run_repl_61844 at /home/petr/software/julia/julia-petvana/usr/lib/julia/sys.so (unknown line)
_jl_invoke at /home/petr/software/julia/julia-petvana/src/gf.c:2367 [inlined]
ijl_apply_generic at /home/petr/software/julia/julia-petvana/src/gf.c:2549
#962 at ./client.jl:419
jfptr_YY.962_52588 at /home/petr/software/julia/julia-petvana/usr/lib/julia/sys.so (unknown line)
_jl_invoke at /home/petr/software/julia/julia-petvana/src/gf.c:2367 [inlined]
ijl_apply_generic at /home/petr/software/julia/julia-petvana/src/gf.c:2549
jl_apply at /home/petr/software/julia/julia-petvana/src/julia.h:1832 [inlined]
jl_f__call_latest at /home/petr/software/julia/julia-petvana/src/builtins.c:769
#invokelatest#2 at ./essentials.jl:729 [inlined]
invokelatest at ./essentials.jl:727 [inlined]
run_main_repl at ./client.jl:404
exec_options at ./client.jl:318
_start at ./client.jl:518
jfptr__start_36277 at /home/petr/software/julia/julia-petvana/usr/lib/julia/sys.so (unknown line)
_jl_invoke at /home/petr/software/julia/julia-petvana/src/gf.c:2367 [inlined]
ijl_apply_generic at /home/petr/software/julia/julia-petvana/src/gf.c:2549
jl_apply at /home/petr/software/julia/julia-petvana/src/julia.h:1832 [inlined]
true_main at /home/petr/software/julia/julia-petvana/src/jlapi.c:567
jl_repl_entrypoint at /home/petr/software/julia/julia-petvana/src/jlapi.c:711
main at /home/petr/software/julia/julia-petvana/cli/loader_exe.c:59
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
_start at /home/petr/software/julia/julia-petvana/julia (unknown line)
Allocations: 1473343 (Pool: 1472186; Big: 1157); GC: 2
Aborted (core dumped)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions