From 5566710bca53e576ed24ee34018fdccffd37d2b3 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Thu, 7 Jan 2021 10:36:15 -0500 Subject: [PATCH] Remove try from at-time and close compile timer during throw (#39133) * remove try from at-time and close compile timer during throw * add scope tests for at-time and aat-timev --- base/timing.jl | 18 ++++++------------ src/task.c | 3 +++ test/core.jl | 13 +++++++++++++ 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/base/timing.jl b/base/timing.jl index 80f6aee0aa02f..976bda7962676 100644 --- a/base/timing.jl +++ b/base/timing.jl @@ -203,12 +203,9 @@ macro time(ex) local stats = gc_num() local compile_elapsedtime = cumulative_compile_time_ns_before() local elapsedtime = time_ns() - local val = try - $(esc(ex)) - finally - elapsedtime = time_ns() - elapsedtime - compile_elapsedtime = cumulative_compile_time_ns_after() - compile_elapsedtime - end + local val = $(esc(ex)) + elapsedtime = time_ns() - elapsedtime + compile_elapsedtime = cumulative_compile_time_ns_after() - compile_elapsedtime local diff = GC_Diff(gc_num(), stats) time_print(elapsedtime, diff.allocd, diff.total_time, gc_alloc_count(diff), compile_elapsedtime, true) val @@ -252,12 +249,9 @@ macro timev(ex) local stats = gc_num() local compile_elapsedtime = cumulative_compile_time_ns_before() local elapsedtime = time_ns() - local val = try - $(esc(ex)) - finally - elapsedtime = time_ns() - elapsedtime - compile_elapsedtime = cumulative_compile_time_ns_after() - compile_elapsedtime - end + local val = $(esc(ex)) + elapsedtime = time_ns() - elapsedtime + compile_elapsedtime = cumulative_compile_time_ns_after() - compile_elapsedtime local diff = GC_Diff(gc_num(), stats) timev_print(elapsedtime, diff, compile_elapsedtime) val diff --git a/src/task.c b/src/task.c index 0927b685cb5ce..0ab4075ac0067 100644 --- a/src/task.c +++ b/src/task.c @@ -584,6 +584,9 @@ static void JL_NORETURN throw_internal(jl_value_t *exception JL_MAYBE_UNROOTED) { jl_ptls_t ptls = jl_get_ptls_states(); ptls->io_wait = 0; + // @time needs its compile timer disabled on error, + // and cannot use a try-finally as it would break scope for assignments + jl_measure_compile_time[ptls->tid] = 0; if (ptls->safe_restore) jl_longjmp(*ptls->safe_restore, 1); // During startup diff --git a/test/core.jl b/test/core.jl index 88b54eb25a90b..2e275de6edf93 100644 --- a/test/core.jl +++ b/test/core.jl @@ -5080,6 +5080,19 @@ end @test f17255(10000)[1] GC.enable(true) +# PR #39133, ensure that @time evaluates in the same scope +function time_macro_scope() + @time time_macro_local_var = 1 + time_macro_local_var +end +@test time_macro_scope() == 1 + +function timev_macro_scope() + @timev timev_macro_local_var = 1 + timev_macro_local_var +end +@time timev_macro_scope() == 1 + # issue #18710 bad_tvars() where {T} = 1 @test isa(which(bad_tvars, ()), Method)