Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

codegen emits jl_typeof(NULL) (which obviously segfaults) #32843

Closed
EconometricsBySimulation opened this issue Aug 9, 2019 · 8 comments
Closed
Labels
bug Indicates an unexpected problem or unintended behavior compiler:codegen Generation of LLVM IR and native code

Comments

@EconometricsBySimulation
Copy link
Contributor

EconometricsBySimulation commented Aug 9, 2019

I cannot tell you what is causing this error. I apologize.

Internal error: encountered unexpected error in runtime:
TypeError(func=:Tuple, context="parameter", expected=Type, got=
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 0x6b607810 -- jl_is_tuple_type at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\julia.h:1061 [inlined]
jl_static_show_x_ at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\rtutils.c:954
in expression starting at no file:0
jl_is_tuple_type at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\julia.h:1061 [inlined]
jl_static_show_x_ at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\rtutils.c:954
jl_static_show_x at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\rtutils.c:1030
jl_static_show_x_ at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\rtutils.c:983
jl_static_show_x at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\rtutils.c:1030 [inlined]
jl_static_show at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\rtutils.c:1035
jl_type_infer at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:259
jl_compile_method_internal at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:1797 [inlined]
jl_fptr_trampoline at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:1841
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
#9 at C:\Users\julia\AppData\Local\Julia-1.1.1\share\julia\stdlib\v1.1\REPL\src\REPLCompletions.jl:135
filter! at .\array.jl:2338
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
filtered_mod_names at C:\Users\julia\AppData\Local\Julia-1.1.1\share\julia\stdlib\v1.1\REPL\src\REPLCompletions.jl:88
unknown function (ip: 0000000001EB91A5)
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
complete_symbol at C:\Users\julia\AppData\Local\Julia-1.1.1\share\julia\stdlib\v1.1\REPL\src\REPLCompletions.jl:143
completions at C:\Users\julia\AppData\Local\Julia-1.1.1\share\julia\stdlib\v1.1\REPL\src\REPLCompletions.jl:714
basecompletionadapter at C:\Users\Francis Smart\.juliapro\JuliaPro_v1.1.1.1\packages\Atom\cR6bU\src\completions.jl:22
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
#193 at C:\Users\Francis Smart\.juliapro\JuliaPro_v1.1.1.1\packages\Atom\cR6bU\src\completions.jl:11
withpath at C:\Users\Francis Smart\.juliapro\JuliaPro_v1.1.1.1\packages\CodeTools\xGemk\src\utils.jl:30
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
withpath at C:\Users\Francis Smart\.juliapro\JuliaPro_v1.1.1.1\packages\Atom\cR6bU\src\eval.jl:46
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
#192 at C:\Users\Francis Smart\.juliapro\JuliaPro_v1.1.1.1\packages\Atom\cR6bU\src\completions.jl:7
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
handlemsg at C:\Users\Francis Smart\.juliapro\JuliaPro_v1.1.1.1\packages\Atom\cR6bU\src\comm.jl:164
unknown function (ip: 000000001407F793)
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
jl_apply at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\julia.h:1571 [inlined]
jl_f__apply at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\builtins.c:556
#19 at .\task.jl:259
unknown function (ip: 000000001407A74A)
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
jl_apply at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\julia.h:1571 [inlined]
start_task at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\task.c:572
Allocations: 72694615 (Pool: 72682716; Big: 11899); GC: 162
@StefanKarpinski
Copy link
Member

Thanks for the report anyway. Hopefully the backtrace can be of some use. What were you running when this happened?

@EconometricsBySimulation
Copy link
Contributor Author

I was running base Julia with a package I have been developing called Abstract Logic.

Run
https://github.com/EconometricsBySimulation/AbstractLogic/blob/master/functions/Hotcomb.jl
Followed by:
https://github.com/EconometricsBySimulation/AbstractLogic/blob/master/functions/ABParse.jl

Fortunately it only gave me the error a couple of times. I restarted Julia and it seems to be working fine. I could not reproduce it. The code seemed to complete the function fine but then a second later it kicked out the error. I am not using macros or Meta.parse or evals or anything like that which I would attribute aberrant behavior to.

@StefanKarpinski
Copy link
Member

Sounds like it might be some kind of memory corruption. Which could be caused by a variety of things. Especially if anything you're calling does ccalls and perhaps does them incorrectly.

@EconometricsBySimulation
Copy link
Contributor Author

To my knowledge I am only using base Julia, if you look over the code you might see something strange but I am not loading any external packages and I am not explicitly calling any code outside of Julia. I don't know if recursive calls might be a problem, I think there is a different code for stack overflow. Anyways, thanks for looking into it. I'll make sure to mention it if it comes back up.

Should I close this issue?

@JeffBezanson
Copy link
Member

Let's keep it open until we can confirm whether the problem is reproducible.

@EconometricsBySimulation
Copy link
Contributor Author

EconometricsBySimulation commented Aug 12, 2019

I think this might be a different error but at least this one I have been able to reproduce.

a, b, c, d, e, f  ∈ 6
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 0x119d3828 -- ABassign at .\untitled-c6759b7bbfa17de7956ab3289f246fca:123
in expression starting at untitled-c6759b7bbfa17de7956ab3289f246fca:133
ABassign at .\untitled-c6759b7bbfa17de7956ab3289f246fca:123
ABparse at .\untitled-c6759b7bbfa17de7956ab3289f246fca:97
jl_fptr_trampoline at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:1842
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
#ABparse#31 at .\untitled-c6759b7bbfa17de7956ab3289f246fca:77
jl_fptr_trampoline at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:1842
jl_invoke at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2348
ABparse at .\untitled-c6759b7bbfa17de7956ab3289f246fca:73
jl_fptr_trampoline at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:1842
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
do_call at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\interpreter.c:323
eval_value at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\interpreter.c:411
eval_stmt_value at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\interpreter.c:362 [inlined]
eval_body at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\interpreter.c:759
jl_interpret_toplevel_thunk_callback at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\interpreter.c:885
unknown function (ip: FFFFFFFFFFFFFFFE)
unknown function (ip: 000000000C041A4F)
unknown function (ip: 0000000000000000)
jl_toplevel_eval_flex at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\toplevel.c:764
jl_toplevel_eval_flex at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\toplevel.c:713
jl_parse_eval_all at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\ast.c:883
include_string at .\loading.jl:1008
include_string at C:\Users\francis.smart.ctr\.juliapro\JuliaPro_v1.1.1.1\packages\CodeTools\xGemk\src\eval.jl:30
unknown function (ip: 00000000119CE77A)
jl_fptr_trampoline at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:1842
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
#116 at C:\Users\francis.smart.ctr\.juliapro\JuliaPro_v1.1.1.1\packages\Atom\BXRAC\src\eval.jl:94
withpath at C:\Users\francis.smart.ctr\.juliapro\JuliaPro_v1.1.1.1\packages\CodeTools\xGemk\src\utils.jl:30
withpath at C:\Users\francis.smart.ctr\.juliapro\JuliaPro_v1.1.1.1\packages\Atom\BXRAC\src\eval.jl:46 [inlined]
#115 at C:\Users\francis.smart.ctr\.juliapro\JuliaPro_v1.1.1.1\packages\Atom\BXRAC\src\eval.jl:93 [inlined]
with_logstate at .\logging.jl:395
#114 at .\logging.jl:491 [inlined]
hideprompt at C:\Users\francis.smart.ctr\.juliapro\JuliaPro_v1.1.1.1\packages\Atom\BXRAC\src\repl.jl:75
jl_fptr_trampoline at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:1842
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
macro expansion at C:\Users\francis.smart.ctr\.juliapro\JuliaPro_v1.1.1.1\packages\Atom\BXRAC\src\eval.jl:91 [inlined]
#113 at C:\Users\francis.smart.ctr\.juliapro\JuliaPro_v1.1.1.1\packages\Atom\BXRAC\src\eval.jl:86
jl_fptr_trampoline at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:1842
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
handlemsg at C:\Users\francis.smart.ctr\.juliapro\JuliaPro_v1.1.1.1\packages\Atom\BXRAC\src\comm.jl:164
unknown function (ip: 000000001199EC93)
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
jl_apply at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\julia.h:1571 [inlined]
jl_f__apply at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\builtins.c:556
#19 at .\task.jl:259
unknown function (ip: 0000000011999CCA)
jl_apply_generic at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\gf.c:2197
jl_apply at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\julia.h:1571 [inlined]
start_task at /home/Administrator/buildbot/worker/package_win64/build/src/home/Administrator/buildbot/worker/package_win64/build/src\task.c:572
Allocations: 34183811 (Pool: 34179146; Big: 4665); GC: 76

To get it run the following. I tried simplifying it but just about everything I did ended up changing the error to a standard non-breaking error. In its current form it is breaking Julia. To summarize, I declare a new type which basically acts like a OneHot vector but instead holds combination values.

ABparse takes a string "command" and converts it either to a Hotcomb generator or restrictions on feasible values for the Hotcomb generated. The error presents itself when I am trying to construct the generator if I have not specified the constructor properly basically if ABparse(["a, b, c, d, e, f ∈ 6"]) rather than ABparse(["a, b, c, d, e, f ∈ 1:6"]) or ABparse(["a, b, c, d, e, f ∈ [1,2,3,4,5,6]").

In ABassign outset = (; zip([Symbol(i) for i in varsVect], fill(vals, length(vars)))...) should throw an error when "a, b, c, d, e, f ∈ 6" since vals would not have been assigned a value at this point. Instead, Julia breaks.

Please tell me if this is reproducible for you.

struct Hotcomb
  intuple
end

Base.keys(x::Hotcomb)     = keys(x.intuple)
value(x::Hotcomb)         = [(length(i)>1 ? i : 1:i) for i in x.intuple]
Base.size(x::Hotcomb)     = (*(length.(value(x))...), length(x.intuple))
find(x::Tuple, y::Symbol) = x[[x...] .== y]
Base.collect(x::Hotcomb)  = [x[i,j] for i in 1:size(x)[1], j in 1:size(x)[2]]
Base.min(x::Hotcomb)      = min(collect(Iterators.flatten(value(x)))...)
Base.max(x::Hotcomb)      = max(collect(Iterators.flatten(value(x)))...)
ends(x::Hotcomb)          = [min(x), max(x)]

function Base.getindex(x::Hotcomb, row::Integer, col::Integer)
    # Divisor is calculating based on how many values remains how many times to repeat the current value
    divisor = (col+1 > size(x)[2] ? 1 : value(x)[(col+1):size(x)[2]] .|> length |> prod)
    # indexvalue finds the index to select from the column of interest
    indexvalue = (Integer(ceil(row / divisor)) - 1) % length(value(x)[col]) +1
    value(x)[col][indexvalue]
end

Base.getindex(x::Hotcomb, row::Int, ::Colon) = [ x[row,i] for i = 1:size(x)[2] ]
Base.getindex(x::Hotcomb, ::Colon, col::Union{Int64,Symbol}) = [ x[i,col] for i = 1:size(x)[1] ]
Base.getindex(x::Hotcomb, ::Colon, ::Colon) = collect(x)

function Base.getindex(x::Hotcomb, row::Integer, col::Symbol)
  keymatch = findall(y -> y==col, [keys(x)...])
  length(keymatch)==0 && throw("Symbol :$col not found")
  x[row, keymatch...]
end

Base.getindex(x::Hotcomb, row::AbstractArray{Bool,1}) = x[row,:]

Base.getindex(x::Hotcomb, row::AbstractArray{Bool,1}, col::Union{Symbol,Int}) =
  [ x[i,col] for i = (1:size(x)[1])[row] ]

Base.getindex(x::Hotcomb, ::Colon, col::Union{Array{Int,1}, Array{Symbol,1}}) =
  [ x[i,j] for i = 1:size(x)[1], j in col]

Base.getindex(x::Hotcomb, row::AbstractArray{Bool,1}, col::Union{Array{Int,1}, Array{Symbol,1}}) =
  [ x[i,j] for i = (1:size(x)[1])[row], j in col]

Base.getindex(x::Hotcomb, row::AbstractArray{Bool,1}, ::Colon) =
  [ x[i,j] for i = (1:size(x)[1])[row], j =  (1:size(x)[2])]

Base.getindex(x::Hotcomb, ::Colon, ::Colon) = collect(x)

Base.getindex(x::Hotcomb, symb::Union{Array{Symbol,1}, Symbol}) = x[:,symb]

x = Hotcomb((a=4,b=4,c=6:15))
binaryselector = rand(Bool, size(x)[1])

#using Pkg
#cd("c:/Users/francis.smart.ctr/GitDir/AbstractLogicJL")
#Pkg.activate(".")

# Global set variables Ω, Υ hold
integer(x::AbstractString) = parse(Int, strip(x))
Base.range(x::AbstractString) = range(integer(match(r"^[0-9]+", x).match),
                               stop = integer(match(r"[0-9]+$", x).match))
ABoccursin(y::Symbol) = any( [ y ∈ keys(Ω[i]) for i in 1:length(Ω) ] )
ABoccursin(x::Hotcomb, y::Symbol) = y ∈ keys(x)

Base.range(Ω::Hotcomb, ℧) = [Symbol(keys(Ω)[i])=> sort(unique(Ω[℧][:,i])) for i in 1:size(Ω)[2]]


#command = "a,b,c,d ∈ 1:5"
#Ω,℧ = ABparse(["a, b, c  ∈  [1,2,3]"]); Ω[℧]

function ABparse(commands::Array{String,1}; Ω::Hotcomb = Hotcomb(0), ℧::AbstractArray{Bool,1} = Bool[0])
  println("")

  for command in commands
      print(command)
      Ω, ℧ = ABparse(command,Ω,℧)

      feasibleoutcomes = (length(℧)>0) ? sum(℧) : 0
      filler = repeat("\t", max(1, 3-Integer(round(length(command)/18))))

      (feasibleoutcomes == 0)  && (check = "X")
      (feasibleoutcomes  > 1)  && (check = "✓")
      (feasibleoutcomes == 1)  && (check = "✓✓")

      println(" $filler feasible outcomes $feasibleoutcomes $check")

  end
  (Ω, ℧)
end

function ABparse(command::String,  Ω::Hotcomb, ℧::AbstractArray{Bool,1})
  # A vector of non-standard operators to ignore
  exclusionlist = ["\bin\b"]

  if occursin(r"∈|\bin\b", command)
      (Ω,℧) = ABassign(command)
      return (Ω,℧)
  end

  # Check for the existance of any symbols in Ω
  varcheck = eachmatch(r"[a-zA-Z][0-9a-zA-Z_.]*", command)

  # Checks if any of the variables does not exist in Ω
  for S in [Symbol(s.match) for s in varcheck if !(s.match ∈ exclusionlist)]
      if (occursin("{{", string(S))) && (!ABoccursin(Ω, S))
          throw("In {$command} variable {:$S} not found in Ω")
      end
  end

  if occursin(r"( |\b)([><=|!+\\-\^]{1,4})(\b| )", command)
      return SuperSuperOperatorEval(command,Ω,℧)
  end
  println("Warning! { $command } not interpretted")
end

function ABassign(command::String)
  vars, valsin = strip.(split(command, r"∈|\bin\b"))
  varsVect = split(vars, ",") .|> strip
  vals0 = split(replace(valsin, r"\[|\]" => ""), ",")

  (length(vals0) > 1) && (vals =  [(occursin(r"^[0-9]+$", i) && integer(i)) for i in vals0])
  (length(vals0) == 1 && occursin(r"^[0-9]+:[0-9]+$", vals0[1])) && (vals = range(vals0[1]))

  outset = (; zip([Symbol(i) for i in varsVect], fill(vals, length(vars)))...)

  Ω  = Hotcomb(outset)
  ℧ = fill(true, size(Ω)[1])

  (Ω ,℧)
end

ABparse(["a, b, c, d, e, f  ∈ 6"])

@JeffBezanson JeffBezanson added the bug Indicates an unexpected problem or unintended behavior label Aug 12, 2019
@vtjnash
Copy link
Member

vtjnash commented Aug 12, 2019

function ABassign(x) # pass in something to make the branches uninferrable
         (x > 1) && (vals = (Array[])[1])) # assign vals to something `::Array`
         (x == 1) && (vals = 1:10) # assign vals to an isbits value `::UnitRange{Int}`
         GC.@preserve vals sideeffect() # ensure `vals` is alive (and gets a phi node)
         nothing
end
ABassign(0)

@Keno looks like that Phi-node is trying to examine the type of vals (which is null)

@vtjnash vtjnash added the compiler:codegen Generation of LLVM IR and native code label Aug 12, 2019
@vtjnash
Copy link
Member

vtjnash commented Mar 18, 2021

I think this might be the same as #40065 (comment) (@JeffBezanson)

@vtjnash vtjnash changed the title Internal Error - TypeError codegen emits jl_typeof(NULL) (which obviously segfaults) Mar 18, 2021
JeffBezanson added a commit that referenced this issue Apr 6, 2021
KristofferC pushed a commit that referenced this issue Apr 14, 2021
also fixes part of #40065

(cherry picked from commit 00cf7b0)
ElOceanografo pushed a commit to ElOceanografo/julia that referenced this issue May 4, 2021
antoine-levitt pushed a commit to antoine-levitt/julia that referenced this issue May 9, 2021
johanmon pushed a commit to johanmon/julia that referenced this issue Jul 5, 2021
staticfloat pushed a commit that referenced this issue Dec 23, 2022
also fixes part of #40065

(cherry picked from commit 00cf7b0)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Indicates an unexpected problem or unintended behavior compiler:codegen Generation of LLVM IR and native code
Projects
None yet
Development

No branches or pull requests

4 participants