From 7516f95ac7721426b33190ebc77ba82f406f20f9 Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Wed, 8 May 2019 11:52:55 -0400 Subject: [PATCH] fix #31965, bug in interpreter stacktraces and `jl_code_requires_compiler` --- base/stacktraces.jl | 2 +- src/toplevel.c | 2 +- test/choosetests.jl | 2 +- test/core.jl | 16 ---------------- test/interpreter.jl | 32 ++++++++++++++++++++++++++++++++ 5 files changed, 35 insertions(+), 19 deletions(-) create mode 100644 test/interpreter.jl diff --git a/base/stacktraces.jl b/base/stacktraces.jl index 3cf9926156017..0fca8a8d4fbcf 100644 --- a/base/stacktraces.jl +++ b/base/stacktraces.jl @@ -124,7 +124,7 @@ using Base.Meta is_loc_meta(expr, kind) = isexpr(expr, :meta) && length(expr.args) >= 1 && expr.args[1] === kind function lookup(ip::Base.InterpreterIP) if ip.code isa Core.MethodInstance && ip.code.def isa Method - codeinfo = ip.code.inferred + codeinfo = ip.code.uninferred func = ip.code.def.name file = ip.code.def.file line = ip.code.def.line diff --git a/src/toplevel.c b/src/toplevel.c index 922db13908027..feaa6d85925e0 100644 --- a/src/toplevel.c +++ b/src/toplevel.c @@ -322,7 +322,7 @@ static void expr_attributes(jl_value_t *v, int *has_intrinsics, int *has_defs) J jl_module_t *mod = jl_globalref_mod(f); jl_sym_t *name = jl_globalref_name(f); if (jl_binding_resolved_p(mod, name)) { - jl_binding_t *b = jl_get_module_binding(mod, name); + jl_binding_t *b = jl_get_binding(mod, name); if (b && b->value && b->constp) called = b->value; } diff --git a/test/choosetests.jl b/test/choosetests.jl index aa7d2209dc25a..7e641426d340d 100644 --- a/test/choosetests.jl +++ b/test/choosetests.jl @@ -50,7 +50,7 @@ function choosetests(choices = []) "errorshow", "sets", "goto", "llvmcall", "llvmcall2", "grisu", "some", "meta", "stacktraces", "docs", "misc", "threads", "stress", - "enums", "cmdlineargs", "int", + "enums", "cmdlineargs", "int", "interpreter", "checked", "bitset", "floatfuncs", "precompile", "boundscheck", "error", "ambiguous", "cartesian", "osutils", "channels", "iostream", "secretbuffer", "specificity", diff --git a/test/core.jl b/test/core.jl index 4c5cd5f633ddd..40faf822b897f 100644 --- a/test/core.jl +++ b/test/core.jl @@ -6835,22 +6835,6 @@ struct T29145{A,B} end @test_throws TypeError T29145() -# interpreted but inferred/optimized top-level expressions with vars -let code = """ - while true - try - this_is_undefined_29213 - ed = 0 - break - finally - break - end - end - print(42) - """ - @test read(`$(Base.julia_cmd()) --startup-file=no --compile=min -e $code`, String) == "42" -end - # issue #29175 function f29175(tuple::T) where {T<:Tuple} prefix::Tuple{T.parameters[1:end-1]...} = tuple[1:length(T.parameters)-1] diff --git a/test/interpreter.jl b/test/interpreter.jl new file mode 100644 index 0000000000000..0fea42e0aecdb --- /dev/null +++ b/test/interpreter.jl @@ -0,0 +1,32 @@ +# This file is a part of Julia. License is MIT: https://julialang.org/license + +using Test + +# interpreted but inferred/optimized top-level expressions with vars +let code = """ + while true + try + this_is_undefined_29213 + ed = 0 + break + finally + break + end + end + print(42) + """ + @test read(`$(Base.julia_cmd()) --startup-file=no --compile=min -e $code`, String) == "42" +end + +let code = "Threads.atomic_add!(Threads.Atomic{Int}(40), 2)" + @test read(`$(Base.julia_cmd()) --startup-file=no --compile=min -E $code`, String) == "40\n" +end + +let p = Pipe(), + c = pipeline(`$(Base.julia_cmd()) --startup-file=no --compile=min -E 'error()'`, stderr=p) + proc = run(c, wait=false) + readline(p) + @test readline(p) == "Stacktrace:" + wait(proc) + close(p) +end