JuliaLang / julia

The Julia Programming Language
https://julialang.org/
MIT License
45.4k stars 5.45k forks source link

Source build of 1.12.0 on macOS ARM: `1cd47c3094` breaks JuliaInterpreter and Revise #54883

Open George9000 opened 2 months ago

George9000 commented 2 months ago

On master, from commit 1cd47c3094 onward, the Revise workflow is broken. After launching julia, activating a package, using packagename, calling an existing function, and then adding a simple function foo to the src/packagename.jl results in an error with failure to revise/update the running package code.

The function foo is just

function foo() return 3 end

This addition to the package code results in an error. The error arises in JuliaInterpreter and its utils.jl

A git bisect identifies 1cd47c3094 as the culprit.

error details ``` Julia Version 1.12.0-DEV.716 Commit 1cd47c3094 (2024-06-12 21:45 UTC) Platform Info: OS: macOS (arm64-apple-darwin23.5.0) CPU: 16 × Apple M3 Max WORD_SIZE: 64 LLVM: libLLVM-17.0.6 (ORCJIT, apple-m3) Threads: 1 default, 0 interactive, 1 GC (on 12 virtual cores) Environment: JULIA_EDITOR = Emacs JULIA_PKG_DEVDIR = /Users/bozo/Documents/julia/dev julia> foo() ┌ Error: Failed to revise /Volumes/work/julia/learnjulia/euler/src/euler.jl │ exception = │ BoundsError: attempt to access 0-element Vector{Base.IRShow.LineInfoNode} at index [1] │ Stacktrace: │ [1] throw_boundserror(A::Vector{Base.IRShow.LineInfoNode}, I::Tuple{Int64}) │ @ Base ./essentials.jl:14 │ [2] getindex │ @ ./essentials.jl:894 [inlined] │ [3] #linetable#7 │ @ ~/.julia/packages/JuliaInterpreter/tD6at/src/utils.jl:285 [inlined] │ [4] linetable │ @ ~/.julia/packages/JuliaInterpreter/tD6at/src/utils.jl:280 [inlined] │ [5] whereis(framecode::JuliaInterpreter.FrameCode, pc::Int64; kwargs::@Kwargs{}) │ @ JuliaInterpreter ~/.julia/packages/JuliaInterpreter/tD6at/src/utils.jl:389 └ @ Revise ~/.julia/packages/Revise/QSDHW/src/packagedef.jl:724 ┌ Warning: The running code does not match the saved version for the following files: │ │ /Volumes/work/julia/learnjulia/euler/src/euler.jl ```
git bisect ``` % git bisect bad 0:23 1cd47c3094fe6ef98c4212b557255e93bcaff8ce is the first bad commit commit 1cd47c3094fe6ef98c4212b557255e93bcaff8ce (HEAD) Author: Keno Fischer Date: Wed Jun 12 17:45:20 2024 -0400 lowering: Remove `outerref` intermediate form (#54772) The `outerref` form was added in c3eedce56e6f7759873d7c33ef67420c7bc4fe77, but the renaming pass for them was removed two years later in c44644442949238da70670b547312ca1ae9a9c7d, without removing the form itself. As far as I can tell, today, `outerref` is essentially equivalent to `(globalref (thismodule) name)` (which was the original form, before outteref was introduced) because it just expands to a toplevel symbol. I don't think there remains any reason to keep this form after the renaming pass was removed and moreover it is confusing as one could reasonaly infer (as I did an incorrectly wrote in a comment) that `outerref` provides outer access, which it does not. This PR removes the form entirely and replaces them with an appropriate globalref. src/ast.c | 3 +-- src/ast.scm | 8 ++------ src/codegen.cpp | 2 +- src/julia-syntax.scm | 78 ++++++++++++++++++++++++++++++++++++------------------------------------------ 4 files changed, 40 insertions(+), 51 deletions(-) ```
DilumAluthge commented 2 months ago

@Keno Does https://github.com/JuliaLang/julia/pull/54856 fix this issue?

Keno commented 2 months ago

No, but I have pending PRs to Revise and dependencies that fix this. The issue was pre-existing, the lowering change just happened to trigger it.

George9000 commented 1 month ago

Fixed on master by this commit by Keno and Tim Holy on Revise. Grateful!

Keno commented 1 month ago

Revise is still broken. We're looking into it