Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
de85ebb
🤖 [backports-release-1.12] Bump NetworkOptions stdlib 532992f → 7034c…
DilumAluthgeBot Dec 29, 2025
a198393
Docs: mention cmd line option for App Installer on Windows
davidanthoff Dec 23, 2025
5ae7e55
REPL: fix completion overwriting input after cursor (#60472)
IanButterworth Dec 25, 2025
eb2afda
Clarify that `cpu_info` times are expressed in milliseconds (#60480)
BioTurboNick Dec 27, 2025
387dd93
Fix `@allocated 1 .+ 1` (#60494)
N5N3 Dec 29, 2025
1ed5bdf
Fix JET warning by avoiding recursion in `getproperty(::DirEntry)` (#…
fingolfin Dec 29, 2025
89dc101
Fix JET warning in `artifact_meta` (#60507)
fingolfin Dec 29, 2025
e7b2b23
[backports-release-1.12] Fix build with USE_SYSTEM_P7ZIP=1 for 1.12 (…
nhz2 Jan 12, 2026
a6c2a27
1.12: add getter for global variable pointer matching jlvalue (#60685)
wsmoses Jan 14, 2026
ab6dd0a
Backport `@fastmath x^2` inlining regression to 1.12 (#60686)
oscardssmith Jan 14, 2026
634170e
Fix build with USE_SYSTEM_P7ZIP=1 (#60623)
nhz2 Jan 11, 2026
e1e955a
Don't set the owner of the string needlessly. (#60601)
gbaraldi Jan 14, 2026
b2bc423
add wb_back on all task switch paths (#60617)
vtjnash Jan 15, 2026
3c92c84
[LLVMAllocOpt] Preserve metadata lowering an alloca
wsmoses Jan 15, 2026
03eeb80
🤖 [backports-release-1.12] Bump SparseArrays stdlib f81a30d → 2376bf8…
DilumAluthgeBot Jan 16, 2026
d6a0cd2
Remove potential unitialized memory in the GC stack (#60651)
gbaraldi Jan 16, 2026
a7ec7a2
Print `full_name` after precompiling extension (#60456)
DilumAluthge Jan 16, 2026
1f466f7
[1.12] Add getter for get llvm codeinstances (#60725)
wsmoses Jan 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ default: $(JULIA_BUILD_MODE) # contains either "debug" or "release"
all: debug release

# sort is used to remove potential duplicates
DIRS := $(sort $(build_bindir) $(build_depsbindir) $(build_libdir) $(build_private_libdir) $(build_libexecdir) $(build_includedir) $(build_includedir)/julia $(build_sysconfdir)/julia $(build_datarootdir)/julia $(build_datarootdir)/julia/stdlib $(build_man1dir))
DIRS := $(sort $(build_bindir) $(build_depsbindir) $(build_libdir) $(build_private_libdir) $(build_private_libexecdir) $(build_libexecdir) $(build_includedir) $(build_includedir)/julia $(build_sysconfdir)/julia $(build_datarootdir)/julia $(build_datarootdir)/julia/stdlib $(build_man1dir))
ifneq ($(BUILDROOT),$(JULIAHOME))
BUILDDIRS := $(BUILDROOT) $(addprefix $(BUILDROOT)/,base src src/flisp src/support src/clangsa cli doc deps stdlib test test/clangsa test/embedding test/gcext test/llvmpasses)
BUILDDIRMAKE := $(addsuffix /Makefile,$(BUILDDIRS)) $(BUILDROOT)/sysimage.mk $(BUILDROOT)/pkgimage.mk
Expand Down
4 changes: 2 additions & 2 deletions base/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -183,14 +183,14 @@ endif
endef

# libexec executables
symlink_p7zip: $(build_bindir)/7z$(EXE)
symlink_p7zip: $(build_private_libexecdir)/7z$(EXE)

ifneq ($(USE_SYSTEM_P7ZIP),0)
SYMLINK_SYSTEM_LIBRARIES += symlink_p7zip
7Z_PATH := $(shell which 7z$(EXE))
endif

$(build_bindir)/7z$(EXE):
$(build_private_libexecdir)/7z$(EXE):
[ -e "$(7Z_PATH)" ] && \
rm -f "$@" && \
ln -sf "$(7Z_PATH)" "$@"
Expand Down
7 changes: 4 additions & 3 deletions base/fastmath.jl
Original file line number Diff line number Diff line change
Expand Up @@ -297,12 +297,13 @@ exp10_fast(x::Union{Float32,Float64}) = Base.Math.exp10_fast(x)

# builtins

@inline function pow_fast(x::Float64, y::Integer)
@inline function pow_fast(x::Union{Float32, Float64}, y::Integer)
z = y % Int32
z == y ? pow_fast(x, z) : x^y
end
pow_fast(x::Float32, y::Integer) = x^y
pow_fast(x::Float64, y::Int32) = ccall("llvm.powi.f64.i32", llvmcall, Float64, (Float64, Int32), x, y)
@inline pow_fast(x::Float16, y::Integer) = Float16(pow_fast(Float32(x), y))
pow_fast(x::Float64, y::Int32) = ccall("llvm.powi", llvmcall, Float64, (Float64, Int32), x, y)
pow_fast(x::Float32, y::Int32) = ccall("llvm.powi", llvmcall, Float32, (Float32, Int32), x, y)
pow_fast(x::FloatTypes, ::Val{p}) where {p} = pow_fast(x, p) # inlines already via llvm.powi
@inline pow_fast(x, v::Val) = Base.literal_pow(^, x, v)

Expand Down
2 changes: 1 addition & 1 deletion base/file.jl
Original file line number Diff line number Diff line change
Expand Up @@ -1059,7 +1059,7 @@ struct DirEntry
end
function Base.getproperty(obj::DirEntry, p::Symbol)
if p === :path
return joinpath(obj.dir, obj.name)
return joinpath(getfield(obj, :dir), getfield(obj, :name))
else
return getfield(obj, p)
end
Expand Down
13 changes: 7 additions & 6 deletions base/precompilation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -845,7 +845,7 @@ function _precompilepkgs(pkgs::Union{Vector{String}, Vector{PkgId}},
write(get!(IOBuffer, std_outputs, pkg_config), str)
if !in(pkg_config, taskwaiting) && occursin("waiting for IO to finish", str)
!fancyprint && @lock print_lock begin
println(io, pkg.name, color_string(" Waiting for background task / IO / timer.", Base.warn_color()))
println(io, full_name(ext_to_parent, pkg), color_string(" Waiting for background task / IO / timer.", Base.warn_color()))
end
push!(taskwaiting, pkg_config)
end
Expand Down Expand Up @@ -1015,7 +1015,8 @@ function _precompilepkgs(pkgs::Union{Vector{String}, Vector{PkgId}},
try
# allows processes to wait if another process is precompiling a given package to
# a functionally identical package cache (except for preferences, which may differ)
t = @elapsed ret = precompile_pkgs_maybe_cachefile_lock(io, print_lock, fancyprint, pkg_config, pkgspidlocked, hascolor, parallel_limiter, ignore_loaded) do
fullname = full_name(ext_to_parent, pkg)
t = @elapsed ret = precompile_pkgs_maybe_cachefile_lock(io, print_lock, fancyprint, pkg_config, pkgspidlocked, hascolor, parallel_limiter, ignore_loaded, fullname) do
Base.with_logger(Base.NullLogger()) do
# whether to respect already loaded dependency versions
keep_loaded_modules = !ignore_loaded
Expand Down Expand Up @@ -1094,7 +1095,7 @@ function _precompilepkgs(pkgs::Union{Vector{String}, Vector{PkgId}},
str = sprint(context=io) do iostr
if !quick_exit
if fancyprint # replace the progress bar
what = isempty(requested_pkgids) ? "packages finished." : "$(join((p.name for p in requested_pkgids), ", ", " and ")) finished."
what = isempty(requested_pkgids) ? "packages finished." : "$(join((full_name(ext_to_parent, p) for p in requested_pkgids), ", ", " and ")) finished."
printpkgstyle(iostr, :Precompiling, what)
end
plural = length(configs) > 1 ? "dependency configurations" : ndeps == 1 ? "dependency" : "dependencies"
Expand Down Expand Up @@ -1157,7 +1158,7 @@ function _precompilepkgs(pkgs::Union{Vector{String}, Vector{PkgId}},
for (pkg_config, err) in failed_deps
dep, config = pkg_config
if strict || (dep in project_deps)
print(err_str, "\n", dep.name, " ")
print(err_str, "\n", full_name(ext_to_parent, dep), " ")
for cfg in config[1]
print(err_str, cfg, " ")
end
Expand Down Expand Up @@ -1205,7 +1206,7 @@ function _color_string(cstr::String, col::Union{Int64, Symbol}, hascolor)
end

# Can be merged with `maybe_cachefile_lock` in loading?
function precompile_pkgs_maybe_cachefile_lock(f, io::IO, print_lock::ReentrantLock, fancyprint::Bool, pkg_config, pkgspidlocked, hascolor, parallel_limiter::Base.Semaphore, ignore_loaded::Bool)
function precompile_pkgs_maybe_cachefile_lock(f, io::IO, print_lock::ReentrantLock, fancyprint::Bool, pkg_config, pkgspidlocked, hascolor, parallel_limiter::Base.Semaphore, ignore_loaded::Bool, fullname)
if !(isdefined(Base, :mkpidlock_hook) && isdefined(Base, :trymkpidlock_hook) && Base.isdefined(Base, :parse_pidfile_hook))
return f()
end
Expand All @@ -1226,7 +1227,7 @@ function precompile_pkgs_maybe_cachefile_lock(f, io::IO, print_lock::ReentrantLo
"another machine (hostname: $hostname, pid: $pid, pidfile: $pidfile)"
end
!fancyprint && @lock print_lock begin
println(io, " ", pkg.name, _color_string(" Being precompiled by $(pkgspidlocked[pkg_config])", Base.info_color(), hascolor))
println(io, " ", fullname, _color_string(" Being precompiled by $(pkgspidlocked[pkg_config])", Base.info_color(), hascolor))
end
Base.release(parallel_limiter) # release so other work can be done while waiting
try
Expand Down
17 changes: 5 additions & 12 deletions base/sysinfo.jl
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,6 @@ const WORD_SIZE = Core.sizeof(Int) * 8

The number of system "clock ticks" per second, corresponding to `sysconf(_SC_CLK_TCK)` on
POSIX systems, or `0` if it is unknown.

CPU times, e.g. as returned by `Sys.cpu_info()`, are in units of ticks, i.e. units of `1 / Sys.SC_CLK_TCK` seconds if `Sys.SC_CLK_TCK > 0`.
"""
global SC_CLK_TCK::Clong

Expand Down Expand Up @@ -202,8 +200,7 @@ The `CPUinfo` type is a mutable struct with the following fields:
- `cpu_times!idle::UInt64`: Time spent in idle mode. CPU state shows the CPU time that's not actively being used.
- `cpu_times!irq::UInt64`: Time spent handling interrupts. CPU state shows the amount of time the CPU has been servicing hardware interrupts.

The times are in units of `1/Sys.SC_CLK_TCK` seconds if `Sys.SC_CLK_TCK > 0`; otherwise they are in
unknown units.
The times are in units of milliseconds.

Note: Included in the detailed system information via `versioninfo(verbose=true)`.
"""
Expand All @@ -224,24 +221,20 @@ CPUinfo(info::UV_cpu_info_t) = CPUinfo(unsafe_string(info.model), info.speed,
public CPUinfo

function _show_cpuinfo(io::IO, info::Sys.CPUinfo, header::Bool=true, prefix::AbstractString=" ")
tck = SC_CLK_TCK
if header
println(io, info.model, ": ")
print(io, " "^length(prefix))
println(io, " ", lpad("speed", 5), " ", lpad("user", 9), " ", lpad("nice", 9), " ",
lpad("sys", 9), " ", lpad("idle", 9), " ", lpad("irq", 9))
end
print(io, prefix)
unit = tck > 0 ? " s " : " "
tc = max(tck, 1)
ms_per_s = 1000
unit = " s "
d(i, unit=unit) = lpad(string(round(Int64,i)), 9) * unit
print(io,
lpad(string(info.speed), 5), " MHz ",
d(info.cpu_times!user / tc), d(info.cpu_times!nice / tc), d(info.cpu_times!sys / tc),
d(info.cpu_times!idle / tc), d(info.cpu_times!irq / tc, tck > 0 ? " s" : " "))
if tck <= 0
print(io, "ticks")
end
d(info.cpu_times!user / ms_per_s), d(info.cpu_times!nice / ms_per_s), d(info.cpu_times!sys / ms_per_s),
d(info.cpu_times!idle / ms_per_s), d(info.cpu_times!irq / ms_per_s))
end

show(io::IO, ::MIME"text/plain", info::CPUinfo) = _show_cpuinfo(io, info, true, " ")
Expand Down
8 changes: 8 additions & 0 deletions base/timing.jl
Original file line number Diff line number Diff line change
Expand Up @@ -498,6 +498,14 @@ function is_simply_call(@nospecialize ex)
Meta.isexpr(a, :..., 1) && is_simple_atom(a.args[1]) && continue
return false
end
# Ensure Expr(:call, .+, ...) get wrapped
if ex.args[1] isa Symbol
sa = String(ex.args[1]::Symbol)
startswith(sa, ".") &&
!endswith(sa, ".") &&
isoperator(Symbol(sa[2:end])) &&
return false
end
return true
end

Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1fbf59e3052ec0d40a195d935b3d4a96
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
4ec9724062d97a9d400bfb4a672ed5ce52999738ddbc01d2892d97df3fd256fe03bb5ea69f2ebbbbdbfef91edc24d82e54df48f997781eba2c6cd8e1c36d046c
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
059aef1395d4160561236167379af7ae
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
69015dbc54d0d374b89eea2464eafd0aae461ad819965ad5745fc5ce50cf9519eb4d4024209184a90f2704873a96a0fd3586bf354a036c4c44452141d5535f43

This file was deleted.

This file was deleted.

7 changes: 6 additions & 1 deletion doc/src/manual/installation.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,12 @@ If the Windows Store is blocked on a system, we have an alternative
[MSIX App Installer](https://learn.microsoft.com/en-us/windows/msix/app-installer/app-installer-file-overview)
based setup. To use the App Installer version, download
[this](https://install.julialang.org/Julia.appinstaller) file and open it by
double clicking on it.
double clicking on it. One can also install exactly the same version by executing
the PowerShell command

```
Add-AppxPackage -AppInstallerFile https://install.julialang.org/Julia.appinstaller
```

### MSI Installer (Windows)

Expand Down
34 changes: 34 additions & 0 deletions src/aotcompile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,24 @@ void jl_get_function_id_impl(void *native_code, jl_code_instance_t *codeinst,
}
}

extern "C" JL_DLLEXPORT_CODEGEN void
jl_get_llvm_cis_impl(void *native_code, size_t *num_elements, jl_code_instance_t **data)
{
jl_native_code_desc_t *desc = (jl_native_code_desc_t *)native_code;
auto &map = desc->jl_fvar_map;

if (data == NULL) {
*num_elements = map.size();
return;
}

assert(*num_elements == map.size());
size_t i = 0;
for (auto &ci : map) {
data[i++] = ci.first;
}
}

extern "C" JL_DLLEXPORT_CODEGEN void
jl_get_llvm_mis_impl(void *native_code, size_t *num_elements, jl_method_instance_t **data)
{
Expand Down Expand Up @@ -124,6 +142,22 @@ extern "C" JL_DLLEXPORT_CODEGEN void jl_get_llvm_gvs_impl(void *native_code,
memcpy(data, value_map.data(), *num_elements * sizeof(void *));
}

extern "C" JL_DLLEXPORT_CODEGEN void jl_get_llvm_gvs_globals_impl(void *native_code,
size_t *num_elements, void **data)
{
// map a memory location (jl_value_t or jl_binding_t) to a GlobalVariable
jl_native_code_desc_t *desc = (jl_native_code_desc_t *)native_code;
auto &value_map = desc->jl_sysimg_gvars;

if (data == NULL) {
*num_elements = value_map.size();
return;
}

assert(*num_elements == value_map.size());
memcpy(data, value_map.data(), *num_elements * sizeof(void *));
}

extern "C" JL_DLLEXPORT_CODEGEN void jl_get_llvm_external_fns_impl(void *native_code,
size_t *num_elements,
jl_code_instance_t *data)
Expand Down
4 changes: 3 additions & 1 deletion src/codegen-stubs.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@ JL_DLLEXPORT void jl_dump_native_fallback(void *native_code,
const char *bc_fname, const char *unopt_bc_fname, const char *obj_fname, const char *asm_fname,
ios_t *z, ios_t *s) UNAVAILABLE
JL_DLLEXPORT void jl_get_llvm_gvs_fallback(void *native_code, arraylist_t *gvs) UNAVAILABLE
JL_DLLEXPORT void jl_get_llvm_gvs_globals_fallback(void *native_code, arraylist_t *gvs) UNAVAILABLE
JL_DLLEXPORT void jl_get_llvm_external_fns_fallback(void *native_code, arraylist_t *gvs) UNAVAILABLE
JL_DLLEXPORT void jl_get_llvm_mis_fallback(void *native_code, arraylist_t* MIs) UNAVAILABLE
JL_DLLEXPORT void jl_get_llvm_mis_fallback(void *native_code, size_t *num_elements, jl_method_instance_t **data) UNAVAILABLE
JL_DLLEXPORT void jl_get_llvm_cis_fallback(void *native_code, size_t *num_elements, jl_code_instance_t **data) UNAVAILABLE

JL_DLLEXPORT jl_value_t *jl_dump_method_asm_fallback(jl_method_instance_t *linfo, size_t world,
char emit_mc, char getwrapper, const char* asm_variant, const char *debuginfo, char binary) UNAVAILABLE
Expand Down
13 changes: 13 additions & 0 deletions src/codegen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2305,6 +2305,19 @@ static inline jl_cgval_t value_to_pointer(jl_codectx_t &ctx, const jl_cgval_t &v
Align align(julia_alignment(v.typ));
Type *ty = julia_type_to_llvm(ctx, v.typ);
AllocaInst *loc = emit_static_alloca(ctx, ty, align);
jl_datatype_t *dt = (jl_datatype_t *)v.typ;
size_t npointers = dt->layout->first_ptr >= 0 ? dt->layout->npointers : 0;
if (npointers > 0) {
auto InsertPoint = ctx.builder.saveIP();
ctx.builder.SetInsertPoint(ctx.topalloca->getParent(), ++ctx.topalloca->getIterator());
for (size_t i = 0; i < npointers; i++) {
// make sure these are nullptr early from LLVM's perspective, in case it decides to SROA it
Value *ptr_field = emit_ptrgep(ctx, loc, jl_ptr_offset(dt, i) * sizeof(void *));
ctx.builder.CreateAlignedStore(
Constant::getNullValue(ctx.types().T_prjlvalue), ptr_field, Align(sizeof(void *)));
}
ctx.builder.restoreIP(InsertPoint);
}
auto tbaa = v.V == nullptr ? ctx.tbaa().tbaa_gcframe : ctx.tbaa().tbaa_stack;
auto stack_ai = jl_aliasinfo_t::fromTBAA(ctx, tbaa);
recombine_value(ctx, v, loc, stack_ai, align, false);
Expand Down
2 changes: 1 addition & 1 deletion src/gc-stock.c
Original file line number Diff line number Diff line change
Expand Up @@ -629,7 +629,7 @@ void jl_gc_reset_alloc_count(void) JL_NOTSAFEPOINT
static void jl_gc_free_memory(jl_genericmemory_t *m, int isaligned) JL_NOTSAFEPOINT
{
assert(jl_is_genericmemory(m));
assert(jl_genericmemory_how(m) == 1 || jl_genericmemory_how(m) == 2);
assert(jl_genericmemory_how(m) == 1);
char *d = (char*)m->ptr;
size_t freed_bytes = memory_block_usable_size(d, isaligned);
assert(freed_bytes != 0);
Expand Down
1 change: 0 additions & 1 deletion src/genericmemory.c
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,6 @@ JL_DLLEXPORT jl_value_t *jl_genericmemory_to_string(jl_genericmemory_t *m, size_
m->length = 0;
if (how != 0) {
jl_value_t *o = jl_genericmemory_data_owner_field(m);
jl_genericmemory_data_owner_field(m) = NULL;
if (how == 3 && // implies jl_is_string(o)
((mlength + sizeof(void*) + 1 <= GC_MAX_SZCLASS) == (len + sizeof(void*) + 1 <= GC_MAX_SZCLASS))) {
if (jl_string_data(o)[len] != '\0')
Expand Down
2 changes: 2 additions & 0 deletions src/jl_exported_funcs.inc
Original file line number Diff line number Diff line change
Expand Up @@ -523,8 +523,10 @@
YY(jl_get_LLVM_VERSION) \
YY(jl_dump_native) \
YY(jl_get_llvm_gvs) \
YY(jl_get_llvm_gvs_globals) \
YY(jl_get_llvm_external_fns) \
YY(jl_get_llvm_mis) \
YY(jl_get_llvm_cis) \
YY(jl_dump_function_asm) \
YY(jl_LLVMCreateDisasm) \
YY(jl_LLVMDisasmInstruction) \
Expand Down
4 changes: 3 additions & 1 deletion src/julia_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -2057,14 +2057,16 @@ JL_DLLIMPORT void jl_dump_native(void *native_code,
const char *bc_fname, const char *unopt_bc_fname, const char *obj_fname, const char *asm_fname,
ios_t *z, ios_t *s, jl_emission_params_t *params);
JL_DLLIMPORT void jl_get_llvm_gvs(void *native_code, size_t *num_els, void **gvs);
JL_DLLIMPORT void jl_get_llvm_gvs_globals(void *native_code, size_t *num_els, void **gvs);
JL_DLLIMPORT void jl_get_llvm_external_fns(void *native_code, size_t *num_els,
jl_code_instance_t *gvs);
JL_DLLIMPORT void jl_get_function_id(void *native_code, jl_code_instance_t *ncode,
int32_t *func_idx, int32_t *specfunc_idx);
JL_DLLIMPORT void jl_register_fptrs(uint64_t image_base, const struct _jl_image_fptrs_t *fptrs,
jl_method_instance_t **linfos, size_t n);
JL_DLLIMPORT void jl_get_llvm_mis(void *native_code, size_t *num_els,
jl_method_instance_t *MIs);
jl_method_instance_t **MIs);
JL_DLLIMPORT void jl_get_llvm_cis(void *native_code, size_t *num_elements, jl_code_instance_t **data);
JL_DLLIMPORT void jl_init_codegen(void);
JL_DLLIMPORT void jl_teardown_codegen(void) JL_NOTSAFEPOINT;
JL_DLLIMPORT int jl_getFunctionInfo(jl_frame_t **frames, uintptr_t pointer, int skipC, int noInline) JL_NOTSAFEPOINT;
Expand Down
1 change: 1 addition & 0 deletions src/llvm-alloc-opt.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -701,6 +701,7 @@ void Optimizer::moveToStack(CallInst *orig_inst, size_t sz, bool has_ref, AllocF
initializeAlloca(builder, buff, allockind);
}
Instruction *new_inst = cast<Instruction>(ptr);
new_inst->copyMetadata(*orig_inst);
new_inst->takeName(orig_inst);

auto simple_replace = [&] (Instruction *orig_i, Instruction *new_i) {
Expand Down
10 changes: 6 additions & 4 deletions src/task.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,10 +203,6 @@ static void NOINLINE save_stack(jl_ptls_t ptls, jl_task_t *lastt, jl_task_t **pt
lastt->ctx.copy_stack = nb;
lastt->sticky = 1;
memcpy_stack_a16((uint64_t*)buf, (uint64_t*)frame_addr, nb);
// this task's stack could have been modified after
// it was marked by an incremental collection
// move the barrier back instead of walking it again here
jl_gc_wb_back(lastt);
}

JL_NO_ASAN static void NOINLINE JL_NORETURN restore_stack(jl_ucontext_t *t, jl_ptls_t ptls, char *p)
Expand Down Expand Up @@ -504,6 +500,12 @@ JL_NO_ASAN static void ctx_switch(jl_task_t *lastt)
lastt->ctx.ctx = &lasttstate.ctx;
}
}
// this task's stack or scope field could have been modified after
// it was marked by an incremental collection
// move the barrier back instead of walking the shadow stack again here to check if that is required
// even if killed (dropping the stack) and just the scope field matters,
// let the gc figure that out next time it does a quick mark
jl_gc_wb_back(lastt);

// set up global state for new task and clear global state for old task
t->ptls = ptls;
Expand Down
2 changes: 1 addition & 1 deletion stdlib/Artifacts/src/Artifacts.jl
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ function artifact_meta(name::String, artifact_dict::Dict, artifacts_toml::String
dl_dict = Dict{Platform,Dict{String,Any}}()
for x in meta
x = x::Dict{String, Any}
dl_dict[unpack_platform(x, name, artifacts_toml)] = x
dl_dict[unpack_platform(x, name, artifacts_toml)::Platform] = x
end
meta = select_platform(dl_dict, platform)
# If it's NOT a dict, complain
Expand Down
2 changes: 1 addition & 1 deletion stdlib/NetworkOptions.version
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
NETWORKOPTIONS_BRANCH = master
NETWORKOPTIONS_SHA1 = 532992fcc0f1d02df48374969cbae37e34c01360
NETWORKOPTIONS_SHA1 = 7034c55dbf52ee959cabd63bcbe656df658f5bda
NETWORKOPTIONS_GIT_URL := https://github.com/JuliaLang/NetworkOptions.jl.git
NETWORKOPTIONS_TAR_URL = https://api.github.com/repos/JuliaLang/NetworkOptions.jl/tarball/$1
Loading