Skip to content

@cfunction segfault #46786

Closed
Closed
@ancapdev

Description

@ancapdev

Reproducible

struct B
    a::Union{Int64, Float64}
end

ff = x -> Float32(x.a)
cf = @cfunction $ff Float32 (B,) # segfaults here
x = B(123)
y = ccall(Base.unsafe_convert(Ptr{Cvoid}, cf), Float32, (B,), x)
println(y)

Output 1.8.1

signal (11): Segmentation fault
in expression starting at  /home/christian/code/scratch/functions.jl:13
_ZN4llvm5Value11setNameImplERKNS_5TwineE at /home/christian/julia-1.8.1/bin/../lib/julia/libLLVM-13jl.so (unknown line)
_ZN4llvm5Value7setNameERKNS_5TwineE at /home/christian/julia-1.8.1/bin/../lib/julia/libLLVM-13jl.so (unknown line)
_ZNK4llvm8Function18BuildLazyArgumentsEv at /home/christian/julia-1.8.1/bin/../lib/julia/libLLVM-13jl.so (unknown line)
CheckLazyArguments at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/usr/include/llvm/IR/Function.h:114 [inlined]
arg_begin at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/usr/include/llvm/IR/Function.h:795 [inlined]
gen_cfun_wrapper at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/codegen.cpp:5399
emit_cfunction at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/codegen.cpp:5885 [inlined]
emit_expr at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/codegen.cpp:4756
emit_ssaval_assign at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/codegen.cpp:4315
emit_stmtpos at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/codegen.cpp:4562 [inlined]
emit_function at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/codegen.cpp:7416
jl_emit_code at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/codegen.cpp:7778
jl_emit_codeinst at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/codegen.cpp:7823
_jl_compile_codeinst at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/jitlayers.cpp:119
jl_generate_fptr_impl at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/jitlayers.cpp:332
jl_compile_method_internal at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2081 [inlined]
jl_compile_method_internal at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2025
_jl_invoke at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2359 [inlined]
ijl_invoke at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2374
jl_toplevel_eval_flex at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/toplevel.c:897
jl_toplevel_eval_flex at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/toplevel.c:850
ijl_toplevel_eval_in at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/toplevel.c:965
eval at ./boot.jl:368 [inlined]
include_string at ./loading.jl:1428
_jl_invoke at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2549
_include at ./loading.jl:1488
include at ./Base.jl:419
jfptr_include_32221.clone_1 at /home/christian/julia-1.8.1/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2549
exec_options at ./client.jl:303
_start at ./client.jl:522
jfptr__start_61720.clone_1 at /home/christian/julia-1.8.1/lib/julia/sys.so (unknown line)
_jl_invoke at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2367 [inlined]
ijl_apply_generic at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/gf.c:2549
jl_apply at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/julia.h:1838 [inlined]
true_main at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/jlapi.c:575
jl_repl_entrypoint at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/src/jlapi.c:719
main at /cache/build/default-amdci5-0/julialang/julia-release-1-dot-8/cli/loader_exe.c:59
unknown function (ip: 0x7f9be0a29d8f)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x401098)
Allocations: 2906 (Pool: 2894; Big: 12); GC: 0
Segmentation fault (core dumped)

Output 1.7.3

julia: /buildworker/worker/package_linux64/build/src/abi_x86_64.cpp:244: virtual llvm::Type* ABI_x86_64Layout::preferred_llvm_type(jl_datatype_t*, bool) const: Assertion `0 && "Unexpected cl.classes[0]"' failed.

signal (6): Aborted
in expression starting at  /home/christian/code/scratch/functions.jl:13
pthread_kill at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
raise at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
abort at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
unknown function (ip: 0x7f865802871a)
__assert_fail at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
preferred_llvm_type at /buildworker/worker/package_linux64/build/src/abi_x86_64.cpp:244
generate_func_sig at /buildworker/worker/package_linux64/build/src/ccall.cpp:1089
function_sig_t at /buildworker/worker/package_linux64/build/src/ccall.cpp:978 [inlined]
emit_cfunction at /buildworker/worker/package_linux64/build/src/codegen.cpp:5753 [inlined]
emit_expr at /buildworker/worker/package_linux64/build/src/codegen.cpp:4614
emit_ssaval_assign at /buildworker/worker/package_linux64/build/src/codegen.cpp:4245
emit_stmtpos at /buildworker/worker/package_linux64/build/src/codegen.cpp:4487 [inlined]
emit_function at /buildworker/worker/package_linux64/build/src/codegen.cpp:7326
jl_emit_code at /buildworker/worker/package_linux64/build/src/codegen.cpp:7688
jl_emit_codeinst at /buildworker/worker/package_linux64/build/src/codegen.cpp:7733
_jl_compile_codeinst at /buildworker/worker/package_linux64/build/src/jitlayers.cpp:124
jl_generate_fptr at /buildworker/worker/package_linux64/build/src/jitlayers.cpp:350
jl_compile_method_internal at /buildworker/worker/package_linux64/build/src/gf.c:1980
jl_compile_method_internal at /buildworker/worker/package_linux64/build/src/gf.c:2246 [inlined]
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2239 [inlined]
jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2254
jl_toplevel_eval_flex at /buildworker/worker/package_linux64/build/src/toplevel.c:876
jl_toplevel_eval_flex at /buildworker/worker/package_linux64/build/src/toplevel.c:830
jl_toplevel_eval_in at /buildworker/worker/package_linux64/build/src/toplevel.c:944
eval at ./boot.jl:373 [inlined]
include_string at ./loading.jl:1196
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2247 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2429
_include at ./loading.jl:1253
include at ./Base.jl:418
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2247 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2429
exec_options at ./client.jl:292
_start at ./client.jl:495
jfptr__start_22567.clone_1 at /home/christian/julia-1.7.3/lib/julia/sys.so (unknown line)
_jl_invoke at /buildworker/worker/package_linux64/build/src/gf.c:2247 [inlined]
jl_apply_generic at /buildworker/worker/package_linux64/build/src/gf.c:2429
jl_apply at /buildworker/worker/package_linux64/build/src/julia.h:1788 [inlined]
true_main at /buildworker/worker/package_linux64/build/src/jlapi.c:559
jl_repl_entrypoint at /buildworker/worker/package_linux64/build/src/jlapi.c:701
main at /buildworker/worker/package_linux64/build/cli/loader_exe.c:42
unknown function (ip: 0x7f8658029d8f)
__libc_start_main at /lib/x86_64-linux-gnu/libc.so.6 (unknown line)
_start at julia-1.7.3/bin/julia (unknown line)
Allocations: 2723 (Pool: 2713; Big: 10); GC: 0
Aborted (core dumped)

Changing the layout of B in some ways, like this, fix the crash:

struct B
    x::Int64
    a::Union{Int64, Float64}
    B(a) = new(0, a)
end

Metadata

Metadata

Assignees

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