JuliaLang / JuliaSyntax.jl

The Julia compiler frontend
Other
272 stars 35 forks source link

Stack overflow when parsing 20k consecutive + signs #415

Closed PallHaraldsson closed 6 months ago

PallHaraldsson commented 7 months ago

I accidentally left the headphone on the keyboard on the + button.

I just pressed enter and Julia hung for a while, at 100% and mem. use seemingly growing. It's not a big deal since it recovered (might not for others, and OOM?), I'm just thinking if something can be imrpvoed.

┌ Error: JuliaSyntax parser failed — falling back to flisp!
│ This is not your fault. Please submit a bug report to https://github.com/JuliaLang/JuliaSyntax.jl/issues
│   exception =
│    StackOverflowError:
│    Stacktrace:
│      [1] _internal_node_to_Expr(source::Base.JuliaSyntax.SourceFile, srcrange::UnitRange{Int64}, head::Base.JuliaSyntax.SyntaxHead, childranges::Vector{UnitRange{Int64}}, childheads::Vector{Base.JuliaSyntax.SyntaxHead}, args::Vector{Any})
│        @ Base.JuliaSyntax /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/base/JuliaSyntax/src/expr.jl:451
│      [2] _to_expr(node::Base.JuliaSyntax.SyntaxNode)
│        @ Base.JuliaSyntax /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/base/JuliaSyntax/src/expr.jl:503
│      [3] _to_expr(node::Base.JuliaSyntax.SyntaxNode) (repeats 8109 times)
│        @ Base.JuliaSyntax /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/base/JuliaSyntax/src/expr.jl:502
│      [4] Expr(node::Base.JuliaSyntax.SyntaxNode)
│        @ Base.JuliaSyntax /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/base/JuliaSyntax/src/expr.jl:507
│      [5] core_parser_hook(code::String, filename::String, lineno::Int64, offset::Int64, options::Symbol)
│        @ Base.JuliaSyntax /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/base/JuliaSyntax/src/hooks.jl:211
│      [6] invoke_in_world(::UInt64, ::Any, ::Any, ::Vararg{Any}; kwargs::@Kwargs{})
│        @ Base ./essentials.jl:921
│      [7] invoke_in_world(::UInt64, ::Any, ::Any, ::Vararg{Any})
│        @ Base ./essentials.jl:918
│      [8] (::Base.JuliaSyntax.var"#invoke_fixedworld#120"{Base.JuliaSyntax.var"#invoke_fixedworld#117#121"{typeof(Base.JuliaSyntax.core_parser_hook), UInt64}})(::String, ::Vararg{Any}; kws::@Kwargs{})
│        @ Base.JuliaSyntax /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/base/JuliaSyntax/src/hooks.jl:118
│      [9] (::Base.JuliaSyntax.var"#invoke_fixedworld#120"{Base.JuliaSyntax.var"#invoke_fixedworld#117#121"{typeof(Base.JuliaSyntax.core_parser_hook), UInt64}})(::String, ::Vararg{Any})
│        @ Base.JuliaSyntax /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/base/JuliaSyntax/src/hooks.jl:117
│     [10] _parse_string(text::String, filename::String, lineno::Int64, index::Int64, options::Symbol)
│        @ Base.Meta ./meta.jl:200
│     [11] #parseall#6
│        @ Base.Meta ./meta.jl:294 [inlined]
│     [12] parseall
│        @ Base.Meta ./meta.jl:293 [inlined]
│     [13] _parse_input_line_core
│        @ Base ./client.jl:174 [inlined]
│     [14] #parse_input_line#1008
│        @ Base ./client.jl:192 [inlined]
│     [15] parse_input_line
│        @ Base ./client.jl:189 [inlined]
│     [16] (::REPL.var"#93#103"{REPL.LineEditREPL, REPL.REPLHistoryProvider})(x::Any)
│        @ REPL ~/.julia/juliaup/julia-1.10.0+0.x64.linux.gnu/share/julia/stdlib/v1.10/REPL/src/REPL.jl:1079
│     [17] #invokelatest#2
│        @ Base ./essentials.jl:887 [inlined]
│     [18] invokelatest
│        @ Base ./essentials.jl:884 [inlined]
│     [19] (::REPL.var"#do_respond#80"{Bool, Bool, REPL.var"#93#103"{REPL.LineEditREPL, REPL.REPLHistoryProvider}, REPL.LineEditREPL, REPL.LineEdit.Prompt})(s::REPL.LineEdit.MIState, buf::Any, ok::Bool)
│        @ REPL ~/.julia/juliaup/julia-1.10.0+0.x64.linux.gnu/share/julia/stdlib/v1.10/REPL/src/REPL.jl:905
│     [20] #invokelatest#2
│        @ Base ./essentials.jl:887 [inlined]
│     [21] invokelatest
│        @ Base ./essentials.jl:884 [inlined]
│     [22] run_interface(terminal::REPL.Terminals.TextTerminal, m::REPL.LineEdit.ModalInterface, s::REPL.LineEdit.MIState)
│        @ REPL.LineEdit ~/.julia/juliaup/julia-1.10.0+0.x64.linux.gnu/share/julia/stdlib/v1.10/REPL/src/LineEdit.jl:2656
│     [23] run_frontend(repl::REPL.LineEditREPL, backend::REPL.REPLBackendRef)
│        @ REPL ~/.julia/juliaup/julia-1.10.0+0.x64.linux.gnu/share/julia/stdlib/v1.10/REPL/src/REPL.jl:1312
│     [24] (::REPL.var"#62#68"{REPL.LineEditREPL, REPL.REPLBackendRef})()
│        @ REPL ~/.julia/juliaup/julia-1.10.0+0.x64.linux.gnu/share/julia/stdlib/v1.10/REPL/src/REPL.jl:386
│   offset = 0
│   code = "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++" ⋯ 20924 bytes ⋯ "+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
└ @ Base.JuliaSyntax /cache/build/builder-amdci4-6/julialang/julia-release-1-dot-10/base/JuliaSyntax/src/hooks.jl:260
ERROR: syntax: "++" is not a unary operator
Stacktrace:
 [1] top-level scope
   @ none:1
c42f commented 6 months ago

Yea :-(

Duplicate of https://github.com/JuliaLang/JuliaSyntax.jl/issues/368