From 7a28ad5aeb681e7631b360e2998aa998192d1601 Mon Sep 17 00:00:00 2001 From: gbaraldi Date: Thu, 3 Jul 2025 12:11:43 -0300 Subject: [PATCH 01/26] Actually setup jit targets when compiling packageimages instead of targeting only one (#54471) (cherry picked from commit 859353d2906affbc848d18a63157c9f602a5e4e4) --- src/codegen.cpp | 5 ++- src/llvm-multiversioning.cpp | 1 + src/processor_arm.cpp | 51 ++++++++++++++++++++++-- src/processor_fallback.cpp | 21 ++++++++-- src/processor_x86.cpp | 77 ++++++++++++++++++++++++++++++++++-- 5 files changed, 144 insertions(+), 11 deletions(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index 20a6240a926d0..a7aeccfd79dcc 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -6553,8 +6553,11 @@ static Function* gen_cfun_wrapper( ctx.builder.ClearInsertionPoint(); if (aliasname) { - GlobalAlias::create(cw->getValueType(), cw->getType()->getAddressSpace(), + auto alias = GlobalAlias::create(cw->getValueType(), cw->getType()->getAddressSpace(), GlobalValue::ExternalLinkage, aliasname, cw, M); + if(ctx.emission_context.TargetTriple.isOSBinFormatCOFF()) { + alias->setDLLStorageClass(GlobalValue::DLLStorageClassTypes::DLLExportStorageClass); + } } if (nest) { diff --git a/src/llvm-multiversioning.cpp b/src/llvm-multiversioning.cpp index dc00f2332b477..157800e5b26a6 100644 --- a/src/llvm-multiversioning.cpp +++ b/src/llvm-multiversioning.cpp @@ -674,6 +674,7 @@ void CloneCtx::rewrite_alias(GlobalAlias *alias, Function *F) trampoline->removeFnAttr("julia.mv.reloc"); trampoline->removeFnAttr("julia.mv.clones"); trampoline->addFnAttr("julia.mv.alias"); + trampoline->setDLLStorageClass(alias->getDLLStorageClass()); alias->eraseFromParent(); uint32_t id; diff --git a/src/processor_arm.cpp b/src/processor_arm.cpp index 79975a5bde70a..55fc74c425b76 100644 --- a/src/processor_arm.cpp +++ b/src/processor_arm.cpp @@ -1871,12 +1871,55 @@ const std::pair &jl_get_llvm_disasm_target(void) return res; } +#ifndef __clang_gcanalyzer__ std::vector jl_get_llvm_clone_targets(void) { - if (jit_targets.empty()) - jl_error("JIT targets not initialized"); +auto &cmdline = get_cmdline_targets(); + check_cmdline(cmdline, true); + llvm::SmallVector, 0> image_targets; + for (auto &arg: cmdline) { + auto data = arg_target_data(arg, image_targets.empty()); + image_targets.push_back(std::move(data)); + } + auto ntargets = image_targets.size(); + if (image_targets.empty()) + jl_error("No targets specified"); std::vector res; - for (auto &target: jit_targets) { + // Now decide the clone condition. + for (size_t i = 1; i < ntargets; i++) { + auto &t = image_targets[i]; + if (t.en.flags & JL_TARGET_CLONE_ALL) + continue; + auto &features0 = image_targets[t.base].en.features; + // Always clone when code checks CPU features + t.en.flags |= JL_TARGET_CLONE_CPU; + static constexpr uint32_t clone_fp16[] = {Feature::fp16fml,Feature::fullfp16}; + for (auto fe: clone_fp16) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_FLOAT16; + break; + } + } + // The most useful one in general... + t.en.flags |= JL_TARGET_CLONE_LOOP; +#ifdef _CPU_ARM_ + static constexpr uint32_t clone_math[] = {Feature::vfp3, Feature::vfp4, Feature::neon}; + for (auto fe: clone_math) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_MATH; + break; + } + } + static constexpr uint32_t clone_simd[] = {Feature::neon}; + for (auto fe: clone_simd) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_SIMD; + break; + } + } +#endif + } + for (auto &target: image_targets) { auto features_en = target.en.features; auto features_dis = target.dis.features; for (auto &fename: feature_names) { @@ -1896,6 +1939,8 @@ std::vector jl_get_llvm_clone_targets(void) } return res; } +#endif + extern "C" int jl_test_cpu_feature(jl_cpu_feature_t feature) { diff --git a/src/processor_fallback.cpp b/src/processor_fallback.cpp index 603af8d56a3bb..6fe0e2f87b376 100644 --- a/src/processor_fallback.cpp +++ b/src/processor_fallback.cpp @@ -145,12 +145,26 @@ const std::pair &jl_get_llvm_disasm_target(void) return res; } +#ifndef __clang_gcanalyzer__ extern "C" std::vector jl_get_llvm_clone_targets(void) { - if (jit_targets.empty()) - jl_error("JIT targets not initialized"); + auto &cmdline = get_cmdline_targets(); + check_cmdline(cmdline, true); + llvm::SmallVector, 0> image_targets; + for (auto &arg: cmdline) { + auto data = arg_target_data(arg, image_targets.empty()); + image_targets.push_back(std::move(data)); + } + auto ntargets = image_targets.size(); + // Now decide the clone condition. + for (size_t i = 1; i < ntargets; i++) { + auto &t = image_targets[i]; + t.en.flags |= JL_TARGET_CLONE_ALL; + } + if (image_targets.empty()) + jl_error("No image targets found"); std::vector res; - for (auto &target: jit_targets) { + for (auto &target: image_targets) { jl_target_spec_t ele; std::tie(ele.cpu_name, ele.cpu_features) = get_llvm_target_str(target); ele.data = serialize_target_data(target.name, target.en.features, @@ -161,6 +175,7 @@ extern "C" std::vector jl_get_llvm_clone_targets(void) } return res; } +#endif JL_DLLEXPORT jl_value_t *jl_get_cpu_name(void) { diff --git a/src/processor_x86.cpp b/src/processor_x86.cpp index 57582121f29fe..307e92e0ef51c 100644 --- a/src/processor_x86.cpp +++ b/src/processor_x86.cpp @@ -1095,13 +1095,81 @@ extern "C" JL_DLLEXPORT const std::pair &jl_get_llvm_di {feature_masks, 0}, {{}, 0}, 0}); return res; } - +#ifndef __clang_gcanalyzer__ extern "C" JL_DLLEXPORT std::vector jl_get_llvm_clone_targets(void) { - if (jit_targets.empty()) - jl_error("JIT targets not initialized"); + auto &cmdline = get_cmdline_targets(); + check_cmdline(cmdline, true); + llvm::SmallVector, 0> image_targets; + for (auto &arg: cmdline) { + auto data = arg_target_data(arg, image_targets.empty()); + image_targets.push_back(std::move(data)); + } + + auto ntargets = image_targets.size(); + // Now decide the clone condition. + for (size_t i = 1; i < ntargets; i++) { + auto &t = image_targets[i]; + if (t.en.flags & JL_TARGET_CLONE_ALL) + continue; + // Always clone when code checks CPU features + t.en.flags |= JL_TARGET_CLONE_CPU; + // The most useful one in general... + t.en.flags |= JL_TARGET_CLONE_LOOP; + auto &features0 = image_targets[t.base].en.features; + // Special case for KNL/KNM since they're so different + if (!(t.dis.flags & JL_TARGET_CLONE_ALL)) { + if ((t.name == "knl" || t.name == "knm") && + image_targets[t.base].name != "knl" && image_targets[t.base].name != "knm") { + t.en.flags |= JL_TARGET_CLONE_ALL; + break; + } + } + static constexpr uint32_t clone_math[] = {Feature::fma, Feature::fma4}; + static constexpr uint32_t clone_simd[] = {Feature::sse3, Feature::ssse3, + Feature::sse41, Feature::sse42, + Feature::avx, Feature::avx2, + Feature::vaes, Feature::vpclmulqdq, + Feature::sse4a, Feature::avx512f, + Feature::avx512dq, Feature::avx512ifma, + Feature::avx512pf, Feature::avx512er, + Feature::avx512cd, Feature::avx512bw, + Feature::avx512vl, Feature::avx512vbmi, + Feature::avx512vpopcntdq, Feature::avxvnni, + Feature::avx512vbmi2, Feature::avx512vnni, + Feature::avx512bitalg, Feature::avx512bf16, + Feature::avx512vp2intersect, Feature::avx512fp16}; + for (auto fe: clone_math) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_MATH; + break; + } + } + for (auto fe: clone_simd) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_SIMD; + break; + } + } + static constexpr uint32_t clone_fp16[] = {Feature::avx512fp16}; + for (auto fe: clone_fp16) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_FLOAT16; + break; + } + } + static constexpr uint32_t clone_bf16[] = {Feature::avx512bf16}; + for (auto fe: clone_bf16) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_BFLOAT16; + break; + } + } + } + if (image_targets.empty()) + jl_error("No targets specified"); std::vector res; - for (auto &target: jit_targets) { + for (auto &target: image_targets) { auto features_en = target.en.features; auto features_dis = target.dis.features; for (auto &fename: feature_names) { @@ -1121,6 +1189,7 @@ extern "C" JL_DLLEXPORT std::vector jl_get_llvm_clone_targets( } return res; } +#endif extern "C" int jl_test_cpu_feature(jl_cpu_feature_t feature) { From c96d507050d07fb0c51fc5813dd3afdbad56611f Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Tue, 8 Jul 2025 18:50:35 -0400 Subject: [PATCH 02/26] `[backports-release-1.10]`: Distributed: Worker: Bind to the first non-link-local IPv4 address (#58895) This is a manual backport of https://github.com/JuliaLang/Distributed.jl/pull/137 to Julia 1.10.x. Targets `backports-release-1.10` (#58889). This is a bugfix, and thus it is eligible to be backported. --- stdlib/Distributed/src/cluster.jl | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/stdlib/Distributed/src/cluster.jl b/stdlib/Distributed/src/cluster.jl index 2444695f90afd..9467f8e798db1 100644 --- a/stdlib/Distributed/src/cluster.jl +++ b/stdlib/Distributed/src/cluster.jl @@ -1262,6 +1262,28 @@ function terminate_all_workers() end end +function choose_bind_addr() + # We prefer IPv4 over IPv6. + # + # We also prefer non-link-local over link-local. + # (This is because on HPC clusters, link-local addresses are usually not + # usable for communication between compute nodes. + # + # Therefore, our order of preference is: + # 1. Non-link-local IPv4 + # 2. Non-link-local IPv6 + # 3. Link-local IPv4 + # 4. Link-local IPv6 + addrs = getipaddrs() + i = something( + findfirst(ip -> !islinklocaladdr(ip) && ip isa IPv4, addrs), # first non-link-local IPv4 + findfirst(ip -> !islinklocaladdr(ip) && ip isa IPv6, addrs), # first non-link-local IPv6 + findfirst(ip -> ip isa IPv4, addrs), # first IPv4 + findfirst(ip -> ip isa IPv6, addrs), # first IPv6 + ) + return addrs[i] +end + # initialize the local proc network address / port function init_bind_addr() opts = JLOptions() @@ -1276,7 +1298,7 @@ function init_bind_addr() else bind_port = 0 try - bind_addr = string(getipaddr()) + bind_addr = string(choose_bind_addr()) catch # All networking is unavailable, initialize bind_addr to the loopback address # Will cause an exception to be raised only when used. From 2a53722afdddf0d48a3b02c0fc9ecd9e717220f3 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Wed, 22 May 2024 20:50:33 +0200 Subject: [PATCH 03/26] Fixes for bitcast bugs with LLVM 17 / opaque pointers (#54548) Skip setName on folded inputs, and ensure the correct pointer address space is used. (cherry picked from commit baca8baea0e62f06530a9640153d793a69eba7f7) --- test/intrinsics.jl | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/intrinsics.jl b/test/intrinsics.jl index 3c49afe2c4d7e..81b99a3af5ccd 100644 --- a/test/intrinsics.jl +++ b/test/intrinsics.jl @@ -361,3 +361,16 @@ Base.show(io::IO, a::IntWrap) = print(io, "IntWrap(", a.x, ")") @test r2 isa IntWrap && r2.x === 103 === r[].x && r2 !== r[] end end)() + +@testset "issue #54548" begin + @inline passthrough(ptr::Core.LLVMPtr{T,A}) where {T,A} = Base.llvmcall((""" + define ptr addrspace(1) @entry(ptr addrspace(1) %0) #0 { + entry: + ret ptr addrspace(1) %0 + } + + attributes #0 = { alwaysinline }""", "entry"), + Core.LLVMPtr{T,A}, Tuple{Core.LLVMPtr{T,A}}, ptr) + f(gws) = passthrough(Core.bitcast(Core.LLVMPtr{UInt32,1}, gws)) + f(C_NULL) +end From 54e11198d5505ecc723725985d5c8c32b6def21d Mon Sep 17 00:00:00 2001 From: Kiran Pamnany Date: Mon, 17 Jun 2024 21:48:49 -0400 Subject: [PATCH 04/26] Add boundscheck in speccache_eq to avoid OOB access due to data race (#54840) Like https://github.com/JuliaLang/julia/pull/54671, but for `speccache_eq`. Saw another segfault with this in the stack trace, hence this fix. I also looked for other uses of `jl_smallintset_lookup` and there's one in `idset.c`. That doesn't appear to be racy but I'm not familiar with the code, so maybe you can take a look at it in case we need to push a fix for that one too @gbaraldi or @vtjnash? (cherry picked from commit dd1ed17ae3c2e4e257f2444bbafd705326b4bbbd) --- src/gf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gf.c b/src/gf.c index 1f87a3035076e..4dc87cf3bb183 100644 --- a/src/gf.c +++ b/src/gf.c @@ -112,7 +112,7 @@ static int8_t jl_cachearg_offset(jl_methtable_t *mt) static uint_t speccache_hash(size_t idx, jl_svec_t *data) { - jl_method_instance_t *ml = (jl_method_instance_t*)jl_svecref(data, idx); + jl_method_instance_t *ml = (jl_method_instance_t*)jl_svecref(data, idx); // This must always happen inside the lock jl_value_t *sig = ml->specTypes; if (jl_is_unionall(sig)) sig = jl_unwrap_unionall(sig); @@ -121,6 +121,8 @@ static uint_t speccache_hash(size_t idx, jl_svec_t *data) static int speccache_eq(size_t idx, const void *ty, jl_svec_t *data, uint_t hv) { + if (idx >= jl_svec_len(data)) + return 0; // We got a OOB access, probably due to a data race jl_method_instance_t *ml = (jl_method_instance_t*)jl_svecref(data, idx); jl_value_t *sig = ml->specTypes; if (ty == sig) From 19983643382534a4699217321a56f8f9c2d3997b Mon Sep 17 00:00:00 2001 From: Neven Sajko <4944410+nsajko@users.noreply.github.com> Date: Mon, 17 Mar 2025 06:05:16 +0100 Subject: [PATCH 05/26] fix special function `::Real` fallback stack overflow (#57790) Fixes #57789 (cherry picked from commit 6817691ecbba3e2a687348c085af1c3d76f020fe) --- test/math.jl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/math.jl b/test/math.jl index bd00f3417ecd3..146aab2cefd00 100644 --- a/test/math.jl +++ b/test/math.jl @@ -1463,6 +1463,14 @@ end end end +@testset "special function `::Real` fallback shouldn't recur without bound, issue #57789" begin + mutable struct Issue57789 <: Real end + Base.float(::Issue57789) = Issue57789() + for f ∈ (sin, sinpi, log, exp) + @test_throws MethodError f(Issue57789()) + end +end + # Test that sqrt behaves correctly and doesn't exhibit fp80 double rounding. # This happened on old glibc versions. # Test case from https://sourceware.org/bugzilla/show_bug.cgi?id=14032. From 9c892c69415abf6cb7736484361ef2cddffba444 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Fri, 4 Apr 2025 09:30:32 -0400 Subject: [PATCH 06/26] Logging: Improve threadsafety (#57591) Closes https://github.com/JuliaLang/julia/issues/57376 Closes https://github.com/JuliaLang/julia/issues/34037 - Adds a lock in `SimpleLogger` and `ConsoleLogger` for use on maxlog tracking and stream writes to improve threadsafety. Closely similar to https://github.com/JuliaLang/julia/pull/54497 - Turns the internal `_min_enabled_level` into a `Threads.Atomic`. There are [some direct interactions](https://juliahub.com/ui/Search?type=code&q=_min_enabled_level&w=true) to this internal in the ecosystem, but they should still work ``` julia> Base.CoreLogging._min_enabled_level[] = Logging.Info+1 LogLevel(1) ``` - Brings tests over from https://github.com/JuliaLang/julia/pull/57448 Performance seems highly similar: ### Master ``` julia> @time for i in 1:10000 @info "foo" maxlog=10000000 end [ Info: foo ... 0.481446 seconds (1.33 M allocations: 89.226 MiB, 0.49% gc time) ``` ### This PR ``` 0.477235 seconds (1.31 M allocations: 79.002 MiB, 1.77% gc time) ``` (cherry picked from commit 9af96508e9715e22154fc7b5a7283ad41d23765a) --- stdlib/Logging/test/runtests.jl | 43 +++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/stdlib/Logging/test/runtests.jl b/stdlib/Logging/test/runtests.jl index 65a8c4051f4e7..fc239ee9068d1 100644 --- a/stdlib/Logging/test/runtests.jl +++ b/stdlib/Logging/test/runtests.jl @@ -335,4 +335,47 @@ end end end +@testset "Logging when multithreaded" begin + n = 10000 + cmd = `$(Base.julia_cmd()) -t4 --color=no $(joinpath(@__DIR__, "threads_exec.jl")) $n` + fname = tempname() + @testset "Thread safety" begin + f = open(fname, "w") + @test success(run(pipeline(cmd, stderr=f))) + close(f) + end + + @testset "No tearing in log printing" begin + # Check for print tearing by verifying that each log entry starts and ends correctly + f = open(fname, "r") + entry_start = r"┌ (Info|Warning|Error): iteration" + entry_end = r"└ " + + open_entries = 0 + total_entries = 0 + for line in eachline(fname) + starts = count(entry_start, line) + starts > 1 && error("Interleaved logs: Multiple log entries started on one line") + if starts == 1 + startswith(line, entry_start) || error("Interleaved logs: Log entry started in the middle of a line") + open_entries += 1 + total_entries += 1 + end + + ends = count(entry_end, line) + starts == 1 && ends == 1 && error("Interleaved logs: Log entry started and and another ended on one line") + ends > 1 && error("Interleaved logs: Multiple log entries ended on one line") + if ends == 1 + startswith(line, entry_end) || error("Interleaved logs: Log entry ended in the middle of a line") + open_entries -= 1 + end + # Ensure no mismatched log entries + open_entries >= 0 || error("Interleaved logs") + end + + @test open_entries == 0 # Ensure all entries closed properly + @test total_entries == n * 3 # Ensure all logs were printed (3 because @debug is hidden) + end +end + end From 7ac9a80c1b58c13d42fc65d63bf2351e1d68d91c Mon Sep 17 00:00:00 2001 From: adienes <51664769+adienes@users.noreply.github.com> Date: Sat, 19 Apr 2025 09:05:09 -0400 Subject: [PATCH 07/26] Switch from segfault to `zip` behavior for mismatched indices in `map!` (#56673) (cherry picked from commit 0947114d9d443e14c751ac40c9b2d8c2245d045e) --- test/abstractarray.jl | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/abstractarray.jl b/test/abstractarray.jl index e7469a7a331ed..aa3e4a2e7c9cb 100644 --- a/test/abstractarray.jl +++ b/test/abstractarray.jl @@ -855,6 +855,26 @@ generic_map_tests(map, map!) # @test_throws BoundsError map!(+, ones(3), ones(2, 2), ones(2, 2)) end +@testset "#30624" begin + ### unstructured + @test map!(+, ones(3), ones(3), ones(3), [1]) == [3, 1, 1] + @test map!(+, ones(3), [1], ones(3), ones(3)) == [3, 1, 1] + @test map!(+, [1], [1], [], []) == [1] + @test map!(+, [[1]], [1], [], []) == [[1]] + + # TODO: decide if input axes & lengths should be validated + # @test_throws BoundsError map!(+, ones(1), ones(2)) + # @test_throws BoundsError map!(+, ones(1), ones(2, 2)) + + @test map!(+, ones(3), view(ones(2, 3), 1:2, 2:3), ones(3)) == [2, 2, 2] + @test map!(+, ones(3), ones(2, 2), ones(3)) == [2, 2, 2] + + ### structured (all mapped arguments are <:AbstractArray equal ndims > 1) + @test map!(+, ones(4), ones(2, 2), ones(2, 2)) == [2, 2, 2, 2] + @test map!(+, ones(4), ones(2, 2), ones(1, 2)) == [2, 2, 1, 1] + # @test_throws BoundsError map!(+, ones(3), ones(2, 2), ones(2, 2)) +end + test_UInt_indexing(TestAbstractArray) test_13315(TestAbstractArray) test_checksquare() From 029abadd5c6141e97efd0e118b3f4cf285ca324a Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Tue, 6 May 2025 06:08:40 -0300 Subject: [PATCH 08/26] Fix removal of globals with addrspaces in removeAddrspaces (#58322) (cherry picked from commit 088bb9002e95631738c8ec5ba58b7b8a7b33019d) --- test/llvmpasses/remove-addrspaces.ll | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/llvmpasses/remove-addrspaces.ll b/test/llvmpasses/remove-addrspaces.ll index d0e77e4a5d7ae..4bdc8409a244e 100644 --- a/test/llvmpasses/remove-addrspaces.ll +++ b/test/llvmpasses/remove-addrspaces.ll @@ -3,6 +3,9 @@ ; RUN: opt -enable-new-pm=0 --opaque-pointers=0 -load libjulia-codegen%shlibext -RemoveJuliaAddrspaces -S %s | FileCheck %s --check-prefixes=CHECK,TYPED ; RUN: opt -enable-new-pm=1 --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='RemoveJuliaAddrspaces' -S %s | FileCheck %s --check-prefixes=CHECK,TYPED +; COM: check that the addrspace of the global itself is removed +; OPAQUE: @ejl_enz_runtime_exc = external global {} +@ejl_enz_runtime_exc = external addrspace(10) global {} ; COM: check that the addrspace of the global itself is removed ; OPAQUE: @ejl_enz_runtime_exc = external global {} @@ -131,6 +134,13 @@ L6: unreachable } +define private fastcc void @diffejulia__mapreduce_97() { +L6: +; OPAQUE: store atomic ptr @ejl_enz_runtime_exc, ptr null unordered + store atomic {} addrspace(10)* @ejl_enz_runtime_exc, {} addrspace(10)* addrspace(10)* null unordered, align 8 + unreachable +} + ; COM: check that function attributes are preserved on declarations too declare void @convergent_function() #0 attributes #0 = { convergent } From f507ecbf90ec326e0e29675adc66704fb78a2813 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Thu, 5 Jun 2025 08:49:12 -0400 Subject: [PATCH 09/26] Update install link in warning (#58638) (cherry picked from commit f5e983eafe6c879027217808a29a9c12bb27f5af) --- stdlib/InteractiveUtils/src/InteractiveUtils.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/InteractiveUtils/src/InteractiveUtils.jl b/stdlib/InteractiveUtils/src/InteractiveUtils.jl index 095227a827c5a..17f32fa0df2a9 100644 --- a/stdlib/InteractiveUtils/src/InteractiveUtils.jl +++ b/stdlib/InteractiveUtils/src/InteractiveUtils.jl @@ -115,7 +115,7 @@ function versioninfo(io::IO=stdout; verbose::Bool=false) Note: This is an unofficial build, please report bugs to the project responsible for this build and not to the Julia project unless you can - reproduce the issue using official builds available at https://julialang.org/downloads + reproduce the issue using official builds available at https://julialang.org """ ) end From 623884c0409ba5e6d8cef1a3cddb2490da9e3e41 Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Tue, 10 Jun 2025 00:27:37 -0400 Subject: [PATCH 10/26] Unicode: Force-inline isgraphemebreak! (#58674) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When this API was added, this function inlined, which is important, because the API relies on the allocation of the `Ref` being elided. At some point (I went back to 1.8) this regressed. For example, it is currently responsible for substantially all non-Expr allocations in JuliaParser. Before (parsing all of Base with JuliaParser): ``` │ Memory estimate: 76.93 MiB, allocs estimate: 719922. ``` After: ``` │ Memory estimate: 53.31 MiB, allocs estimate: 156. ``` Also add a test to make sure this doesn't regress again. (cherry picked from commit d6294ba973db1dea9dc932779008fd66d27c4bd2) --- base/strings/unicode.jl | 2 +- stdlib/Unicode/test/runtests.jl | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/base/strings/unicode.jl b/base/strings/unicode.jl index 2e04633b87487..990be016a18f8 100644 --- a/base/strings/unicode.jl +++ b/base/strings/unicode.jl @@ -725,7 +725,7 @@ isgraphemebreak(c1::AbstractChar, c2::AbstractChar) = # Stateful grapheme break required by Unicode-9 rules: the string # must be processed in sequence, with state initialized to Ref{Int32}(0). # Requires utf8proc v2.0 or later. -function isgraphemebreak!(state::Ref{Int32}, c1::AbstractChar, c2::AbstractChar) +@inline function isgraphemebreak!(state::Ref{Int32}, c1::AbstractChar, c2::AbstractChar) if ismalformed(c1) || ismalformed(c2) state[] = 0 return true diff --git a/stdlib/Unicode/test/runtests.jl b/stdlib/Unicode/test/runtests.jl index 5248bd1e1fd27..50468e868243c 100644 --- a/stdlib/Unicode/test/runtests.jl +++ b/stdlib/Unicode/test/runtests.jl @@ -284,6 +284,8 @@ end @test_throws BoundsError graphemes("äöüx", 2:5) @test_throws BoundsError graphemes("äöüx", 5:5) @test_throws ArgumentError graphemes("äöüx", 0:1) + + @test @allocated(length(graphemes("äöüx"))) == 0 end @testset "#3721, #6939 up-to-date character widths" begin From 6f3d23ee28c6c5088fad1ece9843423cb6916b6f Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Wed, 11 Jun 2025 01:14:38 -0400 Subject: [PATCH 11/26] Test: Fix failfast for for loops (#58695) (cherry picked from commit 8567a3a10f4b746b91bf406bfe3171c3399aed8d) --- stdlib/Test/src/Test.jl | 10 ++++++++-- stdlib/Test/test/runtests.jl | 28 +++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/stdlib/Test/src/Test.jl b/stdlib/Test/src/Test.jl index 3493cfc5e2bd9..9767a536edd20 100644 --- a/stdlib/Test/src/Test.jl +++ b/stdlib/Test/src/Test.jl @@ -1488,6 +1488,10 @@ end trigger_test_failure_break(@nospecialize(err)) = ccall(:jl_test_failure_breakpoint, Cvoid, (Any,), err) +is_failfast_error(err::FailFastError) = true +is_failfast_error(err::LoadError) = is_failfast_error(err.error) # handle `include` barrier +is_failfast_error(err) = false + """ Generate the code for an `@testset` with a `let` argument. """ @@ -1581,7 +1585,7 @@ function testset_beginend_call(args, tests, source) # something in the test block threw an error. Count that as an # error in this test set trigger_test_failure_break(err) - if err isa FailFastError + if is_failfast_error(err) get_testset_depth() > 1 ? rethrow() : failfast_print() else record(ts, Error(:nontest_error, Expr(:tuple), err, Base.current_exceptions(), $(QuoteNode(source)))) @@ -1672,7 +1676,9 @@ function testset_forloop(args, testloop, source) # Something in the test block threw an error. Count that as an # error in this test set trigger_test_failure_break(err) - if !isa(err, FailFastError) + if is_failfast_error(err) + get_testset_depth() > 1 ? rethrow() : failfast_print() + else record(ts, Error(:nontest_error, Expr(:tuple), err, Base.current_exceptions(), $(QuoteNode(source)))) end end diff --git a/stdlib/Test/test/runtests.jl b/stdlib/Test/test/runtests.jl index 0388e2107e098..36020719bf62e 100644 --- a/stdlib/Test/test/runtests.jl +++ b/stdlib/Test/test/runtests.jl @@ -1296,7 +1296,7 @@ end @test occursin(expected, result) end end - @testset "failfast" begin + @testset "failfast begin-end" begin expected = r""" Test Summary: | Fail Total Time Foo | 1 1 \s*\d*.\ds @@ -1321,6 +1321,32 @@ end @test occursin(expected, result) end end + @testset "failfast for-loop" begin + expected = r""" + Test Summary: \| Fail Total +Time + Foo \| 1 1 \s*\d*\.\ds + 1 \| 1 1 \s*\d*\.\ds + """ + mktemp() do f, _ + write(f, + """ + using Test + + @testset "Foo" failfast=true begin + @testset "\$x" for x in 1:2 + @test false + end + @testset "Bar" begin + @test false + @test true + end + end + """) + cmd = `$(Base.julia_cmd()) --startup-file=no --color=no $f` + result = read(pipeline(ignorestatus(cmd), stderr=devnull), String) + @test occursin(expected, result) + end + end @testset "failfast passes to child testsets" begin expected = r""" Test Summary: | Fail Total Time From 8cf61582e76491bc88a39c880624e62f64a2239d Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Fri, 20 Jun 2025 12:39:54 -0400 Subject: [PATCH 12/26] Test: Hide REPL internals in backtraces (#58732) (cherry picked from commit 7b6065e9f25bca60f5ed21532a0163d760a7dbf8) --- stdlib/Test/src/Test.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stdlib/Test/src/Test.jl b/stdlib/Test/src/Test.jl index 9767a536edd20..02cb9abf1282a 100644 --- a/stdlib/Test/src/Test.jl +++ b/stdlib/Test/src/Test.jl @@ -223,7 +223,8 @@ struct Error <: Result end if test_type === :test_error || test_type === :nontest_error bt_str = try # try the latest world for this, since we might have eval'd new code for show - Base.invokelatest(sprint, Base.show_exception_stack, bt; context=stdout) + # Apply REPL backtrace scrubbing to hide REPL internals, similar to how REPL.jl handles it + Base.invokelatest(sprint, Base.show_exception_stack, Base.scrub_repl_backtrace(bt); context=stdout) catch ex "#=ERROR showing exception stack=# " * try From 3104bec025c12d0993578090e9bd6df8cffb617c Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Wed, 2 Jul 2025 10:46:19 -0700 Subject: [PATCH 13/26] Add a `similar` method for `Type{<:CodeUnits}` (#57826) Currently, `similar(::CodeUnits)` works as expected by going through the generic `AbstractArray` method. However, the fallback method hit by `similar(::Type{<:CodeUnits}, dims)` does not work, as it assumes the existence of a constructor that accepts an `UndefInitializer`. This can be made to work by defining a corresponding `similar` method that returns an `Array`. One could make a case that this is a bugfix since it was arguably a bug that this method didn't work given that `CodeUnits` is an `AbstractArray` subtype and the other `similar` methods work. If anybody buys that argument, it could be nice to backport this; it came up in some internal code that uses Arrow.jl and JSON3.jl together. (cherry picked from commit 8e524c73804a9615dd68011b2c5741947d19bbb6) --- base/strings/basic.jl | 2 ++ test/strings/basic.jl | 1 + 2 files changed, 3 insertions(+) diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 72088e0e06153..a12523934c449 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -795,6 +795,8 @@ write(io::IO, s::CodeUnits) = write(io, s.s) unsafe_convert(::Type{Ptr{T}}, s::CodeUnits{T}) where {T} = unsafe_convert(Ptr{T}, s.s) unsafe_convert(::Type{Ptr{Int8}}, s::CodeUnits{UInt8}) = unsafe_convert(Ptr{Int8}, s.s) +similar(::Type{<:CodeUnits{T}}, dims::Dims) where {T} = similar(Array{T}, dims) + """ codeunits(s::AbstractString) diff --git a/test/strings/basic.jl b/test/strings/basic.jl index e7c65909fabc9..87e4e0b127119 100644 --- a/test/strings/basic.jl +++ b/test/strings/basic.jl @@ -1073,6 +1073,7 @@ let s = "∀x∃y", u = codeunits(s) @test_throws Base.CanonicalIndexError (u[1] = 0x00) @test collect(u) == b"∀x∃y" @test Base.elsize(u) == Base.elsize(typeof(u)) == 1 + @test similar(typeof(u), 3) isa Vector{UInt8} end # issue #24388 From ed63f5a549f7d7cfc4a7ae1909254e2ddc157e6c Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Wed, 9 Jul 2025 16:48:45 -0400 Subject: [PATCH 14/26] Fix nthreadpools size in JLOptions (#58937) (cherry picked from commit 2349f431b1d0f97f3f06f8adc5d335b89d5f061c) --- base/options.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/options.jl b/base/options.jl index a94936391fa8d..b7967f4e7fdf9 100644 --- a/base/options.jl +++ b/base/options.jl @@ -9,7 +9,7 @@ struct JLOptions commands::Ptr{Ptr{UInt8}} # (e)eval, (E)print, (L)load image_file::Ptr{UInt8} cpu_target::Ptr{UInt8} - nthreadpools::Int16 + nthreadpools::Int8 nthreads::Int16 nmarkthreads::Int16 nsweepthreads::Int8 From 03b53d3e1adf95bac446be8fb284e934d671b129 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Thu, 31 Jul 2025 19:58:09 -0400 Subject: [PATCH 15/26] Clarify and enhance confusing precompile test (#59170) (cherry picked from commit 1f6eff183db0b947632f780b4acc440d9c41a6e2) --- test/precompile.jl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/precompile.jl b/test/precompile.jl index ac155bb5d7af2..178d8d0f6057f 100644 --- a/test/precompile.jl +++ b/test/precompile.jl @@ -590,7 +590,10 @@ precompile_test_harness(false) do dir error("the \"break me\" test failed") catch exc isa(exc, ErrorException) || rethrow() - occursin("ERROR: LoadError: break me", exc.msg) && rethrow() + # The LoadError shouldn't be surfaced but is printed to stderr, hence the `@test_warn` capture tests + occursin("LoadError: break me", exc.msg) && rethrow() + # The actual error that is thrown + occursin("Failed to precompile FooBar2", exc.msg) || rethrow() end # Test that trying to eval into closed modules during precompilation is an error From 951d5655a93006ea367834348953b1f65da7ae2a Mon Sep 17 00:00:00 2001 From: Adam Wheeler Date: Tue, 19 Aug 2025 17:12:06 -0400 Subject: [PATCH 16/26] Update the developer docs to reflect the use of JuliaSyntax.jl (#59300) [The "parsing" section of the "eval" dev docs page](https://docs.julialang.org/en/v1/devdocs/eval/#dev-parsing) was not updated when JuliaSyntax.jl was adopted in 1.10. This updates the text to reflect that it is the default parser and briefly mentions how to switch back. (cherry picked from commit ec272746d5e31d8c49ce079b6dc7177f1104eb14) --- doc/src/devdocs/eval.md | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/doc/src/devdocs/eval.md b/doc/src/devdocs/eval.md index 8f2fd68159676..21ec343f7f6be 100644 --- a/doc/src/devdocs/eval.md +++ b/doc/src/devdocs/eval.md @@ -62,25 +62,11 @@ The 10,000 foot view of the whole process is as follows: ## [Parsing](@id dev-parsing) -The Julia parser is a small lisp program written in femtolisp, the source-code for which is distributed -inside Julia in [src/flisp](https://github.com/JuliaLang/julia/tree/master/src/flisp). - -The interface functions for this are primarily defined in [`jlfrontend.scm`](https://github.com/JuliaLang/julia/blob/master/src/jlfrontend.scm). -The code in [`ast.c`](https://github.com/JuliaLang/julia/blob/master/src/ast.c) handles this handoff -on the Julia side. - -The other relevant files at this stage are [`julia-parser.scm`](https://github.com/JuliaLang/julia/blob/master/src/julia-parser.scm), -which handles tokenizing Julia code and turning it into an AST, and [`julia-syntax.scm`](https://github.com/JuliaLang/julia/blob/master/src/julia-syntax.scm), -which handles transforming complex AST representations into simpler, "lowered" AST representations -which are more suitable for analysis and execution. - -If you want to test the parser without re-building Julia in its entirety, you can run the frontend -on its own as follows: - - $ cd src - $ flisp/flisp - > (load "jlfrontend.scm") - > (jl-parse-file "") +By default, Julia uses [JuliaSyntax.jl](https://github.com/JuliaLang/JuliaSyntax.jl) to produce the +AST. Historically, it used a small lisp program written in femtolisp, the source-code for which is +distributed inside Julia in [src/flisp](https://github.com/JuliaLang/julia/tree/master/src/flisp). +If the `JULIA_USE_FLISP_PARSER` environment variable is set to `1`, the old parser will be used +instead. ## [Macro Expansion](@id dev-macro-expansion) From 3fffb598b5d6bebb8af6f2776c0f3c634c184dfc Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Fri, 22 Aug 2025 13:16:50 +0100 Subject: [PATCH 17/26] [backports-release-1.10] Remove bfloat16 condition accidentally backported (#59351) This BFloat16 part was backported to 1.10 as part of https://github.com/JuliaLang/julia/pull/54471, but 1.10 doesn't actually have the BFloat16 support that this goes along with, and it has broken the build. So remove the condition. cc @gbaraldi --- src/processor_x86.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/processor_x86.cpp b/src/processor_x86.cpp index 307e92e0ef51c..03d7ae21145bb 100644 --- a/src/processor_x86.cpp +++ b/src/processor_x86.cpp @@ -1158,13 +1158,6 @@ extern "C" JL_DLLEXPORT std::vector jl_get_llvm_clone_targets( break; } } - static constexpr uint32_t clone_bf16[] = {Feature::avx512bf16}; - for (auto fe: clone_bf16) { - if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { - t.en.flags |= JL_TARGET_CLONE_BFLOAT16; - break; - } - } } if (image_targets.empty()) jl_error("No targets specified"); From 1a3c229c53a74c7c70935519581a4e1092927178 Mon Sep 17 00:00:00 2001 From: Ian McInerney Date: Fri, 12 Sep 2025 22:31:44 +0100 Subject: [PATCH 18/26] [OpenBLAS_jll] Include patches to fix CASUM in 1.10 (#59346) This updates 1.10 to contain two new OpenBLAS patches that come from upstream (they are included in newer OpenBLAS versions already). Specifically the patches do: * Use AVX512 kernels on modern processors * Fix incorrect CASUM computation in fallback kernel This fixes the reported linear algebra issue: https://github.com/JuliaLang/LinearAlgebra.jl/issues/1406. I believe I updated all the checksums/files to make this work, specifically I did * Updated version number in `stdlib/OpenBLAS_jll/Project.toml` * Updated version number and sha in `deps/openblas.version` * Refresh checksums by running` make -f contrib/refresh_checksums.mk -j openblas` cc @giordano, @ViralBShah --- deps/checksums/openblas | 186 +++++++++--------- deps/openblas.mk | 12 +- deps/patches/openblas-asum-avx512.patch | 68 +++++++ .../patches/openblas-casum-fallback-fix.patch | 79 ++++++++ stdlib/OpenBLAS_jll/Project.toml | 2 +- 5 files changed, 252 insertions(+), 95 deletions(-) create mode 100644 deps/patches/openblas-asum-avx512.patch create mode 100644 deps/patches/openblas-casum-fallback-fix.patch diff --git a/deps/checksums/openblas b/deps/checksums/openblas index 0d176cafe7aca..66199ba007c17 100644 --- a/deps/checksums/openblas +++ b/deps/checksums/openblas @@ -1,94 +1,94 @@ -OpenBLAS.v0.3.23+4.aarch64-apple-darwin-libgfortran5.tar.gz/md5/4396075a0a35187b500ed7f55254a6bd -OpenBLAS.v0.3.23+4.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/2df0bb2eeb6c2945cd53b0182d00ab09e2cdf1731fe626af501a7632e8995bea21d8453d8e5671d4be9fd77a9ad12facdedf9e803c1fca35c36994dde26a6ac5 -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran3.tar.gz/md5/48023d189673623c1cf79cfc73df696b -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/ecaaa3f6df848f4c247f4ef5ec9bb6e344c4ccf73b413b43ddaced9ce75a378b8ac59c6a9735a7030c61c7d74ba068329d4f9f60d1200a86df50644b604a15fd -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran4.tar.gz/md5/af961e90dc125b29b17868efb4a3ae61 -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/30ca662a9ac89b907d9f49743e247a53d60d48be74c7ad4e19973fb7a5de908f4ad4566f08a1b576fe4aac146565c29fbcdc29c2b3f5226a3ede897f441477fd -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran5.tar.gz/md5/3b3534a64ca7363f206e4c8fabd69fd8 -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/cf2f7b5b0b634f8826ae1ce76fe018b9d2c5d5c1b1bd511ea45c9a9004363adac3339ffd28c62ce7bf9424678c350221c3ed8919a2afbb61d2b3ccbe3283009e -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran3.tar.gz/md5/e07bfcf56f7765adf431b834f36a1f09 -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran3.tar.gz/sha512/6953043361c07583ff52074ad0cddb5b7f01b5f35d46435d442b907fc6c213df548fa6c010179355bbfa0a44a97761fec437c64384971821316f1063e909ac4e -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran4.tar.gz/md5/3c949da2727e857cfa67f21b092d544c -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran4.tar.gz/sha512/ffc6d956d5a2414324bf8e5db6b5a9c5ada72e2fd4c6f798a3f328ce21ddf5e86d664e2bcefd6e163684e7d5eb4cefeec9a597f3d9c6ab58d555a6d279b06c12 -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran5.tar.gz/md5/458e31ac7b23846da374cb1593764166 -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran5.tar.gz/sha512/fe1026095f3734e0540f482989ad62a7bd6f0521049f4f44eee944938b7dc8a8fc7fce744548c947a36b46944b8a7651c4b76ed82499038fc8bc8c5efcdb978e -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/386a87787e313db0b5044c36b33dac07 -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/f36c2d127adc3f596632e55fa98c1189b29f7efbabf352e96f865f3e6d958ead90707981acf77b10b7fa8efbc3f6d574da984021da6c6c25ef7d427972a484fa -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/0e799ed6a5799c02e578ce8e5d179412 -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/2036602634120677e86a1bf4aa833f6e5ed75d73751449c0d67fa336647d2f9af4301d5cfe4b1c77582565df95861c34edb83fb1b651b3664647528397e526ce -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/f7140fc2824d53b16aeb441e8007e04d -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/77f210113aa43b93844cc3e9f545deee27f8ef63379a8b7cab682957e698ab3f97b83741cbcacc0e518503eb6ee822e1578900be9546b63629c9cb3ecee17fd0 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/9d6f99e55e70b5e12aedd0513717f680 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/bddf250e25afc235130e381fe2ded98fbacb0f996bf522a89698776208c206de2c5cbc6f8f3cb60aad91b07a9389ea6b0dc8b8e3e04d9b78ba34282b142e8b77 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/d253d760a8071bff95152718142ddd86 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/62250517ef74b1d5df8e9b0507365f5194a458431819d9d7077a5aa4a922d22b7de72f9704cbd87768cfc8ef1fa9e6007c17529ee22a23bbbf83fada10aee8db -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/4f6257915c6567d6fc523ab910667789 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/5a8770e6d60fc6ae10a2763316f5f0e8e08df7d07d3a9db36d0d1e4cf593a4c7aa848699b392d43acffd4d7af5be0ae373476df9bfdd82b82ce08759e05b2843 -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/386a87787e313db0b5044c36b33dac07 -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/f36c2d127adc3f596632e55fa98c1189b29f7efbabf352e96f865f3e6d958ead90707981acf77b10b7fa8efbc3f6d574da984021da6c6c25ef7d427972a484fa -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/0e799ed6a5799c02e578ce8e5d179412 -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/2036602634120677e86a1bf4aa833f6e5ed75d73751449c0d67fa336647d2f9af4301d5cfe4b1c77582565df95861c34edb83fb1b651b3664647528397e526ce -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/f7140fc2824d53b16aeb441e8007e04d -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/77f210113aa43b93844cc3e9f545deee27f8ef63379a8b7cab682957e698ab3f97b83741cbcacc0e518503eb6ee822e1578900be9546b63629c9cb3ecee17fd0 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/9d6f99e55e70b5e12aedd0513717f680 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/bddf250e25afc235130e381fe2ded98fbacb0f996bf522a89698776208c206de2c5cbc6f8f3cb60aad91b07a9389ea6b0dc8b8e3e04d9b78ba34282b142e8b77 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/d253d760a8071bff95152718142ddd86 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/62250517ef74b1d5df8e9b0507365f5194a458431819d9d7077a5aa4a922d22b7de72f9704cbd87768cfc8ef1fa9e6007c17529ee22a23bbbf83fada10aee8db -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/4f6257915c6567d6fc523ab910667789 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/5a8770e6d60fc6ae10a2763316f5f0e8e08df7d07d3a9db36d0d1e4cf593a4c7aa848699b392d43acffd4d7af5be0ae373476df9bfdd82b82ce08759e05b2843 -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran3.tar.gz/md5/e7ea6dd9b95e5c527faa4fab39ac8f86 -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran3.tar.gz/sha512/b6ada30e5b80e2460ae3a7396aee066315d01fe918efbc39fda958fe1755ff3549b94a6c774e53f72920f1bb5123181810fcc8c637af847ff3b4ca8ae07a8c10 -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran4.tar.gz/md5/3fab9e79dd80c80bcfc84929db41f13f -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran4.tar.gz/sha512/7e8815ca0fce0e6943e54ccee98acf8ce90c514794394a7975ee3e1e51c02367688991042c34d3dc498d1d9487025c35296640bd2d5676d13fdbaecf9fa8bf19 -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran5.tar.gz/md5/59b82e8d7b93ce3d2b2e5c471d10e12e -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran5.tar.gz/sha512/6266f32518ad9e4322d44ba7536a5d8cf734c4ecd0674f16adba73cc64da944b29cd80b83e6304be408d237e06013881deffdbe89aecd459b52242cf2be6ba7b -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran3.tar.gz/md5/f4daa1792329c98b7098119670c81d15 -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran3.tar.gz/sha512/d6b5780af9a64df8fb510e158c0fb5da7bca67fc34e55e53891dd704203a4305e9efca865149e5719ecec9d3c202ce3ec0e1071ad2bb1a6f46e19e6a853d9f67 -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran4.tar.gz/md5/8c799c1b1e1c8bb343beabb63b86a2d5 -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran4.tar.gz/sha512/2ade84eba8f79a3312ca869fb8876b65ce010cbf2b43532bc88da75590ca2b392d7d1e2a2ce5c565d4a9490cf124b10686c0c429793e5ccb1c01640052f6ac4b -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran5.tar.gz/md5/a9be243128a45d2243c8bd42289a36f5 -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran5.tar.gz/sha512/941b1f63549d725c477ef98282906c706ceca9daf19b7d856ffd6bd83095fb8b45bc2d099576938f4e984c6e737c94b0a79e686eda11474ddfbecdefc3ec637a -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran3.tar.gz/md5/2aa088a9a41ec94b63aca317ce0a0fdc -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran3.tar.gz/sha512/7e291fcb11edb95d4e10b725a3acef4cec9d16ffd1e596687c0112ae8f0a298e128e12c0b96c54df98dd1bcb5917b53aad7c55e6325c09abee1153267103a432 -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran4.tar.gz/md5/9d82aa30a6a08ea6294f935d2f0b05d3 -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran4.tar.gz/sha512/2ea777015ddbdcac128b3313d091b63ce24504e368089cbd14d966c768e7109c4b94d17e190d9a0be222458f4d01e8542625b69057a30fae8f6cdc985ae70751 -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran5.tar.gz/md5/409b6ce4af7e85bb6ea2c05d4075db81 -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran5.tar.gz/sha512/a814c9fb705c4d779fc18a598ee67d68206d93010cc919a0b39b4514ab415c044fa385f1c50fa06fee45d894fa72715ba84d51ef3a11a08fe7a3fc1747348e4f -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/3a7c1cc48100da0941e5ce8d85cb3a4f -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/296574c54b2dbe3b7995a9661f8e79edbac091174260e44d7e791e225a5488676a9b29b1315c8e38c7d7db4927fb235dbf6b45d06a843fb653b5746a8f3adb7d -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/136cd6727be4b3c5d8576faf4ed09b03 -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/85f2ce79ca038fb85da85667b0aa79c26d43003543796240a1e5c2f6fc00f24af29d78bb587e66b94015cb973aed33fe0b7a16d5a2d39ad8c2fcf480c63797ab -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/f8a6961fd047c73da271f1e4b441fc3f -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/d4350fd12b1351060b977658c4483d18fddf18dc59b690b367f32bfa0b6d699ca49651392c49fd7addeef357239c60e17d0978c19acd661fa13ff78a7144e1dd -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran3.tar.gz/md5/80e5628c507d2bf82e7098a0666c6c4b -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/5582854c2182e5bac5de86d318ba833b4454ce1c2f7d8f7d7f0b3c1effa341f97cb3e43a541cf4197eca0cb93c4da46337f73b153d55fa5283e7d134c2b2660e -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran4.tar.gz/md5/f130da7a989b870a930b6dc659112a7b -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/0292a32d01b13fa69ed2d7620480611cc9e0a8aa325b4366dca3932971fa3ef989eff02ca14c06adfa7718840803b49fe7bf56982ad6f340569d9c7c1750dac2 -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran5.tar.gz/md5/b7d214ade95b63cbd950aa3cb976f679 -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/d21f17a713a25983f415de063b3911cf39fc7f15493d41104b9e0b26b3a467f4b37a9dd5c5d0a3883de38e0a16c2a4a6a3bd7634b7f6868fbebdb473a15992d4 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran3.tar.gz/md5/78f95af8bdd31302311fc5a05ec6f895 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/540e02f90f7d844ea3b93bb00de1097b092d46ad710026cfd4a659695f6e1b6ff359c2273c0abe14bb53a20ec1c6343c27bc718f84e8720790906451590d0258 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran4.tar.gz/md5/f4261f43d8ae1fdb38280072dbcaf1ba -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/40f69bbbf5e929346a9dcf2f30af00d91874f889137a9664800cb986c9354d0825b4a6a8746e27ef6b14af9611766ee9538daa1c5cbde24736924c8588071941 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran5.tar.gz/md5/474eaed6749628e58bff5893492ad902 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/1fde4b09a4035a5177c60cc05bde8add73a06b3edfd59563ed5e6383e04d2b055bcfcbc989a8b6f7200efc1f862ea1b49ea2cfc7db4b30bf1aeb7dd641a622aa -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran3.tar.gz/md5/3388a7a9cd0c7bc64ff3dd5bbd6221c1 -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran3.tar.gz/sha512/5e84afb5cef4d050ae7a0b290556d726fd8e9c59f0a7e9bc778ea1352c1985c7fa942849781dfc3bc14f0a1c51138d858c9bbca9124b434e331fa3a0343e8fd8 -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran4.tar.gz/md5/bfac12f41bb0d3be8123deb6a032a5aa -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran4.tar.gz/sha512/30226271a4fa1ec44a01c68cf9d779142563786c19716e74c7a19029ccece71400cc6c9489794cb8f5b28815d8138c98dc3cb2d4011d5c5f7a009aa811b8088f -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran5.tar.gz/md5/b105fea98718ff0e7fc7cced91e5fa33 -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran5.tar.gz/sha512/d8a09e174f49a0542a3e87a746338198e3f6e37ed6989f89ae3fe8f95eeef9d6625814cd30abd3927d059b3076f91d3793e1e3292e417edfdbea3171729af68c -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/809864b6b4ea73554202f47691e5487d -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/42fb2b1a331a9ca86f004e63188153b82a6e4f85ea36b361725fca4b476ccc64f85b35f287bae067f21ea43f6f85642e54915f33b134e7a68dfe64fe33b05200 -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/0caba2da8ea3be51848e3e57de5fdc4e -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/39c9a9b6c893699491373efad401224eb499e636420545aaeca8c3475955601623abc0f3e10793ab72054b65a68651b663873c073cb9c0bbd89344f4b9496071 -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/1735272b015753d79e7539e2c750c291 -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/89dd7a92e5f9182abddc9a90f443568818a84a960959599b35d6c6d3fcb4f60d340f6f319510771f7c45123e591460a7a019067d550ac71d9af9a37d824eb123 -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/238c184ab1cb65a6e48137859a8a52bb -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/a73c4b42b798770e5f08ff83704c5d83bbd1f1101bf7c07effad1cabaf2b665d6e05ee2a73a552933d4bf48085bd4f80f5fd72c709b2012c5cf25c71aace1124 -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/127aca06dc9461387cd5d2a91784242e -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/03099f50dc81427762c404a27ce4d8eb20c37c9664789cac5640ecf360c4dadf7a759680cd81d00301781d68e5df780ab981cb89fd20c448d72e7f0d1a909bf9 -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/92f18261534ceb1e3181c4b6071b0063 -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/38894868b7d7638e61a503a30c88ddf910af4e0ff8b9480b97f4ee7598088ba5c4735d1d85575deb1e593d8b6baf8fc549c85c8ba8d1b9683eb58cffb3f9e670 -openblas-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/md5/7ccaaaafc8176b87dc59d4e527ca4d9f +OpenBLAS.v0.3.23+5.aarch64-apple-darwin-libgfortran5.tar.gz/md5/2dc152e2799b095e38b1e0eaa0a91eb5 +OpenBLAS.v0.3.23+5.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/f2d666634e572130af44749acdec5885867e528173242b0a4054ed95de20659142031488e26b9963d19413b9ae25b3ca49a1eab533b0a93a2631dc87df8d12aa +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran3.tar.gz/md5/83037a3237f101a6b41edecff23f3b6e +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/a07ea0aa0caf9467bbf4ab90f509d822df00037ee0b88b9b5920c2eceac0e6148fd4943504a8fae44e57f5d062bd7431b95fa3d96a01096ae068480421e8a6df +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran4.tar.gz/md5/efa78f7c581a1578a857de05c5ef337e +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/37b3ee02391506fba50e8fafbf9a8f42806bebbc143f682958f2ccade49adf6be91ecc58afc9a41ceaa7582dc12537f7297571034e921a1e253b749415877672 +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran5.tar.gz/md5/dddddf9a74f094d8f7e8336a559701df +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/4b8bb053d574329598fc59bd630a18461f972d86e7af6e8b022d9a5d124b3b6dd5adc62f84fe490dad4a5a80fbb8021fa90f4877ac580a85d54c30b6dd1336a1 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran3.tar.gz/md5/d2b4ffb0ab3290601e36503fca9ffd34 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran3.tar.gz/sha512/95342209d2aa3e9e501258092b8ee8c014eeace3f2683601190e676b69160e85476b3f0b762ea84e98fc4eb07f532b11147cbafad39b567dbac658676deb1889 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran4.tar.gz/md5/4912822999c62fe8f5310fc0eeb55547 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran4.tar.gz/sha512/496b8a396a027960ef66701a00bb4cb27462717cd46e10ef20922feb7cd897eef60e84bf7bc5cf6d3755e8411c067bf4f6cf27484698f583e900e49735477784 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran5.tar.gz/md5/cb39b61fb73577309875d159218402a9 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran5.tar.gz/sha512/e577e7610f4acf392b2b92c560f5aa9b9bd91d0f2c0e5cef9ecba4d5eff23f836c8a487088896f686582f917eee8542f28248f1f3a7506d73ae68bd62294c095 +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/8149572945a598bdb1c8f31ce8531740 +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/4bb2e761c8d5ecc10f48693880b027d80aceb81439d3f18d58021bcba8fb46d1184cf6e0f2a7976044f737e6bb65cf66fb087c0511c10025ac7ead2ad362121a +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/83941c6f773e6f12eb24233965e81d1f +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/8c04c8129574033cbf22244fee3142180ec99d4fd5a5dccd50d7beec71a46430d7f5d021ddd143dda6caf6972c576e8d27b6407784ea7722905d205b86de094a +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/3ff6ce5c868942bb58fe478fb00c4639 +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/1adb37680e6d23333c4c396b6861d81bca9e08132baac93b440494e3708fb7a1fbb46317955e1e1568e4a32df55f3e948e8e6646df4d95a77d682a7824a53bc6 +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/a01b0c49ce10739fddf339aeeab93e4a +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/6bba0cfa56bbc9cbc447c7ea36e828db7b21ff080720fb91160b1f65a1680ca78d5494004658467124df003f9cccd0a76eec1008917db84b67a8719631d0a32e +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/e10f6df28a03b37f45edf43f1a7823fb +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/3ef461f8ad01fe88543598beedaf6bc23c53285fa283088cbe6b3c05a7e0d9e58f3b83242a80cc8a8505b430e6bbc76565e0ceeddb8dd41427718d356040cf68 +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/90a22047ac9c4a639caa3c8cfc28a884 +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/1ad650f2fd27991470d046c862b77e3f5cc695d54b324379cae2ad529e91e40979d57e6f0665a7a4359d59ac0b5192402c2ff582961ef5686c331163fea019c0 +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/8149572945a598bdb1c8f31ce8531740 +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/4bb2e761c8d5ecc10f48693880b027d80aceb81439d3f18d58021bcba8fb46d1184cf6e0f2a7976044f737e6bb65cf66fb087c0511c10025ac7ead2ad362121a +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/83941c6f773e6f12eb24233965e81d1f +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/8c04c8129574033cbf22244fee3142180ec99d4fd5a5dccd50d7beec71a46430d7f5d021ddd143dda6caf6972c576e8d27b6407784ea7722905d205b86de094a +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/3ff6ce5c868942bb58fe478fb00c4639 +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/1adb37680e6d23333c4c396b6861d81bca9e08132baac93b440494e3708fb7a1fbb46317955e1e1568e4a32df55f3e948e8e6646df4d95a77d682a7824a53bc6 +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/a01b0c49ce10739fddf339aeeab93e4a +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/6bba0cfa56bbc9cbc447c7ea36e828db7b21ff080720fb91160b1f65a1680ca78d5494004658467124df003f9cccd0a76eec1008917db84b67a8719631d0a32e +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/e10f6df28a03b37f45edf43f1a7823fb +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/3ef461f8ad01fe88543598beedaf6bc23c53285fa283088cbe6b3c05a7e0d9e58f3b83242a80cc8a8505b430e6bbc76565e0ceeddb8dd41427718d356040cf68 +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/90a22047ac9c4a639caa3c8cfc28a884 +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/1ad650f2fd27991470d046c862b77e3f5cc695d54b324379cae2ad529e91e40979d57e6f0665a7a4359d59ac0b5192402c2ff582961ef5686c331163fea019c0 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran3.tar.gz/md5/43018db9b925939a361bc7f2b0af2e78 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran3.tar.gz/sha512/c37b3d8b146568878e1fbafbe012848c562dc88bde2563d9472fbac54119f57a39a1a693bcff3d23fcd7ca01ea631d5c55df9204f8f6412e8abc90d42f8ce788 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran4.tar.gz/md5/8c8c9de02167772624144c26b6eb4ddf +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran4.tar.gz/sha512/ed684b21db18039243366c3f3e2db8a733a79cd463ef2b05f8a1b7c983991ea21ee3dbe2f78febdb6df5a11c087fa19b64e5c2009d63e472e1c63d5ff1a12ca6 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran5.tar.gz/md5/7cda10161d1911ef1c55bc79437be0c2 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran5.tar.gz/sha512/b11ac5899d437639ca8e95d0d29a981328552086e25644c2284fa0081dd81ce474128cbc0b198649ad1ef4784d39d7f1b054a258ee650d3a3b3ac0d337b13424 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran3.tar.gz/md5/b355a49a55323d3d60d27a7a366d0e79 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran3.tar.gz/sha512/a9590c57d8931ca8b2c8e55d1095dc75290f0d7bee14a4dfa0cff2fc2b5f2be73bfd77dc46dca22467886016df06c3a9dfa21946b4c8fb867e9bb1c16098fd85 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran4.tar.gz/md5/60a33b3b5216a73f56fa324901d7c869 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran4.tar.gz/sha512/50832dc62a08c04c688d14afea8b3f141263d554cd0af1b3bb4b9db1b1cfa2a64a1450a015e9506fc967cb847b18bfde595fdf3c54fb0e6b93b8a520aa77344f +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran5.tar.gz/md5/8622a48a2e43041f9f2c6fdaff217b57 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran5.tar.gz/sha512/03d5c2b1882815b541876d2cb3d54f010e402167a6d8c84683d53f195e97f69e2bae4c39a6829c5c9abf100652168873dcb4268175b94f74447815920a65e2f1 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran3.tar.gz/md5/710e4246ab705481bb8a27341883bcc5 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran3.tar.gz/sha512/da16d22c8bc5628744987ceb1fc3c9e8b3ae8485d2bc9e93da0593bb177e3daeb6591e49c29832296e095b27300030bf7da14f52a08c77fb82c914b6c00264c6 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran4.tar.gz/md5/af159e18cfb7b1ec349f61d75ed4f4b4 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran4.tar.gz/sha512/4f9fa98fb6feb8e3367d24bd2dd6ee27097898b73afdbc2a61231e2a359e2b5cbc311fead6e393f9a4cb355e5ef9a3f52e8d61e1f40e103869e1a87d4fa353b3 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran5.tar.gz/md5/6101533ade279afb216247c2a2a5d94e +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran5.tar.gz/sha512/ae800315993016ee9fab1e4c264cef8addd92155509de296488528441cfd69e695c30caeabb20dba8bfd5602eea07a646fa6037c68f0f0dc4ad262b7c926abd6 +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/d614ec4c2abb2f6350405b3991138be1 +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/8b5a0459d83bdd2cae1c6766a479ac92a8d3dc027c7c394a5eff04cd63ace68177cf36d56a8d9d8dd6611efdb3b0b9c2b9c80c6a99fdb5850d49043f54f6ca5d +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/812e8a33efb8f7f36da290a9ba6382e7 +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/295e5219f1c6e22646d840d573df662fb5304ce2634b865607348a3c75fe8ddd8bb6cd16d9446ff64eecdfcdb9796d702807013c08fcf24316e28800361d1929 +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/18f5cf23c5b83bf6d56c343fdeb97e3c +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/fc140a43d134d65b752f41e96062883dfdb170f168612d7f624e72990d66c30d2e3e6379364d8a6fa27e39c6380d8cdffe3d3fff0a32d0b85d5453a7d98fdf4f +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran3.tar.gz/md5/aaa467004ff0e3a439d56143bf4fc7dc +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/aa82a5cc564aac5e430a6b842998e6b6d3c960b2ef31b330e8ac42455c556aca5529d709409d165f9268b7586840632493e2aeaee37407837a2522a1433568f3 +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran4.tar.gz/md5/301898a84303e00ee02d8b68876d92e5 +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/6c7b59fcfca9b67f15db8706de30cd06d28b058d736129f847f986d8cf2f3b8453936e714aef48f2d563725bfb1000de096d51c73a65786cbe3119ef0dd91a63 +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran5.tar.gz/md5/9df5e9390a965327d53c8a7419e35a9e +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/ba93faad7b50ab168061420d5ae0e09dad52c6133fa65b9b7717302ea23e2b8778e8e88dd583a8299c8c6105977dcf78578fc79e88434add6228909d4062915c +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran3.tar.gz/md5/efaa4403801599f45b01f1388de88262 +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/cddf570cdef3cba4c29ebfecf3c3cf5fd31c3517524eb0c646d8aabe0d9d5856ad29132ca456122654f58444a02f2b3687b74a6818ab3d0882dd7f691ab8709a +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran4.tar.gz/md5/605bc2f322d4c0fd8758733c818f33d7 +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/083a0c1caf378d349e7da99dba441bf81ab45cc23241c6b367938f9dcc07fa3b5dbca5b6c7ed9b0dd55f665b733bdfd64475b2a5f5b61aa8e9775fcae7e0724d +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran5.tar.gz/md5/93a11e5ba14eafcbdde5ed097833e6d2 +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/b903fd48c4d5628d1de12b0439c568f24be2ce4a3f413f39957a394940a227a3a16aaad54601082dbbe42f11a2ae742b2485239464c71640677f445b32c342fd +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran3.tar.gz/md5/8c78e914758ed162faa1038388407617 +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran3.tar.gz/sha512/829e3e9cce5d8df81bb2a88547793755aef74fc11bce8cdb28502264c42752ab0e2ef559f604b376b169b2d7c332e94a64c87e2514b8bba1db50d5d3280ac95f +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran4.tar.gz/md5/f6ef4b9521212e24b088f874acb7d926 +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran4.tar.gz/sha512/8f953ab32a9b801332698df37bd8f838d6ef01f320824dc0bcd95b0f4ec97dd700e3f6d39df6c19a6ca7844f9b2fb8fb4e2aabec17a9135fe1412bb2fd2c8e12 +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran5.tar.gz/md5/80501c5b7407177b18c84c0559340bd2 +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran5.tar.gz/sha512/595eb78563425fc42bc4685b3a09bffa8df653ac0e73c879eecd5d7cc0f1dc3183055236764f32e7909ece36cf662f13ec41f8b082cdbd7941965de6f4df14b9 +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/23f4fd43aa2898c58594912acb080bd6 +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/7c73f26e73c2f47c9be2a7c4275432ed9e7a5d41828ab6299b95f6553a69262bceedb8f8e73d0cf164687e89413f35856b1d949b497659e6a552b6ac54a55971 +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/28155c8edfaa160258216a25ffcd891a +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/c7c861345442308bafbe10781e3b5c2e4057cb82152f66bdde941b24d13336db0dc7c18b8174c0beb6c3333a518adb43046a6249c57a0b9ffdabe07598e06f0b +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/1bbcda3a44c961b710ecd14a77e6fcc2 +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/62505812e22be03af77809ff8d257f6afa007f6e34e98c54ce2943777bbe7c84160833047c348dc6087a59d1d63f0cf768e28e4a2010c7f76db2c24c1564ac6c +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/dc6a09a63cd26b0a63bd140e2c3be5d6 +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/aed98d4c2e41a66cbc9530841618a201dceb08feab79a2e429444fbee1fdc5fde3e3c716e5792661cbd42a49fcbb6044d10c5fcbc352d39c1bb4353862f29660 +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/c27de85153c436e8588962d3c204c31c +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/cee528de9a1f06f42c2abd6aa4d3bc3ba2472e0ba1203c562c614d250b2ba54aa2cbb011c9590219012d3f52f62e6622aac5347e61e780ea873d3ad749d617b3 +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/c78a85d643c561483a60bb00a8156192 +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/6b7d270388c1a13433b6f7f425f6be0d3a2abc20bf3964995be80f8641e4e5b7c57303ff2dc79f4acc700dbc3ccc6bdaa3fb741972cc719c34ca8722ff22d464 +openblas-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/md5/4e30022e79990d5a6fa008e099a3ec56 openblas-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/sha512/3d1a096a738aa70c6c6c15acb9ac7fb77f3c8f9684c7f22dac1ceb7921c85131e3a7e55c893b6aed01f85f1bdff124d0b3a3fae3ca2dc5c0aae192c38c012417 diff --git a/deps/openblas.mk b/deps/openblas.mk index 6be017b967f94..6c3023f6ee8d1 100644 --- a/deps/openblas.mk +++ b/deps/openblas.mk @@ -105,7 +105,17 @@ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-m1-4003.patch-applied: $(BUILDDIR)/$(OP patch -p1 -f < $(SRCDIR)/patches/openblas-m1-4003.patch echo 1 > $@ -$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-m1-4003.patch-applied +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-asum-avx512.patch-applied: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-m1-4003.patch-applied + cd $(BUILDDIR)/$(OPENBLAS_SRC_DIR) && \ + patch -p1 -f < $(SRCDIR)/patches/openblas-asum-avx512.patch + echo 1 > $@ + +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-casum-fallback-fix.patch-applied: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-asum-avx512.patch-applied + cd $(BUILDDIR)/$(OPENBLAS_SRC_DIR) && \ + patch -p1 -f < $(SRCDIR)/patches/openblas-casum-fallback-fix.patch + echo 1 > $@ + +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-casum-fallback-fix.patch-applied echo 1 > $@ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-compiled: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured diff --git a/deps/patches/openblas-asum-avx512.patch b/deps/patches/openblas-asum-avx512.patch new file mode 100644 index 0000000000000..64ec6b4e42233 --- /dev/null +++ b/deps/patches/openblas-asum-avx512.patch @@ -0,0 +1,68 @@ +From 9019bc494514a74c2042152cdca0a36adea7b42f Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Sat, 4 Nov 2023 22:10:06 +0100 +Subject: [PATCH] Use SkylakeX ?ASUM microkernel for Cooperlake/Sapphirerapids + as well + +--- + kernel/x86_64/casum.c | 2 +- + kernel/x86_64/dasum.c | 2 +- + kernel/x86_64/sasum.c | 2 +- + kernel/x86_64/zasum.c | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/kernel/x86_64/casum.c b/kernel/x86_64/casum.c +index 60feec0ce..e4d054311 100644 +--- a/kernel/x86_64/casum.c ++++ b/kernel/x86_64/casum.c +@@ -4,7 +4,7 @@ + #define ABS_K(a) ((a) > 0 ? (a) : (-(a))) + #endif + +-#if defined(SKYLAKEX) ++#if defined(SKYLAKEX) || defined(COOPERLAKE) || defined(SAPPHIRERAPIDS) + #include "casum_microk_skylakex-2.c" + #endif + +diff --git a/kernel/x86_64/dasum.c b/kernel/x86_64/dasum.c +index a9c40f38f..0147c6978 100644 +--- a/kernel/x86_64/dasum.c ++++ b/kernel/x86_64/dasum.c +@@ -4,7 +4,7 @@ + #define ABS_K(a) ((a) > 0 ? (a) : (-(a))) + #endif + +-#if defined(SKYLAKEX) ++#if defined(SKYLAKEX) || defined(COOPERLAKE) || defined(SAPPHIRERAPIDS) + #include "dasum_microk_skylakex-2.c" + #elif defined(HASWELL) || defined(ZEN) + #include "dasum_microk_haswell-2.c" +diff --git a/kernel/x86_64/sasum.c b/kernel/x86_64/sasum.c +index 37a92468f..3f22cb97a 100644 +--- a/kernel/x86_64/sasum.c ++++ b/kernel/x86_64/sasum.c +@@ -9,7 +9,7 @@ + + #endif + +-#if defined(SKYLAKEX) ++#if defined(SKYLAKEX) || defined(COOPERLAKE) || defined(SAPPHIRERAPIDS) + #include "sasum_microk_skylakex-2.c" + #elif defined(HASWELL) || defined(ZEN) + #include "sasum_microk_haswell-2.c" +diff --git a/kernel/x86_64/zasum.c b/kernel/x86_64/zasum.c +index 80e95a2c8..3f17ab1cf 100644 +--- a/kernel/x86_64/zasum.c ++++ b/kernel/x86_64/zasum.c +@@ -4,7 +4,7 @@ + #define ABS_K(a) ((a) > 0 ? (a) : (-(a))) + #endif + +-#if defined(SKYLAKEX) ++#if defined(SKYLAKEX) || defined(COOPERLAKE) || defined(SAPPHIRERAPIDS) + #include "zasum_microk_skylakex-2.c" + #endif + +-- +2.50.1 + diff --git a/deps/patches/openblas-casum-fallback-fix.patch b/deps/patches/openblas-casum-fallback-fix.patch new file mode 100644 index 0000000000000..eb9dea864f9a5 --- /dev/null +++ b/deps/patches/openblas-casum-fallback-fix.patch @@ -0,0 +1,79 @@ +From f8ad5344c210960fc399ca5b0ad8559ab5ca253e Mon Sep 17 00:00:00 2001 +From: Bart Oldeman +Date: Fri, 17 Nov 2023 23:49:34 +0000 +Subject: [PATCH] Fix casum fallback kernel. + +This kernel is only used on Skylake+ if the kernel with AVX512 +intrinsics can't be used, but used the variable x1 incorrectly +in the tail end of the loop, as it is still at the initial +value instead of where x points to. + +This caused 55 "other error"s in the LAPACK tests +(https://github.com/OpenMathLib/OpenBLAS/issues/4282) + +This change makes casum.c as similar as possible as zasum.c, +because zasum.c does this correctly. +--- + kernel/x86_64/casum.c | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/kernel/x86_64/casum.c b/kernel/x86_64/casum.c +index e4d054311..28d78d279 100644 +--- a/kernel/x86_64/casum.c ++++ b/kernel/x86_64/casum.c +@@ -9,12 +9,12 @@ + #endif + + #ifndef HAVE_CASUM_KERNEL +-static FLOAT casum_kernel(BLASLONG n, FLOAT *x1) ++static FLOAT casum_kernel(BLASLONG n, FLOAT *x) + { + + BLASLONG i=0; + BLASLONG n_8 = n & -8; +- FLOAT *x = x1; ++ FLOAT *x1 = x; + FLOAT temp0, temp1, temp2, temp3; + FLOAT temp4, temp5, temp6, temp7; + FLOAT sum0 = 0.0; +@@ -24,14 +24,14 @@ static FLOAT casum_kernel(BLASLONG n, FLOAT *x1) + FLOAT sum4 = 0.0; + + while (i < n_8) { +- temp0 = ABS_K(x[0]); +- temp1 = ABS_K(x[1]); +- temp2 = ABS_K(x[2]); +- temp3 = ABS_K(x[3]); +- temp4 = ABS_K(x[4]); +- temp5 = ABS_K(x[5]); +- temp6 = ABS_K(x[6]); +- temp7 = ABS_K(x[7]); ++ temp0 = ABS_K(x1[0]); ++ temp1 = ABS_K(x1[1]); ++ temp2 = ABS_K(x1[2]); ++ temp3 = ABS_K(x1[3]); ++ temp4 = ABS_K(x1[4]); ++ temp5 = ABS_K(x1[5]); ++ temp6 = ABS_K(x1[6]); ++ temp7 = ABS_K(x1[7]); + + sum0 += temp0; + sum1 += temp1; +@@ -43,12 +43,12 @@ static FLOAT casum_kernel(BLASLONG n, FLOAT *x1) + sum2 += temp6; + sum3 += temp7; + +- x+=8; ++ x1+=8; + i+=4; + } + + while (i < n) { +- sum4 += (ABS_K(x1[0]) + ABS_K(x1[1])); ++ sum4 += ABS_K(x1[0]) + ABS_K(x1[1]); + x1 += 2; + i++; + } +-- +2.50.1 + diff --git a/stdlib/OpenBLAS_jll/Project.toml b/stdlib/OpenBLAS_jll/Project.toml index 92d68acd099f6..921d5931e1ce8 100644 --- a/stdlib/OpenBLAS_jll/Project.toml +++ b/stdlib/OpenBLAS_jll/Project.toml @@ -1,6 +1,6 @@ name = "OpenBLAS_jll" uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.23+4" +version = "0.3.23+5" [deps] # See note in `src/OpenBLAS_jll.jl` about this dependency. From 37d1127e4adffb6845786053ae3e768c1ed17232 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 29 May 2025 14:35:34 -0400 Subject: [PATCH 19/26] remove workaround for controlling terminal behavior in repl_cmd (#58554) This was originally added as a workaround for the behavior of sh to try to become the terminal process group leader, but no longer relevant since #25006 removed that flag again: ``` julia> run(detach(`bash -i -c "sleep 0"`)) bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell Process(`bash -i -c 'sleep 0'`, ProcessExited(0)) ``` Long explanation: Julia recieves SIGTTOU when a process like "sh -i -c" exits (at least for bash and zsh, but not dash, ksh, or csh), since "sh -i" sometimes takes over the controlling terminal, causing julia to stop once the bash process exits. This can be quite annoying, but julia goes through some pains (in libuv) to ensure it doesn't steal the controlling terminal from the parent, and apparently bash is not so careful about it. However, since PR #25006, julia hasn't needed this workaround for this issue, so we can now follow the intended behavior when the child is in the same session group and steals the controlling terminal from the parent. Even if such behavior seems odd, this seems to be the intended behavior per posix design implementation that it gets SIGTTOU when julia later tries to change mode (from cooked -> raw after printing the prompt): http://curiousthing.org/sigttin-sigttou-deep-dive-linux. For some background on why this is a useful signal and behavior and should not be just blocked, see nodejs/node#35536. According to glibc, there's a half page of code for how to correctly implement a REPL mode change call: https://www.gnu.org/software/libc/manual/html_node/Initializing-the-Shell.html ``` $ ./julia -q shell> bash -i -c "sleep 1" [1]+ Stopped ./julia julia> run(`zsh -i -c "sleep 0"`) Process(`zsh -i -c 'sleep 0'`, ProcessExited(0)) julia> [1]+ Stopped ./julia ``` (cherry picked from commit 0cbe4669079249e3d8ff48688b45ed3b39db20d5) --- base/client.jl | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/base/client.jl b/base/client.jl index d2f337a1d0062..388e34d5b19f7 100644 --- a/base/client.jl +++ b/base/client.jl @@ -31,9 +31,6 @@ stackframe_lineinfo_color() = repl_color("JULIA_STACKFRAME_LINEINFO_COLOR", :bol stackframe_function_color() = repl_color("JULIA_STACKFRAME_FUNCTION_COLOR", :bold) function repl_cmd(cmd, out) - shell = shell_split(get(ENV, "JULIA_SHELL", get(ENV, "SHELL", "/bin/sh"))) - shell_name = Base.basename(shell[1]) - # Immediately expand all arguments, so that typing e.g. ~/bin/foo works. cmd.exec .= expanduser.(cmd.exec) @@ -63,19 +60,15 @@ function repl_cmd(cmd, out) cd(dir) println(out, pwd()) else - @static if !Sys.iswindows() - if shell_name == "fish" - shell_escape_cmd = "begin; $(shell_escape_posixly(cmd)); and true; end" - else - shell_escape_cmd = "($(shell_escape_posixly(cmd))) && true" - end + if !Sys.iswindows() + shell = shell_split(get(ENV, "JULIA_SHELL", get(ENV, "SHELL", "/bin/sh"))) + shell_escape_cmd = shell_escape_posixly(cmd) cmd = `$shell -c $shell_escape_cmd` end try run(ignorestatus(cmd)) catch - # Windows doesn't shell out right now (complex issue), so Julia tries to run the program itself - # Julia throws an exception if it can't find the program, but the stack trace isn't useful + # Julia throws an exception if it can't find the cmd (which may be the shell itself), but the stack trace isn't useful lasterr = current_exceptions() lasterr = ExceptionStack([(exception = e[1], backtrace = [] ) for e in lasterr]) invokelatest(display_error, lasterr) From 0269d45f97355e34c2b767f6be5220c7e2e6dbec Mon Sep 17 00:00:00 2001 From: Neven Sajko <4944410+nsajko@users.noreply.github.com> Date: Thu, 21 Aug 2025 09:25:38 +0200 Subject: [PATCH 20/26] `@nospecialize` for `string_index_err` (#57604) The fields of `StringIndexError` are abstractly typed, so there's no reason to specialize on a concrete type. The change seems like it could prevent some invalidation on loading user code. --------- Co-authored-by: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> (cherry picked from commit bc33a3e354ac2de1ae1138b55947665278e7e2e8) --- base/strings/string.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/strings/string.jl b/base/strings/string.jl index a26791958cd50..ce1268269f421 100644 --- a/base/strings/string.jl +++ b/base/strings/string.jl @@ -7,9 +7,9 @@ An error occurred when trying to access `str` at index `i` that is not valid. """ struct StringIndexError <: Exception string::AbstractString - index::Integer + index::Int end -@noinline string_index_err(s::AbstractString, i::Integer) = +@noinline string_index_err((@nospecialize s::AbstractString), i::Integer) = throw(StringIndexError(s, Int(i))) function Base.showerror(io::IO, exc::StringIndexError) s = exc.string From ed38aed5d1a0865b90d29efe66180ef98fa2c305 Mon Sep 17 00:00:00 2001 From: William Moses Date: Fri, 5 Sep 2025 12:37:22 -0400 Subject: [PATCH 21/26] Enable getting non-boxed LLVM type from Julia Type (#56890) The current method :jl_type_to_llvm takes a pointer-to-bool parameter isboxed, which if non-null, is set to true if the Julia Type requires boxing. However, one may want to know the julia type without boxing and there is no mechanism for doing so. Now there is `julia_struct_to_llvm`. (cherry picked from commit 85f1b8c9d5defbe7f0368cc5f5a3049bdec1a7ce) --- src/cgutils.cpp | 15 +++++++++++---- src/codegen-stubs.c | 2 ++ src/jl_exported_funcs.inc | 1 + 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/cgutils.cpp b/src/cgutils.cpp index d560ad47ff7aa..26b87b4d4631d 100644 --- a/src/cgutils.cpp +++ b/src/cgutils.cpp @@ -638,13 +638,13 @@ static Value *emit_struct_gep(jl_codectx_t &ctx, Type *lty, Value *base, unsigne static Type *_julia_struct_to_llvm(jl_codegen_params_t *ctx, LLVMContext &ctxt, jl_value_t *jt, bool *isboxed, bool llvmcall=false); -static Type *_julia_type_to_llvm(jl_codegen_params_t *ctx, LLVMContext &ctxt, jl_value_t *jt, bool *isboxed) +static Type *_julia_type_to_llvm(jl_codegen_params_t *ctx, LLVMContext &ctxt, jl_value_t *jt, bool *isboxed, bool no_boxing) { // this function converts a Julia Type into the equivalent LLVM type if (isboxed) *isboxed = false; if (jt == (jl_value_t*)jl_bottom_type) return getVoidTy(ctxt); - if (jl_is_concrete_immutable(jt)) { + if (jl_is_concrete_immutable(jt) || no_boxing) { if (jl_datatype_nbits(jt) == 0) return getVoidTy(ctxt); Type *t = _julia_struct_to_llvm(ctx, ctxt, jt, isboxed); @@ -657,13 +657,20 @@ static Type *_julia_type_to_llvm(jl_codegen_params_t *ctx, LLVMContext &ctxt, jl static Type *julia_type_to_llvm(jl_codectx_t &ctx, jl_value_t *jt, bool *isboxed) { - return _julia_type_to_llvm(&ctx.emission_context, ctx.builder.getContext(), jt, isboxed); + return _julia_type_to_llvm(&ctx.emission_context, ctx.builder.getContext(), jt, isboxed, false); } extern "C" JL_DLLEXPORT_CODEGEN Type *jl_type_to_llvm_impl(jl_value_t *jt, LLVMContextRef ctxt, bool *isboxed) { - return _julia_type_to_llvm(NULL, *unwrap(ctxt), jt, isboxed); + return _julia_type_to_llvm(NULL, *unwrap(ctxt), jt, isboxed, false); +} + + +extern "C" JL_DLLEXPORT_CODEGEN +Type *jl_struct_to_llvm_impl(jl_value_t *jt, LLVMContextRef ctxt, bool *isboxed) +{ + return _julia_type_to_llvm(NULL, *unwrap(ctxt), jt, isboxed, true); } diff --git a/src/codegen-stubs.c b/src/codegen-stubs.c index b48ad7b98791f..26cf9229b6416 100644 --- a/src/codegen-stubs.c +++ b/src/codegen-stubs.c @@ -97,6 +97,8 @@ JL_DLLEXPORT LLVMOrcThreadSafeModuleRef jl_get_llvm_module_fallback(void *native JL_DLLEXPORT void *jl_type_to_llvm_fallback(jl_value_t *jt, LLVMContextRef llvmctxt, bool_t *isboxed) UNAVAILABLE +JL_DLLEXPORT void *jl_struct_to_llvm_fallback(jl_value_t *jt, LLVMContextRef llvmctxt, bool_t *isboxed) UNAVAILABLE + JL_DLLEXPORT jl_value_t *jl_get_libllvm_fallback(void) JL_NOTSAFEPOINT { return jl_nothing; diff --git a/src/jl_exported_funcs.inc b/src/jl_exported_funcs.inc index ee255a0e1a876..c63f3de48a1fd 100644 --- a/src/jl_exported_funcs.inc +++ b/src/jl_exported_funcs.inc @@ -558,6 +558,7 @@ YY(jl_dump_llvm_opt) \ YY(jl_dump_fptr_asm) \ YY(jl_get_function_id) \ + YY(jl_struct_to_llvm) \ YY(jl_type_to_llvm) \ YY(jl_getUnwindInfo) \ YY(jl_get_libllvm) \ From d269b23f37ed9e1d2f524be47a5f49de046f09e7 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Tue, 9 Sep 2025 17:08:28 -0300 Subject: [PATCH 22/26] [backports-release-1.11] Don't forget to decay value on struct initialization (#59511) Fixes https://github.com/JuliaLang/julia/issues/59510 (cherry picked from commit 8230e8bbf5c229084a6738729f5629b5fc950f0f) --- src/cgutils.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cgutils.cpp b/src/cgutils.cpp index 26b87b4d4631d..5a509428f3847 100644 --- a/src/cgutils.cpp +++ b/src/cgutils.cpp @@ -3093,6 +3093,7 @@ static void init_bits_value(jl_codectx_t &ctx, Value *newv, Value *v, MDNode *tb static void init_bits_cgval(jl_codectx_t &ctx, Value *newv, const jl_cgval_t& v, MDNode *tbaa) { // newv should already be tagged + newv = maybe_decay_tracked(ctx, newv); if (v.ispointer()) { emit_memcpy(ctx, newv, jl_aliasinfo_t::fromTBAA(ctx, tbaa), v, jl_datatype_size(v.typ), sizeof(void*)); } From 0741bfe3bd625a51b362356093c5ac59afc5b486 Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Sun, 14 Sep 2025 14:43:12 -0400 Subject: [PATCH 23/26] Fix intrinsics test on 1.10 backports branch The test on master uses opaque pointers which older LLVM versions don't support. Co-authored-by: Simeon David Schaub --- test/intrinsics.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/intrinsics.jl b/test/intrinsics.jl index 81b99a3af5ccd..7db7c36e61487 100644 --- a/test/intrinsics.jl +++ b/test/intrinsics.jl @@ -364,9 +364,9 @@ end)() @testset "issue #54548" begin @inline passthrough(ptr::Core.LLVMPtr{T,A}) where {T,A} = Base.llvmcall((""" - define ptr addrspace(1) @entry(ptr addrspace(1) %0) #0 { + define i32 addrspace(1)* @entry(i32 addrspace(1)* %0) #0 { entry: - ret ptr addrspace(1) %0 + ret i32 addrspace(1)* %0 } attributes #0 = { alwaysinline }""", "entry"), From 05ee0aa979c631da03d4279bae010caf60c66722 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Mon, 15 Sep 2025 09:28:26 -0300 Subject: [PATCH 24/26] Remove bad test --- test/llvmpasses/remove-addrspaces.ll | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/test/llvmpasses/remove-addrspaces.ll b/test/llvmpasses/remove-addrspaces.ll index 4bdc8409a244e..d0e77e4a5d7ae 100644 --- a/test/llvmpasses/remove-addrspaces.ll +++ b/test/llvmpasses/remove-addrspaces.ll @@ -3,9 +3,6 @@ ; RUN: opt -enable-new-pm=0 --opaque-pointers=0 -load libjulia-codegen%shlibext -RemoveJuliaAddrspaces -S %s | FileCheck %s --check-prefixes=CHECK,TYPED ; RUN: opt -enable-new-pm=1 --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='RemoveJuliaAddrspaces' -S %s | FileCheck %s --check-prefixes=CHECK,TYPED -; COM: check that the addrspace of the global itself is removed -; OPAQUE: @ejl_enz_runtime_exc = external global {} -@ejl_enz_runtime_exc = external addrspace(10) global {} ; COM: check that the addrspace of the global itself is removed ; OPAQUE: @ejl_enz_runtime_exc = external global {} @@ -134,13 +131,6 @@ L6: unreachable } -define private fastcc void @diffejulia__mapreduce_97() { -L6: -; OPAQUE: store atomic ptr @ejl_enz_runtime_exc, ptr null unordered - store atomic {} addrspace(10)* @ejl_enz_runtime_exc, {} addrspace(10)* addrspace(10)* null unordered, align 8 - unreachable -} - ; COM: check that function attributes are preserved on declarations too declare void @convergent_function() #0 attributes #0 = { convergent } From 6901dde9e901204e90f0913c039db9830cfaad65 Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Mon, 6 Oct 2025 17:24:21 -0400 Subject: [PATCH 25/26] CI 1.10: Use the 1.10-specific Buildkite branch (#59761) --- .buildkite-external-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.buildkite-external-version b/.buildkite-external-version index ba2906d0666cf..37f6b6626894f 100644 --- a/.buildkite-external-version +++ b/.buildkite-external-version @@ -1 +1 @@ -main +release-julia-1.10 From 7bf0208a98105830f8197faa02727d5c62286af3 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Wed, 22 Oct 2025 19:10:05 -0400 Subject: [PATCH 26/26] Remove bitrotten debug-only code in 1.10 (#59917) This debug-only code-path would block using tasks with custom stacks on julia-debug. fixes #59876 --- src/task.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/task.c b/src/task.c index e14b4a3e74956..fab25cf95dac9 100644 --- a/src/task.c +++ b/src/task.c @@ -1094,12 +1094,7 @@ JL_DLLEXPORT jl_task_t *jl_new_task(jl_function_t *start, jl_value_t *completion jl_timing_task_init(t); #ifdef COPY_STACKS - if (!t->copy_stack) { -#if defined(JL_DEBUG_BUILD) - memset(&t->ctx, 0, sizeof(t->ctx)); -#endif - } - else { + if (t->copy_stack) { if (always_copy_stacks) memcpy(&t->ctx.copy_ctx, &ct->ptls->copy_stack_ctx, sizeof(t->ctx.copy_ctx)); else