JuliaSparse / SuiteSparseGraphBLAS.jl

Sparse, General Linear Algebra for Graphs!
MIT License
102 stars 17 forks source link

Segmentation Fault when unintentionally using `GBMatrix{T, F}(p, fill)` in v0.7.0 #71

Closed BioTurboNick closed 2 years ago

BioTurboNick commented 2 years ago

Occurs in both Julia 1.7.2 and 1.8.0-beta3

v0.7.0

I suppose this isn't an intended call based on the docstring, but probably shouldn't produce a segfault?

a = GBMatrix{Int, Int}(10, 10)

Calls this constructor: GBMatrix{T, F}(p, fill) where {T, F} in SuiteSparseGraphBLAS at src/types.jl:266

Please submit a bug report with steps to reproduce this fault, and any error messages that follow (in their entirety). Thanks.
Exception: EXCEPTION_ACCESS_VIOLATION at 0x8c486a65 -- .text at C:\Users\nicho\.julia\artifacts\2fad8164c7684f92c818170c38914487bf71cf80\bin\libgraphblas.dll (unknown line)
in expression starting at none:0
.text at C:\Users\nicho\.julia\artifacts\2fad8164c7684f92c818170c38914487bf71cf80\bin\libgraphblas.dll (unknown line)
.text at C:\Users\nicho\.julia\artifacts\2fad8164c7684f92c818170c38914487bf71cf80\bin\libgraphblas.dll (unknown line)
.text at C:\Users\nicho\.julia\artifacts\2fad8164c7684f92c818170c38914487bf71cf80\bin\libgraphblas.dll (unknown line)
GxB_Matrix_fprint at C:\Users\nicho\.julia\packages\SuiteSparseGraphBLAS\E7UiG\src\lib\LibGraphBLAS_gen.jl:532
unknown function (ip: 000000005f3cdd52)
#171 at C:\Users\nicho\.julia\packages\SuiteSparseGraphBLAS\E7UiG\src\print.jl:30
mktemp at .\file.jl:722
mktemp at .\file.jl:720 [inlined]
gxbstring at C:\Users\nicho\.julia\packages\SuiteSparseGraphBLAS\E7UiG\src\print.jl:6 [inlined]
gxbprint at C:\Users\nicho\.julia\packages\SuiteSparseGraphBLAS\E7UiG\src\print.jl:2
gxbprint at C:\Users\nicho\.julia\packages\SuiteSparseGraphBLAS\E7UiG\src\print.jl:2 [inlined]
gxbprint at C:\Users\nicho\.julia\packages\SuiteSparseGraphBLAS\E7UiG\src\print.jl:2 [inlined]
show at C:\Users\nicho\.julia\packages\SuiteSparseGraphBLAS\E7UiG\src\abstractgbarray.jl:507
unknown function (ip: 000000005f3cdb44)
#43 at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.7\REPL\src\REPL.jl:266
jfptr_YY.43_49483.clone_1 at C:\Users\nicho\.julia\juliaup\julia-1.7.2+0~x64\lib\julia\sys.dll (unknown line)
with_repl_linfo at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.7\REPL\src\REPL.jl:510
display at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.7\REPL\src\REPL.jl:259
display at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.7\REPL\src\REPL.jl:271
display at .\multimedia.jl:328
jl_apply at /cygdrive/c/buildbot/worker/package_win64/build/src\julia.h:1788 [inlined]
jl_f__call_latest at /cygdrive/c/buildbot/worker/package_win64/build/src\builtins.c:757
#invokelatest#2 at .\essentials.jl:716 [inlined]
invokelatest at .\essentials.jl:714 [inlined]
print_response at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.7\REPL\src\REPL.jl:293
#45 at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.7\REPL\src\REPL.jl:277
jfptr_YY.45_50351.clone_1 at C:\Users\nicho\.julia\juliaup\julia-1.7.2+0~x64\lib\julia\sys.dll (unknown line)
with_repl_linfo at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.7\REPL\src\REPL.jl:510
print_response at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.7\REPL\src\REPL.jl:275
do_respond at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.7\REPL\src\REPL.jl:846
jfptr_do_respond_50871.clone_1 at C:\Users\nicho\.julia\juliaup\julia-1.7.2+0~x64\lib\julia\sys.dll (unknown line)
jl_apply at /cygdrive/c/buildbot/worker/package_win64/build/src\julia.h:1788 [inlined]
jl_f__call_latest at /cygdrive/c/buildbot/worker/package_win64/build/src\builtins.c:757
#invokelatest#2 at .\essentials.jl:716 [inlined]
invokelatest at .\essentials.jl:714 [inlined]
run_interface at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.7\REPL\src\LineEdit.jl:2493
jfptr_run_interface_49564.clone_1 at C:\Users\nicho\.julia\juliaup\julia-1.7.2+0~x64\lib\julia\sys.dll (unknown line)
run_frontend at C:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.7\REPL\src\REPL.jl:1232
#49 at .\task.jl:423
jfptr_YY.49_50373.clone_1 at C:\Users\nicho\.julia\juliaup\julia-1.7.2+0~x64\lib\julia\sys.dll (unknown line)
jl_apply at /cygdrive/c/buildbot/worker/package_win64/build/src\julia.h:1788 [inlined]
start_task at /cygdrive/c/buildbot/worker/package_win64/build/src\task.c:877
Allocations: 7425668 (Pool: 7421819; Big: 3849); GC: 10
rayegun commented 2 years ago

This is a pretty interesting one. It looks like the nrows Int argument is being converted into a Ref and triggering the inner constructor which then segfaults when it tries to access the memory address 10.

F isn't supposed to be set by the user, but this is an oversight on my part. It should now error rather than segfault on master. I may allow this in the future, but I'm not sure what GBMatrix{Int64, Int64}(10, 10) should use as the fill. It could be zero(F)?

I'm going to leave this open until I have a test case and a better interface here.