Skip to content

Commit e3afef0

Browse files
authored
fix #31965, bug in interpreter stacktraces and jl_code_requires_compiler (#31967)
1 parent bf58070 commit e3afef0

File tree

5 files changed

+35
-19
lines changed

5 files changed

+35
-19
lines changed

base/stacktraces.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ using Base.Meta
124124
is_loc_meta(expr, kind) = isexpr(expr, :meta) && length(expr.args) >= 1 && expr.args[1] === kind
125125
function lookup(ip::Base.InterpreterIP)
126126
if ip.code isa Core.MethodInstance && ip.code.def isa Method
127-
codeinfo = ip.code.inferred
127+
codeinfo = ip.code.uninferred
128128
func = ip.code.def.name
129129
file = ip.code.def.file
130130
line = ip.code.def.line

src/toplevel.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ static void expr_attributes(jl_value_t *v, int *has_intrinsics, int *has_defs) J
322322
jl_module_t *mod = jl_globalref_mod(f);
323323
jl_sym_t *name = jl_globalref_name(f);
324324
if (jl_binding_resolved_p(mod, name)) {
325-
jl_binding_t *b = jl_get_module_binding(mod, name);
325+
jl_binding_t *b = jl_get_binding(mod, name);
326326
if (b && b->value && b->constp)
327327
called = b->value;
328328
}

test/choosetests.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ function choosetests(choices = [])
5050
"errorshow", "sets", "goto", "llvmcall", "llvmcall2", "grisu",
5151
"some", "meta", "stacktraces", "docs",
5252
"misc", "threads", "stress",
53-
"enums", "cmdlineargs", "int",
53+
"enums", "cmdlineargs", "int", "interpreter",
5454
"checked", "bitset", "floatfuncs", "precompile",
5555
"boundscheck", "error", "ambiguous", "cartesian", "osutils",
5656
"channels", "iostream", "secretbuffer", "specificity",

test/core.jl

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6835,22 +6835,6 @@ struct T29145{A,B}
68356835
end
68366836
@test_throws TypeError T29145()
68376837

6838-
# interpreted but inferred/optimized top-level expressions with vars
6839-
let code = """
6840-
while true
6841-
try
6842-
this_is_undefined_29213
6843-
ed = 0
6844-
break
6845-
finally
6846-
break
6847-
end
6848-
end
6849-
print(42)
6850-
"""
6851-
@test read(`$(Base.julia_cmd()) --startup-file=no --compile=min -e $code`, String) == "42"
6852-
end
6853-
68546838
# issue #29175
68556839
function f29175(tuple::T) where {T<:Tuple}
68566840
prefix::Tuple{T.parameters[1:end-1]...} = tuple[1:length(T.parameters)-1]

test/interpreter.jl

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# This file is a part of Julia. License is MIT: https://julialang.org/license
2+
3+
using Test
4+
5+
# interpreted but inferred/optimized top-level expressions with vars
6+
let code = """
7+
while true
8+
try
9+
this_is_undefined_29213
10+
ed = 0
11+
break
12+
finally
13+
break
14+
end
15+
end
16+
print(42)
17+
"""
18+
@test read(`$(Base.julia_cmd()) --startup-file=no --compile=min -e $code`, String) == "42"
19+
end
20+
21+
let code = "Threads.atomic_add!(Threads.Atomic{Int}(40), 2)"
22+
@test read(`$(Base.julia_cmd()) --startup-file=no --compile=min -E $code`, String) == "40\n"
23+
end
24+
25+
let p = Pipe(),
26+
c = pipeline(`$(Base.julia_cmd()) --startup-file=no --compile=min -E 'error()'`, stderr=p)
27+
proc = run(c, wait=false)
28+
readline(p)
29+
@test readline(p) == "Stacktrace:"
30+
wait(proc)
31+
close(p)
32+
end

0 commit comments

Comments
 (0)