From f8ad15f7b16146c8b8c13dc2ce87ec84fd48dbcb Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Thu, 6 Jul 2023 06:36:30 -0400 Subject: [PATCH 001/413] `release-1.10`: set `VERSION` to `1.10.0-alpha1` (#50420) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 86a15e0570c4a..61f71d0ffe369 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.0-DEV +1.10.0-alpha1 From bda3e096651f7fe64703012b3c811e82e40995a3 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Tue, 11 Jul 2023 17:07:41 +0530 Subject: [PATCH 002/413] Run doc/NEWS-update.jl on release-1.10 (#50504) --- NEWS.md | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/NEWS.md b/NEWS.md index e9ae12847ed29..e6ce618b3938d 100644 --- a/NEWS.md +++ b/NEWS.md @@ -160,3 +160,31 @@ Tooling Improvements +[#31836]: https://github.com/JuliaLang/julia/issues/31836 +[#40105]: https://github.com/JuliaLang/julia/issues/40105 +[#43055]: https://github.com/JuliaLang/julia/issues/43055 +[#45164]: https://github.com/JuliaLang/julia/issues/45164 +[#45396]: https://github.com/JuliaLang/julia/issues/45396 +[#45962]: https://github.com/JuliaLang/julia/issues/45962 +[#46196]: https://github.com/JuliaLang/julia/issues/46196 +[#46372]: https://github.com/JuliaLang/julia/issues/46372 +[#46874]: https://github.com/JuliaLang/julia/issues/46874 +[#47044]: https://github.com/JuliaLang/julia/issues/47044 +[#47804]: https://github.com/JuliaLang/julia/issues/47804 +[#47977]: https://github.com/JuliaLang/julia/issues/47977 +[#47979]: https://github.com/JuliaLang/julia/issues/47979 +[#48124]: https://github.com/JuliaLang/julia/issues/48124 +[#48575]: https://github.com/JuliaLang/julia/issues/48575 +[#48600]: https://github.com/JuliaLang/julia/issues/48600 +[#48682]: https://github.com/JuliaLang/julia/issues/48682 +[#48899]: https://github.com/JuliaLang/julia/issues/48899 +[#49020]: https://github.com/JuliaLang/julia/issues/49020 +[#49110]: https://github.com/JuliaLang/julia/issues/49110 +[#49405]: https://github.com/JuliaLang/julia/issues/49405 +[#49451]: https://github.com/JuliaLang/julia/issues/49451 +[#49529]: https://github.com/JuliaLang/julia/issues/49529 +[#49533]: https://github.com/JuliaLang/julia/issues/49533 +[#49745]: https://github.com/JuliaLang/julia/issues/49745 +[#49795]: https://github.com/JuliaLang/julia/issues/49795 +[#49959]: https://github.com/JuliaLang/julia/issues/49959 +[#50218]: https://github.com/JuliaLang/julia/issues/50218 From 01f91238535c847611057ff0306e45cf21b9bb96 Mon Sep 17 00:00:00 2001 From: Guillaume Dalle <22795598+gdalle@users.noreply.github.com> Date: Wed, 5 Jul 2023 12:06:41 +0200 Subject: [PATCH 003/413] Fix weird dispatch of * with zero arguments (#50411) (cherry picked from commit d70ee20077a97ca9598b42bfc19bee21c949579a) --- stdlib/LinearAlgebra/src/givens.jl | 4 +++- test/operators.jl | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/stdlib/LinearAlgebra/src/givens.jl b/stdlib/LinearAlgebra/src/givens.jl index c37df41f9567c..4668d5f542a91 100644 --- a/stdlib/LinearAlgebra/src/givens.jl +++ b/stdlib/LinearAlgebra/src/givens.jl @@ -417,7 +417,9 @@ function *(G1::Givens{S}, G2::Givens{T}) where {S,T} TS = promote_type(T, S) Rotation{TS}([convert(AbstractRotation{TS}, G2), convert(AbstractRotation{TS}, G1)]) end -*(G::Givens{T}...) where {T} = Rotation([reverse(G)...]) +function *(G::Givens{T}, Gs::Givens{T}...) where {T} + return Rotation([reverse(Gs)..., G]) +end function *(G::Givens{S}, R::Rotation{T}) where {S,T} TS = promote_type(T, S) Rotation(vcat(convert(AbstractRotation{TS}, R).rotations, convert(AbstractRotation{TS}, G))) diff --git a/test/operators.jl b/test/operators.jl index 46cf6c7526299..715212a80a54f 100644 --- a/test/operators.jl +++ b/test/operators.jl @@ -154,6 +154,13 @@ Base.convert(::Type{T19714}, ::Int) = T19714() Base.promote_rule(::Type{T19714}, ::Type{Int}) = T19714 @test T19714()/1 === 1/T19714() === T19714() +@testset "operators with zero argument" begin + @test_throws(MethodError, +()) + @test_throws(MethodError, *()) + @test isempty(methods(+, ())) + @test isempty(methods(*, ())) +end + # pr #17155 and #33568 @testset "function composition" begin @test (uppercase∘(x->string(x,base=16)))(239487) == "3A77F" From 7d01eaa2dc951b353dfc7d29fb34d804847b8344 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Wed, 5 Jul 2023 12:11:13 +0200 Subject: [PATCH 004/413] Remove dynamic dispatch from _wait/wait2 (#50202) Co-authored-by: Gabriel Baraldi (cherry picked from commit e025877105630311b7f07d470d3cecda11a3e5d7) --- base/task.jl | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/base/task.jl b/base/task.jl index 4fbb51fde3e8e..f7a82b9c42ab9 100644 --- a/base/task.jl +++ b/base/task.jl @@ -303,13 +303,14 @@ end # just wait for a task to be done, no error propagation function _wait(t::Task) if !istaskdone(t) - lock(t.donenotify) + donenotify = t.donenotify::ThreadSynchronizer + lock(donenotify) try while !istaskdone(t) - wait(t.donenotify) + wait(donenotify) end finally - unlock(t.donenotify) + unlock(donenotify) end end nothing @@ -330,13 +331,14 @@ function _wait2(t::Task, waiter::Task) tid = Threads.threadid() ccall(:jl_set_task_tid, Cint, (Any, Cint), waiter, tid-1) end - lock(t.donenotify) + donenotify = t.donenotify::ThreadSynchronizer + lock(donenotify) if !istaskdone(t) - push!(t.donenotify.waitq, waiter) - unlock(t.donenotify) + push!(donenotify.waitq, waiter) + unlock(donenotify) return nothing else - unlock(t.donenotify) + unlock(donenotify) end end schedule(waiter) From f250b760285701729cb2ec09db01a7ce9d16171b Mon Sep 17 00:00:00 2001 From: Loong Date: Wed, 5 Jul 2023 18:12:43 +0800 Subject: [PATCH 005/413] Check input expresion in numbered prompt (#50064) (cherry picked from commit 7e3c706a879ae6d381737e13ce9b3275d083a86a) --- stdlib/REPL/src/REPL.jl | 1 + stdlib/REPL/test/repl.jl | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/stdlib/REPL/src/REPL.jl b/stdlib/REPL/src/REPL.jl index f8bb442ad6ec4..1328a87f1a77d 100644 --- a/stdlib/REPL/src/REPL.jl +++ b/stdlib/REPL/src/REPL.jl @@ -1418,6 +1418,7 @@ function out_transform(@nospecialize(x), n::Ref{Int}) end function get_usings!(usings, ex) + ex isa Expr || return usings # get all `using` and `import` statements which are at the top level for (i, arg) in enumerate(ex.args) if Base.isexpr(arg, :toplevel) diff --git a/stdlib/REPL/test/repl.jl b/stdlib/REPL/test/repl.jl index 8a6c6a3445e0a..f0d5052ff9e32 100644 --- a/stdlib/REPL/test/repl.jl +++ b/stdlib/REPL/test/repl.jl @@ -1652,6 +1652,10 @@ fake_repl() do stdin_write, stdout_read, repl @test !contains(s, "ERROR") @test contains(s, "Test Passed") + # Test for https://github.com/JuliaLang/julia/issues/49319 + s = sendrepl2("# comment", "In [16]") + @test !contains(s, "ERROR") + write(stdin_write, '\x04') Base.wait(repltask) end From afb80a119aa60dedc0a5920d1a291033aa7455b6 Mon Sep 17 00:00:00 2001 From: Adnan Alhomssi Date: Wed, 5 Jul 2023 12:16:01 +0200 Subject: [PATCH 006/413] Use tempdir() to store heap snapshot files instead of abspatch ~= rootdir (#50026) (cherry picked from commit 877b368d78f9fbb6bb698f40f6e9c725ef057bd0) --- stdlib/Profile/src/Profile.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/Profile/src/Profile.jl b/stdlib/Profile/src/Profile.jl index 71bbfc70ee937..f0323d0334b1a 100644 --- a/stdlib/Profile/src/Profile.jl +++ b/stdlib/Profile/src/Profile.jl @@ -1234,7 +1234,7 @@ function take_heap_snapshot(filepath::String, all_one::Bool=false) return filepath end function take_heap_snapshot(all_one::Bool=false) - f = abspath("$(getpid())_$(time_ns()).heapsnapshot") + f = joinpath(tempdir(), "$(getpid())_$(time_ns()).heapsnapshot") return take_heap_snapshot(f, all_one) end From 019e08f63aa61010db863ebcf15d325884a4050d Mon Sep 17 00:00:00 2001 From: William Moses Date: Wed, 5 Jul 2023 07:32:13 -0400 Subject: [PATCH 007/413] Add CPU feature helper function (#50402) (cherry picked from commit 435c1c1a2c9db60be89b82bb9438916ac891a1ff) --- src/jl_exported_funcs.inc | 1 + src/processor.h | 2 ++ src/processor_arm.cpp | 5 +++++ src/processor_fallback.cpp | 5 +++++ src/processor_x86.cpp | 5 +++++ test/sysinfo.jl | 3 +++ 6 files changed, 21 insertions(+) diff --git a/src/jl_exported_funcs.inc b/src/jl_exported_funcs.inc index fd824131bdbda..6875e36d6da6a 100644 --- a/src/jl_exported_funcs.inc +++ b/src/jl_exported_funcs.inc @@ -212,6 +212,7 @@ XX(jl_get_binding_or_error) \ XX(jl_get_binding_wr) \ XX(jl_get_cpu_name) \ + XX(jl_get_cpu_features) \ XX(jl_get_current_task) \ XX(jl_get_default_sysimg_path) \ XX(jl_get_excstack) \ diff --git a/src/processor.h b/src/processor.h index 3e83bbb2247d6..2255cf4c10daa 100644 --- a/src/processor.h +++ b/src/processor.h @@ -221,6 +221,8 @@ jl_image_t jl_init_processor_pkgimg(void *hdl); // Return the name of the host CPU as a julia string. JL_DLLEXPORT jl_value_t *jl_get_cpu_name(void); +// Return the features of the host CPU as a julia string. +JL_DLLEXPORT jl_value_t *jl_get_cpu_features(void); // Dump the name and feature set of the host CPU // For debugging only JL_DLLEXPORT void jl_dump_host_cpu(void); diff --git a/src/processor_arm.cpp b/src/processor_arm.cpp index 0797fa4381f9d..0a8090a8a6d9c 100644 --- a/src/processor_arm.cpp +++ b/src/processor_arm.cpp @@ -1802,6 +1802,11 @@ JL_DLLEXPORT jl_value_t *jl_get_cpu_name(void) return jl_cstr_to_string(host_cpu_name().c_str()); } +JL_DLLEXPORT jl_value_t *jl_get_cpu_features(void) +{ + return jl_cstr_to_string(jl_get_cpu_features_llvm().c_str()); +} + jl_image_t jl_init_processor_sysimg(void *hdl) { if (!jit_targets.empty()) diff --git a/src/processor_fallback.cpp b/src/processor_fallback.cpp index 1aebde6dab90a..d50edc8e9b621 100644 --- a/src/processor_fallback.cpp +++ b/src/processor_fallback.cpp @@ -164,6 +164,11 @@ JL_DLLEXPORT jl_value_t *jl_get_cpu_name(void) return jl_cstr_to_string(host_cpu_name().c_str()); } +JL_DLLEXPORT jl_value_t *jl_get_cpu_features(void) +{ + return jl_cstr_to_string(jl_get_cpu_features_llvm().c_str()); +} + JL_DLLEXPORT void jl_dump_host_cpu(void) { jl_safe_printf("CPU: %s\n", host_cpu_name().c_str()); diff --git a/src/processor_x86.cpp b/src/processor_x86.cpp index e129b1239c7df..b9e7d8c0f0daf 100644 --- a/src/processor_x86.cpp +++ b/src/processor_x86.cpp @@ -1042,6 +1042,11 @@ JL_DLLEXPORT jl_value_t *jl_get_cpu_name(void) return jl_cstr_to_string(host_cpu_name().c_str()); } +JL_DLLEXPORT jl_value_t *jl_get_cpu_features(void) +{ + return jl_cstr_to_string(jl_get_cpu_features_llvm().c_str()); +} + jl_image_t jl_init_processor_sysimg(void *hdl) { if (!jit_targets.empty()) diff --git a/test/sysinfo.jl b/test/sysinfo.jl index 3a16dc73b4f6a..cb943cfd38843 100644 --- a/test/sysinfo.jl +++ b/test/sysinfo.jl @@ -10,6 +10,9 @@ Base.Sys.loadavg() @test Base.libllvm_path() isa Symbol @test contains(String(Base.libllvm_path()), "LLVM") +@test length(ccall(:jl_get_cpu_name, String, ())) != 0 +@test length(ccall(:jl_get_cpu_features, String, ())) >= 0 + if Sys.isunix() mktempdir() do tempdir firstdir = joinpath(tempdir, "first") From 0ae05d3033c1f3130b195e41b5668da5f9798652 Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Wed, 5 Jul 2023 17:33:43 -0300 Subject: [PATCH 008/413] update halfpages pointer after actually sweeping pages (#50387) (cherry picked from commit c09a199ead2c5301d721369fe87a3d11c99ed8f1) --- src/gc.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gc.c b/src/gc.c index 9fd93b7340d56..edc0fdb49c4a5 100644 --- a/src/gc.c +++ b/src/gc.c @@ -1542,7 +1542,6 @@ static void gc_sweep_pool(int sweep_full) pg->nfree = (GC_PAGE_SZ - (last_p - gc_page_data(last_p - 1))) / p->osize; pg->has_young = 1; } - p->newpages = NULL; } jl_gc_pagemeta_t *pg = ptls2->page_metadata_lazily_freed; while (pg != NULL) { @@ -1564,6 +1563,10 @@ static void gc_sweep_pool(int sweep_full) pg = pg2; } ptls2->page_metadata_allocd = allocd; + for (int i = 0; i < JL_GC_N_POOLS; i++) { + jl_gc_pool_t *p = &ptls2->heap.norm_pools[i]; + p->newpages = NULL; + } } } From 51207fa7984d4df419e7266dbe8d5e3e76bf074c Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Fri, 7 Jul 2023 11:55:56 -0300 Subject: [PATCH 009/413] Optimize getfield lowering to avoid boxing in some cases (#50444) (cherry picked from commit 0718995f97c0d3df7f3f488523dd305c942efcf7) --- src/codegen.cpp | 39 +++++++++++++++++++++++++++++++++++++++ src/datatype.c | 3 +-- src/jl_exported_funcs.inc | 1 + src/julia.h | 1 + src/rtutils.c | 5 +++++ test/compiler/codegen.jl | 12 ++++++++++++ 6 files changed, 59 insertions(+), 2 deletions(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index 122170ae3fa97..04f7564dd3e33 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -739,6 +739,13 @@ static const auto jlundefvarerror_func = new JuliaFunction<>{ {PointerType::get(JuliaType::get_jlvalue_ty(C), AddressSpace::CalleeRooted)}, false); }, get_attrs_noreturn, }; +static const auto jlhasnofield_func = new JuliaFunction<>{ + XSTR(jl_has_no_field_error), + [](LLVMContext &C) { return FunctionType::get(getVoidTy(C), + {PointerType::get(JuliaType::get_jlvalue_ty(C), AddressSpace::CalleeRooted), + PointerType::get(JuliaType::get_jlvalue_ty(C), AddressSpace::CalleeRooted)}, false); }, + get_attrs_noreturn, +}; static const auto jlboundserrorv_func = new JuliaFunction{ XSTR(jl_bounds_error_ints), [](LLVMContext &C, Type *T_size) { return FunctionType::get(getVoidTy(C), @@ -3318,6 +3325,8 @@ static jl_llvm_functions_t jl_value_t *jlrettype, jl_codegen_params_t ¶ms); +static void emit_hasnofield_error_ifnot(jl_codectx_t &ctx, Value *ok, jl_sym_t *type, jl_cgval_t name); + static bool emit_builtin_call(jl_codectx_t &ctx, jl_cgval_t *ret, jl_value_t *f, const jl_cgval_t *argv, size_t nargs, jl_value_t *rt, jl_expr_t *ex, bool is_promotable) @@ -3819,6 +3828,19 @@ static bool emit_builtin_call(jl_codectx_t &ctx, jl_cgval_t *ret, jl_value_t *f, return true; } } + else if (fld.typ == (jl_value_t*)jl_symbol_type) { + if (jl_is_datatype(utt) && !jl_is_namedtuple_type(utt)) { // TODO: Look into this for NamedTuple + if (jl_struct_try_layout(utt) && (jl_datatype_nfields(utt) == 1)) { + jl_svec_t *fn = jl_field_names(utt); + assert(jl_svec_len(fn) == 1); + Value *typ_sym = literal_pointer_val(ctx, jl_svecref(fn, 0)); + Value *cond = ctx.builder.CreateICmpEQ(mark_callee_rooted(ctx, typ_sym), mark_callee_rooted(ctx, boxed(ctx, fld))); + emit_hasnofield_error_ifnot(ctx, cond, utt->name->name, fld); + *ret = emit_getfield_knownidx(ctx, obj, 0, utt, order); + return true; + } + } + } // TODO: generic getfield func with more efficient calling convention return false; } @@ -4612,6 +4634,22 @@ static void undef_var_error_ifnot(jl_codectx_t &ctx, Value *ok, jl_sym_t *name) ctx.builder.SetInsertPoint(ifok); } +static void emit_hasnofield_error_ifnot(jl_codectx_t &ctx, Value *ok, jl_sym_t *type, jl_cgval_t name) +{ + ++EmittedUndefVarErrors; + assert(name.typ == (jl_value_t*)jl_symbol_type); + BasicBlock *err = BasicBlock::Create(ctx.builder.getContext(), "err", ctx.f); + BasicBlock *ifok = BasicBlock::Create(ctx.builder.getContext(), "ok"); + ctx.builder.CreateCondBr(ok, ifok, err); + ctx.builder.SetInsertPoint(err); + ctx.builder.CreateCall(prepare_call(jlhasnofield_func), + {mark_callee_rooted(ctx, literal_pointer_val(ctx, (jl_value_t*)type)), + mark_callee_rooted(ctx, boxed(ctx, name))}); + ctx.builder.CreateUnreachable(); + ctx.f->getBasicBlockList().push_back(ifok); + ctx.builder.SetInsertPoint(ifok); +} + // returns a jl_ppvalue_t location for the global variable m.s // if the reference currently bound or assign == true, // pbnd will also be assigned with the binding address @@ -9011,6 +9049,7 @@ static void init_jit_functions(void) add_named_global(jlatomicerror_func, &jl_atomic_error); add_named_global(jlthrow_func, &jl_throw); add_named_global(jlundefvarerror_func, &jl_undefined_var_error); + add_named_global(jlhasnofield_func, &jl_has_no_field_error); add_named_global(jlboundserrorv_func, &jl_bounds_error_ints); add_named_global(jlboundserror_func, &jl_bounds_error_int); add_named_global(jlvboundserror_func, &jl_bounds_error_tuple_int); diff --git a/src/datatype.c b/src/datatype.c index 95c3b11c9abdc..905959fb80e0a 100644 --- a/src/datatype.c +++ b/src/datatype.c @@ -1558,8 +1558,7 @@ JL_DLLEXPORT int jl_field_index(jl_datatype_t *t, jl_sym_t *fld, int err) } } if (err) - jl_errorf("type %s has no field %s", jl_symbol_name(t->name->name), - jl_symbol_name(fld)); + jl_has_no_field_error(t->name->name, fld); return -1; } diff --git a/src/jl_exported_funcs.inc b/src/jl_exported_funcs.inc index 6875e36d6da6a..c2b2a1578fd76 100644 --- a/src/jl_exported_funcs.inc +++ b/src/jl_exported_funcs.inc @@ -510,6 +510,7 @@ XX(jl_uncompress_argname_n) \ XX(jl_uncompress_ir) \ XX(jl_undefined_var_error) \ + XX(jl_has_no_field_error) \ XX(jl_value_ptr) \ XX(jl_ver_is_release) \ XX(jl_ver_major) \ diff --git a/src/julia.h b/src/julia.h index d2eb9a98a4a42..5af8a5bc1a170 100644 --- a/src/julia.h +++ b/src/julia.h @@ -1790,6 +1790,7 @@ JL_DLLEXPORT void JL_NORETURN jl_type_error_rt(const char *fname, jl_value_t *ty JL_MAYBE_UNROOTED, jl_value_t *got JL_MAYBE_UNROOTED); JL_DLLEXPORT void JL_NORETURN jl_undefined_var_error(jl_sym_t *var); +JL_DLLEXPORT void JL_NORETURN jl_has_no_field_error(jl_sym_t *type_name, jl_sym_t *var); JL_DLLEXPORT void JL_NORETURN jl_atomic_error(char *str); JL_DLLEXPORT void JL_NORETURN jl_bounds_error(jl_value_t *v JL_MAYBE_UNROOTED, jl_value_t *t JL_MAYBE_UNROOTED); diff --git a/src/rtutils.c b/src/rtutils.c index 01ea11014a6db..eefd1b25f9bc4 100644 --- a/src/rtutils.c +++ b/src/rtutils.c @@ -134,6 +134,11 @@ JL_DLLEXPORT void JL_NORETURN jl_undefined_var_error(jl_sym_t *var) jl_throw(jl_new_struct(jl_undefvarerror_type, var)); } +JL_DLLEXPORT void JL_NORETURN jl_has_no_field_error(jl_sym_t *type_name, jl_sym_t *var) +{ + jl_errorf("type %s has no field %s", jl_symbol_name(type_name), jl_symbol_name(var)); +} + JL_DLLEXPORT void JL_NORETURN jl_atomic_error(char *str) // == jl_exceptionf(jl_atomicerror_type, "%s", str) { jl_value_t *msg = jl_pchar_to_string((char*)str, strlen(str)); diff --git a/test/compiler/codegen.jl b/test/compiler/codegen.jl index e93ecd232498f..85013ce30d2ca 100644 --- a/test/compiler/codegen.jl +++ b/test/compiler/codegen.jl @@ -820,3 +820,15 @@ end # issue 48917, hoisting load to above the parent f48917(x, w) = (y = (a=1, b=x); z = (; a=(a=(1, w), b=(3, y)))) @test f48917(1,2) == (a = (a = (1, 2), b = (3, (a = 1, b = 1))),) + +# https://github.com/JuliaLang/julia/issues/50317 getproperty allocation on struct with 1 field +struct Wrapper50317 + lock::ReentrantLock +end +const MONITOR50317 = Wrapper50317(ReentrantLock()) +issue50317() = @noinline MONITOR50317.lock +issue50317() +let res = @timed issue50317() + @test res.bytes == 0 + return res # must return otherwise the compiler may eliminate the result entirely +end From 4cf3007e4a897cec7db222b3a58e6a6f268dfc5f Mon Sep 17 00:00:00 2001 From: Kevin Song Date: Sat, 8 Jul 2023 14:54:20 -0500 Subject: [PATCH 010/413] docs: Fix a `!!! note` which was miscapitalized (#50474) (cherry picked from commit 236c23b7945a578dd630cdf6af81ecbf7aafacf6) --- doc/src/manual/multi-threading.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/src/manual/multi-threading.md b/doc/src/manual/multi-threading.md index 056ceb1363fd7..63902f1b7902b 100644 --- a/doc/src/manual/multi-threading.md +++ b/doc/src/manual/multi-threading.md @@ -292,7 +292,7 @@ sum_multi_good (generic function with 1 method) julia> sum_multi_good(1:1_000_000) 500000500000 ``` -!!! Note +!!! note Buffers should not be managed based on `threadid()` i.e. `buffers = zeros(Threads.nthreads())` because concurrent tasks can yield, meaning multiple concurrent tasks may use the same buffer on a given thread, introducing risk of data races. Further, when more than one thread is available tasks may change thread at yield points, which is known as From 85d7b42a66a1274a725e068ab4b741017555cefa Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Sun, 9 Jul 2023 21:40:14 -0300 Subject: [PATCH 011/413] relax assertion involving pg->nold to reflect that it may be a bit inaccurate with parallel marking (#50466) (cherry picked from commit 8e877cbb01d2c26a3fdcb7b9302f4d3ead229f9f) --- src/gc.c | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/gc.c b/src/gc.c index edc0fdb49c4a5..dd3fa308a3867 100644 --- a/src/gc.c +++ b/src/gc.c @@ -854,7 +854,7 @@ STATIC_INLINE void gc_setmark_pool_(jl_ptls_t ptls, jl_taggedvalue_t *o, if (mark_mode == GC_OLD_MARKED) { ptls->gc_cache.perm_scanned_bytes += page->osize; static_assert(sizeof(_Atomic(uint16_t)) == sizeof(page->nold), ""); - jl_atomic_fetch_add_relaxed((_Atomic(uint16_t)*)&page->nold, 1); + page->nold++; } else { ptls->gc_cache.scanned_bytes += page->osize; @@ -1374,20 +1374,27 @@ static jl_taggedvalue_t **gc_sweep_page(jl_gc_pool_t *p, jl_gc_pagemeta_t **allo nfree = (GC_PAGE_SZ - GC_PAGE_OFFSET) / osize; goto done; } - // For quick sweep, we might be able to skip the page if the page doesn't - // have any young live cell before marking. - if (!sweep_full && !pg->has_young) { - assert(!prev_sweep_full || pg->prev_nold >= pg->nold); - if (!prev_sweep_full || pg->prev_nold == pg->nold) { - // the position of the freelist begin/end in this page - // is stored in its metadata - if (pg->fl_begin_offset != (uint16_t)-1) { - *pfl = page_pfl_beg(pg); - pfl = (jl_taggedvalue_t**)page_pfl_end(pg); + // note that `pg->nold` may not be accurate with multithreaded marking since + // two threads may race when trying to set the mark bit in `gc_try_setmark_tag`. + // We're basically losing a bit of precision in the sweep phase at the cost of + // making the mark phase considerably cheaper. + // See issue #50419 + if (jl_n_markthreads == 0) { + // For quick sweep, we might be able to skip the page if the page doesn't + // have any young live cell before marking. + if (!sweep_full && !pg->has_young) { + assert(!prev_sweep_full || pg->prev_nold >= pg->nold); + if (!prev_sweep_full || pg->prev_nold == pg->nold) { + // the position of the freelist begin/end in this page + // is stored in its metadata + if (pg->fl_begin_offset != (uint16_t)-1) { + *pfl = page_pfl_beg(pg); + pfl = (jl_taggedvalue_t**)page_pfl_end(pg); + } + freedall = 0; + nfree = pg->nfree; + goto done; } - freedall = 0; - nfree = pg->nfree; - goto done; } } From 7401107927b4ed745fb47a088ef2723eb1cc470e Mon Sep 17 00:00:00 2001 From: Lionel Zoubritzky Date: Mon, 10 Jul 2023 12:16:28 +0200 Subject: [PATCH 012/413] Fix compat annotation for italic printstyled (#50490) (cherry picked from commit 206e59ac539dc640cd0e7bf4c430bd6fe7706f3f) --- base/util.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/util.jl b/base/util.jl index 4dcb819292ff8..3ccdd0a37ae68 100644 --- a/base/util.jl +++ b/base/util.jl @@ -135,8 +135,8 @@ See also [`print`](@ref), [`println`](@ref), [`show`](@ref). !!! compat "Julia 1.7" Keywords except `color` and `bold` were added in Julia 1.7. -!!! compat "Julia 1.9" - Support for italic output was added in Julia 1.9. +!!! compat "Julia 1.10" + Support for italic output was added in Julia 1.10. """ @constprop :none printstyled(io::IO, msg...; bold::Bool=false, italic::Bool=false, underline::Bool=false, blink::Bool=false, reverse::Bool=false, hidden::Bool=false, color::Union{Int,Symbol}=:normal) = with_output_color(print, color, io, msg...; bold=bold, italic=italic, underline=underline, blink=blink, reverse=reverse, hidden=hidden) From d6eaa7c095b576433fb482bfbf23934b1683583f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Riedemann?= <38795484+longemen3000@users.noreply.github.com> Date: Mon, 10 Jul 2023 10:21:37 -0400 Subject: [PATCH 013/413] correction in `Base.isassigned` with `Tridiagonal` boundscheck error (#50488) See https://github.com/JuliaLang/julia/pull/49827#discussion_r1252566082 (cherry picked from commit e2e34f6987d93ed5b80259c2af5a33c888180043) --- stdlib/LinearAlgebra/src/tridiag.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/LinearAlgebra/src/tridiag.jl b/stdlib/LinearAlgebra/src/tridiag.jl index 13f6a1bb70756..174b368a8615a 100644 --- a/stdlib/LinearAlgebra/src/tridiag.jl +++ b/stdlib/LinearAlgebra/src/tridiag.jl @@ -620,7 +620,7 @@ function diag(M::Tridiagonal{T}, n::Integer=0) where T end @inline function Base.isassigned(A::Tridiagonal, i::Int, j::Int) - @boundscheck checkbounds(A, i, j) + @boundscheck checkbounds(Bool, A, i, j) || return false if i == j return @inbounds isassigned(A.d, i) elseif i == j + 1 From 2753ef9942d119987f6a2f7e9b80795073644d51 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Mon, 17 Jul 2023 12:46:58 +0900 Subject: [PATCH 014/413] remove `:boundscheck` argument from `Core._svec_ref` (#50561) `Core._svec_ref` has accepted `boundscheck`-value as the first argument since it was added in #45062. Nonetheless, `Core._svec_ref` simply calls `jl_svec_ref` in either the interpreter or the codegen, and thus the `boundscheck` value isn't utilized in any optimizations. Rather, even worse, this `boundscheck`-argument negatively influences the effect analysis (xref #50167 for details) and has caused type inference regressions as reported in #50544. For these reasons, this commit simply eliminates the `boundscheck` argument from `Core._svec_ref`. Consequently, `getindex(::SimpleVector, ::Int)` is now being concrete-eval eligible. closes #50544 --- base/compiler/ssair/inlining.jl | 2 +- base/compiler/ssair/passes.jl | 6 +++--- base/essentials.jl | 2 +- src/builtins.c | 8 +++----- test/compiler/inference.jl | 16 ++++++++++++++++ test/core.jl | 4 ++++ 6 files changed, 28 insertions(+), 10 deletions(-) diff --git a/base/compiler/ssair/inlining.jl b/base/compiler/ssair/inlining.jl index 170725f231761..505a517e1bf98 100644 --- a/base/compiler/ssair/inlining.jl +++ b/base/compiler/ssair/inlining.jl @@ -1817,7 +1817,7 @@ end function insert_spval!(insert_node!::Inserter, spvals_ssa::SSAValue, spidx::Int, do_isdefined::Bool) ret = insert_node!( - effect_free_and_nothrow(NewInstruction(Expr(:call, Core._svec_ref, false, spvals_ssa, spidx), Any))) + effect_free_and_nothrow(NewInstruction(Expr(:call, Core._svec_ref, spvals_ssa, spidx), Any))) tcheck_not = nothing if do_isdefined tcheck = insert_node!( diff --git a/base/compiler/ssair/passes.jl b/base/compiler/ssair/passes.jl index 9a312bec8f202..3df55e38b3512 100644 --- a/base/compiler/ssair/passes.jl +++ b/base/compiler/ssair/passes.jl @@ -810,10 +810,10 @@ function perform_lifting!(compact::IncrementalCompact, end function lift_svec_ref!(compact::IncrementalCompact, idx::Int, stmt::Expr) - length(stmt.args) != 4 && return + length(stmt.args) != 3 && return - vec = stmt.args[3] - val = stmt.args[4] + vec = stmt.args[2] + val = stmt.args[3] valT = argextype(val, compact) (isa(valT, Const) && isa(valT.val, Int)) || return valI = valT.val::Int diff --git a/base/essentials.jl b/base/essentials.jl index 97f32483a6b14..c0d871608b1a9 100644 --- a/base/essentials.jl +++ b/base/essentials.jl @@ -741,7 +741,7 @@ end # SimpleVector -@eval getindex(v::SimpleVector, i::Int) = (@_foldable_meta; Core._svec_ref($(Expr(:boundscheck)), v, i)) +getindex(v::SimpleVector, i::Int) = (@_foldable_meta; Core._svec_ref(v, i)) function length(v::SimpleVector) @_total_meta t = @_gc_preserve_begin v diff --git a/src/builtins.c b/src/builtins.c index b664b8d73710f..4f75fd79eadcc 100644 --- a/src/builtins.c +++ b/src/builtins.c @@ -1655,11 +1655,9 @@ JL_CALLABLE(jl_f__compute_sparams) JL_CALLABLE(jl_f__svec_ref) { - JL_NARGS(_svec_ref, 3, 3); - jl_value_t *b = args[0]; - jl_svec_t *s = (jl_svec_t*)args[1]; - jl_value_t *i = (jl_value_t*)args[2]; - JL_TYPECHK(_svec_ref, bool, b); + JL_NARGS(_svec_ref, 2, 2); + jl_svec_t *s = (jl_svec_t*)args[0]; + jl_value_t *i = (jl_value_t*)args[1]; JL_TYPECHK(_svec_ref, simplevector, (jl_value_t*)s); JL_TYPECHK(_svec_ref, long, i); size_t len = jl_svec_len(s); diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index ded9438037733..cb16cb604881b 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -5014,3 +5014,19 @@ let 𝕃 = Core.Compiler.SimpleInferenceLattice.instance map(T -> Issue49785{S,T}, (a = S,)) end isa Vector end + +# `getindex(::SimpleVector, ::Int)` shuold be concrete-evaluated +@eval Base.return_types() do + $(Core.svec(1,Int,nothing))[2] +end |> only == Type{Int} +# https://github.com/JuliaLang/julia/issues/50544 +struct Issue50544{T<:Tuple} + t::T +end +Base.@propagate_inbounds f_issue50544(x, i, ii...) = f_issue50544(f_issue50544(x, i), ii...) +Base.@propagate_inbounds f_issue50544(::Type{Issue50544{T}}, i) where T = T.parameters[i] +g_issue50544(T...) = Issue50544{Tuple{T...}} +h_issue50544(x::T) where T = g_issue50544(f_issue50544(T, 1), f_issue50544(T, 2, 1)) +let x = Issue50544((1, Issue50544((2.0, 'x')))) + @test only(Base.return_types(h_issue50544, (typeof(x),))) == Type{Issue50544{Tuple{Int,Float64}}} +end diff --git a/test/core.jl b/test/core.jl index f0439afeed23c..13f4640210f51 100644 --- a/test/core.jl +++ b/test/core.jl @@ -8040,3 +8040,7 @@ bar50293(@nospecialize(u)) = (Base.issingletontype(u.a), baz50293(u.a)) let u = Union{Type{Union{}}, Type{Any}}, ab = bar50293(u) @test ab[1] == ab[2] == false end + +# `SimpleVector`-operations should be concrete-eval eligible +@test Core.Compiler.is_foldable(Base.infer_effects(length, (Core.SimpleVector,))) +@test Core.Compiler.is_foldable(Base.infer_effects(getindex, (Core.SimpleVector,Int))) From b9a279cf1316107a5eea19af6335cc9661db7770 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Tue, 11 Jul 2023 08:33:41 -0400 Subject: [PATCH 015/413] Profile: Add specifying dir for `take_heap_snapshot` and handling if current dir is unwritable (#50476) Co-authored-by: Valentin Churavy (cherry picked from commit 0f6bfd6cd8fc6993fefb98a011b2659179f1853a) --- stdlib/Profile/src/Profile.jl | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/stdlib/Profile/src/Profile.jl b/stdlib/Profile/src/Profile.jl index f0323d0334b1a..c37cdd0af0368 100644 --- a/stdlib/Profile/src/Profile.jl +++ b/stdlib/Profile/src/Profile.jl @@ -1215,14 +1215,16 @@ end """ Profile.take_heap_snapshot(io::IOStream, all_one::Bool=false) Profile.take_heap_snapshot(filepath::String, all_one::Bool=false) - Profile.take_heap_snapshot(all_one::Bool=false) + Profile.take_heap_snapshot(all_one::Bool=false; dir::String) Write a snapshot of the heap, in the JSON format expected by the Chrome -Devtools Heap Snapshot viewer (.heapsnapshot extension), to a file -(`\$pid_\$timestamp.heapsnapshot`) in the current directory, or the given -file path, or IO stream. If `all_one` is true, then report the size of -every object as one so they can be easily counted. Otherwise, report the -actual size. +Devtools Heap Snapshot viewer (.heapsnapshot extension) to a file +(`\$pid_\$timestamp.heapsnapshot`) in the current directory by default (or tempdir if +the current directory is unwritable), or in `dir` if given, or the given +full file path, or IO stream. + +If `all_one` is true, then report the size of every object as one so they can be easily +counted. Otherwise, report the actual size. """ function take_heap_snapshot(io::IOStream, all_one::Bool=false) Base.@_lock_ios(io, ccall(:jl_gc_take_heap_snapshot, Cvoid, (Ptr{Cvoid}, Cchar), io.handle, Cchar(all_one))) @@ -1233,9 +1235,22 @@ function take_heap_snapshot(filepath::String, all_one::Bool=false) end return filepath end -function take_heap_snapshot(all_one::Bool=false) - f = joinpath(tempdir(), "$(getpid())_$(time_ns()).heapsnapshot") - return take_heap_snapshot(f, all_one) +function take_heap_snapshot(all_one::Bool=false; dir::Union{Nothing,S}=nothing) where {S <: AbstractString} + fname = "$(getpid())_$(time_ns()).heapsnapshot" + if isnothing(dir) + wd = pwd() + fpath = joinpath(wd, fname) + try + touch(fpath) + rm(fpath; force=true) + catch + @warn "Cannot write to current directory `$(pwd())` so saving heap snapshot to `$(tempdir())`" maxlog=1 _id=Symbol(wd) + fpath = joinpath(tempdir(), fname) + end + else + fpath = joinpath(expanduser(dir), fname) + end + return take_heap_snapshot(fpath, all_one) end From 30b81267c5d87be3d45892ea0e11f7060ef772f2 Mon Sep 17 00:00:00 2001 From: Bagaev Dmitry Date: Wed, 12 Jul 2023 04:36:22 +0200 Subject: [PATCH 016/413] fix typo in the --gcthreads argument description (#50461) (cherry picked from commit e64d2013ca91e8babc01ebbfb5025da04eeea803) --- src/jloptions.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/jloptions.c b/src/jloptions.c index 129ba9df2510e..e81c34d37ef47 100644 --- a/src/jloptions.c +++ b/src/jloptions.c @@ -131,8 +131,8 @@ static const char opts[] = " interface if supported (Linux and Windows) or to the number of CPU\n" " threads if not supported (MacOS) or if process affinity is not\n" " configured, and sets M to 1.\n" - " --gcthreads=M[,N] Use M threads for the mark phase of GC and N (0 or 1) threads for the concurrent sweeping phase of GC.\n" - " M is set to half of the number of compute threads and N is set to 0 if unspecified.\n" + " --gcthreads=N[,M] Use N threads for the mark phase of GC and M (0 or 1) threads for the concurrent sweeping phase of GC.\n" + " N is set to half of the number of compute threads and M is set to 0 if unspecified.\n" " -p, --procs {N|auto} Integer value N launches N additional local worker processes\n" " \"auto\" launches as many workers as the number of local CPU threads (logical cores)\n" " --machine-file Run processes on hosts listed in \n\n" @@ -838,7 +838,7 @@ JL_DLLEXPORT void jl_parse_opts(int *argcp, char ***argvp) char *endptri; long nsweepthreads = strtol(&endptr[1], &endptri, 10); if (errno != 0 || endptri == &endptr[1] || *endptri != 0 || nsweepthreads < 0 || nsweepthreads > 1) - jl_errorf("julia: --gcthreads=,; n must be 0 or 1"); + jl_errorf("julia: --gcthreads=,; m must be 0 or 1"); jl_options.nsweepthreads = (int8_t)nsweepthreads; } break; From 8827eb3e927ec2559458b2a7d00739b12b407c04 Mon Sep 17 00:00:00 2001 From: Cody Tapscott <84105208+topolarity@users.noreply.github.com> Date: Thu, 13 Jul 2023 11:54:09 -0400 Subject: [PATCH 017/413] ssair: Correctly handle stmt insertion at end of basic block (#50528) In the presence of `attach_after` insertions, we have to be careful to extend the basic block to include everything up to the last insertion. We were accounting for "new" nodes (before the compaction point), but not "pending" nodes (after the compaction point). Fixes https://github.com/JuliaLang/julia/issues/50379. (cherry picked from commit cdec4c21bdfffa9b198b8ecdde83aa082ebfc4e9) --- base/compiler/ssair/ir.jl | 22 ++++++++++++++++------ test/compiler/ssair.jl | 27 +++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/base/compiler/ssair/ir.jl b/base/compiler/ssair/ir.jl index 5c6751c1e1dda..d133b88721238 100644 --- a/base/compiler/ssair/ir.jl +++ b/base/compiler/ssair/ir.jl @@ -1508,10 +1508,20 @@ function finish_current_bb!(compact::IncrementalCompact, active_bb::Int, return skipped end -function attach_after_stmt_after(compact::IncrementalCompact, idx::Int) - compact.new_nodes_idx > length(compact.perm) && return false - entry = compact.ir.new_nodes.info[compact.perm[compact.new_nodes_idx]] - return entry.pos == idx && entry.attach_after +""" + stmts_awaiting_insertion(compact::IncrementalCompact, idx::Int) + +Returns true if there are new/pending instructions enqueued for insertion into +`compact` on any instruction in the range `1:idx`. Otherwise, returns false. +""" +function stmts_awaiting_insertion(compact::IncrementalCompact, idx::Int) + + new_node_waiting = compact.new_nodes_idx <= length(compact.perm) && + compact.ir.new_nodes.info[compact.perm[compact.new_nodes_idx]].pos <= idx + pending_node_waiting = !isempty(compact.pending_perm) && + compact.pending_nodes.info[compact.pending_perm[1]].pos <= idx + + return new_node_waiting || pending_node_waiting end function process_newnode!(compact::IncrementalCompact, new_idx::Int, new_node_entry::Instruction, new_node_info::NewNodeInfo, idx::Int, active_bb::Int, do_rename_ssa::Bool) @@ -1523,7 +1533,7 @@ function process_newnode!(compact::IncrementalCompact, new_idx::Int, new_node_en compact.result_idx = result_idx # If this instruction has reverse affinity and we were at the end of a basic block, # finish it now. - if new_node_info.attach_after && idx == last(bb.stmts)+1 && !attach_after_stmt_after(compact, idx-1) + if new_node_info.attach_after && idx == last(bb.stmts)+1 && !stmts_awaiting_insertion(compact, idx-1) active_bb += 1 finish_current_bb!(compact, active_bb, old_result_idx) end @@ -1653,7 +1663,7 @@ function iterate_compact(compact::IncrementalCompact) compact.result[old_result_idx] = compact.ir.stmts[idx] result_idx = process_node!(compact, old_result_idx, compact.ir.stmts[idx], idx, idx, active_bb, true) compact.result_idx = result_idx - if idx == last(bb.stmts) && !attach_after_stmt_after(compact, idx) + if idx == last(bb.stmts) && !stmts_awaiting_insertion(compact, idx) finish_current_bb!(compact, active_bb, old_result_idx) active_bb += 1 end diff --git a/test/compiler/ssair.jl b/test/compiler/ssair.jl index 43f17d4ad69f2..98cab349b46ee 100644 --- a/test/compiler/ssair.jl +++ b/test/compiler/ssair.jl @@ -566,6 +566,33 @@ let ir = Base.code_ircode((Int,Int); optimize_until="inlining") do a, b @test call2.args[2] === SSAValue(2) end +# Issue #50379 - insert_node!(::IncrementalCompact, ...) at end of basic block +let ci = make_ci([ + # block 1 + #= %1: =# Core.Compiler.GotoIfNot(Expr(:boundscheck), 3), + # block 2 + #= %2: =# Expr(:call, println, Argument(1)), + # block 3 + #= %3: =# Core.PhiNode(), + #= %4: =# Core.Compiler.ReturnNode(), + ]) + ir = Core.Compiler.inflate_ir(ci) + + # Insert another call at end of "block 2" + compact = Core.Compiler.IncrementalCompact(ir) + new_inst = NewInstruction(Expr(:call, println, Argument(1)), Nothing) + insert_node!(compact, SSAValue(2), new_inst, #= attach_after =# true) + + # Complete iteration + x = Core.Compiler.iterate(compact) + while x !== nothing + x = Core.Compiler.iterate(compact, x[2]) + end + ir = Core.Compiler.complete(compact) + + @test Core.Compiler.verify_ir(ir) === nothing +end + # insert_node! with new instruction with flag computed let ir = Base.code_ircode((Int,Int); optimize_until="inlining") do a, b a^b From 5e793177bdb3724d80200d63d0c0865b030ffc7b Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Thu, 13 Jul 2023 20:24:32 +0300 Subject: [PATCH 018/413] gc: fix conservative GC support (#50533) Ensure `internal_obj_base_ptr` checks whether objects past freelist pointer are in freelist. Fixes #50434 (cherry picked from commit dcca46b756b45ce23e35fb6d62561bf31555c4f3) --- src/gc.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/gc.c b/src/gc.c index dd3fa308a3867..aa07695ac8bc0 100644 --- a/src/gc.c +++ b/src/gc.c @@ -1242,7 +1242,10 @@ static NOINLINE jl_taggedvalue_t *gc_add_page(jl_gc_pool_t *p) JL_NOTSAFEPOINT // in pool_alloc significantly jl_ptls_t ptls = jl_current_task->ptls; jl_gc_pagemeta_t *pg = pop_page_metadata_back(&ptls->page_metadata_lazily_freed); - if (pg == NULL) { + if (pg != NULL) { + gc_alloc_map_set(pg->data, GC_PAGE_ALLOCATED); + } + else { pg = jl_gc_alloc_page(); } pg->osize = p->osize; @@ -1449,6 +1452,7 @@ static jl_taggedvalue_t **gc_sweep_page(jl_gc_pool_t *p, jl_gc_pagemeta_t **allo push_page_metadata_back(allocd, pg); } else if (freed_lazily) { + gc_alloc_map_set(pg->data, GC_PAGE_LAZILY_FREED); push_page_metadata_back(lazily_freed, pg); } else { @@ -4024,7 +4028,7 @@ JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p) jl_gc_pool_t *pool = gc_all_tls_states[meta->thread_n]->heap.norm_pools + meta->pool_n; - if (meta->fl_begin_offset == (uint16_t) -1) { + if (meta->fl_begin_offset == UINT16_MAX) { // case 2: this is a page on the newpages list jl_taggedvalue_t *newpages = pool->newpages; // Check if the page is being allocated from via newpages @@ -4066,8 +4070,18 @@ JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p) // before the freelist pointer was either live during the last // sweep or has been allocated since. if (gc_page_data(cell) == gc_page_data(pool->freelist) - && (char *)cell < (char *)pool->freelist) + && (char *)cell < (char *)pool->freelist) { goto valid_object; + } + else { + jl_taggedvalue_t *v = pool->freelist; + while (v != NULL) { + if (v == cell) { + return NULL; + } + v = v->next; + } + } // Not a freelist entry, therefore a valid object. valid_object: // We have to treat objects with type `jl_buff_tag` differently, From 704513dcb2914d24c9d378d87abb1e91ed968d2a Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 13 Jul 2023 18:16:13 +0000 Subject: [PATCH 019/413] gc: remove over-eager assertion Fixes #50451 (cherry picked from commit f4f1ecfe11dd0fe5e5fcc6f7220ddade49e5a96c) --- src/gf.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gf.c b/src/gf.c index 294e1fccb8783..036ed680b6446 100644 --- a/src/gf.c +++ b/src/gf.c @@ -1483,7 +1483,7 @@ static int get_intersect_visitor(jl_typemap_entry_t *oldentry, struct typemap_in struct matches_env *closure = container_of(closure0, struct matches_env, match); assert(oldentry != closure->newentry && "entry already added"); assert(oldentry->min_world <= closure->newentry->min_world && "old method cannot be newer than new method"); - assert(oldentry->max_world == ~(size_t)0 && "method cannot be added at the same time as method deleted"); + assert(oldentry->max_world != closure->newentry->min_world && "method cannot be added at the same time as method deleted"); // don't need to consider other similar methods if this oldentry will always fully intersect with them and dominates all of them typemap_slurp_search(oldentry, &closure->match); jl_method_t *oldmethod = oldentry->func.method; From 2544e9f0d0035506d9f3388e78baf0f374fece58 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 13 Jul 2023 21:01:33 +0000 Subject: [PATCH 020/413] gf: remove unnecessary assert cycle==depth We do not care about this condition (the point of this fast path is to skip checking it). Fix #50450 (cherry picked from commit 15bcf1bb2f53d7cd2a7348a555d2f9d1867ce271) --- src/gf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gf.c b/src/gf.c index 036ed680b6446..00bc33b075255 100644 --- a/src/gf.c +++ b/src/gf.c @@ -3426,7 +3426,9 @@ static int sort_mlmatches(jl_array_t *t, size_t idx, arraylist_t *visited, array } } if ((size_t)visited->items[idx] == 1) { - assert(cycle == depth); + // n.b. cycle might be < depth, if we had a cycle with a child + // idx, but since we are on the top of the stack, nobody + // observed that and so we are content to ignore this size_t childidx = (size_t)arraylist_pop(stack); assert(childidx == idx); (void)childidx; assert(!subt || *found_minmax == 2); From d3276e1b3babcda433e081a452cbcf8678d97462 Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Fri, 14 Jul 2023 21:07:02 +0000 Subject: [PATCH 021/413] Expand kwcall lowering positional default check to vararg Fixes the case from #50518, but we actually have two test cases in the tests that also hit this (e.g. this one: ``` f40964(xs::Int...=1; k = 2) = (xs, k) ```), but just happened not to hit the bad codegen path. #50556, once merged would have complained on those definitions as well, without this fix. (cherry picked from commit c27223607daaeee94ae477a1fdeab9b8784c9a8d) --- src/julia-syntax.scm | 2 +- test/keywordargs.jl | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/julia-syntax.scm b/src/julia-syntax.scm index cd11f46b1eb38..eb79dfc52f76c 100644 --- a/src/julia-syntax.scm +++ b/src/julia-syntax.scm @@ -555,7 +555,7 @@ name positional-sparams `((|::| ;; if there are optional positional args, we need to be able to reference the function name - ,(if (any kwarg? pargl) (gensy) UNUSED) + ,(if (any kwarg? `(,@pargl ,@vararg)) (gensy) UNUSED) (call (core kwftype) ,ftype)) ,kwdecl ,@pargl ,@vararg) `(block ;; propagate method metadata to keyword sorter diff --git a/test/keywordargs.jl b/test/keywordargs.jl index 0aed0544b7e2e..43013ab1d721e 100644 --- a/test/keywordargs.jl +++ b/test/keywordargs.jl @@ -394,3 +394,9 @@ let m = first(methods(Core.kwcall, (NamedTuple,typeof(kwf1),Vararg))) @test Core.kwcall(1) == "hi 1" @test which(Core.kwcall, (Int,)).name === :kwcall end + +# issue #50518 +function f50518(xs...=["a", "b", "c"]...; debug=false) + return xs[1] +end +@test f50518() == f50518(;debug=false) == "a" From 6aa1ab3396a8dbdd5fd7deb8936e12202ef1229a Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Sun, 4 Jun 2023 15:10:21 +0200 Subject: [PATCH 022/413] Add unwrapping mechanism for triangular matrices (cherry picked from commit e67ddaa7216ec0a56d6140e5013eb56eeff712f5) --- stdlib/LinearAlgebra/src/adjtrans.jl | 8 +- stdlib/LinearAlgebra/src/bidiag.jl | 4 +- stdlib/LinearAlgebra/src/hessenberg.jl | 4 +- stdlib/LinearAlgebra/src/matmul.jl | 16 +- stdlib/LinearAlgebra/src/triangular.jl | 996 +++++++++++++----------- stdlib/LinearAlgebra/test/triangular.jl | 26 +- 6 files changed, 550 insertions(+), 504 deletions(-) diff --git a/stdlib/LinearAlgebra/src/adjtrans.jl b/stdlib/LinearAlgebra/src/adjtrans.jl index 875e8cefcb66e..0d31e402aec00 100644 --- a/stdlib/LinearAlgebra/src/adjtrans.jl +++ b/stdlib/LinearAlgebra/src/adjtrans.jl @@ -64,10 +64,10 @@ end Adjoint(A) = Adjoint{Base.promote_op(adjoint,eltype(A)),typeof(A)}(A) Transpose(A) = Transpose{Base.promote_op(transpose,eltype(A)),typeof(A)}(A) +# TODO: remove, is already replaced by wrapperop """ adj_or_trans(::AbstractArray) -> adjoint|transpose|identity adj_or_trans(::Type{<:AbstractArray}) -> adjoint|transpose|identity - Return [`adjoint`](@ref) from an `Adjoint` type or object and [`transpose`](@ref) from a `Transpose` type or object. Otherwise, return [`identity`](@ref). Note that `Adjoint` and `Transpose` have @@ -94,9 +94,15 @@ inplace_adj_or_trans(::Type{<:AbstractArray}) = copyto! inplace_adj_or_trans(::Type{<:Adjoint}) = adjoint! inplace_adj_or_trans(::Type{<:Transpose}) = transpose! +# unwraps Adjoint, Transpose, Symmetric, Hermitian _unwrap(A::Adjoint) = parent(A) _unwrap(A::Transpose) = parent(A) +# unwraps Adjoint and Transpose only +_unwrap_at(A) = A +_unwrap_at(A::Adjoint) = parent(A) +_unwrap_at(A::Transpose) = parent(A) + Base.dataids(A::Union{Adjoint, Transpose}) = Base.dataids(A.parent) Base.unaliascopy(A::Union{Adjoint,Transpose}) = typeof(A)(Base.unaliascopy(A.parent)) diff --git a/stdlib/LinearAlgebra/src/bidiag.jl b/stdlib/LinearAlgebra/src/bidiag.jl index 192272cc61e98..e0280a54f2b82 100644 --- a/stdlib/LinearAlgebra/src/bidiag.jl +++ b/stdlib/LinearAlgebra/src/bidiag.jl @@ -755,7 +755,7 @@ function ldiv!(c::AbstractVecOrMat, A::Bidiagonal, b::AbstractVecOrMat) end ldiv!(A::AdjOrTrans{<:Any,<:Bidiagonal}, b::AbstractVecOrMat) = @inline ldiv!(b, A, b) ldiv!(c::AbstractVecOrMat, A::AdjOrTrans{<:Any,<:Bidiagonal}, b::AbstractVecOrMat) = - (t = adj_or_trans(A); _rdiv!(t(c), t(b), t(A)); return c) + (t = wrapperop(A); _rdiv!(t(c), t(b), t(A)); return c) ### Generic promotion methods and fallbacks \(A::Bidiagonal, B::AbstractVecOrMat) = ldiv!(_initarray(\, eltype(A), eltype(B), B), A, B) @@ -833,7 +833,7 @@ end rdiv!(A::AbstractMatrix, B::Bidiagonal) = @inline _rdiv!(A, A, B) rdiv!(A::AbstractMatrix, B::AdjOrTrans{<:Any,<:Bidiagonal}) = @inline _rdiv!(A, A, B) _rdiv!(C::AbstractMatrix, A::AbstractMatrix, B::AdjOrTrans{<:Any,<:Bidiagonal}) = - (t = adj_or_trans(B); ldiv!(t(C), t(B), t(A)); return C) + (t = wrapperop(B); ldiv!(t(C), t(B), t(A)); return C) /(A::AbstractMatrix, B::Bidiagonal) = _rdiv!(_initarray(/, eltype(A), eltype(B), A), A, B) diff --git a/stdlib/LinearAlgebra/src/hessenberg.jl b/stdlib/LinearAlgebra/src/hessenberg.jl index 179f93f2cd6f2..8b45a116c1a48 100644 --- a/stdlib/LinearAlgebra/src/hessenberg.jl +++ b/stdlib/LinearAlgebra/src/hessenberg.jl @@ -132,11 +132,11 @@ for T = (:Number, :UniformScaling, :Diagonal) end function *(H::UpperHessenberg, U::UpperOrUnitUpperTriangular) - HH = _mulmattri!(_initarray(*, eltype(H), eltype(U), H), H, U) + HH = mul!(_initarray(*, eltype(H), eltype(U), H), H, U) UpperHessenberg(HH) end function *(U::UpperOrUnitUpperTriangular, H::UpperHessenberg) - HH = _multrimat!(_initarray(*, eltype(U), eltype(H), H), U, H) + HH = mul!(_initarray(*, eltype(U), eltype(H), H), U, H) UpperHessenberg(HH) end diff --git a/stdlib/LinearAlgebra/src/matmul.jl b/stdlib/LinearAlgebra/src/matmul.jl index e375108f6a831..018ad20e538c8 100644 --- a/stdlib/LinearAlgebra/src/matmul.jl +++ b/stdlib/LinearAlgebra/src/matmul.jl @@ -8,10 +8,6 @@ AdjOrTransStridedMat{T} = Union{Adjoint{<:Any, <:StridedMatrix{T}}, Transpose{<: StridedMaybeAdjOrTransMat{T} = Union{StridedMatrix{T}, Adjoint{<:Any, <:StridedMatrix{T}}, Transpose{<:Any, <:StridedMatrix{T}}} StridedMaybeAdjOrTransVecOrMat{T} = Union{StridedVecOrMat{T}, AdjOrTrans{<:Any, <:StridedVecOrMat{T}}} -_parent(A) = A -_parent(A::Adjoint) = parent(A) -_parent(A::Transpose) = parent(A) - matprod(x, y) = x*y + x*y # dot products @@ -115,14 +111,14 @@ end function (*)(A::StridedMaybeAdjOrTransMat{<:BlasReal}, B::StridedMaybeAdjOrTransMat{<:BlasReal}) TS = promote_type(eltype(A), eltype(B)) mul!(similar(B, TS, (size(A, 1), size(B, 2))), - wrapperop(A)(convert(AbstractArray{TS}, _parent(A))), - wrapperop(B)(convert(AbstractArray{TS}, _parent(B)))) + wrapperop(A)(convert(AbstractArray{TS}, _unwrap(A))), + wrapperop(B)(convert(AbstractArray{TS}, _unwrap(B)))) end function (*)(A::StridedMaybeAdjOrTransMat{<:BlasComplex}, B::StridedMaybeAdjOrTransMat{<:BlasComplex}) TS = promote_type(eltype(A), eltype(B)) mul!(similar(B, TS, (size(A, 1), size(B, 2))), - wrapperop(A)(convert(AbstractArray{TS}, _parent(A))), - wrapperop(B)(convert(AbstractArray{TS}, _parent(B)))) + wrapperop(A)(convert(AbstractArray{TS}, _unwrap(A))), + wrapperop(B)(convert(AbstractArray{TS}, _unwrap(B)))) end # Complex Matrix times real matrix: We use that it is generally faster to reinterpret the @@ -131,13 +127,13 @@ function (*)(A::StridedMatrix{<:BlasComplex}, B::StridedMaybeAdjOrTransMat{<:Bla TS = promote_type(eltype(A), eltype(B)) mul!(similar(B, TS, (size(A, 1), size(B, 2))), convert(AbstractArray{TS}, A), - wrapperop(B)(convert(AbstractArray{real(TS)}, _parent(B)))) + wrapperop(B)(convert(AbstractArray{real(TS)}, _unwrap(B)))) end function (*)(A::AdjOrTransStridedMat{<:BlasComplex}, B::StridedMaybeAdjOrTransMat{<:BlasReal}) TS = promote_type(eltype(A), eltype(B)) mul!(similar(B, TS, (size(A, 1), size(B, 2))), copymutable_oftype(A, TS), # remove AdjOrTrans to use reinterpret trick below - wrapperop(B)(convert(AbstractArray{real(TS)}, _parent(B)))) + wrapperop(B)(convert(AbstractArray{real(TS)}, _unwrap(B)))) end # the following case doesn't seem to benefit from the translation A*B = (B' * A')' function (*)(A::StridedMatrix{<:BlasReal}, B::StridedMatrix{<:BlasComplex}) diff --git a/stdlib/LinearAlgebra/src/triangular.jl b/stdlib/LinearAlgebra/src/triangular.jl index 295a46f1522a5..c943945432bd0 100644 --- a/stdlib/LinearAlgebra/src/triangular.jl +++ b/stdlib/LinearAlgebra/src/triangular.jl @@ -464,9 +464,9 @@ end # Define `mul!` for (Unit){Upper,Lower}Triangular matrices times a number. # be permissive here and require compatibility later in _triscale! -@inline mul!(A::UpperOrLowerTriangular, B::UpperOrLowerTriangular, C::Number, alpha::Number, beta::Number) = +@inline mul!(A::AbstractTriangular, B::AbstractTriangular, C::Number, alpha::Number, beta::Number) = _triscale!(A, B, C, MulAddMul(alpha, beta)) -@inline mul!(A::UpperOrLowerTriangular, B::Number, C::UpperOrLowerTriangular, alpha::Number, beta::Number) = +@inline mul!(A::AbstractTriangular, B::Number, C::AbstractTriangular, alpha::Number, beta::Number) = _triscale!(A, B, C, MulAddMul(alpha, beta)) function _triscale!(A::UpperTriangular, B::UpperTriangular, c::Number, _add) @@ -671,11 +671,60 @@ fillstored!(A::UnitUpperTriangular, x) = (fillband!(A.data, x, 1, size(A,2)-1); # BlasFloat routines # ###################### +# legacy stuff, to be removed +_multrimat!(C, A, B) = _trimul!(C, A, B) +_mulmattri!(C, A, B) = _trimul!(C, A, B) +_uconvert_copyto!(c, b, oA) = (c .= Ref(oA) .\ b) +_uconvert_copyto!(c::AbstractArray{T}, b::AbstractArray{T}, _) where {T} = copyto!(c, b) + +# which triangle to use of the underlying data +uplo_char(::UpperOrUnitUpperTriangular) = 'U' +uplo_char(::LowerOrUnitLowerTriangular) = 'L' +uplo_char(::UpperOrUnitUpperTriangular{<:Any,<:AdjOrTrans}) = 'L' +uplo_char(::LowerOrUnitLowerTriangular{<:Any,<:AdjOrTrans}) = 'U' +uplo_char(::UpperOrUnitUpperTriangular{<:Any,<:Adjoint{<:Any,<:Transpose}}) = 'U' +uplo_char(::LowerOrUnitLowerTriangular{<:Any,<:Adjoint{<:Any,<:Transpose}}) = 'L' +uplo_char(::UpperOrUnitUpperTriangular{<:Any,<:Transpose{<:Any,<:Adjoint}}) = 'U' +uplo_char(::LowerOrUnitLowerTriangular{<:Any,<:Transpose{<:Any,<:Adjoint}}) = 'L' + +isunit_char(::UpperTriangular) = 'N' +isunit_char(::UnitUpperTriangular) = 'U' +isunit_char(::LowerTriangular) = 'N' +isunit_char(::UnitLowerTriangular) = 'U' + lmul!(A::Tridiagonal, B::AbstractTriangular) = A*full!(B) -mul!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVector) = _multrimat!(C, A, B) -mul!(C::AbstractMatrix, A::AbstractTriangular, B::AbstractMatrix) = _multrimat!(C, A, B) -mul!(C::AbstractMatrix, A::AbstractMatrix, B::AbstractTriangular) = _mulmattri!(C, A, B) -mul!(C::AbstractMatrix, A::AbstractTriangular, B::AbstractTriangular) = _multrimat!(C, A, B) +mul!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVector) = _trimul!(C, A, B) +mul!(C::AbstractMatrix, A::AbstractTriangular, B::AbstractMatrix) = _trimul!(C, A, B) +mul!(C::AbstractMatrix, A::AbstractMatrix, B::AbstractTriangular) = _trimul!(C, A, B) +mul!(C::AbstractMatrix, A::AbstractTriangular, B::AbstractTriangular) = _trimul!(C, A, B) + +# generic fallback for AbstractTriangular matrices outside of the four subtypes provided here +_trimul!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVector) = + lmul!(A, copyto!(C, B)) +_trimul!(C::AbstractMatrix, A::AbstractTriangular, B::AbstractMatrix) = + lmul!(A, inplace_adj_or_trans(B)(C, _unwrap_at(B))) +_trimul!(C::AbstractMatrix, A::AbstractMatrix, B::AbstractTriangular) = + rmul!(inplace_adj_or_trans(A)(C, _unwrap_at(A)), B) +_trimul!(C::AbstractMatrix, A::AbstractTriangular, B::AbstractTriangular) = + lmul!(A, copyto!(C, B)) +# redirect for UpperOrLowerTriangular +_trimul!(C::AbstractVecOrMat, A::UpperOrLowerTriangular, B::AbstractVector) = + generic_trimatmul!(C, uplo_char(A), isunit_char(A), wrapperop(parent(A)), _unwrap_at(parent(A)), B) +_trimul!(C::AbstractMatrix, A::UpperOrLowerTriangular, B::AbstractMatrix) = + generic_trimatmul!(C, uplo_char(A), isunit_char(A), wrapperop(parent(A)), _unwrap_at(parent(A)), B) +_trimul!(C::AbstractMatrix, A::AbstractMatrix, B::UpperOrLowerTriangular) = + generic_mattrimul!(C, uplo_char(B), isunit_char(B), wrapperop(parent(B)), A, _unwrap_at(parent(B))) +_trimul!(C::AbstractMatrix, A::UpperOrLowerTriangular, B::UpperOrLowerTriangular) = + generic_trimatmul!(C, uplo_char(A), isunit_char(A), wrapperop(parent(A)), _unwrap_at(parent(A)), B) +# disambiguation with AbstractTriangular +_trimul!(C::AbstractMatrix, A::UpperOrLowerTriangular, B::AbstractTriangular) = + generic_trimatmul!(C, uplo_char(A), isunit_char(A), wrapperop(parent(A)), _unwrap_at(parent(A)), B) +_trimul!(C::AbstractMatrix, A::AbstractTriangular, B::UpperOrLowerTriangular) = + generic_mattrimul!(C, uplo_char(B), isunit_char(B), wrapperop(parent(B)), A, _unwrap_at(parent(B))) + +lmul!(A::AbstractTriangular, B::AbstractVecOrMat) = @inline _trimul!(B, A, B) +rmul!(A::AbstractMatrix, B::AbstractTriangular) = @inline _trimul!(A, A, B) + for TC in (:AbstractVector, :AbstractMatrix) @eval @inline function mul!(C::$TC, A::AbstractTriangular, B::AbstractVector, alpha::Number, beta::Number) @@ -699,13 +748,22 @@ for (TA, TB) in ((:AbstractTriangular, :AbstractMatrix), end end +ldiv!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) = _ldiv!(C, A, B) +# generic fallback for AbstractTriangular, directs to 2-arg [l/r]div! +_ldiv!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) = + ldiv!(A, inplace_adj_or_trans(B)(C, _unwrap_at(B))) +_rdiv!(C::AbstractMatrix, A::AbstractMatrix, B::AbstractTriangular) = + rdiv!(inplace_adj_or_trans(A)(C, _unwrap_at(A)), B) +# redirect for UpperOrLowerTriangular to generic_*div! +_ldiv!(C::AbstractVecOrMat, A::UpperOrLowerTriangular, B::AbstractVecOrMat) = + generic_trimatdiv!(C, uplo_char(A), isunit_char(A), wrapperop(parent(A)), _unwrap_at(parent(A)), B) +_rdiv!(C::AbstractMatrix, A::AbstractMatrix, B::UpperOrLowerTriangular) = + generic_mattridiv!(C, uplo_char(B), isunit_char(B), wrapperop(parent(B)), A, _unwrap_at(parent(B))) -# generic fallback for AbstractTriangular matrices outside of the four subtypes provided here -_multrimat!(C::AbstractVecOrMat, A::AbstractTriangular, B::AbstractVecOrMat) = - lmul!(A, inplace_adj_or_trans(B)(C, _parent(B))) -_mulmattri!(C::AbstractMatrix, A::AbstractMatrix, B::AbstractTriangular) = rmul!(copyto!(C, A), B) +ldiv!(A::AbstractTriangular, B::AbstractVecOrMat) = @inline _ldiv!(B, A, B) +rdiv!(A::AbstractMatrix, B::AbstractTriangular) = @inline _rdiv!(A, A, B) -# preserve triangular structure in in-place multiplication +# preserve triangular structure in in-place multiplication/division for (cty, aty, bty) in ((:UpperTriangular, :UpperTriangular, :UpperTriangular), (:UpperTriangular, :UpperTriangular, :UnitUpperTriangular), (:UpperTriangular, :UnitUpperTriangular, :UpperTriangular), @@ -714,40 +772,41 @@ for (cty, aty, bty) in ((:UpperTriangular, :UpperTriangular, :UpperTriangular), (:LowerTriangular, :LowerTriangular, :UnitLowerTriangular), (:LowerTriangular, :UnitLowerTriangular, :LowerTriangular), (:UnitLowerTriangular, :UnitLowerTriangular, :UnitLowerTriangular)) - @eval function _multrimat!(C::$cty, A::$aty, B::$bty) - _multrimat!(parent(C), A, B) - return C + @eval begin + function _trimul!(C::$cty, A::$aty, B::$bty) + _trimul!(parent(C), A, B) + return C + end + function _ldiv!(C::$cty, A::$aty, B::$bty) + _ldiv!(parent(C), A, B) + return C + end + function _rdiv!(C::$cty, A::$aty, B::$bty) + _rdiv!(parent(C), A, B) + return C + end end end -# direct multiplication/division for (t, uploc, isunitc) in ((:LowerTriangular, 'L', 'N'), (:UnitLowerTriangular, 'L', 'U'), (:UpperTriangular, 'U', 'N'), (:UnitUpperTriangular, 'U', 'U')) @eval begin - # Vector multiplication - lmul!(A::$t{T,<:StridedMatrix}, b::StridedVector{T}) where {T<:BlasFloat} = - BLAS.trmv!($uploc, 'N', $isunitc, A.data, b) - - # Matrix multiplication - lmul!(A::$t{T,<:StridedMatrix}, B::StridedMatrix{T}) where {T<:BlasFloat} = - BLAS.trmm!('L', $uploc, 'N', $isunitc, one(T), A.data, B) - rmul!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasFloat} = - BLAS.trmm!('R', $uploc, 'N', $isunitc, one(T), B.data, A) - - # Left division - ldiv!(A::$t{T,<:StridedMatrix}, B::StridedVecOrMat{T}) where {T<:BlasFloat} = - LAPACK.trtrs!($uploc, 'N', $isunitc, A.data, B) - - # Right division - rdiv!(A::StridedMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasFloat} = - BLAS.trsm!('R', $uploc, 'N', $isunitc, one(T), B.data, A) - # Matrix inverse inv!(A::$t{T,S}) where {T<:BlasFloat,S<:StridedMatrix} = $t{T,S}(LAPACK.trtri!($uploc, $isunitc, A.data)) + function inv(A::$t{T}) where {T} + S = typeof(inv(oneunit(T))) + if S <: BlasFloat || S === T # i.e. A is unitless + $t(ldiv!(convert(AbstractArray{S}, A), Matrix{S}(I, size(A)))) + else + J = (one(T)*I)(size(A, 1)) + $t(ldiv!(similar(A, S, size(A)), A, J)) + end + end + # Error bounds for triangular solve errorbounds(A::$t{T,<:StridedMatrix}, X::StridedVecOrMat{T}, B::StridedVecOrMat{T}) where {T<:BlasFloat} = LAPACK.trrfs!($uploc, 'N', $isunitc, A.data, B, X) @@ -766,93 +825,18 @@ for (t, uploc, isunitc) in ((:LowerTriangular, 'L', 'N'), end end -# adjoint/transpose multiplication ('uploc' reversed) -for (t, uploc, isunitc) in ((:LowerTriangular, 'U', 'N'), - (:UnitLowerTriangular, 'U', 'U'), - (:UpperTriangular, 'L', 'N'), - (:UnitUpperTriangular, 'L', 'U')) - @eval begin - # Vector multiplication - lmul!(A::$t{<:Any,<:Transpose{T,<:StridedMatrix}}, b::StridedVector{T}) where {T<:BlasFloat} = - BLAS.trmv!($uploc, 'T', $isunitc, parent(parent(A)), b) - lmul!(A::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}, b::StridedVector{T}) where {T<:BlasReal} = - BLAS.trmv!($uploc, 'T', $isunitc, parent(parent(A)), b) - lmul!(A::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}, b::StridedVector{T}) where {T<:BlasComplex} = - BLAS.trmv!($uploc, 'C', $isunitc, parent(parent(A)), b) - - # Matrix multiplication - lmul!(A::$t{<:Any,<:Transpose{T,<:StridedMatrix}}, B::StridedMatrix{T}) where {T<:BlasFloat} = - BLAS.trmm!('L', $uploc, 'T', $isunitc, one(T), parent(parent(A)), B) - lmul!(A::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}, B::StridedMatrix{T}) where {T<:BlasComplex} = - BLAS.trmm!('L', $uploc, 'C', $isunitc, one(T), parent(parent(A)), B) - lmul!(A::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}, B::StridedMatrix{T}) where {T<:BlasReal} = - BLAS.trmm!('L', $uploc, 'T', $isunitc, one(T), parent(parent(A)), B) - - rmul!(A::StridedMatrix{T}, B::$t{<:Any,<:Transpose{T,<:StridedMatrix}}) where {T<:BlasFloat} = - BLAS.trmm!('R', $uploc, 'T', $isunitc, one(T), parent(parent(B)), A) - rmul!(A::StridedMatrix{T}, B::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}) where {T<:BlasComplex} = - BLAS.trmm!('R', $uploc, 'C', $isunitc, one(T), parent(parent(B)), A) - rmul!(A::StridedMatrix{T}, B::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}) where {T<:BlasReal} = - BLAS.trmm!('R', $uploc, 'T', $isunitc, one(T), parent(parent(B)), A) - - # Left division - ldiv!(A::$t{<:Any,<:Transpose{T,<:StridedMatrix}}, B::StridedVecOrMat{T}) where {T<:BlasFloat} = - LAPACK.trtrs!($uploc, 'T', $isunitc, parent(parent(A)), B) - ldiv!(A::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}, B::StridedVecOrMat{T}) where {T<:BlasReal} = - LAPACK.trtrs!($uploc, 'T', $isunitc, parent(parent(A)), B) - ldiv!(A::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}, B::StridedVecOrMat{T}) where {T<:BlasComplex} = - LAPACK.trtrs!($uploc, 'C', $isunitc, parent(parent(A)), B) - - # Right division - rdiv!(A::StridedMatrix{T}, B::$t{<:Any,<:Transpose{T,<:StridedMatrix}}) where {T<:BlasFloat} = - BLAS.trsm!('R', $uploc, 'T', $isunitc, one(T), parent(parent(B)), A) - rdiv!(A::StridedMatrix{T}, B::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}) where {T<:BlasReal} = - BLAS.trsm!('R', $uploc, 'T', $isunitc, one(T), parent(parent(B)), A) - rdiv!(A::StridedMatrix{T}, B::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}) where {T<:BlasComplex} = - BLAS.trsm!('R', $uploc, 'C', $isunitc, one(T), parent(parent(B)), A) - end -end - -# redirect back to BLAS -for t in (:UpperTriangular, :UnitUpperTriangular, :LowerTriangular, :UnitLowerTriangular) - @eval _multrimat!(C::StridedVecOrMat{T}, A::$t{T,<:StridedMatrix}, B::AbstractVecOrMat{T}) where {T<:BlasFloat} = - lmul!(A, copyto!(C, B)) - @eval _multrimat!(C::StridedVecOrMat{T}, A::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}, B::AbstractVecOrMat{T}) where {T<:BlasFloat} = - lmul!(A, copyto!(C, B)) - @eval _multrimat!(C::StridedVecOrMat{T}, A::$t{<:Any,<:Transpose{T,<:StridedMatrix}}, B::AbstractVecOrMat{T}) where {T<:BlasFloat} = - lmul!(A, copyto!(C, B)) - @eval _mulmattri!(C::StridedMatrix{T}, A::AbstractMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasFloat} = - rmul!(copyto!(C, A), B) - @eval _mulmattri!(C::StridedMatrix{T}, A::AbstractMatrix{T}, B::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}) where {T<:BlasFloat} = - rmul!(copyto!(C, A), B) - @eval _mulmattri!(C::StridedMatrix{T}, A::AbstractMatrix{T}, B::$t{<:Any,<:Transpose{T,<:StridedMatrix}}) where {T<:BlasFloat} = - rmul!(copyto!(C, A), B) - - @eval ldiv!(C::StridedVecOrMat{T}, A::$t{T,<:StridedMatrix}, B::AbstractVecOrMat{T}) where {T<:BlasFloat} = - ldiv!(A, copyto!(C, B)) - @eval ldiv!(C::StridedVecOrMat{T}, A::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}, B::AbstractVecOrMat{T}) where {T<:BlasFloat} = - ldiv!(A, copyto!(C, B)) - @eval ldiv!(C::StridedVecOrMat{T}, A::$t{<:Any,<:Transpose{T,<:StridedMatrix}}, B::AbstractVecOrMat{T}) where {T<:BlasFloat} = - ldiv!(A, copyto!(C, B)) - @eval _rdiv!(C::StridedMatrix{T}, A::AbstractMatrix{T}, B::$t{T,<:StridedMatrix}) where {T<:BlasFloat} = - rdiv!(copyto!(C, A), B) - @eval _rdiv!(C::StridedMatrix{T}, A::AbstractMatrix{T}, B::$t{<:Any,<:Adjoint{T,<:StridedMatrix}}) where {T<:BlasFloat} = - rdiv!(copyto!(C, A), B) - @eval _rdiv!(C::StridedMatrix{T}, A::AbstractMatrix{T}, B::$t{<:Any,<:Transpose{T,<:StridedMatrix}}) where {T<:BlasFloat} = - rdiv!(copyto!(C, A), B) -end - -for t in (:LowerTriangular, :UnitLowerTriangular, :UpperTriangular, :UnitUpperTriangular) - @eval function inv(A::$t{T}) where {T} - S = typeof(inv(oneunit(T))) - if S <: BlasFloat || S === T # i.e. A is unitless - $t(ldiv!(convert(AbstractArray{S}, A), Matrix{S}(I, size(A)))) - else - J = (one(T)*I)(size(A, 1)) - $t(ldiv!(similar(A, S, size(A)), A, J)) - end - end -end +# multiplication +generic_trimatmul!(c::StridedVector{T}, uploc, isunitc, tfun::Function, A::StridedMatrix{T}, b::AbstractVector{T}) where {T<:BlasFloat} = + BLAS.trmv!(uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', isunitc, A, c === b ? c : copyto!(c, b)) +generic_trimatmul!(C::StridedMatrix{T}, uploc, isunitc, tfun::Function, A::StridedMatrix{T}, B::AbstractMatrix{T}) where {T<:BlasFloat} = + BLAS.trmm!('L', uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', isunitc, one(T), A, C === B ? C : copyto!(C, B)) +generic_mattrimul!(C::StridedMatrix{T}, uploc, isunitc, tfun::Function, A::AbstractMatrix{T}, B::StridedMatrix{T}) where {T<:BlasFloat} = + BLAS.trmm!('R', uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', isunitc, one(T), B, C === A ? C : copyto!(C, A)) +# division +generic_trimatdiv!(C::StridedVecOrMat{T}, uploc, isunitc, tfun::Function, A::StridedMatrix{T}, B::AbstractVecOrMat{T}) where {T<:BlasFloat} = + LAPACK.trtrs!(uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', isunitc, A, C === B ? C : copyto!(C, B)) +generic_mattridiv!(C::StridedMatrix{T}, uploc, isunitc, tfun::Function, A::AbstractMatrix{T}, B::StridedMatrix{T}) where {T<:BlasFloat} = + BLAS.trsm!('R', uploc, tfun === identity ? 'N' : tfun === transpose ? 'T' : 'C', isunitc, one(T), B, C === A ? C : copyto!(C, A)) errorbounds(A::AbstractTriangular{T,<:AbstractMatrix}, X::AbstractVecOrMat{T}, B::AbstractVecOrMat{T}) where {T<:Union{BigFloat,Complex{BigFloat}}} = error("not implemented yet! Please submit a pull request.") @@ -930,17 +914,11 @@ for (t, unitt) in ((UpperTriangular, UnitUpperTriangular), end $t(B) end - - lmul!(A::$t, B::AbstractVecOrMat) = @inline _multrimat!(B, A, B) - lmul!(A::$unitt, B::AbstractVecOrMat) = @inline _multrimat!(B, A, B) - - rmul!(A::AbstractMatrix, B::$t) = @inline _mulmattri!(A, A, B) - rmul!(A::AbstractMatrix, B::$unitt) = @inline _mulmattri!(A, A, B) end end ## Generic triangular multiplication -function _multrimat!(C::AbstractVecOrMat, A::UpperTriangular, B::AbstractVecOrMat) +function generic_trimatmul!(C::AbstractVecOrMat, uploc, isunitc, tfun::Function, A::AbstractMatrix, B::AbstractVecOrMat) require_one_based_indexing(C, A, B) m, n = size(B, 1), size(B, 2) N = size(A, 1) @@ -951,41 +929,58 @@ function _multrimat!(C::AbstractVecOrMat, A::UpperTriangular, B::AbstractVecOrMa if mc != N || nc != n throw(DimensionMismatch("output has dimensions ($mc,$nc), should have ($N,$n)")) end - @inbounds for j in 1:n - for i in 1:m - Cij = A.data[i,i] * B[i,j] - for k in i + 1:m - Cij += A.data[i,k] * B[k,j] + oA = oneunit(eltype(A)) + unit = isunitc == 'U' + @inbounds if uploc == 'U' + if tfun === identity + for j in 1:n + for i in 1:m + Cij = (unit ? oA : A[i,i]) * B[i,j] + for k in i + 1:m + Cij += A[i,k] * B[k,j] + end + C[i,j] = Cij + end + end + else # tfun in (transpose, adjoint) + for j in 1:n + for i in m:-1:1 + Cij = (unit ? oA : tfun(A[i,i])) * B[i,j] + for k in 1:i - 1 + Cij += tfun(A[k,i]) * B[k,j] + end + C[i,j] = Cij + end end - C[i,j] = Cij end - end - return C -end -function _multrimat!(C::AbstractVecOrMat, A::UnitUpperTriangular, B::AbstractVecOrMat) - require_one_based_indexing(C, A, B) - m, n = size(B, 1), size(B, 2) - N = size(A, 1) - if m != N - throw(DimensionMismatch("right hand side B needs first dimension of size $(size(A,1)), has size $m")) - end - - mc, nc = size(C, 1), size(C, 2) - if mc != N || nc != n - throw(DimensionMismatch("output has dimensions ($mc,$nc), should have ($N,$n)")) - end - @inbounds for j in 1:n - for i in 1:m - Cij = oneunit(eltype(A)) * B[i,j] - for k in i + 1:m - Cij += A.data[i,k] * B[k,j] + else # uploc == 'L' + if tfun === identity + for j in 1:n + for i in m:-1:1 + Cij = (unit ? oA : A[i,i]) * B[i,j] + for k in 1:i - 1 + Cij += A[i,k] * B[k,j] + end + C[i,j] = Cij + end + end + else # tfun in (transpose, adjoint) + for j in 1:n + for i in 1:m + Cij = (unit ? oA : tfun(A[i,i])) * B[i,j] + for k in i + 1:m + Cij += tfun(A[k,i]) * B[k,j] + end + C[i,j] = Cij + end end - C[i,j] = Cij end end return C end -function _multrimat!(C::AbstractVecOrMat, A::LowerTriangular, B::AbstractVecOrMat) +# conjugate cases +function generic_trimatmul!(C::AbstractVecOrMat, uploc, isunitc, ::Function, xA::AdjOrTrans, B::AbstractVecOrMat) + A = parent(xA) require_one_based_indexing(C, A, B) m, n = size(B, 1), size(B, 2) N = size(A, 1) @@ -996,41 +991,33 @@ function _multrimat!(C::AbstractVecOrMat, A::LowerTriangular, B::AbstractVecOrMa if mc != N || nc != n throw(DimensionMismatch("output has dimensions ($mc,$nc), should have ($N,$n)")) end - @inbounds for j in 1:n - for i in m:-1:1 - Cij = A.data[i,i] * B[i,j] - for k in 1:i - 1 - Cij += A.data[i,k] * B[k,j] + oA = oneunit(eltype(A)) + unit = isunitc == 'U' + @inbounds if uploc == 'U' + for j in 1:n + for i in 1:m + Cij = (unit ? oA : conj(A[i,i])) * B[i,j] + for k in i + 1:m + Cij += conj(A[i,k]) * B[k,j] + end + C[i,j] = Cij end - C[i,j] = Cij end - end - return C -end -function _multrimat!(C::AbstractVecOrMat, A::UnitLowerTriangular, B::AbstractVecOrMat) - require_one_based_indexing(C, A, B) - m, n = size(B, 1), size(B, 2) - N = size(A, 1) - if m != N - throw(DimensionMismatch("right hand side B needs first dimension of size $(size(A,1)), has size $m")) - end - mc, nc = size(C, 1), size(C, 2) - if mc != N || nc != n - throw(DimensionMismatch("output has dimensions ($mc,$nc), should have ($N,$n)")) - end - @inbounds for j in 1:n - for i in m:-1:1 - Cij = oneunit(eltype(A)) * B[i,j] - for k in 1:i - 1 - Cij += A.data[i,k] * B[k,j] + else # uploc == 'L' + for j in 1:n + for i in m:-1:1 + Cij = (unit ? oA : conj(A[i,i])) * B[i,j] + for k in 1:i - 1 + Cij += conj(A[i,k]) * B[k,j] + end + C[i,j] = Cij end - C[i,j] = Cij end end return C end -function _mulmattri!(C::AbstractMatrix, A::AbstractMatrix, B::UpperTriangular) +function generic_mattrimul!(C::AbstractMatrix, uploc, isunitc, tfun::Function, A::AbstractMatrix, B::AbstractMatrix) require_one_based_indexing(C, A, B) m, n = size(A, 1), size(A, 2) N = size(B, 1) @@ -1041,40 +1028,58 @@ function _mulmattri!(C::AbstractMatrix, A::AbstractMatrix, B::UpperTriangular) if mc != m || nc != N throw(DimensionMismatch("output has dimensions ($mc,$nc), should have ($m,$N)")) end - @inbounds for i in 1:m - for j in n:-1:1 - Cij = A[i,j] * B.data[j,j] - for k in 1:j - 1 - Cij += A[i,k] * B.data[k,j] + oB = oneunit(eltype(B)) + unit = isunitc == 'U' + @inbounds if uploc == 'U' + if tfun === identity + for i in 1:m + for j in n:-1:1 + Cij = A[i,j] * (unit ? oB : B[j,j]) + for k in 1:j - 1 + Cij += A[i,k] * B[k,j] + end + C[i,j] = Cij + end + end + else # tfun in (transpose, adjoint) + for i in 1:m + for j in 1:n + Cij = A[i,j] * (unit ? oB : tfun(B[j,j])) + for k in j + 1:n + Cij += A[i,k] * tfun(B[j,k]) + end + C[i,j] = Cij + end end - C[i,j] = Cij end - end - return C -end -function _mulmattri!(C::AbstractMatrix, A::AbstractMatrix, B::UnitUpperTriangular) - require_one_based_indexing(C, A, B) - m, n = size(A, 1), size(A, 2) - N = size(B, 1) - if n != N - throw(DimensionMismatch("right hand side B needs first dimension of size $n, has size $N")) - end - mc, nc = size(C, 1), size(C, 2) - if mc != m || nc != N - throw(DimensionMismatch("output has dimensions ($mc,$nc), should have ($m,$N)")) - end - @inbounds for i in 1:m - for j in n:-1:1 - Cij = A[i,j] * oneunit(eltype(B)) - for k in 1:j - 1 - Cij += A[i,k] * B.data[k,j] + else # uploc == 'L' + if tfun === identity + for i in 1:m + for j in 1:n + Cij = A[i,j] * (unit ? oB : B[j,j]) + for k in j + 1:n + Cij += A[i,k] * B[k,j] + end + C[i,j] = Cij + end + end + else # tfun in (transpose, adjoint) + for i in 1:m + for j in n:-1:1 + Cij = A[i,j] * (unit ? oB : tfun(B[j,j])) + for k in 1:j - 1 + Cij += A[i,k] * tfun(B[j,k]) + end + C[i,j] = Cij + end end - C[i,j] = Cij end end return C end -function _mulmattri!(C::AbstractMatrix, A::AbstractMatrix, B::LowerTriangular) +# conjugate cases +function generic_mattrimul!(C::AbstractMatrix, uploc, isunitc, ::Function, A::AbstractMatrix, xB::AdjOrTrans) + B = parent(xB) require_one_based_indexing(C, A, B) m, n = size(A, 1), size(A, 2) N = size(B, 1) @@ -1085,199 +1090,263 @@ function _mulmattri!(C::AbstractMatrix, A::AbstractMatrix, B::LowerTriangular) if mc != m || nc != N throw(DimensionMismatch("output has dimensions ($mc,$nc), should have ($m,$N)")) end - @inbounds for i in 1:m - for j in 1:n - Cij = A[i,j] * B.data[j,j] - for k in j + 1:n - Cij += A[i,k] * B.data[k,j] + oB = oneunit(eltype(B)) + unit = isunitc == 'U' + @inbounds if uploc == 'U' + for i in 1:m + for j in n:-1:1 + Cij = A[i,j] * (unit ? oB : conj(B[j,j])) + for k in 1:j - 1 + Cij += A[i,k] * conj(B[k,j]) + end + C[i,j] = Cij end - C[i,j] = Cij end - end - return C -end -function _mulmattri!(C::AbstractMatrix, A::AbstractMatrix, B::UnitLowerTriangular) - require_one_based_indexing(C, A, B) - m, n = size(A, 1), size(A, 2) - N = size(B, 1) - if n != N - throw(DimensionMismatch("right hand side B needs first dimension of size $n, has size $N")) - end - mc, nc = size(C, 1), size(C, 2) - if mc != m || nc != N - throw(DimensionMismatch("output has dimensions ($mc,$nc), should have ($m,$N)")) - end - @inbounds for i in 1:m - for j in 1:n - Cij = A[i,j] * oneunit(eltype(B)) - for k in j + 1:n - Cij += A[i,k] * B.data[k,j] + else # uploc == 'L' + for i in 1:m + for j in 1:n + Cij = A[i,j] * (unit ? oB : conj(B[j,j])) + for k in j + 1:n + Cij += A[i,k] * conj(B[k,j]) + end + C[i,j] = Cij end - C[i,j] = Cij end end return C end #Generic solver using naive substitution + +@inline _ustrip(a) = oneunit(a) \ a +@inline _ustrip(a::Union{AbstractFloat,Integer,Complex,Rational}) = a + # manually hoisting b[j] significantly improves performance as of Dec 2015 # manually eliding bounds checking significantly improves performance as of Dec 2015 -# directly indexing A.data rather than A significantly improves performance as of Dec 2015 -# replacing repeated references to A.data with [Adata = A.data and references to Adata] -# does not significantly impact performance as of Dec 2015 # replacing repeated references to A.data[j,j] with [Ajj = A.data[j,j] and references to Ajj] # does not significantly impact performance as of Dec 2015 -ldiv!(A::AbstractTriangular, b::AbstractVecOrMat) = @inline ldiv!(b, A, b) -function ldiv!(C::AbstractMatrix, A::AbstractTriangular, B::AbstractMatrix) +# in the transpose and conjugate transpose naive substitution variants, +# accumulating in z rather than b[j,k] significantly improves performance as of Dec 2015 +function generic_trimatdiv!(C::AbstractVecOrMat, uploc, isunitc, tfun::Function, A::AbstractMatrix, B::AbstractVecOrMat) require_one_based_indexing(C, A, B) - nA, mA = size(A) - n = size(B, 1) - if nA != n - throw(DimensionMismatch("second dimension of left hand side A, $mA, and first dimension of right hand side B, $n, must be equal")) + mA, nA = size(A) + m, n = size(B, 1), size(B,2) + if nA != m + throw(DimensionMismatch("second dimension of left hand side A, $nA, and first dimension of right hand side B, $m, must be equal")) end if size(C) != size(B) throw(DimensionMismatch("size of output, $(size(C)), does not match size of right hand side, $(size(B))")) end - @inbounds for (c, b) in zip(eachcol(C), eachcol(B)) - ldiv!(c, A, b) - end - C -end -@inline function ldiv!(c::AbstractVector, A::AbstractTriangular, b::AbstractVector) - @boundscheck begin - require_one_based_indexing(c, A, b) - n = size(A, 2) - if !(n == length(b)) - throw(DimensionMismatch("second dimension of left hand side A, $n, and length of right hand side b, $(length(b)), must be equal")) - end - if !(n == length(c)) - throw(DimensionMismatch("length of output c, $(length(c)), does not match length of right hand side b, $(length(b))")) - end - end - return _ldiv!(c, A, b) -end - -_uconvert_copyto!(c, b, oA) = (c .= Ref(oA) .\ b) -_uconvert_copyto!(c::AbstractArray{T}, b::AbstractArray{T}, _) where {T} = copyto!(c, b) - -@inline _ustrip(a) = oneunit(a) \ a -@inline _ustrip(a::Union{AbstractFloat,Integer,Complex,Rational}) = a - -# all of the following _ldiv! methods are "unsafe" in that they assume one-based indexing -# and compatible sizes -function _ldiv!(c::AbstractVector, A::UpperTriangular, b::AbstractVector) - n = size(A, 2) - c !== b && _uconvert_copyto!(c, b, oneunit(eltype(A))) - @inbounds for j in n:-1:1 - ajj = A.data[j,j] - iszero(ajj) && throw(SingularException(j)) - cj = c[j] = _ustrip(ajj) \ c[j] - for i in j-1:-1:1 - c[i] -= _ustrip(A.data[i,j]) * cj + oA = oneunit(eltype(A)) + @inbounds if uploc == 'U' + if isunitc == 'N' + if tfun === identity + for k in 1:n + amm = A[m,m] + iszero(amm) && throw(SingularException(m)) + Cm = C[m,k] = amm \ B[m,k] + # fill C-column + for i in m-1:-1:1 + C[i,k] = oA \ B[i,k] - _ustrip(A[i,m]) * Cm + end + for j in m-1:-1:1 + ajj = A[j,j] + iszero(ajj) && throw(SingularException(j)) + Cj = C[j,k] = _ustrip(ajj) \ C[j,k] + for i in j-1:-1:1 + C[i,k] -= _ustrip(A[i,j]) * Cj + end + end + end + else # tfun in (adjoint, transpose) + for k in 1:n + for j in 1:m + ajj = A[j,j] + iszero(ajj) && throw(SingularException(j)) + Bj = B[j,k] + for i in 1:j-1 + Bj -= tfun(A[i,j]) * C[i,k] + end + C[j,k] = tfun(ajj) \ Bj + end + end + end + else # isunitc == 'U' + if tfun === identity + for k in 1:n + Cm = C[m,k] = oA \ B[m,k] + # fill C-column + for i in m-1:-1:1 + C[i,k] = oA \ B[i,k] - _ustrip(A[i,m]) * Cm + end + for j in m-1:-1:1 + Cj = C[j,k] + for i in 1:j-1 + C[i,k] -= _ustrip(A[i,j]) * Cj + end + end + end + else # tfun in (adjoint, transpose) + for k in 1:n + for j in 1:m + Bj = B[j,k] + for i in 1:j-1 + Bj -= tfun(A[i,j]) * C[i,k] + end + C[j,k] = oA \ Bj + end + end + end end - end - return c -end -function _ldiv!(c::AbstractVector, A::UnitUpperTriangular, b::AbstractVector) - n = size(A, 2) - c !== b && _uconvert_copyto!(c, b, oneunit(eltype(A))) - @inbounds for j in n:-1:1 - cj = c[j] - for i in 1:j-1 - c[i] -= _ustrip(A.data[i,j]) * cj + else # uploc == 'L' + if isunitc == 'N' + if tfun === identity + for k in 1:n + a11 = A[1,1] + iszero(a11) && throw(SingularException(1)) + C1 = C[1,k] = a11 \ B[1,k] + # fill C-column + for i in 2:m + C[i,k] = oA \ B[i,k] - _ustrip(A[i,1]) * C1 + end + for j in 2:m + ajj = A[j,j] + iszero(ajj) && throw(SingularException(j)) + Cj = C[j,k] = _ustrip(ajj) \ C[j,k] + for i in j+1:m + C[i,k] -= _ustrip(A[i,j]) * Cj + end + end + end + else # tfun in (adjoint, transpose) + for k in 1:n + for j in m:-1:1 + ajj = A[j,j] + iszero(ajj) && throw(SingularException(j)) + Bj = B[j,k] + for i in j+1:m + Bj -= tfun(A[i,j]) * C[i,k] + end + C[j,k] = tfun(ajj) \ Bj + end + end + end + else # isunitc == 'U' + if tfun === identity + for k in 1:n + C1 = C[1,k] = oA \ B[1,k] + # fill C-column + for i in 2:m + C[i,k] = oA \ B[i,k] - _ustrip(A[i,1]) * C1 + end + for j in 2:m + Cj = C[j,k] + for i in j+1:m + C[i,k] -= _ustrip(A[i,j]) * Cj + end + end + end + else # tfun in (adjoint, transpose) + for k in 1:n + for j in m:-1:1 + Bj = B[j,k] + for i in j+1:m + Bj -= tfun(A[i,j]) * C[i,k] + end + C[j,k] = oA \ Bj + end + end + end end end - return c + return C end -function _ldiv!(c::AbstractVector, A::LowerTriangular, b::AbstractVector) - n = size(A, 2) - c !== b && _uconvert_copyto!(c, b, oneunit(eltype(A))) - @inbounds for j in 1:n - ajj = A.data[j,j] - iszero(ajj) && throw(SingularException(j)) - cj = c[j] = _ustrip(ajj) \ c[j] - for i in j+1:n - c[i] -= _ustrip(A.data[i,j]) * cj - end +# conjugate cases +function generic_trimatdiv!(C::AbstractVecOrMat, uploc, isunitc, ::Function, xA::AdjOrTrans, B::AbstractVecOrMat) + A = parent(xA) + require_one_based_indexing(C, A, B) + mA, nA = size(A) + m, n = size(B, 1), size(B,2) + if nA != m + throw(DimensionMismatch("second dimension of left hand side A, $nA, and first dimension of right hand side B, $m, must be equal")) end - return c -end -function _ldiv!(c::AbstractVector, A::UnitLowerTriangular, b::AbstractVector) - n = size(A, 2) - c !== b && _uconvert_copyto!(c, b, oneunit(eltype(A))) - @inbounds for j in 1:n - cj = c[j] - for i in j+1:n - c[i] -= _ustrip(A.data[i,j]) * cj - end + if size(C) != size(B) + throw(DimensionMismatch("size of output, $(size(C)), does not match size of right hand side, $(size(B))")) end - return c -end - - -# in the following transpose and conjugate transpose naive substitution variants, -# accumulating in z rather than b[j,k] significantly improves performance as of Dec 2015 -function _ldiv!(c::AbstractVector, xA::UpperTriangular{<:Any,<:AdjOrTrans}, b::AbstractVector) - tfun = adj_or_trans(parent(xA)) - A = parent(parent(xA)) - n = size(A, 2) - @inbounds for j in n:-1:1 - ajj = A[j,j] - iszero(ajj) && throw(SingularException(j)) - bj = b[j] - for i in j+1:n - bj -= tfun(A[i,j]) * c[i] - end - c[j] = tfun(ajj) \ bj - end - return c -end -function _ldiv!(c::AbstractVector, xA::UnitUpperTriangular{<:Any,<:AdjOrTrans}, b::AbstractVector) - tfun = adj_or_trans(parent(xA)) - A = parent(parent(xA)) oA = oneunit(eltype(A)) - n = size(A, 2) - @inbounds for j in n:-1:1 - bj = b[j] - for i in j+1:n - bj -= tfun(A[i,j]) * c[i] - end - c[j] = oA \ bj - end - return c -end -function _ldiv!(c::AbstractVector, xA::LowerTriangular{<:Any,<:AdjOrTrans}, b::AbstractVector) - tfun = adj_or_trans(parent(xA)) - A = parent(parent(xA)) - n = size(A, 2) - @inbounds for j in 1:n - ajj = A[j,j] - iszero(ajj) && throw(SingularException(j)) - bj = b[j] - for i in 1:j-1 - bj -= tfun(A[i,j]) * c[i] - end - c[j] = tfun(ajj) \ bj - end - return c -end -function _ldiv!(c::AbstractVector, xA::UnitLowerTriangular{<:Any,<:AdjOrTrans}, b::AbstractVector) - tfun = adj_or_trans(parent(xA)) - A = parent(parent(xA)) - oA = oneunit(eltype(A)) - n = size(A, 2) - @inbounds for j in 1:n - bj = b[j] - for i in 1:j-1 - bj -= tfun(A[i,j]) * c[i] + @inbounds if uploc == 'U' + if isunitc == 'N' + for k in 1:n + amm = conj(A[m,m]) + iszero(amm) && throw(SingularException(m)) + Cm = C[m,k] = amm \ B[m,k] + # fill C-column + for i in m-1:-1:1 + C[i,k] = oA \ B[i,k] - _ustrip(conj(A[i,m])) * Cm + end + for j in m-1:-1:1 + ajj = conj(A[j,j]) + iszero(ajj) && throw(SingularException(j)) + Cj = C[j,k] = _ustrip(ajj) \ C[j,k] + for i in j-1:-1:1 + C[i,k] -= _ustrip(conj(A[i,j])) * Cj + end + end + end + else # isunitc == 'U' + for k in 1:n + Cm = C[m,k] = oA \ B[m,k] + # fill C-column + for i in m-1:-1:1 + C[i,k] = oA \ B[i,k] - _ustrip(conj(A[i,m])) * Cm + end + for j in m-1:-1:1 + Cj = C[j,k] + for i in 1:j-1 + C[i,k] -= _ustrip(conj(A[i,j])) * Cj + end + end + end + end + else # uploc == 'L' + if isunitc == 'N' + for k in 1:n + a11 = conj(A[1,1]) + iszero(a11) && throw(SingularException(1)) + C1 = C[1,k] = a11 \ B[1,k] + # fill C-column + for i in 2:m + C[i,k] = oA \ B[i,k] - _ustrip(conj(A[i,1])) * C1 + end + for j in 2:m + ajj = conj(A[j,j]) + iszero(ajj) && throw(SingularException(j)) + Cj = C[j,k] = _ustrip(ajj) \ C[j,k] + for i in j+1:m + C[i,k] -= _ustrip(conj(A[i,j])) * Cj + end + end + end + else # isunitc == 'U' + for k in 1:n + C1 = C[1,k] = oA \ B[1,k] + # fill C-column + for i in 2:m + C[i,k] = oA \ B[i,k] - _ustrip(conj(A[i,1])) * C1 + end + for j in 1:m + Cj = C[j,k] + for i in j+1:m + C[i,k] -= _ustrip(conj(A[i,j])) * Cj + end + end + end end - c[j] = oA \ bj end - return c + return C end -rdiv!(A::AbstractMatrix, B::AbstractTriangular) = @inline _rdiv!(A, A, B) -function _rdiv!(C::AbstractMatrix, A::AbstractMatrix, B::UpperTriangular) +function generic_mattridiv!(C::AbstractMatrix, uploc, isunitc, tfun::Function, A::AbstractMatrix, B::AbstractMatrix) require_one_based_indexing(C, A, B) m, n = size(A) if size(B, 1) != n @@ -1286,39 +1355,61 @@ function _rdiv!(C::AbstractMatrix, A::AbstractMatrix, B::UpperTriangular) if size(C) != size(A) throw(DimensionMismatch("size of output, $(size(C)), does not match size of left hand side, $(size(A))")) end - @inbounds for i in 1:m - for j in 1:n - Aij = A[i,j] - for k in 1:j - 1 - Aij -= C[i,k]*B.data[k,j] + oB = oneunit(eltype(B)) + unit = isunitc == 'U' + @inbounds if uploc == 'U' + if tfun === identity + for i in 1:m + for j in 1:n + Aij = A[i,j] + for k in 1:j - 1 + Aij -= C[i,k]*B[k,j] + end + unit || (iszero(B[j,j]) && throw(SingularException(j))) + C[i,j] = Aij / (unit ? oB : B[j,j]) + end + end + else # tfun in (adjoint, transpose) + for i in 1:m + for j in n:-1:1 + Aij = A[i,j] + for k in j + 1:n + Aij -= C[i,k]*tfun(B[j,k]) + end + unit || (iszero(B[j,j]) && throw(SingularException(j))) + C[i,j] = Aij / (unit ? oB : tfun(B[j,j])) + end end - iszero(B.data[j,j]) && throw(SingularException(j)) - C[i,j] = Aij / B.data[j,j] end - end - C -end -function _rdiv!(C::AbstractMatrix, A::AbstractMatrix, B::UnitUpperTriangular) - require_one_based_indexing(C, A, B) - m, n = size(A) - if size(B, 1) != n - throw(DimensionMismatch("right hand side B needs first dimension of size $n, has size $(size(B,1))")) - end - if size(C) != size(A) - throw(DimensionMismatch("size of output, $(size(C)), does not match size of left hand side, $(size(A))")) - end - @inbounds for i in 1:m - for j in 1:n - Aij = A[i,j] - for k in 1:j - 1 - Aij -= C[i,k]*B.data[k,j] + else # uploc == 'L' + if tfun === identity + for i in 1:m + for j in n:-1:1 + Aij = A[i,j] + for k in j + 1:n + Aij -= C[i,k]*B[k,j] + end + unit || (iszero(B[j,j]) && throw(SingularException(j))) + C[i,j] = Aij / (unit ? oB : B[j,j]) + end + end + else # tfun in (adjoint, transpose) + for i in 1:m + for j in 1:n + Aij = A[i,j] + for k in 1:j - 1 + Aij -= C[i,k]*tfun(B[j,k]) + end + unit || (iszero(B[j,j]) && throw(SingularException(j))) + C[i,j] = Aij / (unit ? oB : tfun(B[j,j])) + end end - C[i,j] = Aij / oneunit(eltype(B)) end end - C + return C end -function _rdiv!(C::AbstractMatrix, A::AbstractMatrix, B::LowerTriangular) +function generic_mattridiv!(C::AbstractMatrix, uploc, isunitc, ::Function, A::AbstractMatrix, xB::AdjOrTrans) + B = parent(xB) require_one_based_indexing(C, A, B) m, n = size(A) if size(B, 1) != n @@ -1327,54 +1418,35 @@ function _rdiv!(C::AbstractMatrix, A::AbstractMatrix, B::LowerTriangular) if size(C) != size(A) throw(DimensionMismatch("size of output, $(size(C)), does not match size of left hand side, $(size(A))")) end - @inbounds for i in 1:m - for j in n:-1:1 - Aij = A[i,j] - for k in j + 1:n - Aij -= C[i,k]*B.data[k,j] + oB = oneunit(eltype(B)) + unit = isunitc == 'U' + if uploc == 'U' + @inbounds for i in 1:m + for j in 1:n + Aij = A[i,j] + for k in 1:j - 1 + Aij -= C[i,k]*conj(B[k,j]) + end + unit || (iszero(B[j,j]) && throw(SingularException(j))) + C[i,j] = Aij / (unit ? oB : conj(B[j,j])) end - iszero(B.data[j,j]) && throw(SingularException(j)) - C[i,j] = Aij / B.data[j,j] end - end - C -end -function _rdiv!(C::AbstractMatrix, A::AbstractMatrix, B::UnitLowerTriangular) - require_one_based_indexing(C, A, B) - m, n = size(A) - if size(B, 1) != n - throw(DimensionMismatch("right hand side B needs first dimension of size $n, has size $(size(B,1))")) - end - if size(C) != size(A) - throw(DimensionMismatch("size of output, $(size(C)), does not match size of left hand side, $(size(A))")) - end - @inbounds for i in 1:m - for j in n:-1:1 - Aij = A[i,j] - for k in j + 1:n - Aij -= C[i,k]*B.data[k,j] + else # uploc == 'L' + @inbounds for i in 1:m + for j in n:-1:1 + Aij = A[i,j] + for k in j + 1:n + Aij -= C[i,k]*conj(B[k,j]) + end + unit || (iszero(B[j,j]) && throw(SingularException(j))) + C[i,j] = Aij / (unit ? oB : conj(B[j,j])) end - C[i,j] = Aij / oneunit(eltype(B)) end end - C + return C end -lmul!(A::UpperTriangular, B::UpperTriangular) = UpperTriangular(lmul!(A, triu!(B.data))) -lmul!(A::UnitUpperTriangular, B::UpperTriangular) = UpperTriangular(lmul!(A, triu!(B.data))) -lmul!(A::LowerTriangular, B::LowerTriangular) = LowerTriangular(lmul!(A, tril!(B.data))) -lmul!(A::UnitLowerTriangular, B::LowerTriangular) = LowerTriangular(lmul!(A, tril!(B.data))) - -ldiv!(A::UpperTriangular, B::UpperTriangular) = UpperTriangular(ldiv!(A, triu!(B.data))) -ldiv!(A::UnitUpperTriangular, B::UpperTriangular) = UpperTriangular(ldiv!(A, triu!(B.data))) -ldiv!(A::LowerTriangular, B::LowerTriangular) = LowerTriangular(ldiv!(A, tril!(B.data))) -ldiv!(A::UnitLowerTriangular, B::LowerTriangular) = LowerTriangular(ldiv!(A, tril!(B.data))) - -rdiv!(A::UpperTriangular, B::UpperTriangular) = UpperTriangular(rdiv!(triu!(A.data), B)) -rdiv!(A::UpperTriangular, B::UnitUpperTriangular) = UpperTriangular(rdiv!(triu!(A.data), B)) -rdiv!(A::LowerTriangular, B::LowerTriangular) = LowerTriangular(rdiv!(tril!(A.data), B)) -rdiv!(A::LowerTriangular, B::UnitLowerTriangular) = LowerTriangular(rdiv!(tril!(A.data), B)) - +# these are needed because we don't keep track of left- and right-multiplication in tritrimul! rmul!(A::UpperTriangular, B::UpperTriangular) = UpperTriangular(rmul!(triu!(A.data), B)) rmul!(A::UpperTriangular, B::UnitUpperTriangular) = UpperTriangular(rmul!(triu!(A.data), B)) rmul!(A::LowerTriangular, B::LowerTriangular) = LowerTriangular(rmul!(tril!(A.data), B)) @@ -1394,11 +1466,7 @@ _inner_type_promotion(op, ::Type{TA}, ::Type{TB}) where {TA,TB} = ## The general promotion methods function *(A::AbstractTriangular, B::AbstractTriangular) TAB = _init_eltype(*, eltype(A), eltype(B)) - if TAB <: BlasFloat - lmul!(convert(AbstractArray{TAB}, A), copy_similar(B, TAB)) - else - mul!(similar(B, TAB, size(B)), A, B) - end + mul!(similar(B, TAB, size(B)), A, B) end for mat in (:AbstractVector, :AbstractMatrix) @@ -1406,51 +1474,31 @@ for mat in (:AbstractVector, :AbstractMatrix) @eval function *(A::AbstractTriangular, B::$mat) require_one_based_indexing(B) TAB = _init_eltype(*, eltype(A), eltype(B)) - if TAB <: BlasFloat - lmul!(convert(AbstractArray{TAB}, A), copy_similar(B, TAB)) - else - mul!(similar(B, TAB, size(B)), A, B) - end + mul!(similar(B, TAB, size(B)), A, B) end ### Left division with triangle to the left hence rhs cannot be transposed. No quotients. @eval function \(A::Union{UnitUpperTriangular,UnitLowerTriangular}, B::$mat) require_one_based_indexing(B) TAB = _inner_type_promotion(\, eltype(A), eltype(B)) - if TAB <: BlasFloat - ldiv!(convert(AbstractArray{TAB}, A), copy_similar(B, TAB)) - else - ldiv!(similar(B, TAB, size(B)), A, B) - end + ldiv!(similar(B, TAB, size(B)), A, B) end ### Left division with triangle to the left hence rhs cannot be transposed. Quotients. @eval function \(A::Union{UpperTriangular,LowerTriangular}, B::$mat) require_one_based_indexing(B) TAB = _init_eltype(\, eltype(A), eltype(B)) - if TAB <: BlasFloat - ldiv!(convert(AbstractArray{TAB}, A), copy_similar(B, TAB)) - else - ldiv!(similar(B, TAB, size(B)), A, B) - end + ldiv!(similar(B, TAB, size(B)), A, B) end ### Right division with triangle to the right hence lhs cannot be transposed. No quotients. @eval function /(A::$mat, B::Union{UnitUpperTriangular, UnitLowerTriangular}) require_one_based_indexing(A) TAB = _inner_type_promotion(/, eltype(A), eltype(B)) - if TAB <: BlasFloat - rdiv!(copy_similar(A, TAB), convert(AbstractArray{TAB}, B)) - else - _rdiv!(similar(A, TAB, size(A)), A, B) - end + _rdiv!(similar(A, TAB, size(A)), A, B) end ### Right division with triangle to the right hence lhs cannot be transposed. Quotients. @eval function /(A::$mat, B::Union{UpperTriangular,LowerTriangular}) require_one_based_indexing(A) TAB = _init_eltype(/, eltype(A), eltype(B)) - if TAB <: BlasFloat - rdiv!(copy_similar(A, TAB), convert(AbstractArray{TAB}, B)) - else - _rdiv!(similar(A, TAB, size(A)), A, B) - end + _rdiv!(similar(A, TAB, size(A)), A, B) end end ### Multiplication with triangle to the right and hence lhs cannot be transposed. @@ -1458,11 +1506,7 @@ end function *(A::AbstractMatrix, B::AbstractTriangular) require_one_based_indexing(A) TAB = _init_eltype(*, eltype(A), eltype(B)) - if TAB <: BlasFloat - rmul!(copy_similar(A, TAB), convert(AbstractArray{TAB}, B)) - else - mul!(similar(A, TAB, size(A)), A, B) - end + mul!(similar(A, TAB, size(A)), A, B) end # ambiguity resolution with definitions in matmul.jl *(v::AdjointAbsVec, A::AbstractTriangular) = adjoint(adjoint(A) * v.parent) diff --git a/stdlib/LinearAlgebra/test/triangular.jl b/stdlib/LinearAlgebra/test/triangular.jl index 78fc2d5e0e74c..aaf433c95b7b0 100644 --- a/stdlib/LinearAlgebra/test/triangular.jl +++ b/stdlib/LinearAlgebra/test/triangular.jl @@ -326,7 +326,7 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo (LowerTriangular, :L), (UnitLowerTriangular, :L)) - debug && println("elty1: $elty1, A1: $t1, elty2: $elty2") + debug && println("elty1: $elty1, A1: $t1, elty2: $elty2, A2: $t2") A2 = t2(elty2 == Int ? rand(1:7, n, n) : convert(Matrix{elty2}, (elty2 <: Complex ? complex.(randn(n, n), randn(n, n)) : randn(n, n)) |> t -> cholesky(t't).U |> t -> uplo2 === :U ? t : copy(t'))) @@ -393,20 +393,20 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo @test_throws DimensionMismatch A2' * offsizeA @test_throws DimensionMismatch A2 * offsizeA if (uplo1 == uplo2 && elty1 == elty2 != Int && t1 != UnitLowerTriangular && t1 != UnitUpperTriangular) - @test rdiv!(copy(A1), copy(A2))::t1 ≈ A1/A2 ≈ Matrix(A1)/Matrix(A2) - @test ldiv!(copy(A2), copy(A1))::t1 ≈ A2\A1 ≈ Matrix(A2)\Matrix(A1) + @test rdiv!(copy(A1), A2)::t1 ≈ A1/A2 ≈ Matrix(A1)/Matrix(A2) + @test ldiv!(A2, copy(A1))::t1 ≈ A2\A1 ≈ Matrix(A2)\Matrix(A1) end if (uplo1 != uplo2 && elty1 == elty2 != Int && t2 != UnitLowerTriangular && t2 != UnitUpperTriangular) - @test lmul!(adjoint(copy(A1)), copy(A2)) ≈ A1'*A2 ≈ Matrix(A1)'*Matrix(A2) - @test lmul!(transpose(copy(A1)), copy(A2)) ≈ transpose(A1)*A2 ≈ transpose(Matrix(A1))*Matrix(A2) - @test ldiv!(adjoint(copy(A1)), copy(A2)) ≈ A1'\A2 ≈ Matrix(A1)'\Matrix(A2) - @test ldiv!(transpose(copy(A1)), copy(A2)) ≈ transpose(A1)\A2 ≈ transpose(Matrix(A1))\Matrix(A2) + @test lmul!(adjoint(A1), copy(A2)) ≈ A1'*A2 ≈ Matrix(A1)'*Matrix(A2) + @test lmul!(transpose(A1), copy(A2)) ≈ transpose(A1)*A2 ≈ transpose(Matrix(A1))*Matrix(A2) + @test ldiv!(adjoint(A1), copy(A2)) ≈ A1'\A2 ≈ Matrix(A1)'\Matrix(A2) + @test ldiv!(transpose(A1), copy(A2)) ≈ transpose(A1)\A2 ≈ transpose(Matrix(A1))\Matrix(A2) end if (uplo1 != uplo2 && elty1 == elty2 != Int && t1 != UnitLowerTriangular && t1 != UnitUpperTriangular) - @test rmul!(copy(A1), adjoint(copy(A2))) ≈ A1*A2' ≈ Matrix(A1)*Matrix(A2)' - @test rmul!(copy(A1), transpose(copy(A2))) ≈ A1*transpose(A2) ≈ Matrix(A1)*transpose(Matrix(A2)) - @test rdiv!(copy(A1), adjoint(copy(A2))) ≈ A1/A2' ≈ Matrix(A1)/Matrix(A2)' - @test rdiv!(copy(A1), transpose(copy(A2))) ≈ A1/transpose(A2) ≈ Matrix(A1)/transpose(Matrix(A2)) + @test rmul!(copy(A1), adjoint(A2)) ≈ A1*A2' ≈ Matrix(A1)*Matrix(A2)' + @test rmul!(copy(A1), transpose(A2)) ≈ A1*transpose(A2) ≈ Matrix(A1)*transpose(Matrix(A2)) + @test rdiv!(copy(A1), adjoint(A2)) ≈ A1/A2' ≈ Matrix(A1)/Matrix(A2)' + @test rdiv!(copy(A1), transpose(A2)) ≈ A1/transpose(A2) ≈ Matrix(A1)/transpose(Matrix(A2)) end end end @@ -420,10 +420,10 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo @test lmul!(Tri,copy(A1)) ≈ Tri*Matrix(A1) Tri = Tridiagonal(rand(eltyB,n-1),rand(eltyB,n),rand(eltyB,n-1)) C = Matrix{promote_type(elty1,eltyB)}(undef, n, n) - mul!(C, Tri, copy(A1)) + mul!(C, Tri, A1) @test C ≈ Tri*Matrix(A1) Tri = Tridiagonal(rand(eltyB,n-1),rand(eltyB,n),rand(eltyB,n-1)) - mul!(C, copy(A1), Tri) + mul!(C, A1, Tri) @test C ≈ Matrix(A1)*Tri # Triangular-dense Matrix/vector multiplication From 703622d2512c5664376b26faa2c986af02ccc2bd Mon Sep 17 00:00:00 2001 From: N5N3 <2642243996@qq.com> Date: Fri, 14 Jul 2023 22:27:37 +0800 Subject: [PATCH 023/413] Also record chained `innervars` At present we only record direct `innervars` (`T` -> `S<:Val{T}`). And chained `innervars` might be ignored (`T` -> `S<:Val{V<:T}`\ This commit fix it. (cherry picked from commit cd743379d4a97488a0d2388fb0520422b995067e) --- src/subtype.c | 160 ++++++++++++++++++++++++++++++++++++------------ test/subtype.jl | 7 ++- 2 files changed, 128 insertions(+), 39 deletions(-) diff --git a/src/subtype.c b/src/subtype.c index 5b05bb288ffc4..efff6218dfb71 100644 --- a/src/subtype.c +++ b/src/subtype.c @@ -2721,32 +2721,33 @@ static jl_value_t *omit_bad_union(jl_value_t *u, jl_tvar_t *t) jl_tvar_t *var = ((jl_unionall_t *)u)->var; jl_value_t *ub = var->ub, *body = ((jl_unionall_t *)u)->body; assert(var != t); - if (!jl_has_typevar(var->lb, t)) { - JL_GC_PUSH3(&ub, &body, &var); - body = omit_bad_union(body, t); - if (!jl_has_typevar(body, var)) { - res = body; + JL_GC_PUSH3(&ub, &body, &var); + body = omit_bad_union(body, t); + if (!jl_has_typevar(body, var)) { + res = body; + } + else if (jl_has_typevar(var->lb, t)) { + res = jl_bottom_type; + } + else { + ub = omit_bad_union(ub, t); + if (ub == jl_bottom_type && var->lb != ub) { + res = jl_bottom_type; } - else { - ub = omit_bad_union(ub, t); - if (ub == jl_bottom_type && var->lb != ub) { - res = jl_bottom_type; + else if (obviously_egal(var->lb, ub)) { + JL_TRY { + res = jl_substitute_var(body, var, ub); } - else if (obviously_egal(var->lb, ub)) { - JL_TRY { - res = jl_substitute_var(body, var, ub); - } - JL_CATCH { - res = jl_bottom_type; - } + JL_CATCH { + res = jl_bottom_type; } - else { - if (ub != var->ub) { - var = jl_new_typevar(var->name, var->lb, ub); - body = jl_substitute_var(body, ((jl_unionall_t *)u)->var, (jl_value_t *)var); - } - res = jl_new_struct(jl_unionall_type, var, body); + } + else { + if (ub != var->ub) { + var = jl_new_typevar(var->name, var->lb, ub); + body = jl_substitute_var(body, ((jl_unionall_t *)u)->var, (jl_value_t *)var); } + res = jl_new_struct(jl_unionall_type, var, body); } } JL_GC_POP(); @@ -2770,9 +2771,9 @@ static jl_value_t *omit_bad_union(jl_value_t *u, jl_tvar_t *t) // Caller might not have rooted `res` static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbinding_t *vb, jl_unionall_t *u, jl_stenv_t *e) { - jl_value_t *varval = NULL; + jl_value_t *varval = NULL, *ilb = NULL, *iub = NULL, *nivar = NULL; jl_tvar_t *newvar = vb->var; - JL_GC_PUSH2(&res, &newvar); + JL_GC_PUSH5(&res, &newvar, &ilb, &iub, &nivar); // try to reduce var to a single value if (jl_is_long(vb->ub) && jl_is_typevar(vb->lb)) { varval = vb->ub; @@ -2806,19 +2807,99 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind newvar = jl_new_typevar(vb->var->name, vb->lb, vb->ub); // remove/replace/rewrap free occurrences of this var in the environment + + // I. Handle indirect innervars (make them behave like direct innervars). + // 1) record if btemp->lb/ub has indirect innervars. + // 2) subtitute `vb->var` with `varval`/`varval` + // note: We only store the innervar in the outmost `varbinding`, + // thus we must check all inner env to ensure the recording/subtitution + // is complete + int len = current_env_length(e); + int8_t *blinding_has_innerdep = (int8_t *)alloca(len); + memset(blinding_has_innerdep, 0, len); + for (jl_varbinding_t *btemp = e->vars; btemp != NULL; btemp = btemp->prev) { + if (btemp->innervars != NULL) { + for (size_t i = 0; i < jl_array_len(btemp->innervars); i++) { + jl_tvar_t *ivar = (jl_tvar_t*)jl_array_ptr_ref(btemp->innervars, i); + ilb = ivar->lb; iub = ivar->ub; + int has_innerdep = 0; + if (jl_has_typevar(ilb, vb->var)) { + has_innerdep = 1; + if (varval) { + JL_TRY { + ilb = jl_substitute_var(ilb, vb->var, varval); + } + JL_CATCH { + res = jl_bottom_type; + } + } + else if (newvar != vb->var) { + ilb = jl_substitute_var(ilb, vb->var, (jl_value_t*)newvar); + } + } + if (jl_has_typevar(iub, vb->var)) { + has_innerdep = 1; + if (varval) { + JL_TRY { + iub = jl_substitute_var(iub, vb->var, varval); + } + JL_CATCH { + res = jl_bottom_type; + } + } + else if (newvar != vb->var) { + iub = jl_substitute_var(iub, vb->var, (jl_value_t*)newvar); + } + } + if (!has_innerdep) continue; + int need_subtitution = 0; + if (ilb != ivar->lb || iub != ivar->ub) { + need_subtitution = 1; + nivar = (jl_value_t *)jl_new_typevar(ivar->name, ilb, iub); + jl_array_ptr_set(btemp->innervars, i, nivar); + if (jl_has_typevar(res, ivar)) + res = jl_substitute_var(res, ivar, nivar); + } + int envind = 0; + for (jl_varbinding_t *btemp2 = e->vars; btemp2 != btemp->prev; btemp2 = btemp2->prev) { + if (jl_has_typevar(btemp2->lb, ivar)) { + if (need_subtitution) + btemp2->lb = jl_substitute_var(btemp2->lb, ivar, nivar); + blinding_has_innerdep[envind] |= 1; + } + if (jl_has_typevar(btemp2->ub, ivar)) { + if (need_subtitution) + btemp2->ub = jl_substitute_var(btemp2->ub, ivar, nivar); + blinding_has_innerdep[envind] |= 2; + } + envind++; + } + } + } + } + // II. Handle direct innervars. jl_varbinding_t *wrap = NULL; + int envind = 0; for (jl_varbinding_t *btemp = e->vars; btemp != NULL; btemp = btemp->prev) { - if (jl_has_typevar(btemp->lb, vb->var)) { + int has_innerdep = blinding_has_innerdep[envind++]; + int lb_has_innerdep = has_innerdep & 1; + int ub_has_innerdep = has_innerdep & 2; + assert(!has_innerdep || btemp->depth0 == vb->depth0); + int lb_has_dep = jl_has_typevar(btemp->lb, vb->var); + int ub_has_dep = jl_has_typevar(btemp->ub, vb->var); + if (lb_has_innerdep || lb_has_dep) { if (vb->lb == (jl_value_t*)btemp->var) { JL_GC_POP(); return jl_bottom_type; } if (varval) { - JL_TRY { - btemp->lb = jl_substitute_var(btemp->lb, vb->var, varval); - } - JL_CATCH { - res = jl_bottom_type; + if (lb_has_dep) { // inner substitution has been handled + JL_TRY { + btemp->lb = jl_substitute_var(btemp->lb, vb->var, varval); + } + JL_CATCH { + res = jl_bottom_type; + } } } else if (btemp->lb == (jl_value_t*)vb->var) { @@ -2827,7 +2908,7 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind else if (btemp->depth0 == vb->depth0 && !jl_has_typevar(vb->lb, btemp->var) && !jl_has_typevar(vb->ub, btemp->var)) { // if our variable is T, and some outer variable has constraint S = Ref{T}, // move the `where T` outside `where S` instead of putting it here. issue #21243. - if (newvar != vb->var) + if (newvar != vb->var && lb_has_dep) // inner substitution has been handled btemp->lb = jl_substitute_var(btemp->lb, vb->var, (jl_value_t*)newvar); wrap = btemp; } @@ -2836,8 +2917,9 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind } assert((jl_value_t*)btemp->var != btemp->lb); } - if (jl_has_typevar(btemp->ub, vb->var)) { + if (ub_has_innerdep || ub_has_dep) { if (vb->ub == (jl_value_t*)btemp->var) { + // TODO: handle `omit_bad_union` correctly if `ub_has_innerdep` btemp->ub = omit_bad_union(btemp->ub, vb->var); if (btemp->ub == jl_bottom_type && btemp->ub != btemp->lb) { JL_GC_POP(); @@ -2845,11 +2927,13 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind } } if (varval) { - JL_TRY { - btemp->ub = jl_substitute_var(btemp->ub, vb->var, varval); - } - JL_CATCH { - res = jl_bottom_type; + if (ub_has_dep) { // inner substitution has been handled + JL_TRY { + btemp->ub = jl_substitute_var(btemp->ub, vb->var, varval); + } + JL_CATCH { + res = jl_bottom_type; + } } } else if (btemp->ub == (jl_value_t*)vb->var) { @@ -2860,7 +2944,7 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind btemp->ub = vb->ub; } else if (btemp->depth0 == vb->depth0 && !jl_has_typevar(vb->lb, btemp->var) && !jl_has_typevar(vb->ub, btemp->var)) { - if (newvar != vb->var) + if (newvar != vb->var && ub_has_dep) // inner substitution has been handled btemp->ub = jl_substitute_var(btemp->ub, vb->var, (jl_value_t*)newvar); wrap = btemp; } diff --git a/test/subtype.jl b/test/subtype.jl index de11689e9e7c4..19901897ebaaa 100644 --- a/test/subtype.jl +++ b/test/subtype.jl @@ -2552,8 +2552,13 @@ end @test !<:(Type{Vector{Union{Base.BitInteger, Base.IEEEFloat, StridedArray, Missing, Nothing, Val{T}}}} where {T}, Type{Array{T}} where {T}) #issue 50195 -T50195{S} = Pair{S,Set{S}} let a = Tuple{Type{X} where X<:Union{Nothing, Val{X1} where {X4, X1<:(Pair{X2, Val{X2}} where X2<:Val{X4})}}}, b = Tuple{Type{Y} where Y<:(Val{Y1} where {Y4<:Src, Y1<:(Pair{Y2, Val{Y2}} where Y2<:Union{Val{Y4}, Y4})})} where Src @test typeintersect(a, b) <: Any end + +#issue 50195 +let a = Tuple{Union{Nothing, Type{Pair{T1}} where T1}} + b = Tuple{Type{X2} where X2<:(Pair{T2, Y2} where {Src, Z2<:Src, Y2<:Union{Val{Z2}, Z2}})} where T2 + @test !Base.has_free_typevars(typeintersect(a, b)) +end From d5c9b5011a39df0350eee7989e3d850a74880eb0 Mon Sep 17 00:00:00 2001 From: Stefan Karpinski Date: Mon, 17 Jul 2023 10:16:00 -0400 Subject: [PATCH 024/413] read(io, Char): fix read with too many leading ones (#50552) Fixes #50532. The `read(io, Char)` method didn't correctly handle the case where the lead byte starts with too many leading ones; this fix makes it handle that case correctly, which makes `read(io, Char)` match `collect(s)` in its interpretation of what a character is in all invalid cases. Also fix and test `read(::File, Char)` which has the same bug. (cherry picked from commit ffe1a0789a338a2b4e5199965319194ec4f6ab90) --- base/filesystem.jl | 5 +++-- base/io.jl | 4 ++-- test/char.jl | 30 +++++++++++++++++++++++++++++- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/base/filesystem.jl b/base/filesystem.jl index 63fe4281f6e59..d291dd3b31630 100644 --- a/base/filesystem.jl +++ b/base/filesystem.jl @@ -200,11 +200,12 @@ end function read(f::File, ::Type{Char}) b0 = read(f, UInt8) - l = 8 * (4 - leading_ones(b0)) + l = 0x08 * (0x04 - UInt8(leading_ones(b0))) c = UInt32(b0) << 24 - if l < 24 + if l ≤ 0x10 s = 16 while s ≥ l && !eof(f) + # this works around lack of peek(::File) p = position(f) b = read(f, UInt8) if b & 0xc0 != 0x80 diff --git a/base/io.jl b/base/io.jl index 60a24831587cb..dce469fbfd2b7 100644 --- a/base/io.jl +++ b/base/io.jl @@ -800,9 +800,9 @@ end function read(io::IO, ::Type{Char}) b0 = read(io, UInt8)::UInt8 - l = 8(4-leading_ones(b0)) + l = 0x08 * (0x04 - UInt8(leading_ones(b0))) c = UInt32(b0) << 24 - if l < 24 + if l ≤ 0x10 s = 16 while s ≥ l && !eof(io)::Bool peek(io) & 0xc0 == 0x80 || break diff --git a/test/char.jl b/test/char.jl index 1639c62ec819d..1d3579013ad18 100644 --- a/test/char.jl +++ b/test/char.jl @@ -1,7 +1,6 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license @testset "basic properties" begin - @test typemax(Char) == reinterpret(Char, typemax(UInt32)) @test typemin(Char) == Char(0) @test typemax(Char) == reinterpret(Char, 0xffffffff) @@ -214,6 +213,35 @@ end end end +# issue #50532 +@testset "invalid read(io, Char)" begin + # byte values with different numbers of leading bits + B = UInt8[ + 0x3f, 0x4d, 0x52, 0x63, 0x81, 0x83, 0x89, 0xb6, + 0xc0, 0xc8, 0xd3, 0xe3, 0xea, 0xeb, 0xf0, 0xf2, + 0xf4, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, + ] + f = tempname() + for b1 in B, b2 in B, t = 0:3 + bytes = [b1, b2] + append!(bytes, rand(B, t)) + s = String(bytes) + write(f, s) + @test s == read(f, String) + chars = collect(s) + ios = [IOBuffer(s), open(f), Base.Filesystem.open(f, 0)] + for io in ios + chars′ = Char[] + while !eof(io) + push!(chars′, read(io, Char)) + end + @test chars == chars′ + close(io) + end + end + rm(f) +end + @testset "overlong codes" begin function test_overlong(c::Char, n::Integer, rep::String) if isvalid(c) From ba9a0e8b0c79655ee0ed82af198c11cc26e46de5 Mon Sep 17 00:00:00 2001 From: "Viral B. Shah" Date: Mon, 10 Jul 2023 21:01:40 -0400 Subject: [PATCH 025/413] Update SparseArrays.jl stdlib for SuiteSparse 7 (#48977) * Use SparseArrays.jl updated to work with SuiteSparse 7, and with Int32 indices * SuiteSparse_jll Update to v7.2.0 (Using @Wimmerer's SuiteSparse fork for 32-bit QR) --------- Co-authored-by: Francois-Xavier Coudert Co-authored-by: Will Kimmerer (cherry picked from commit b26f3b279c0c79e92666ee0077b06f6685d77c8b) --- Makefile | 2 +- base/Makefile | 2 + .../md5 | 1 + .../sha512 | 1 + .../md5 | 1 - .../sha512 | 1 - deps/checksums/suitesparse | 68 +++++++++--------- deps/libsuitesparse.mk | 70 +++++++------------ deps/libsuitesparse.version | 4 +- stdlib/SparseArrays.version | 2 +- stdlib/SuiteSparse_jll/Project.toml | 4 +- stdlib/SuiteSparse_jll/src/SuiteSparse_jll.jl | 48 ++++++------- stdlib/SuiteSparse_jll/test/runtests.jl | 6 +- 13 files changed, 99 insertions(+), 111 deletions(-) create mode 100644 deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/md5 create mode 100644 deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/sha512 delete mode 100644 deps/checksums/SparseArrays-8affe9e499379616e33fc60a24bb31500e8423d7.tar.gz/md5 delete mode 100644 deps/checksums/SparseArrays-8affe9e499379616e33fc60a24bb31500e8423d7.tar.gz/sha512 diff --git a/Makefile b/Makefile index 5e9b4ccf5460a..1565014a0fa5e 100644 --- a/Makefile +++ b/Makefile @@ -196,7 +196,7 @@ else ifeq ($(JULIA_BUILD_MODE),debug) JL_PRIVATE_LIBS-0 += libjulia-internal-debug libjulia-codegen-debug endif ifeq ($(USE_GPL_LIBS), 1) -JL_PRIVATE_LIBS-$(USE_SYSTEM_LIBSUITESPARSE) += libamd libbtf libcamd libccolamd libcholmod libcolamd libklu libldl librbio libspqr libsuitesparseconfig libumfpack +JL_PRIVATE_LIBS-$(USE_SYSTEM_LIBSUITESPARSE) += libamd libbtf libcamd libccolamd libcholmod libcholmod_cuda libcolamd libklu libldl librbio libspqr libspqr_cuda libsuitesparseconfig libumfpack endif JL_PRIVATE_LIBS-$(USE_SYSTEM_LIBBLASTRAMPOLINE) += libblastrampoline JL_PRIVATE_LIBS-$(USE_SYSTEM_PCRE) += libpcre2-8 diff --git a/base/Makefile b/base/Makefile index 493302af78b02..ad2bb6a63ccc0 100644 --- a/base/Makefile +++ b/base/Makefile @@ -269,9 +269,11 @@ $(eval $(call symlink_system_library,LIBSUITESPARSE,libamd)) $(eval $(call symlink_system_library,LIBSUITESPARSE,libcamd)) $(eval $(call symlink_system_library,LIBSUITESPARSE,libccolamd)) $(eval $(call symlink_system_library,LIBSUITESPARSE,libcholmod)) +$(eval $(call symlink_system_library,LIBSUITESPARSE,libcholmod_cuda)) $(eval $(call symlink_system_library,LIBSUITESPARSE,libcolamd)) $(eval $(call symlink_system_library,LIBSUITESPARSE,libumfpack)) $(eval $(call symlink_system_library,LIBSUITESPARSE,libspqr)) +$(eval $(call symlink_system_library,LIBSUITESPARSE,libspqr_cuda)) $(eval $(call symlink_system_library,LIBSUITESPARSE,libsuitesparseconfig)) # EXCLUDED LIBRARIES (installed/used, but not vendored for use with dlopen): # libunwind diff --git a/deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/md5 b/deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/md5 new file mode 100644 index 0000000000000..21131a800d4af --- /dev/null +++ b/deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/md5 @@ -0,0 +1 @@ +0369c2679e8b834009526dd4f402cfd8 diff --git a/deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/sha512 b/deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/sha512 new file mode 100644 index 0000000000000..df3b4cc3736e1 --- /dev/null +++ b/deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/sha512 @@ -0,0 +1 @@ +b2573398a8e8f5bcd8195cc3aa68103b2b5ea66c1835d4bc4d808fb1e0d3fbd46cc2caa04a4f49813a4a4a7f88d2f95789fa080d1d940c0291b09416be0fd1e6 diff --git a/deps/checksums/SparseArrays-8affe9e499379616e33fc60a24bb31500e8423d7.tar.gz/md5 b/deps/checksums/SparseArrays-8affe9e499379616e33fc60a24bb31500e8423d7.tar.gz/md5 deleted file mode 100644 index 96861ba265b5f..0000000000000 --- a/deps/checksums/SparseArrays-8affe9e499379616e33fc60a24bb31500e8423d7.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -e6dc511b49e07a167848adc4e12690d8 diff --git a/deps/checksums/SparseArrays-8affe9e499379616e33fc60a24bb31500e8423d7.tar.gz/sha512 b/deps/checksums/SparseArrays-8affe9e499379616e33fc60a24bb31500e8423d7.tar.gz/sha512 deleted file mode 100644 index f503304f810e4..0000000000000 --- a/deps/checksums/SparseArrays-8affe9e499379616e33fc60a24bb31500e8423d7.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -f40fd137ccd6651fc8b697f57cfcbd8e3feccb99f6a6b32fbaa69cc0160b78cefc662b914ff8f4e48478ca48f9583318a6030d922d43ed66f8db59fd5985f768 diff --git a/deps/checksums/suitesparse b/deps/checksums/suitesparse index 65db184c5cbca..05f25450114a5 100644 --- a/deps/checksums/suitesparse +++ b/deps/checksums/suitesparse @@ -1,36 +1,36 @@ -SuiteSparse-5.10.1.tar.gz/md5/68bb912f3cf3d2b01f30ebafef690302 -SuiteSparse-5.10.1.tar.gz/sha512/8f85c6d63b76cba95707dfa732c51200df7794cb4c2599dbd92100475747b8d02b05089a47096e85c60b89bc852a8e768e0670f24902a82d29494a80ccf2bb5f +SuiteSparse-7.2.0.tar.gz/md5/a751b1161f03eb6bd8bd7b9c9be74b67 +SuiteSparse-7.2.0.tar.gz/sha512/62fc796a77f2a8c95cd688a4fa0e39c19d7ccfafde7a6623d62ca6928cee68ac9863a0f721959a1d5a07e62888ab621a4b1cb4f63371f4ac10f4ffe513241340 SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/md5/46541001073d1c3c85e18d910f8308f3 SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/sha512/f7470a447b934ca9315e216a07b97e363f11bc93186f9aa057b20b2d05092c58ae4f1b733de362de4a0730861c00be4ca5588d0b3ba65f018c1798b9122b9672 -SuiteSparse.v5.10.1+6.aarch64-apple-darwin.tar.gz/md5/14cc0d3c7b5271246eb45c495c7a4e79 -SuiteSparse.v5.10.1+6.aarch64-apple-darwin.tar.gz/sha512/a56da81a5165bcdf49d1913799bffcaea84efd6f8740dd002f700eb4070313cac64be5359ba88d1f39fe976944e34ee6ed6575ceade2ae2d97b850e6a1aee0ae -SuiteSparse.v5.10.1+6.aarch64-linux-gnu.tar.gz/md5/b93b047040e2db5e0277e52b9bd3feb7 -SuiteSparse.v5.10.1+6.aarch64-linux-gnu.tar.gz/sha512/e03a9ecafce9dcc6791dd202efac2f864bdf3a0a4524567801c092304c17ab15dae949abfb1fe2bc71b367a0e398260ccfdd91dad611860090df471b44e75ee3 -SuiteSparse.v5.10.1+6.aarch64-linux-musl.tar.gz/md5/22c44d9d82608724e1aa62d126fdf030 -SuiteSparse.v5.10.1+6.aarch64-linux-musl.tar.gz/sha512/39a3c11429cd3e6afa2f615dc4b0c8d16d7b94a423d76e598b3b48db2c47fe64d644233e2a672bd6654f8bd57da91dd7a787a3e4978f0f803237ab4ec6f97905 -SuiteSparse.v5.10.1+6.armv6l-linux-gnueabihf.tar.gz/md5/505ee3c0750a720ed1e4de670f81e220 -SuiteSparse.v5.10.1+6.armv6l-linux-gnueabihf.tar.gz/sha512/20fafbdd2df96427b95b730901663c255dafc415f3a8154e3364ec46ca2b205fa45a081f92272b81d7aed22b9f8373d2d4eee70ff8ab5ed8d1d80b6a340c8aad -SuiteSparse.v5.10.1+6.armv6l-linux-musleabihf.tar.gz/md5/8e1821668cbca9c2d3c5cee5ad1746c8 -SuiteSparse.v5.10.1+6.armv6l-linux-musleabihf.tar.gz/sha512/58fb4ec10a537d101e0be8417648a4d0127444b3fe8a32498320aaaefc747f5cac3c7503b70775c1d708b077034060fe5ed8609e73bf9be22f9a8729abc4c73d -SuiteSparse.v5.10.1+6.armv7l-linux-gnueabihf.tar.gz/md5/43d133a916e548ecae50671b92f64c6f -SuiteSparse.v5.10.1+6.armv7l-linux-gnueabihf.tar.gz/sha512/f7f767c0e7eb45afe10941513695bfcc9e0628195cb9245a9c24700967f9cfa7cd0030cdcfaf47a76400d5dd3eb908c1f9ea5e44efd3054ed7bba47e664279a2 -SuiteSparse.v5.10.1+6.armv7l-linux-musleabihf.tar.gz/md5/7c3b2e19d3296002b1aa72b951421eec -SuiteSparse.v5.10.1+6.armv7l-linux-musleabihf.tar.gz/sha512/7546ce844b03d0414168ab6d0925f848b14b35ed27cb545b41f2512bad44b7da4f39004e75657c7c572557ccb015177d3e0d346e2c3182b27a6ee602876ee0df -SuiteSparse.v5.10.1+6.i686-linux-gnu.tar.gz/md5/e00a73f0fad92a266dd8d3774707f9b1 -SuiteSparse.v5.10.1+6.i686-linux-gnu.tar.gz/sha512/9cc2332a78d0490170d722d2f062d6f660fb3bd9042dd177c3683675d0f44306b93bf882cb79c0707ab79318280d08582431eb1c92334f2bb50946e942be0b16 -SuiteSparse.v5.10.1+6.i686-linux-musl.tar.gz/md5/71fb647a76ecc9e547df903535011b5b -SuiteSparse.v5.10.1+6.i686-linux-musl.tar.gz/sha512/7806cd9179e46fa61b63a3f711b37289da72a48430912e564c88e3dcb4caaad8a9bd232d6f572f8270806d286e4a4eb9edfdcda29fe8d91dadb1b03d57eda76d -SuiteSparse.v5.10.1+6.i686-w64-mingw32.tar.gz/md5/d4e6c9aba53b2107469cda6de9ca2724 -SuiteSparse.v5.10.1+6.i686-w64-mingw32.tar.gz/sha512/c0c49641c6e7f3f0333e3fa44ce62dcd4ad5942c74b2429aaeb49fd0d7b8c13c872150ae4d54cc5cfaae07a65a24a7d4ea731adc78db3d9341a54e5edb5c80f0 -SuiteSparse.v5.10.1+6.powerpc64le-linux-gnu.tar.gz/md5/5432dca00f7e0f42b7dbd16083537318 -SuiteSparse.v5.10.1+6.powerpc64le-linux-gnu.tar.gz/sha512/61946a7faa2a49613ea2c08a01f064b619c9ec134f0d9509eb42a96bebf2a63f5fb57b14702f25618def410658da8334bb6aa5200280956e573aa944476efef2 -SuiteSparse.v5.10.1+6.x86_64-apple-darwin.tar.gz/md5/ca175d433a02f91407e2921872c2b67c -SuiteSparse.v5.10.1+6.x86_64-apple-darwin.tar.gz/sha512/14d9b01e2db8c04f9a1076bcbac022c6573728f708f31344825805fed53971e922aecebeb4b2f567a6b5f44ad27c0d66e142887ff4684c8679ab65b902538abf -SuiteSparse.v5.10.1+6.x86_64-linux-gnu.tar.gz/md5/6c271ced91dbb1bf748efbaace1dac10 -SuiteSparse.v5.10.1+6.x86_64-linux-gnu.tar.gz/sha512/5984db9c101ef80d63024bc3b51821268349450deedd5aaea5fade0fc5932992379a0133c4f91711af134014835afea1bde518ae1e7efd482d556a97e54b0238 -SuiteSparse.v5.10.1+6.x86_64-linux-musl.tar.gz/md5/c7d55069969dbb98997687c847ab643d -SuiteSparse.v5.10.1+6.x86_64-linux-musl.tar.gz/sha512/b54012765f7c7329125b41c3fb678e23888a858d3fd5a139c52bd980e383a308282238020754e795de6457fb312b61c39e6ab2d665ca5af95c65f52f0c354067 -SuiteSparse.v5.10.1+6.x86_64-unknown-freebsd.tar.gz/md5/e641be38c8205e362a7299c736aedad5 -SuiteSparse.v5.10.1+6.x86_64-unknown-freebsd.tar.gz/sha512/d55e85335bccb59210014c35233ad9e42f5d086f01a43fe0ee13f21cbb8555ea05f1d91c95a6d3f883477086851e123c4b0cde7cd2dcd8e08835fe9f685d5b25 -SuiteSparse.v5.10.1+6.x86_64-w64-mingw32.tar.gz/md5/45cad947fa962e1f192cb7b52a1f7b3c -SuiteSparse.v5.10.1+6.x86_64-w64-mingw32.tar.gz/sha512/e6545c681ba7d2346baf8fafabdf25f2faf6ea54763d999b14499f30d235e90f34fd4f83430ea7f17c01adea0699dff6c4d7ae3cb938c749d6a15f8bf4f1519f +SuiteSparse.v7.2.0+0.aarch64-apple-darwin.tar.gz/md5/1a10261e5bed293a66849c7a50605a1c +SuiteSparse.v7.2.0+0.aarch64-apple-darwin.tar.gz/sha512/11ecce872aac1f30a3d4ce870920ebb03c7828d0fd740c3789d3f65c3f91ed3682372e9807b0593e2850ae9024450306451ee2e03866afee16b4169e4b5de1c6 +SuiteSparse.v7.2.0+0.aarch64-linux-gnu.tar.gz/md5/65e2e7ae54e94e00b306d17a1d08ed34 +SuiteSparse.v7.2.0+0.aarch64-linux-gnu.tar.gz/sha512/7714598448c6f98a7d931822f9ddb661a903342d4c8384648c1b7457511794ff95ad64266c9377a4a5856dcb1fb8864cb05eab1c7787fca58802473270313570 +SuiteSparse.v7.2.0+0.aarch64-linux-musl.tar.gz/md5/95eb68e02c04d075d6ecc974c3b44457 +SuiteSparse.v7.2.0+0.aarch64-linux-musl.tar.gz/sha512/1d7835106cd5baef701a3b670778a757d97ab9933f7da909e1e5521150f7e44bee30cf4dc7c1e9f57731366db0fca1b91d1cdfddbc53b7cc7457ca11534be6d7 +SuiteSparse.v7.2.0+0.armv6l-linux-gnueabihf.tar.gz/md5/5f627cc9c9d4d70e2f0d749e09926b1a +SuiteSparse.v7.2.0+0.armv6l-linux-gnueabihf.tar.gz/sha512/5ae4b79b418b45d954bfb578ac384afd6fff10a602d16d8b503997ba15251a7db0e12da66061ffd27c23b7459ff56b4a5d200c7c8aaa4a33c608a88752535c15 +SuiteSparse.v7.2.0+0.armv6l-linux-musleabihf.tar.gz/md5/61b5ee7e2b50665caf15e7c4f7353048 +SuiteSparse.v7.2.0+0.armv6l-linux-musleabihf.tar.gz/sha512/854c0165bceeb8202aeeaa16e6ba1f643e8cb9bf0561816cf2c44d1c7334ba7c376ee9e9085316439ca7e27dd4e37814f4916382096a5889c6bb656d22a7fb8d +SuiteSparse.v7.2.0+0.armv7l-linux-gnueabihf.tar.gz/md5/618b9687ce30e630a52f72a8f34cfb9f +SuiteSparse.v7.2.0+0.armv7l-linux-gnueabihf.tar.gz/sha512/add77a8842faf6515d94dc1d000784247d13f0211a9bb3f98edbc65b5f8994c0101940875fa050ca7a4605aaf33ec14daeaaf6b837673b3b4c600d4c5c0f4876 +SuiteSparse.v7.2.0+0.armv7l-linux-musleabihf.tar.gz/md5/b84d7f98b953772517689478d6bfc121 +SuiteSparse.v7.2.0+0.armv7l-linux-musleabihf.tar.gz/sha512/2c461eb23194bf61d3166abd8eb308dc643d865ff07466a88a580aa5a040f3c4fbfeadf7c78e1a3ce737fe0602909ff2b25be439741d36a780a260ccfdc6ed83 +SuiteSparse.v7.2.0+0.i686-linux-gnu.tar.gz/md5/3a38deddb5c1952584782378892d9579 +SuiteSparse.v7.2.0+0.i686-linux-gnu.tar.gz/sha512/5d6a9090c1c275c2bdcdc8d510c6372913109c1a775819354922c0d0afc2bc13a27950ed0e8cb8e05bc94d245220e322d93879054e5082814b7796b305981987 +SuiteSparse.v7.2.0+0.i686-linux-musl.tar.gz/md5/8076c50a73ab08ce0b9374956c2dbf29 +SuiteSparse.v7.2.0+0.i686-linux-musl.tar.gz/sha512/e54bcfe7eb9b266514a35a3c48676b7a792b59830e44bfcd5dfcf35be790f534cc31bd2e63ce4da1a22fcb3b0afb0ebebcc94f0e596806d6e832c3f68195cc5b +SuiteSparse.v7.2.0+0.i686-w64-mingw32.tar.gz/md5/361385833314fa6fbcd1f446ef6430e6 +SuiteSparse.v7.2.0+0.i686-w64-mingw32.tar.gz/sha512/576ef6a4242c6b999a143007aa073ba9e4d74246c297f60504052321c2bae202640cffe08fbcf69df1b093b12443382c9d11390f97b9d8754f10dcd32dd3e9c4 +SuiteSparse.v7.2.0+0.powerpc64le-linux-gnu.tar.gz/md5/64845ee8bb2f3f44a0837297e47e412d +SuiteSparse.v7.2.0+0.powerpc64le-linux-gnu.tar.gz/sha512/5f935e497db4ebbcdfb96603a7ee9c6c520d7f4df04f65952305ceff4271ab637079e9144b98044c5f159b4bed0963df8c95ed1578d2828f1a2356e6d34d7042 +SuiteSparse.v7.2.0+0.x86_64-apple-darwin.tar.gz/md5/fb8b00d4ca63004fe8ab8c159128e01f +SuiteSparse.v7.2.0+0.x86_64-apple-darwin.tar.gz/sha512/bcfb18c11be4b1147ff857e2ad0c881c9fc4ae16db8e88fb6e7e0448418c1fc4bff9ea8f1e6aa7202c277273c44c1afb3cc6c2bfcaa0735c7c09052f033248c7 +SuiteSparse.v7.2.0+0.x86_64-linux-gnu.tar.gz/md5/043594ee1cb90fd47b36acfa829fffb8 +SuiteSparse.v7.2.0+0.x86_64-linux-gnu.tar.gz/sha512/6a5bb3c85bb7e97b915f7dd40e8be1ed1bbbd5c756ef510deaecc8505b95bd42f3662f82e25c80055947060e0429e2ce427d4ff67b434acbe28d46b88279c65f +SuiteSparse.v7.2.0+0.x86_64-linux-musl.tar.gz/md5/67c6d3a7fd8635a43bd86b2b1e986978 +SuiteSparse.v7.2.0+0.x86_64-linux-musl.tar.gz/sha512/d46be3f60102fc69707c3e7cc3d693c7ecb4d4307c636afde61e5fab3c46fcf32564716a11d2cfe47b4e541422d5b6e13fbcc3e8749764527b4f4132e8ce17fc +SuiteSparse.v7.2.0+0.x86_64-unknown-freebsd.tar.gz/md5/124057f8455c9710fd1e6b4b4b469fb0 +SuiteSparse.v7.2.0+0.x86_64-unknown-freebsd.tar.gz/sha512/da0e56a8b1cf3967275cb64aea0b939d8982392f9ca1c3b268607e37c0b9bebbd456172c507c6dc2293989a0fe8df04ba1fea67442a4bb738cc8d894bea457a5 +SuiteSparse.v7.2.0+0.x86_64-w64-mingw32.tar.gz/md5/0f99c67d25c0fdd0f3c3e11f18925c43 +SuiteSparse.v7.2.0+0.x86_64-w64-mingw32.tar.gz/sha512/32fcd894cb4197970aa311f7bd12ccb91df7bbe27e389e793a2d3565c9c5c36c751f6dfa37e155cd2c2245be52f0a872dba032b78dc45c45d3fd7d7f2eeb773e diff --git a/deps/libsuitesparse.mk b/deps/libsuitesparse.mk index 7d79e03ee8d0e..16d4919031ca5 100644 --- a/deps/libsuitesparse.mk +++ b/deps/libsuitesparse.mk @@ -1,43 +1,31 @@ ## LIBSUITESPARSE ## include $(SRCDIR)/libsuitesparse.version -ifeq ($(USE_BLAS64), 1) -UMFPACK_CONFIG := -DLONGBLAS='long long' -CHOLMOD_CONFIG := -DLONGBLAS='long long' -SPQR_CONFIG := -DLONGBLAS='long long' -UMFPACK_CONFIG += -DSUN64 -CHOLMOD_CONFIG += -DSUN64 -SPQR_CONFIG += -DSUN64 -endif - -# Disable linking to libmetis -CHOLMOD_CONFIG += -DNPARTITION - ifneq ($(USE_BINARYBUILDER_LIBSUITESPARSE), 1) LIBSUITESPARSE_PROJECTS := AMD BTF CAMD CCOLAMD COLAMD CHOLMOD LDL KLU UMFPACK RBio SPQR LIBSUITESPARSE_LIBS := $(addsuffix .*$(SHLIB_EXT)*,suitesparseconfig amd btf camd ccolamd colamd cholmod klu ldl umfpack rbio spqr) -SUITESPARSE_LIB := $(LDFLAGS) -L"$(abspath $(BUILDDIR))/SuiteSparse-$(LIBSUITESPARSE_VER)/lib" -ifeq ($(OS), Darwin) -SUITESPARSE_LIB += $(RPATH_ESCAPED_ORIGIN) -endif -LIBSUITESPARSE_MFLAGS := CC="$(CC) $(SANITIZE_OPTS)" CXX="$(CXX) $(SANITIZE_OPTS)" F77="$(FC)" \ - AR="$(AR)" RANLIB="$(RANLIB)" \ - BLAS="-L$(build_shlibdir) -lblastrampoline" \ - LAPACK="-L$(build_shlibdir) -lblastrampoline" \ - LDFLAGS="$(SUITESPARSE_LIB) $(SANITIZE_LDFLAGS)" CFOPENMP="" CUDA=no CUDA_PATH="" \ - UMFPACK_CONFIG="$(UMFPACK_CONFIG)" \ - CHOLMOD_CONFIG="$(CHOLMOD_CONFIG)" \ - SPQR_CONFIG="$(SPQR_CONFIG)" -ifeq ($(OS),WINNT) -LIBSUITESPARSE_MFLAGS += UNAME=Windows -else -LIBSUITESPARSE_MFLAGS += UNAME=$(OS) -endif +LIBSUITESPARSE_CMAKE_FLAGS := $(CMAKE_COMMON) \ + -DCMAKE_BUILD_TYPE=Release \ + -DENABLE_CUDA=0 \ + -DNFORTRAN=1 \ + -DNOPENMP=1 \ + -DNPARTITION=0 \ + -DNSTATIC=1 \ + -DBLAS_FOUND=1 \ + -DBLAS_LIBRARIES="$(build_shlibdir)/libblastrampoline.$(SHLIB_EXT)" \ + -DBLAS_LINKER_FLAGS="blastrampoline" \ + -DBLAS_UNDERSCORE=ON \ + -DBLA_VENDOR="blastrampoline" \ + -DBLAS64_SUFFIX="_64" \ + -DALLOW_64BIT_BLAS=ON \ + -DLAPACK_FOUND=1 \ + -DLAPACK_LIBRARIES="$(build_shlibdir)/libblastrampoline.$(SHLIB_EXT)" \ + -DLAPACK_LINKER_FLAGS="blastrampoline" $(SRCCACHE)/SuiteSparse-$(LIBSUITESPARSE_VER).tar.gz: | $(SRCCACHE) - $(JLDOWNLOAD) $@ https://github.com/DrTimothyAldenDavis/SuiteSparse/archive/v$(LIBSUITESPARSE_VER).tar.gz + $(JLDOWNLOAD) $@ https://github.com/Wimmerer/SuiteSparse/archive/v$(LIBSUITESPARSE_VER).tar.gz $(BUILDDIR)/SuiteSparse-$(LIBSUITESPARSE_VER)/source-extracted: $(SRCCACHE)/SuiteSparse-$(LIBSUITESPARSE_VER).tar.gz $(JLCHECKSUM) $< @@ -48,19 +36,16 @@ $(BUILDDIR)/SuiteSparse-$(LIBSUITESPARSE_VER)/source-extracted: $(SRCCACHE)/Suit checksum-libsuitesparse: $(SRCCACHE)/SuiteSparse-$(LIBSUITESPARSE_VER).tar.gz $(JLCHECKSUM) $< -$(BUILDDIR)/SuiteSparse-$(LIBSUITESPARSE_VER)/SuiteSparse-shlib.patch-applied: $(BUILDDIR)/SuiteSparse-$(LIBSUITESPARSE_VER)/source-extracted - cd $(dir $@) && patch -p1 < $(SRCDIR)/patches/SuiteSparse-shlib.patch - echo 1 > $@ -$(BUILDDIR)/SuiteSparse-$(LIBSUITESPARSE_VER)/build-compiled: $(BUILDDIR)/SuiteSparse-$(LIBSUITESPARSE_VER)/SuiteSparse-shlib.patch-applied - $(BUILDDIR)/SuiteSparse-$(LIBSUITESPARSE_VER)/build-compiled: | $(build_prefix)/manifest/blastrampoline $(BUILDDIR)/SuiteSparse-$(LIBSUITESPARSE_VER)/build-compiled: $(BUILDDIR)/SuiteSparse-$(LIBSUITESPARSE_VER)/source-extracted - $(MAKE) -C $(dir $<)SuiteSparse_config library config $(LIBSUITESPARSE_MFLAGS) - $(INSTALL_NAME_CMD)libsuitesparseconfig.$(SHLIB_EXT) $(dir $<)lib/libsuitesparseconfig.$(SHLIB_EXT) - for PROJ in $(LIBSUITESPARSE_PROJECTS); do \ - $(MAKE) -C $(dir $<)$${PROJ} library $(LIBSUITESPARSE_MFLAGS) || exit 1; \ - $(INSTALL_NAME_CMD)lib`echo $${PROJ} | tr A-Z a-z`.$(SHLIB_EXT) $(dir $<)lib/lib`echo $${PROJ} | tr A-Z a-z`.$(SHLIB_EXT) || exit 1; \ + cd $(dir $<); \ + for PROJ in SuiteSparse_config $(LIBSUITESPARSE_PROJECTS); do \ + cd $${PROJ}/build || exit 1; \ + $(CMAKE) .. $(LIBSUITESPARSE_CMAKE_FLAGS) || exit 1; \ + make || exit 1; \ + make install || exit 1; \ + cd ../..; \ done echo 1 > $@ @@ -78,11 +63,6 @@ $(BUILDDIR)/SuiteSparse-$(LIBSUITESPARSE_VER)/build-checked: $(BUILDDIR)/SuiteSp UNINSTALL_suitesparse := $(LIBSUITESPARSE_VER) manual_suitesparse $(LIBSUITESPARSE_LIBS) $(build_prefix)/manifest/libsuitesparse: $(BUILDDIR)/SuiteSparse-$(LIBSUITESPARSE_VER)/build-compiled | $(build_prefix)/manifest $(build_shlibdir) - for lib in $(LIBSUITESPARSE_LIBS); do \ - cp -a $(dir $<)lib/lib$${lib} $(build_shlibdir) || exit 1; \ - done - #cp -a $(dir $<)lib/* $(build_shlibdir) - #cp -a $(dir $<)include/* $(build_includedir) echo $(UNINSTALL_libsuitesparse) > $@ clean-libsuitesparse: uninstall-libsuitesparse diff --git a/deps/libsuitesparse.version b/deps/libsuitesparse.version index 2237db6f2d116..867e52304477c 100644 --- a/deps/libsuitesparse.version +++ b/deps/libsuitesparse.version @@ -2,4 +2,6 @@ LIBSUITESPARSE_JLL_NAME := SuiteSparse ## source build -LIBSUITESPARSE_VER := 5.10.1 +LIBSUITESPARSE_VER := 7.2.0 +LIBSUITESPARSE_BRANCH=guard-CXX_Standard +LIBSUITESPARSE_SHA1=1b4edf467637dbf33a26eee9a6c20afa40c7c5ea diff --git a/stdlib/SparseArrays.version b/stdlib/SparseArrays.version index d4a548daef5d7..b29ce9b0306e1 100644 --- a/stdlib/SparseArrays.version +++ b/stdlib/SparseArrays.version @@ -1,4 +1,4 @@ SPARSEARRAYS_BRANCH = main -SPARSEARRAYS_SHA1 = 8affe9e499379616e33fc60a24bb31500e8423d7 +SPARSEARRAYS_SHA1 = 2c7f4d6d839e9a97027454a037bfa004c1eb34b0 SPARSEARRAYS_GIT_URL := https://github.com/JuliaSparse/SparseArrays.jl.git SPARSEARRAYS_TAR_URL = https://api.github.com/repos/JuliaSparse/SparseArrays.jl/tarball/$1 diff --git a/stdlib/SuiteSparse_jll/Project.toml b/stdlib/SuiteSparse_jll/Project.toml index d1fb2c25fa68b..dd88fc967079b 100644 --- a/stdlib/SuiteSparse_jll/Project.toml +++ b/stdlib/SuiteSparse_jll/Project.toml @@ -1,6 +1,6 @@ name = "SuiteSparse_jll" uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "5.10.1+6" +version = "7.2.0+0" [deps] libblastrampoline_jll = "8e850b90-86db-534c-a0d3-1478176c7d93" @@ -9,7 +9,7 @@ Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" Artifacts = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" [compat] -julia = "1.7" +julia = "1.9" [extras] Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/stdlib/SuiteSparse_jll/src/SuiteSparse_jll.jl b/stdlib/SuiteSparse_jll/src/SuiteSparse_jll.jl index a347a91721bad..f245759aaf383 100644 --- a/stdlib/SuiteSparse_jll/src/SuiteSparse_jll.jl +++ b/stdlib/SuiteSparse_jll/src/SuiteSparse_jll.jl @@ -54,31 +54,31 @@ if Sys.iswindows() const libsuitesparseconfig = "libsuitesparseconfig.dll" const libumfpack = "libumfpack.dll" elseif Sys.isapple() - const libamd = "@rpath/libamd.2.dylib" - const libbtf = "@rpath/libbtf.1.dylib" - const libcamd = "@rpath/libcamd.2.dylib" - const libccolamd = "@rpath/libccolamd.2.dylib" - const libcholmod = "@rpath/libcholmod.3.dylib" - const libcolamd = "@rpath/libcolamd.2.dylib" - const libklu = "@rpath/libklu.1.dylib" - const libldl = "@rpath/libldl.2.dylib" - const librbio = "@rpath/librbio.2.dylib" - const libspqr = "@rpath/libspqr.2.dylib" - const libsuitesparseconfig = "@rpath/libsuitesparseconfig.5.dylib" - const libumfpack = "@rpath/libumfpack.5.dylib" + const libamd = "@rpath/libamd.3.dylib" + const libbtf = "@rpath/libbtf.2.dylib" + const libcamd = "@rpath/libcamd.3.dylib" + const libccolamd = "@rpath/libccolamd.3.dylib" + const libcholmod = "@rpath/libcholmod.4.dylib" + const libcolamd = "@rpath/libcolamd.3.dylib" + const libklu = "@rpath/libklu.2.dylib" + const libldl = "@rpath/libldl.3.dylib" + const librbio = "@rpath/librbio.4.dylib" + const libspqr = "@rpath/libspqr.4.dylib" + const libsuitesparseconfig = "@rpath/libsuitesparseconfig.7.dylib" + const libumfpack = "@rpath/libumfpack.6.dylib" else - const libamd = "libamd.so.2" - const libbtf = "libbtf.so.1" - const libcamd = "libcamd.so.2" - const libccolamd = "libccolamd.so.2" - const libcholmod = "libcholmod.so.3" - const libcolamd = "libcolamd.so.2" - const libklu = "libklu.so.1" - const libldl = "libldl.so.2" - const librbio = "librbio.so.2" - const libspqr = "libspqr.so.2" - const libsuitesparseconfig = "libsuitesparseconfig.so.5" - const libumfpack = "libumfpack.so.5" + const libamd = "libamd.so.3" + const libbtf = "libbtf.so.2" + const libcamd = "libcamd.so.3" + const libccolamd = "libccolamd.so.3" + const libcholmod = "libcholmod.so.4" + const libcolamd = "libcolamd.so.3" + const libklu = "libklu.so.2" + const libldl = "libldl.so.3" + const librbio = "librbio.so.4" + const libspqr = "libspqr.so.4" + const libsuitesparseconfig = "libsuitesparseconfig.so.7" + const libumfpack = "libumfpack.so.6" end function __init__() diff --git a/stdlib/SuiteSparse_jll/test/runtests.jl b/stdlib/SuiteSparse_jll/test/runtests.jl index ca356951f99e2..d6d82a73e4a57 100644 --- a/stdlib/SuiteSparse_jll/test/runtests.jl +++ b/stdlib/SuiteSparse_jll/test/runtests.jl @@ -2,6 +2,10 @@ using Test, SuiteSparse_jll +# SuiteSparse only uses SUITESPARSE_MAIN_VERSION and SUITESPARSE_SUB_VERSION to compute its version +# The SUITESPARSE_SUBSUB_VERSION is not used +# TODO before release: update to 7020 or above when upstreamed. +# This should be safe and unecessary since we specify exact version of the BB JLL. @testset "SuiteSparse_jll" begin - @test ccall((:SuiteSparse_version, libsuitesparseconfig), Cint, (Ptr{Cint},), C_NULL) == 5010 + @test ccall((:SuiteSparse_version, libsuitesparseconfig), Cint, (Ptr{Cint},), C_NULL) > 7000 end From 8fd5f279c8c81a8e59dec3852235c7dd5c88b143 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 13 Jul 2023 14:24:30 -0400 Subject: [PATCH 026/413] improve cat design / performance (#49322) This used to make a lot of references to design issues with the SparseArrays package (https://github.com/JuliaLang/julia/issues/2326 / https://github.com/JuliaLang/julia/pull/20815), which result in a non-sensical dispatch arrangement, and contribute to a slow loading experience do to the nonsense Unions that must be checked by subtyping. (cherry picked from commit 5a922fadfef083b83d983ac84f49a4460baa42ab) --- base/abstractarray.jl | 50 +++++++++---------- base/array.jl | 12 ----- .../md5 | 1 - .../sha512 | 1 - .../md5 | 1 + .../sha512 | 1 + stdlib/LinearAlgebra/src/special.jl | 26 ++-------- stdlib/LinearAlgebra/src/uniformscaling.jl | 14 +++--- stdlib/SparseArrays.version | 2 +- test/abstractarray.jl | 50 +++++++++---------- 10 files changed, 63 insertions(+), 95 deletions(-) delete mode 100644 deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/md5 delete mode 100644 deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/sha512 create mode 100644 deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/md5 create mode 100644 deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/sha512 diff --git a/base/abstractarray.jl b/base/abstractarray.jl index 1417987847ec4..cfc5078cb005e 100644 --- a/base/abstractarray.jl +++ b/base/abstractarray.jl @@ -1651,7 +1651,7 @@ function _typed_hcat(::Type{T}, A::AbstractVecOrTuple{AbstractVecOrMat}) where T for j = 1:nargs Aj = A[j] if size(Aj, 1) != nrows - throw(ArgumentError("number of rows of each array must match (got $(map(x->size(x,1), A)))")) + throw(DimensionMismatch("number of rows of each array must match (got $(map(x->size(x,1), A)))")) end dense &= isa(Aj,Array) nd = ndims(Aj) @@ -1686,7 +1686,7 @@ function _typed_vcat(::Type{T}, A::AbstractVecOrTuple{AbstractVecOrMat}) where T ncols = size(A[1], 2) for j = 2:nargs if size(A[j], 2) != ncols - throw(ArgumentError("number of columns of each array must match (got $(map(x->size(x,2), A)))")) + throw(DimensionMismatch("number of columns of each array must match (got $(map(x->size(x,2), A)))")) end end B = similar(A[1], T, nrows, ncols) @@ -1984,16 +1984,14 @@ julia> cat(1, [2], [3;;]; dims=Val(2)) # The specializations for 1 and 2 inputs are important # especially when running with --inline=no, see #11158 -# The specializations for Union{AbstractVecOrMat,Number} are necessary -# to have more specialized methods here than in LinearAlgebra/uniformscaling.jl vcat(A::AbstractArray) = cat(A; dims=Val(1)) vcat(A::AbstractArray, B::AbstractArray) = cat(A, B; dims=Val(1)) vcat(A::AbstractArray...) = cat(A...; dims=Val(1)) -vcat(A::Union{AbstractVecOrMat,Number}...) = cat(A...; dims=Val(1)) +vcat(A::Union{AbstractArray,Number}...) = cat(A...; dims=Val(1)) hcat(A::AbstractArray) = cat(A; dims=Val(2)) hcat(A::AbstractArray, B::AbstractArray) = cat(A, B; dims=Val(2)) hcat(A::AbstractArray...) = cat(A...; dims=Val(2)) -hcat(A::Union{AbstractVecOrMat,Number}...) = cat(A...; dims=Val(2)) +hcat(A::Union{AbstractArray,Number}...) = cat(A...; dims=Val(2)) typed_vcat(T::Type, A::AbstractArray) = _cat_t(Val(1), T, A) typed_vcat(T::Type, A::AbstractArray, B::AbstractArray) = _cat_t(Val(1), T, A, B) @@ -2055,8 +2053,8 @@ julia> hvcat((2,2,2), a,b,c,d,e,f) == hvcat(2, a,b,c,d,e,f) true ``` """ -hvcat(rows::Tuple{Vararg{Int}}, xs::AbstractVecOrMat...) = typed_hvcat(promote_eltype(xs...), rows, xs...) -hvcat(rows::Tuple{Vararg{Int}}, xs::AbstractVecOrMat{T}...) where {T} = typed_hvcat(T, rows, xs...) +hvcat(rows::Tuple{Vararg{Int}}, xs::AbstractArray...) = typed_hvcat(promote_eltype(xs...), rows, xs...) +hvcat(rows::Tuple{Vararg{Int}}, xs::AbstractArray{T}...) where {T} = typed_hvcat(T, rows, xs...) function typed_hvcat(::Type{T}, rows::Tuple{Vararg{Int}}, as::AbstractVecOrMat...) where T nbr = length(rows) # number of block rows @@ -2084,16 +2082,16 @@ function typed_hvcat(::Type{T}, rows::Tuple{Vararg{Int}}, as::AbstractVecOrMat.. Aj = as[a+j-1] szj = size(Aj,2) if size(Aj,1) != szi - throw(ArgumentError("mismatched height in block row $(i) (expected $szi, got $(size(Aj,1)))")) + throw(DimensionMismatch("mismatched height in block row $(i) (expected $szi, got $(size(Aj,1)))")) end if c-1+szj > nc - throw(ArgumentError("block row $(i) has mismatched number of columns (expected $nc, got $(c-1+szj))")) + throw(DimensionMismatch("block row $(i) has mismatched number of columns (expected $nc, got $(c-1+szj))")) end out[r:r-1+szi, c:c-1+szj] = Aj c += szj end if c != nc+1 - throw(ArgumentError("block row $(i) has mismatched number of columns (expected $nc, got $(c-1))")) + throw(DimensionMismatch("block row $(i) has mismatched number of columns (expected $nc, got $(c-1))")) end r += szi a += rows[i] @@ -2115,7 +2113,7 @@ function hvcat(rows::Tuple{Vararg{Int}}, xs::T...) where T<:Number k = 1 @inbounds for i=1:nr if nc != rows[i] - throw(ArgumentError("row $(i) has mismatched number of columns (expected $nc, got $(rows[i]))")) + throw(DimensionMismatch("row $(i) has mismatched number of columns (expected $nc, got $(rows[i]))")) end for j=1:nc a[i,j] = xs[k] @@ -2144,14 +2142,14 @@ end hvcat(rows::Tuple{Vararg{Int}}, xs::Number...) = typed_hvcat(promote_typeof(xs...), rows, xs...) hvcat(rows::Tuple{Vararg{Int}}, xs...) = typed_hvcat(promote_eltypeof(xs...), rows, xs...) # the following method is needed to provide a more specific one compared to LinearAlgebra/uniformscaling.jl -hvcat(rows::Tuple{Vararg{Int}}, xs::Union{AbstractVecOrMat,Number}...) = typed_hvcat(promote_eltypeof(xs...), rows, xs...) +hvcat(rows::Tuple{Vararg{Int}}, xs::Union{AbstractArray,Number}...) = typed_hvcat(promote_eltypeof(xs...), rows, xs...) function typed_hvcat(::Type{T}, rows::Tuple{Vararg{Int}}, xs::Number...) where T nr = length(rows) nc = rows[1] for i = 2:nr if nc != rows[i] - throw(ArgumentError("row $(i) has mismatched number of columns (expected $nc, got $(rows[i]))")) + throw(DimensionMismatch("row $(i) has mismatched number of columns (expected $nc, got $(rows[i]))")) end end hvcat_fill!(Matrix{T}(undef, nr, nc), xs) @@ -2319,7 +2317,7 @@ function _typed_hvncat(::Type{T}, ::Val{N}, as::AbstractArray...) where {T, N} Ndim += cat_size(as[i], N) nd = max(nd, cat_ndims(as[i])) for d ∈ 1:N - 1 - cat_size(as[1], d) == cat_size(as[i], d) || throw(ArgumentError("mismatched size along axis $d in element $i")) + cat_size(as[1], d) == cat_size(as[i], d) || throw(DimensionMismatch("mismatched size along axis $d in element $i")) end end @@ -2346,7 +2344,7 @@ function _typed_hvncat(::Type{T}, ::Val{N}, as...) where {T, N} nd = max(nd, cat_ndims(as[i])) for d ∈ 1:N-1 cat_size(as[i], d) == 1 || - throw(ArgumentError("all dimensions of element $i other than $N must be of length 1")) + throw(DimensionMismatch("all dimensions of element $i other than $N must be of length 1")) end end @@ -2463,7 +2461,7 @@ function _typed_hvncat_dims(::Type{T}, dims::NTuple{N, Int}, row_first::Bool, as for dd ∈ 1:N dd == d && continue if cat_size(as[startelementi], dd) != cat_size(as[i], dd) - throw(ArgumentError("incompatible shape in element $i")) + throw(DimensionMismatch("incompatible shape in element $i")) end end end @@ -2500,18 +2498,18 @@ function _typed_hvncat_dims(::Type{T}, dims::NTuple{N, Int}, row_first::Bool, as elseif currentdims[d] < outdims[d] # dimension in progress break else # exceeded dimension - throw(ArgumentError("argument $i has too many elements along axis $d")) + throw(DimensionMismatch("argument $i has too many elements along axis $d")) end end end elseif currentdims[d1] > outdims[d1] # exceeded dimension - throw(ArgumentError("argument $i has too many elements along axis $d1")) + throw(DimensionMismatch("argument $i has too many elements along axis $d1")) end end outlen = prod(outdims) elementcount == outlen || - throw(ArgumentError("mismatched number of elements; expected $(outlen), got $(elementcount)")) + throw(DimensionMismatch("mismatched number of elements; expected $(outlen), got $(elementcount)")) # copy into final array A = cat_similar(as[1], T, outdims) @@ -2572,8 +2570,8 @@ function _typed_hvncat_shape(::Type{T}, shape::NTuple{N, Tuple}, row_first, as:: if d == 1 || i == 1 || wasstartblock currentdims[d] += dsize elseif dsize != cat_size(as[i - 1], ad) - throw(ArgumentError("argument $i has a mismatched number of elements along axis $ad; \ - expected $(cat_size(as[i - 1], ad)), got $dsize")) + throw(DimensionMismatch("argument $i has a mismatched number of elements along axis $ad; \ + expected $(cat_size(as[i - 1], ad)), got $dsize")) end wasstartblock = blockcounts[d] == 1 # remember for next dimension @@ -2583,15 +2581,15 @@ function _typed_hvncat_shape(::Type{T}, shape::NTuple{N, Tuple}, row_first, as:: if outdims[d] == -1 outdims[d] = currentdims[d] elseif outdims[d] != currentdims[d] - throw(ArgumentError("argument $i has a mismatched number of elements along axis $ad; \ - expected $(abs(outdims[d] - (currentdims[d] - dsize))), got $dsize")) + throw(DimensionMismatch("argument $i has a mismatched number of elements along axis $ad; \ + expected $(abs(outdims[d] - (currentdims[d] - dsize))), got $dsize")) end currentdims[d] = 0 blockcounts[d] = 0 shapepos[d] += 1 d > 1 && (blockcounts[d - 1] == 0 || - throw(ArgumentError("shape in level $d is inconsistent; level counts must nest \ - evenly into each other"))) + throw(DimensionMismatch("shape in level $d is inconsistent; level counts must nest \ + evenly into each other"))) end end end diff --git a/base/array.jl b/base/array.jl index 3a12b38c5bc26..825b5f9f7e206 100644 --- a/base/array.jl +++ b/base/array.jl @@ -2041,18 +2041,6 @@ function vcat(arrays::Vector{T}...) where T end vcat(A::Vector...) = cat(A...; dims=Val(1)) # more special than SparseArrays's vcat -# disambiguation with LinAlg/special.jl -# Union{Number,Vector,Matrix} is for LinearAlgebra._DenseConcatGroup -# VecOrMat{T} is for LinearAlgebra._TypedDenseConcatGroup -hcat(A::Union{Number,Vector,Matrix}...) = cat(A...; dims=Val(2)) -hcat(A::VecOrMat{T}...) where {T} = typed_hcat(T, A...) -vcat(A::Union{Number,Vector,Matrix}...) = cat(A...; dims=Val(1)) -vcat(A::VecOrMat{T}...) where {T} = typed_vcat(T, A...) -hvcat(rows::Tuple{Vararg{Int}}, xs::Union{Number,Vector,Matrix}...) = - typed_hvcat(promote_eltypeof(xs...), rows, xs...) -hvcat(rows::Tuple{Vararg{Int}}, xs::VecOrMat{T}...) where {T} = - typed_hvcat(T, rows, xs...) - _cat(n::Integer, x::Integer...) = reshape([x...], (ntuple(Returns(1), n-1)..., length(x))) ## find ## diff --git a/deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/md5 b/deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/md5 deleted file mode 100644 index 21131a800d4af..0000000000000 --- a/deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -0369c2679e8b834009526dd4f402cfd8 diff --git a/deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/sha512 b/deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/sha512 deleted file mode 100644 index df3b4cc3736e1..0000000000000 --- a/deps/checksums/SparseArrays-2c7f4d6d839e9a97027454a037bfa004c1eb34b0.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -b2573398a8e8f5bcd8195cc3aa68103b2b5ea66c1835d4bc4d808fb1e0d3fbd46cc2caa04a4f49813a4a4a7f88d2f95789fa080d1d940c0291b09416be0fd1e6 diff --git a/deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/md5 b/deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/md5 new file mode 100644 index 0000000000000..55bc533861fc0 --- /dev/null +++ b/deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/md5 @@ -0,0 +1 @@ +e59c1c57b97e17a73eba758d65022bd7 diff --git a/deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/sha512 b/deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/sha512 new file mode 100644 index 0000000000000..2213bfe87ccfc --- /dev/null +++ b/deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/sha512 @@ -0,0 +1 @@ +ad88ebe77aaf1580e6d7ee7649ac5b812a23b9d9bf947f26babe9dd79902f6da11aa69bf63f22f67f6eae92a4c6e665cc3b950bb7c648c623e9cb4b9cb4daac4 diff --git a/stdlib/LinearAlgebra/src/special.jl b/stdlib/LinearAlgebra/src/special.jl index 1744a2301f48a..885f29fa1417b 100644 --- a/stdlib/LinearAlgebra/src/special.jl +++ b/stdlib/LinearAlgebra/src/special.jl @@ -330,27 +330,11 @@ end ==(A::Bidiagonal, B::SymTridiagonal) = iszero(_evview(B)) && iszero(A.ev) && A.dv == B.dv ==(B::SymTridiagonal, A::Bidiagonal) = A == B -# concatenation -const _SpecialArrays = Union{Diagonal, Bidiagonal, Tridiagonal, SymTridiagonal} -const _Symmetric_DenseArrays{T,A<:Matrix} = Symmetric{T,A} -const _Hermitian_DenseArrays{T,A<:Matrix} = Hermitian{T,A} -const _Triangular_DenseArrays{T,A<:Matrix} = AbstractTriangular{T,A} -const _Annotated_DenseArrays = Union{_SpecialArrays, _Triangular_DenseArrays, _Symmetric_DenseArrays, _Hermitian_DenseArrays} -const _Annotated_Typed_DenseArrays{T} = Union{_Triangular_DenseArrays{T}, _Symmetric_DenseArrays{T}, _Hermitian_DenseArrays{T}} -const _DenseConcatGroup = Union{Number, Vector, Adjoint{<:Any,<:Vector}, Transpose{<:Any,<:Vector}, Matrix, _Annotated_DenseArrays} -const _TypedDenseConcatGroup{T} = Union{Vector{T}, Adjoint{T,Vector{T}}, Transpose{T,Vector{T}}, Matrix{T}, _Annotated_Typed_DenseArrays{T}} - -promote_to_array_type(::Tuple{Vararg{Union{_DenseConcatGroup,UniformScaling}}}) = Matrix - -Base._cat(dims, xs::_DenseConcatGroup...) = Base._cat_t(dims, promote_eltype(xs...), xs...) -vcat(A::_DenseConcatGroup...) = Base.typed_vcat(promote_eltype(A...), A...) -hcat(A::_DenseConcatGroup...) = Base.typed_hcat(promote_eltype(A...), A...) -hvcat(rows::Tuple{Vararg{Int}}, xs::_DenseConcatGroup...) = Base.typed_hvcat(promote_eltype(xs...), rows, xs...) -# For performance, specially handle the case where the matrices/vectors have homogeneous eltype -Base._cat(dims, xs::_TypedDenseConcatGroup{T}...) where {T} = Base._cat_t(dims, T, xs...) -vcat(A::_TypedDenseConcatGroup{T}...) where {T} = Base.typed_vcat(T, A...) -hcat(A::_TypedDenseConcatGroup{T}...) where {T} = Base.typed_hcat(T, A...) -hvcat(rows::Tuple{Vararg{Int}}, xs::_TypedDenseConcatGroup{T}...) where {T} = Base.typed_hvcat(T, rows, xs...) +# TODO: remove these deprecations (used by SparseArrays in the past) +const _DenseConcatGroup = Union{} +const _SpecialArrays = Union{} + +promote_to_array_type(::Tuple) = Matrix # factorizations function cholesky(S::RealHermSymComplexHerm{<:Real,<:SymTridiagonal}, ::NoPivot = NoPivot(); check::Bool = true) diff --git a/stdlib/LinearAlgebra/src/uniformscaling.jl b/stdlib/LinearAlgebra/src/uniformscaling.jl index 21ae8a1bb913a..0b3168113acf7 100644 --- a/stdlib/LinearAlgebra/src/uniformscaling.jl +++ b/stdlib/LinearAlgebra/src/uniformscaling.jl @@ -408,7 +408,7 @@ end # so that we can re-use this code for sparse-matrix hcat etcetera. promote_to_arrays_(n::Int, ::Type, a::Number) = a promote_to_arrays_(n::Int, ::Type{Matrix}, J::UniformScaling{T}) where {T} = Matrix(J, n, n) -promote_to_arrays_(n::Int, ::Type, A::AbstractVecOrMat) = A +promote_to_arrays_(n::Int, ::Type, A::AbstractArray) = A promote_to_arrays(n,k, ::Type) = () promote_to_arrays(n,k, ::Type{T}, A) where {T} = (promote_to_arrays_(n[k], T, A),) promote_to_arrays(n,k, ::Type{T}, A, B) where {T} = @@ -417,17 +417,16 @@ promote_to_arrays(n,k, ::Type{T}, A, B, C) where {T} = (promote_to_arrays_(n[k], T, A), promote_to_arrays_(n[k+1], T, B), promote_to_arrays_(n[k+2], T, C)) promote_to_arrays(n,k, ::Type{T}, A, B, Cs...) where {T} = (promote_to_arrays_(n[k], T, A), promote_to_arrays_(n[k+1], T, B), promote_to_arrays(n,k+2, T, Cs...)...) -promote_to_array_type(A::Tuple{Vararg{Union{AbstractVecOrMat,UniformScaling,Number}}}) = Matrix _us2number(A) = A _us2number(J::UniformScaling) = J.λ for (f, _f, dim, name) in ((:hcat, :_hcat, 1, "rows"), (:vcat, :_vcat, 2, "cols")) @eval begin - @inline $f(A::Union{AbstractVecOrMat,UniformScaling}...) = $_f(A...) + @inline $f(A::Union{AbstractArray,UniformScaling}...) = $_f(A...) # if there's a Number present, J::UniformScaling must be 1x1-dimensional - @inline $f(A::Union{AbstractVecOrMat,UniformScaling,Number}...) = $f(map(_us2number, A)...) - function $_f(A::Union{AbstractVecOrMat,UniformScaling,Number}...; array_type = promote_to_array_type(A)) + @inline $f(A::Union{AbstractArray,UniformScaling,Number}...) = $f(map(_us2number, A)...) + function $_f(A::Union{AbstractArray,UniformScaling,Number}...; array_type = promote_to_array_type(A)) n = -1 for a in A if !isa(a, UniformScaling) @@ -445,9 +444,8 @@ for (f, _f, dim, name) in ((:hcat, :_hcat, 1, "rows"), (:vcat, :_vcat, 2, "cols" end end -hvcat(rows::Tuple{Vararg{Int}}, A::Union{AbstractVecOrMat,UniformScaling}...) = _hvcat(rows, A...) -hvcat(rows::Tuple{Vararg{Int}}, A::Union{AbstractVecOrMat,UniformScaling,Number}...) = _hvcat(rows, A...) -function _hvcat(rows::Tuple{Vararg{Int}}, A::Union{AbstractVecOrMat,UniformScaling,Number}...; array_type = promote_to_array_type(A)) +hvcat(rows::Tuple{Vararg{Int}}, A::Union{AbstractArray,UniformScaling,Number}...) = _hvcat(rows, A...) +function _hvcat(rows::Tuple{Vararg{Int}}, A::Union{AbstractArray,UniformScaling,Number}...; array_type = promote_to_array_type(A)) require_one_based_indexing(A...) nr = length(rows) sum(rows) == length(A) || throw(ArgumentError("mismatch between row sizes and number of arguments")) diff --git a/stdlib/SparseArrays.version b/stdlib/SparseArrays.version index b29ce9b0306e1..4290a1d2fc4ca 100644 --- a/stdlib/SparseArrays.version +++ b/stdlib/SparseArrays.version @@ -1,4 +1,4 @@ SPARSEARRAYS_BRANCH = main -SPARSEARRAYS_SHA1 = 2c7f4d6d839e9a97027454a037bfa004c1eb34b0 +SPARSEARRAYS_SHA1 = b4b0e721ada6e8cf5f6391aff4db307be69b0401 SPARSEARRAYS_GIT_URL := https://github.com/JuliaSparse/SparseArrays.jl.git SPARSEARRAYS_TAR_URL = https://api.github.com/repos/JuliaSparse/SparseArrays.jl/tarball/$1 diff --git a/test/abstractarray.jl b/test/abstractarray.jl index 912e0d5883d12..6e2294fec1f64 100644 --- a/test/abstractarray.jl +++ b/test/abstractarray.jl @@ -683,8 +683,8 @@ function test_cat(::Type{TestAbstractArray}) @test hcat() == Any[] @test vcat(1, 1.0, 3, 3.0) == [1.0, 1.0, 3.0, 3.0] @test hcat(1, 1.0, 3, 3.0) == [1.0 1.0 3.0 3.0] - @test_throws ArgumentError hcat(B1, B2) - @test_throws ArgumentError vcat(C1, C2) + @test_throws DimensionMismatch hcat(B1, B2) + @test_throws DimensionMismatch vcat(C1, C2) @test vcat(B) == B @test hcat(B) == B @@ -713,9 +713,9 @@ function test_cat(::Type{TestAbstractArray}) end @test_throws ArgumentError hvcat(7, 1:20...) - @test_throws ArgumentError hvcat((2), C1, C3) - @test_throws ArgumentError hvcat((1), C1, C2) - @test_throws ArgumentError hvcat((1), C2, C3) + @test_throws DimensionMismatch hvcat((2), C1, C3) + @test_throws DimensionMismatch hvcat((1), C1, C2) + @test_throws DimensionMismatch hvcat((1), C2, C3) tup = tuple(rand(1:10, i)...) @test hvcat(tup) == [] @@ -724,8 +724,8 @@ function test_cat(::Type{TestAbstractArray}) @test_throws ArgumentError hvcat((2, 2), 1, 2, 3, 4, 5) @test_throws ArgumentError Base.typed_hvcat(Int, (2, 2), 1, 2, 3, 4, 5) # check for # of columns mismatch b/w rows - @test_throws ArgumentError hvcat((3, 2), 1, 2, 3, 4, 5, 6) - @test_throws ArgumentError Base.typed_hvcat(Int, (3, 2), 1, 2, 3, 4, 5, 6) + @test_throws DimensionMismatch hvcat((3, 2), 1, 2, 3, 4, 5, 6) + @test_throws DimensionMismatch Base.typed_hvcat(Int, (3, 2), 1, 2, 3, 4, 5, 6) # 18395 @test isa(Any["a" 5; 2//3 1.0][2,1], Rational{Int}) @@ -1344,7 +1344,7 @@ end @test Int[t...; 3 4] == [1 2; 3 4] @test Int[0 t...; t... 0] == [0 1 2; 1 2 0] - @test_throws ArgumentError Int[t...; 3 4 5] + @test_throws DimensionMismatch Int[t...; 3 4 5] end @testset "issue #39896, modified getindex " begin @@ -1398,15 +1398,15 @@ using Base: typed_hvncat @test [1;;] == fill(1, (1,1)) for v in (1, fill(1), fill(1,1,1), fill(1, 1, 1, 1)) - @test_throws ArgumentError [v; v;; v] - @test_throws ArgumentError [v; v;; v; v; v] - @test_throws ArgumentError [v; v; v;; v; v] - @test_throws ArgumentError [v; v;; v; v;;; v; v;; v; v;; v; v] - @test_throws ArgumentError [v; v;; v; v;;; v; v] - @test_throws ArgumentError [v; v;; v; v;;; v; v; v;; v; v] - @test_throws ArgumentError [v; v;; v; v;;; v; v;; v; v; v] + @test_throws DimensionMismatch [v; v;; v] + @test_throws DimensionMismatch [v; v;; v; v; v] + @test_throws DimensionMismatch [v; v; v;; v; v] + @test_throws DimensionMismatch [v; v;; v; v;;; v; v;; v; v;; v; v] + @test_throws DimensionMismatch [v; v;; v; v;;; v; v] + @test_throws DimensionMismatch [v; v;; v; v;;; v; v; v;; v; v] + @test_throws DimensionMismatch [v; v;; v; v;;; v; v;; v; v; v] # ensure a wrong shape with the right number of elements doesn't pass through - @test_throws ArgumentError [v; v;; v; v;;; v; v; v; v] + @test_throws DimensionMismatch [v; v;; v; v;;; v; v; v; v] @test [v; v;; v; v] == fill(1, ndims(v) == 3 ? (2, 2, 1) : (2,2)) @test [v; v;; v; v;;;] == fill(1, 2, 2, 1) @@ -1474,7 +1474,7 @@ using Base: typed_hvncat end # reject shapes that don't nest evenly between levels (e.g. 1 + 2 does not fit into 2) - @test_throws ArgumentError hvncat(((1, 2, 1), (2, 2), (4,)), true, [1 2], [3], [4], [1 2; 3 4]) + @test_throws DimensionMismatch hvncat(((1, 2, 1), (2, 2), (4,)), true, [1 2], [3], [4], [1 2; 3 4]) # zero-length arrays are handled appropriately @test [zeros(Int, 1, 2, 0) ;;; 1 3] == [1 3;;;] @@ -1489,18 +1489,18 @@ using Base: typed_hvncat for v1 ∈ (zeros(Int, 0, 0), zeros(Int, 0, 0, 0, 0), zeros(Int, 0, 0, 0, 0, 0, 0, 0)) for v2 ∈ (1, [1]) for v3 ∈ (2, [2]) - @test_throws ArgumentError [v1 ;;; v2] - @test_throws ArgumentError [v1 ;;; v2 v3] - @test_throws ArgumentError [v1 v1 ;;; v2 v3] + @test_throws DimensionMismatch [v1 ;;; v2] + @test_throws DimensionMismatch [v1 ;;; v2 v3] + @test_throws DimensionMismatch [v1 v1 ;;; v2 v3] end end end v1 = zeros(Int, 0, 0, 0) for v2 ∈ (1, [1]) for v3 ∈ (2, [2]) - @test_throws ArgumentError [v1 ;;; v2 v3] - @test_throws ArgumentError [v1 ;;; v2] - @test_throws ArgumentError [v1 v1 ;;; v2 v3] + @test_throws DimensionMismatch [v1 ;;; v2 v3] + @test_throws DimensionMismatch [v1 ;;; v2] + @test_throws DimensionMismatch [v1 v1 ;;; v2 v3] end end @@ -1568,8 +1568,8 @@ using Base: typed_hvncat @test Array{Int, 3}(undef, 0, 0, 0) == typed_hvncat(Int, 3) isa Array{Int, 3} # Issue 43933 - semicolon precedence mistake should produce an error - @test_throws ArgumentError [[1 1]; 2 ;; 3 ; [3 4]] - @test_throws ArgumentError [[1 ;;; 1]; 2 ;;; 3 ; [3 ;;; 4]] + @test_throws DimensionMismatch [[1 1]; 2 ;; 3 ; [3 4]] + @test_throws DimensionMismatch [[1 ;;; 1]; 2 ;;; 3 ; [3 ;;; 4]] @test [[1 2; 3 4] [5; 6]; [7 8] 9;;;] == [1 2 5; 3 4 6; 7 8 9;;;] From 2c3f79b21c1fb14bf6a630158c8b21d8537bc9df Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Mon, 17 Jul 2023 14:54:17 -0400 Subject: [PATCH 027/413] precompile: ensure globals are not accidentally created where disallowed (#50541) Usually this is caught by use of `eval`, but we should try to move away from that broad rule to specific functions such as this one, such that eventually we can remove that rule from `eval`. Fix #50538 (cherry picked from commit 3a9345c0b0157b6664ed5c28a9ff255cbc7357b0) --- src/module.c | 80 ++++++++++++++++++++++++++++++++-------------- src/staticdata.c | 6 ++++ src/toplevel.c | 24 ++++---------- test/precompile.jl | 31 ++++++++++++++++++ test/staged.jl | 2 ++ 5 files changed, 102 insertions(+), 41 deletions(-) diff --git a/src/module.c b/src/module.c index 89c4c6cdb674e..59bd308d99a41 100644 --- a/src/module.c +++ b/src/module.c @@ -190,16 +190,44 @@ static jl_binding_t *new_binding(jl_module_t *mod, jl_sym_t *name) return b; } +extern jl_mutex_t jl_modules_mutex; + +static void check_safe_newbinding(jl_module_t *m, jl_sym_t *var) +{ + if (jl_current_task->ptls->in_pure_callback) + jl_errorf("new globals cannot be created in a generated function"); + if (jl_options.incremental && jl_generating_output()) { + JL_LOCK(&jl_modules_mutex); + int open = ptrhash_has(&jl_current_modules, (void*)m); + if (!open && jl_module_init_order != NULL) { + size_t i, l = jl_array_len(jl_module_init_order); + for (i = 0; i < l; i++) { + if (m == (jl_module_t*)jl_array_ptr_ref(jl_module_init_order, i)) { + open = 1; + break; + } + } + } + JL_UNLOCK(&jl_modules_mutex); + if (!open) { + jl_errorf("Creating a new global in closed module `%s` (`%s`) breaks incremental compilation " + "because the side effects will not be permanent.", + jl_symbol_name(m->name), jl_symbol_name(var)); + } + } +} + static jl_module_t *jl_binding_dbgmodule(jl_binding_t *b, jl_module_t *m, jl_sym_t *var) JL_GLOBALLY_ROOTED; // get binding for assignment JL_DLLEXPORT jl_binding_t *jl_get_binding_wr(jl_module_t *m JL_PROPAGATES_ROOT, jl_sym_t *var) { jl_binding_t *b = jl_get_module_binding(m, var, 1); - - if (b) { - jl_binding_t *b2 = NULL; - if (!jl_atomic_cmpswap(&b->owner, &b2, b) && b2 != b) { + jl_binding_t *b2 = jl_atomic_load_relaxed(&b->owner); + if (b2 != b) { + if (b2 == NULL) + check_safe_newbinding(m, var); + if (b2 != NULL || (!jl_atomic_cmpswap(&b->owner, &b2, b) && b2 != b)) { jl_module_t *from = jl_binding_dbgmodule(b, m, var); if (from == m) jl_errorf("cannot assign a value to imported variable %s.%s", @@ -209,7 +237,6 @@ JL_DLLEXPORT jl_binding_t *jl_get_binding_wr(jl_module_t *m JL_PROPAGATES_ROOT, jl_symbol_name(from->name), jl_symbol_name(var), jl_symbol_name(m->name)); } } - return b; } @@ -223,29 +250,31 @@ JL_DLLEXPORT jl_module_t *jl_get_module_of_binding(jl_module_t *m, jl_sym_t *var } // get binding for adding a method -// like jl_get_binding_wr, but has different error paths +// like jl_get_binding_wr, but has different error paths and messages JL_DLLEXPORT jl_binding_t *jl_get_binding_for_method_def(jl_module_t *m, jl_sym_t *var) { jl_binding_t *b = jl_get_module_binding(m, var, 1); - - jl_binding_t *b2 = NULL; - if (!jl_atomic_cmpswap(&b->owner, &b2, b) && b2 != b) { - jl_value_t *f = jl_atomic_load_relaxed(&b2->value); - jl_module_t *from = jl_binding_dbgmodule(b, m, var); - if (f == NULL) { - // we must have implicitly imported this with using, so call jl_binding_dbgmodule to try to get the name of the module we got this from - jl_errorf("invalid method definition in %s: exported function %s.%s does not exist", - jl_symbol_name(m->name), jl_symbol_name(from->name), jl_symbol_name(var)); - } - // TODO: we might want to require explicitly importing types to add constructors - // or we might want to drop this error entirely - if (!b->imported && !(b2->constp && jl_is_type(f) && strcmp(jl_symbol_name(var), "=>") != 0)) { - jl_errorf("invalid method definition in %s: function %s.%s must be explicitly imported to be extended", - jl_symbol_name(m->name), jl_symbol_name(from->name), jl_symbol_name(var)); + jl_binding_t *b2 = jl_atomic_load_relaxed(&b->owner); + if (b2 != b) { + if (b2 == NULL) + check_safe_newbinding(m, var); + if (b2 != NULL || (!jl_atomic_cmpswap(&b->owner, &b2, b) && b2 != b)) { + jl_value_t *f = jl_atomic_load_relaxed(&b2->value); + jl_module_t *from = jl_binding_dbgmodule(b, m, var); + if (f == NULL) { + // we must have implicitly imported this with using, so call jl_binding_dbgmodule to try to get the name of the module we got this from + jl_errorf("invalid method definition in %s: exported function %s.%s does not exist", + jl_symbol_name(m->name), jl_symbol_name(from->name), jl_symbol_name(var)); + } + // TODO: we might want to require explicitly importing types to add constructors + // or we might want to drop this error entirely + if (!b->imported && !(b2->constp && jl_is_type(f) && strcmp(jl_symbol_name(var), "=>") != 0)) { + jl_errorf("invalid method definition in %s: function %s.%s must be explicitly imported to be extended", + jl_symbol_name(m->name), jl_symbol_name(from->name), jl_symbol_name(var)); + } + return b2; } - return b2; } - return b; } @@ -761,7 +790,10 @@ JL_DLLEXPORT void jl_set_global(jl_module_t *m JL_ROOTING_ARGUMENT, jl_sym_t *va JL_DLLEXPORT void jl_set_const(jl_module_t *m JL_ROOTING_ARGUMENT, jl_sym_t *var, jl_value_t *val JL_ROOTED_ARGUMENT) { // this function is mostly only used during initialization, so the data races here are not too important to us - jl_binding_t *bp = jl_get_binding_wr(m, var); + jl_binding_t *bp = jl_get_module_binding(m, var, 1); + jl_binding_t *b2 = NULL; + if (!jl_atomic_cmpswap(&bp->owner, &b2, bp) && b2 != bp) + jl_errorf("invalid redefinition of constant %s", jl_symbol_name(var)); if (jl_atomic_load_relaxed(&bp->value) == NULL) { jl_value_t *old_ty = NULL; jl_atomic_cmpswap_relaxed(&bp->ty, &old_ty, (jl_value_t*)jl_any_type); diff --git a/src/staticdata.c b/src/staticdata.c index df080bc68c88f..c05422fd10969 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -1234,6 +1234,12 @@ static void jl_write_values(jl_serializer_state *s) JL_GC_DISABLED jl_binding_t *b = (jl_binding_t*)v; if (b->globalref == NULL || jl_object_in_image((jl_value_t*)b->globalref->mod)) jl_error("Binding cannot be serialized"); // no way (currently) to recover its identity + // Assign type Any to any owned bindings that don't have a type. + // We don't want these accidentally managing to diverge later in different compilation units. + if (jl_atomic_load_relaxed(&b->owner) == b) { + jl_value_t *old_ty = NULL; + jl_atomic_cmpswap_relaxed(&b->ty, &old_ty, (jl_value_t*)jl_any_type); + } } } diff --git a/src/toplevel.c b/src/toplevel.c index 51ff93488426f..46ae3f3cf0314 100644 --- a/src/toplevel.c +++ b/src/toplevel.c @@ -944,8 +944,10 @@ JL_DLLEXPORT jl_value_t *jl_toplevel_eval(jl_module_t *m, jl_value_t *v) } // Check module `m` is open for `eval/include`, or throw an error. -static void jl_check_open_for(jl_module_t *m, const char* funcname) +JL_DLLEXPORT void jl_check_top_level_effect(jl_module_t *m, char *fname) { + if (jl_current_task->ptls->in_pure_callback) + jl_errorf("%s cannot be used in a generated function", fname); if (jl_options.incremental && jl_generating_output()) { if (m != jl_main_module) { // TODO: this was grand-fathered in JL_LOCK(&jl_modules_mutex); @@ -965,25 +967,15 @@ static void jl_check_open_for(jl_module_t *m, const char* funcname) jl_errorf("Evaluation into the closed module `%s` breaks incremental compilation " "because the side effects will not be permanent. " "This is likely due to some other module mutating `%s` with `%s` during " - "precompilation - don't do this.", name, name, funcname); + "precompilation - don't do this.", name, name, fname); } } } } -JL_DLLEXPORT void jl_check_top_level_effect(jl_module_t *m, char *fname) -{ - if (jl_current_task->ptls->in_pure_callback) - jl_errorf("%s cannot be used in a generated function", fname); - jl_check_open_for(m, fname); -} - JL_DLLEXPORT jl_value_t *jl_toplevel_eval_in(jl_module_t *m, jl_value_t *ex) { - jl_task_t *ct = jl_current_task; - if (ct->ptls->in_pure_callback) - jl_error("eval cannot be used in a generated function"); - jl_check_open_for(m, "eval"); + jl_check_top_level_effect(m, "eval"); jl_value_t *v = NULL; int last_lineno = jl_lineno; const char *last_filename = jl_filename; @@ -1029,10 +1021,7 @@ static jl_value_t *jl_parse_eval_all(jl_module_t *module, jl_value_t *text, if (!jl_is_string(text) || !jl_is_string(filename)) { jl_errorf("Expected `String`s for `text` and `filename`"); } - jl_task_t *ct = jl_current_task; - if (ct->ptls->in_pure_callback) - jl_error("cannot use include inside a generated function"); - jl_check_open_for(module, "include"); + jl_check_top_level_effect(module, "include"); jl_value_t *result = jl_nothing; jl_value_t *ast = NULL; @@ -1045,6 +1034,7 @@ static jl_value_t *jl_parse_eval_all(jl_module_t *module, jl_value_t *text, jl_errorf("jl_parse_all() must generate a top level expression"); } + jl_task_t *ct = jl_current_task; int last_lineno = jl_lineno; const char *last_filename = jl_filename; size_t last_age = ct->world_age; diff --git a/test/precompile.jl b/test/precompile.jl index 62d862c384040..d76a5a9a16f85 100644 --- a/test/precompile.jl +++ b/test/precompile.jl @@ -1771,6 +1771,37 @@ precompile_test_harness("Issue #48391") do load_path @test_throws ErrorException isless(x, x) end +precompile_test_harness("Issue #50538") do load_path + write(joinpath(load_path, "I50538.jl"), + """ + module I50538 + const newglobal = try + Base.newglobal = false + catch ex + ex isa ErrorException || rethrow() + ex + end + const newtype = try + Core.set_binding_type!(Base, :newglobal) + catch ex + ex isa ErrorException || rethrow() + ex + end + global undefglobal + end + """) + ji, ofile = Base.compilecache(Base.PkgId("I50538")) + @eval using I50538 + @test I50538.newglobal.msg == "Creating a new global in closed module `Base` (`newglobal`) breaks incremental compilation because the side effects will not be permanent." + @test I50538.newtype.msg == "Creating a new global in closed module `Base` (`newglobal`) breaks incremental compilation because the side effects will not be permanent." + @test_throws(ErrorException("cannot set type for global I50538.undefglobal. It already has a value or is already set to a different type."), + Core.set_binding_type!(I50538, :undefglobal, Int)) + Core.set_binding_type!(I50538, :undefglobal, Any) + @test Core.get_binding_type(I50538, :undefglobal) === Any + @test !isdefined(I50538, :undefglobal) +end + + empty!(Base.DEPOT_PATH) append!(Base.DEPOT_PATH, original_depot_path) empty!(Base.LOAD_PATH) diff --git a/test/staged.jl b/test/staged.jl index df351d8d47b96..5204f5f6ca777 100644 --- a/test/staged.jl +++ b/test/staged.jl @@ -308,6 +308,8 @@ end @generated function f33243() :(global x33243 = 2) end +@test_throws ErrorException f33243() +global x33243 @test f33243() === 2 @test x33243 === 2 From 208e9283545d211c33700774b6da72de1a6ed693 Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Tue, 18 Jul 2023 00:32:56 -0300 Subject: [PATCH 028/413] use atomic compare exchange when setting the GC mark-bit (#50576) Fixes https://github.com/JuliaLang/julia/issues/50574. (cherry picked from commit 2cee483bcedf7ad838a765581f9aace09b75f448) --- src/gc.c | 47 ++++++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/src/gc.c b/src/gc.c index aa07695ac8bc0..732684db332ed 100644 --- a/src/gc.c +++ b/src/gc.c @@ -799,7 +799,7 @@ STATIC_INLINE void gc_queue_big_marked(jl_ptls_t ptls, bigval_t *hdr, FORCE_INLINE int gc_try_setmark_tag(jl_taggedvalue_t *o, uint8_t mark_mode) JL_NOTSAFEPOINT { assert(gc_marked(mark_mode)); - uintptr_t tag = jl_atomic_load_relaxed((_Atomic(uintptr_t)*)&o->header); + uintptr_t tag = o->header; if (gc_marked(tag)) return 0; if (mark_reset_age) { @@ -813,9 +813,13 @@ FORCE_INLINE int gc_try_setmark_tag(jl_taggedvalue_t *o, uint8_t mark_mode) JL_N tag = tag | mark_mode; assert((tag & 0x3) == mark_mode); } - jl_atomic_store_relaxed((_Atomic(uintptr_t)*)&o->header, tag); //xchg here was slower than - verify_val(jl_valueof(o)); //potentially redoing work because of a stale tag. - return 1; + // XXX: note that marking not only sets the GC bits but also updates the + // page metadata for pool allocated objects. + // The second step is **not** idempotent, so we need a compare exchange here + // (instead of a pair of load&store) to avoid marking an object twice + tag = jl_atomic_exchange_relaxed((_Atomic(uintptr_t)*)&o->header, tag); + verify_val(jl_valueof(o)); + return !gc_marked(tag); } // This function should be called exactly once during marking for each big @@ -854,7 +858,7 @@ STATIC_INLINE void gc_setmark_pool_(jl_ptls_t ptls, jl_taggedvalue_t *o, if (mark_mode == GC_OLD_MARKED) { ptls->gc_cache.perm_scanned_bytes += page->osize; static_assert(sizeof(_Atomic(uint16_t)) == sizeof(page->nold), ""); - page->nold++; + jl_atomic_fetch_add_relaxed((_Atomic(uint16_t)*)&page->nold, 1); } else { ptls->gc_cache.scanned_bytes += page->osize; @@ -1377,27 +1381,20 @@ static jl_taggedvalue_t **gc_sweep_page(jl_gc_pool_t *p, jl_gc_pagemeta_t **allo nfree = (GC_PAGE_SZ - GC_PAGE_OFFSET) / osize; goto done; } - // note that `pg->nold` may not be accurate with multithreaded marking since - // two threads may race when trying to set the mark bit in `gc_try_setmark_tag`. - // We're basically losing a bit of precision in the sweep phase at the cost of - // making the mark phase considerably cheaper. - // See issue #50419 - if (jl_n_markthreads == 0) { - // For quick sweep, we might be able to skip the page if the page doesn't - // have any young live cell before marking. - if (!sweep_full && !pg->has_young) { - assert(!prev_sweep_full || pg->prev_nold >= pg->nold); - if (!prev_sweep_full || pg->prev_nold == pg->nold) { - // the position of the freelist begin/end in this page - // is stored in its metadata - if (pg->fl_begin_offset != (uint16_t)-1) { - *pfl = page_pfl_beg(pg); - pfl = (jl_taggedvalue_t**)page_pfl_end(pg); - } - freedall = 0; - nfree = pg->nfree; - goto done; + // For quick sweep, we might be able to skip the page if the page doesn't + // have any young live cell before marking. + if (!sweep_full && !pg->has_young) { + assert(!prev_sweep_full || pg->prev_nold >= pg->nold); + if (!prev_sweep_full || pg->prev_nold == pg->nold) { + // the position of the freelist begin/end in this page + // is stored in its metadata + if (pg->fl_begin_offset != (uint16_t)-1) { + *pfl = page_pfl_beg(pg); + pfl = (jl_taggedvalue_t**)page_pfl_end(pg); } + freedall = 0; + nfree = pg->nfree; + goto done; } } From 388c734310b5eb36b9bbb2822ab67af1bb9a332a Mon Sep 17 00:00:00 2001 From: "Steven G. Johnson" Date: Mon, 3 Jul 2023 14:27:12 -0400 Subject: [PATCH 029/413] add replace(io, str, patterns...) (#48625) (cherry picked from commit ce1b420ff12454e3414c8f37dea7c00979224ba5) --- NEWS.md | 2 ++ base/strings/util.jl | 72 ++++++++++++++++++++++++++++++++--------- doc/src/base/strings.md | 2 +- test/strings/util.jl | 22 +++++++++++++ 4 files changed, 81 insertions(+), 17 deletions(-) diff --git a/NEWS.md b/NEWS.md index e6ce618b3938d..81f744158d58e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -67,6 +67,8 @@ New library features * A `CartesianIndex` is now treated as a "scalar" for broadcasting ([#47044]). * `printstyled` now supports italic output ([#45164]). * `parent` and `parentindices` support `SubString`s +* `replace(string, pattern...)` now supports an optional `IO` argument to + write the output to a stream rather than returning a string ([#48625]). Standard library changes ------------------------ diff --git a/base/strings/util.jl b/base/strings/util.jl index 7a42d7fecfc91..c818d723d688f 100644 --- a/base/strings/util.jl +++ b/base/strings/util.jl @@ -700,12 +700,11 @@ _free_pat_replacer(x) = nothing _pat_replacer(x::AbstractChar) = isequal(x) _pat_replacer(x::Union{Tuple{Vararg{AbstractChar}},AbstractVector{<:AbstractChar},Set{<:AbstractChar}}) = in(x) -function replace(str::String, pat_repl::Vararg{Pair,N}; count::Integer=typemax(Int)) where N - count == 0 && return str +# note: leave str untyped here to make it easier for packages like StringViews to hook in +function _replace_init(str, pat_repl::NTuple{N, Pair}, count::Int) where N count < 0 && throw(DomainError(count, "`count` must be non-negative.")) - n = 1 - e1 = nextind(str, lastindex(str)) # sizeof(str) - i = a = firstindex(str) + e1 = nextind(str, lastindex(str)) # sizeof(str)+1 + a = firstindex(str) patterns = map(p -> _pat_replacer(first(p)), pat_repl) replaces = map(last, pat_repl) rs = map(patterns) do p @@ -716,11 +715,14 @@ function replace(str::String, pat_repl::Vararg{Pair,N}; count::Integer=typemax(I r isa Int && (r = r:r) # findnext / performance fix return r end - if all(>(e1), map(first, rs)) - foreach(_free_pat_replacer, patterns) - return str - end - out = IOBuffer(sizehint=floor(Int, 1.2sizeof(str))) + return e1, patterns, replaces, rs, all(>(e1), map(first, rs)) +end + +# note: leave str untyped here to make it easier for packages like StringViews to hook in +function _replace_finish(io::IO, str, count::Int, + e1::Int, patterns::Tuple, replaces::Tuple, rs::Tuple) + n = 1 + i = a = firstindex(str) while true p = argmin(map(first, rs)) # TODO: or argmin(rs), to pick the shortest first match ? r = rs[p] @@ -728,9 +730,9 @@ function replace(str::String, pat_repl::Vararg{Pair,N}; count::Integer=typemax(I j > e1 && break if i == a || i <= k # copy out preserved portion - GC.@preserve str unsafe_write(out, pointer(str, i), UInt(j-i)) + GC.@preserve str unsafe_write(io, pointer(str, i), UInt(j-i)) # copy out replacement string - _replace(out, replaces[p], str, r, patterns[p]) + _replace(io, replaces[p], str, r, patterns[p]) end if k < j i = j @@ -755,13 +757,39 @@ function replace(str::String, pat_repl::Vararg{Pair,N}; count::Integer=typemax(I n += 1 end foreach(_free_pat_replacer, patterns) - write(out, SubString(str, i)) - return String(take!(out)) + write(io, SubString(str, i)) + return io +end + +# note: leave str untyped here to make it easier for packages like StringViews to hook in +function _replace_(io::IO, str, pat_repl::NTuple{N, Pair}, count::Int) where N + if count == 0 + write(io, str) + return io + end + e1, patterns, replaces, rs, notfound = _replace_init(str, pat_repl, count) + if notfound + foreach(_free_pat_replacer, patterns) + write(io, str) + return io + end + return _replace_finish(io, str, count, e1, patterns, replaces, rs) end +# note: leave str untyped here to make it easier for packages like StringViews to hook in +function _replace_(str, pat_repl::NTuple{N, Pair}, count::Int) where N + count == 0 && return str + e1, patterns, replaces, rs, notfound = _replace_init(str, pat_repl, count) + if notfound + foreach(_free_pat_replacer, patterns) + return str + end + out = IOBuffer(sizehint=floor(Int, 1.2sizeof(str))) + return String(take!(_replace_finish(out, str, count, e1, patterns, replaces, rs))) +end """ - replace(s::AbstractString, pat=>r, [pat2=>r2, ...]; [count::Integer]) + replace([io::IO], s::AbstractString, pat=>r, [pat2=>r2, ...]; [count::Integer]) Search for the given pattern `pat` in `s`, and replace each occurrence with `r`. If `count` is provided, replace at most `count` occurrences. @@ -774,6 +802,11 @@ If `pat` is a regular expression and `r` is a [`SubstitutionString`](@ref), then references in `r` are replaced with the corresponding matched text. To remove instances of `pat` from `string`, set `r` to the empty `String` (`""`). +The return value is a new string after the replacements. If the `io::IO` argument +is supplied, the transformed string is instead written to `io` (returning `io`). +(For example, this can be used in conjunction with an [`IOBuffer`](@ref) to re-use +a pre-allocated buffer array in-place.) + Multiple patterns can be specified, and they will be applied left-to-right simultaneously, so only one pattern will be applied to any character, and the patterns will only be applied to the input text, not the replacements. @@ -781,6 +814,9 @@ patterns will only be applied to the input text, not the replacements. !!! compat "Julia 1.7" Support for multiple patterns requires version 1.7. +!!! compat "Julia 1.10" + The `io::IO` argument requires version 1.10. + # Examples ```jldoctest julia> replace("Python is a programming language.", "Python" => "Julia") @@ -799,8 +835,12 @@ julia> replace("abcabc", "a" => "b", "b" => "c", r".+" => "a") "bca" ``` """ +replace(io::IO, s::AbstractString, pat_f::Pair...; count=typemax(Int)) = + _replace_(io, String(s), pat_f, Int(count)) + replace(s::AbstractString, pat_f::Pair...; count=typemax(Int)) = - replace(String(s), pat_f..., count=count) + _replace_(String(s), pat_f, Int(count)) + # TODO: allow transform as the first argument to replace? diff --git a/doc/src/base/strings.md b/doc/src/base/strings.md index 263c0019788c3..226e8aa92a989 100644 --- a/doc/src/base/strings.md +++ b/doc/src/base/strings.md @@ -51,7 +51,7 @@ Base.findlast(::AbstractChar, ::AbstractString) Base.findprev(::AbstractString, ::AbstractString, ::Integer) Base.occursin Base.reverse(::Union{String,SubString{String}}) -Base.replace(s::AbstractString, ::Pair...) +Base.replace(::IO, s::AbstractString, ::Pair...) Base.eachsplit Base.split Base.rsplit diff --git a/test/strings/util.jl b/test/strings/util.jl index 5218310c5c1c7..8b58c2f36d8c4 100644 --- a/test/strings/util.jl +++ b/test/strings/util.jl @@ -333,6 +333,28 @@ end # Issue 36953 @test replace("abc", "" => "_", count=1) == "_abc" + # tests for io::IO API (in addition to internals exercised above): + let buf = IOBuffer() + replace(buf, "aaa", 'a' => 'z', count=0) + replace(buf, "aaa", 'a' => 'z', count=1) + replace(buf, "bbb", 'a' => 'z') + replace(buf, "aaa", 'a' => 'z') + @test String(take!(buf)) == "aaazaabbbzzz" + end + let tempfile = tempname() + try + open(tempfile, "w") do f + replace(f, "aaa", 'a' => 'z', count=0) + replace(f, "aaa", 'a' => 'z', count=1) + replace(f, "bbb", 'a' => 'z') + replace(f, "aaa", 'a' => 'z') + print(f, "\n") + end + @test read(tempfile, String) == "aaazaabbbzzz\n" + finally + rm(tempfile, force=true) + end + end end @testset "replace many" begin From 57690af9043955765ba5e24ce5ce786b4ed23071 Mon Sep 17 00:00:00 2001 From: "Steven G. Johnson" Date: Thu, 6 Jul 2023 03:58:09 -0400 Subject: [PATCH 030/413] avoid potential type-instability in _replace_(str, ...) (#50424) (cherry picked from commit 0b54ded93b693189c8efe25ac0bc4efbce4e0a06) --- base/strings/util.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/strings/util.jl b/base/strings/util.jl index c818d723d688f..c77d45255a735 100644 --- a/base/strings/util.jl +++ b/base/strings/util.jl @@ -778,11 +778,11 @@ end # note: leave str untyped here to make it easier for packages like StringViews to hook in function _replace_(str, pat_repl::NTuple{N, Pair}, count::Int) where N - count == 0 && return str + count == 0 && return String(str) e1, patterns, replaces, rs, notfound = _replace_init(str, pat_repl, count) if notfound foreach(_free_pat_replacer, patterns) - return str + return String(str) end out = IOBuffer(sizehint=floor(Int, 1.2sizeof(str))) return String(take!(_replace_finish(out, str, count, e1, patterns, replaces, rs))) From 4bcdfd768041b2938efbe0d714d05d222618ab13 Mon Sep 17 00:00:00 2001 From: Oscar Smith Date: Wed, 12 Jul 2023 23:50:40 -0400 Subject: [PATCH 031/413] Merge pull request #50525 from oscardssmith/fix-generic_lu_fact-check=false only check that values are finite in `generic_lufact` when `check=true` (cherry picked from commit 824cdf1231051189d9ee917fd48139670590c13f) --- stdlib/LinearAlgebra/src/lu.jl | 2 +- stdlib/LinearAlgebra/test/lu.jl | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/stdlib/LinearAlgebra/src/lu.jl b/stdlib/LinearAlgebra/src/lu.jl index 5d69090f27e44..f45386fa7649c 100644 --- a/stdlib/LinearAlgebra/src/lu.jl +++ b/stdlib/LinearAlgebra/src/lu.jl @@ -133,7 +133,7 @@ lu!(A::AbstractMatrix, pivot::Union{RowMaximum,NoPivot,RowNonZero} = lupivottype generic_lufact!(A, pivot; check = check) function generic_lufact!(A::AbstractMatrix{T}, pivot::Union{RowMaximum,NoPivot,RowNonZero} = lupivottype(T); check::Bool = true) where {T} - LAPACK.chkfinite(A) + check && LAPACK.chkfinite(A) # Extract values m, n = size(A) minmn = min(m,n) diff --git a/stdlib/LinearAlgebra/test/lu.jl b/stdlib/LinearAlgebra/test/lu.jl index aa73bee6ddc38..25a75e13233f0 100644 --- a/stdlib/LinearAlgebra/test/lu.jl +++ b/stdlib/LinearAlgebra/test/lu.jl @@ -464,4 +464,11 @@ end @test Matrix(F1) ≈ Matrix(F2) ≈ C end +@testset "matrix with Nonfinite" begin + lu(fill(NaN, 2, 2), check=false) + lu(fill(Inf, 2, 2), check=false) + LinearAlgebra.generic_lufact!(fill(NaN, 2, 2), check=false) + LinearAlgebra.generic_lufact!(fill(Inf, 2, 2), check=false) +end + end # module TestLU From 016edf2adbe6e4ca473efbbd639b4e771b77568e Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 19 Jul 2023 13:48:18 -0400 Subject: [PATCH 032/413] gf: make method overwrite/delete an error during precompile (#50578) Previously, this was only a WARNING message, which was often missed during CI runs. Closes https://github.com/JuliaLang/julia/issues/50451 (cherry picked from commit de2c37a507657f0344377f80d8c6239cc86c60bd) --- src/gf.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/gf.c b/src/gf.c index 00bc33b075255..935fd1e60db78 100644 --- a/src/gf.c +++ b/src/gf.c @@ -1568,8 +1568,8 @@ static void method_overwrite(jl_typemap_entry_t *newentry, jl_method_t *oldvalue jl_printf(s, ".\n"); jl_uv_flush(s); } - if (jl_options.incremental && jl_generating_output()) - jl_printf(JL_STDERR, " ** incremental compilation may be fatally broken for this module **\n\n"); + if (jl_generating_output()) + jl_error("Method overwriting is not permitted during Module precompile."); } static void update_max_args(jl_methtable_t *mt, jl_value_t *type) @@ -1860,6 +1860,8 @@ static jl_typemap_entry_t *do_typemap_search(jl_methtable_t *mt JL_PROPAGATES_RO static void jl_method_table_invalidate(jl_methtable_t *mt, jl_typemap_entry_t *methodentry, size_t max_world) { + if (jl_options.incremental && jl_generating_output()) + jl_error("Method deletion is not possible during Module precompile."); jl_method_t *method = methodentry->func.method; assert(!method->is_for_opaque_closure); method->deleted_world = methodentry->max_world = max_world; @@ -1911,9 +1913,6 @@ static void jl_method_table_invalidate(jl_methtable_t *mt, jl_typemap_entry_t *m JL_DLLEXPORT void jl_method_table_disable(jl_methtable_t *mt, jl_method_t *method) { - if (jl_options.incremental && jl_generating_output()) - jl_printf(JL_STDERR, "WARNING: method deletion during Module precompile may lead to undefined behavior" - "\n ** incremental compilation may be fatally broken for this module **\n\n"); jl_typemap_entry_t *methodentry = do_typemap_search(mt, method); JL_LOCK(&mt->writelock); // Narrow the world age on the method to make it uncallable From a5d78d040fc6435bf273b4c7dddd278089c23743 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Wed, 12 Jul 2023 04:26:09 -0400 Subject: [PATCH 033/413] Fix visibility of assert on GCC12/13 (cherry picked from commit 28720ff2509cf4566c5f8e103be2615a3d37a380) --- src/julia_assert.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/julia_assert.h b/src/julia_assert.h index 4b120fd9e845b..13cbdbcd36f5b 100644 --- a/src/julia_assert.h +++ b/src/julia_assert.h @@ -10,6 +10,7 @@ // Files that need `assert` should include this file after all other includes. // All files should also check `JL_NDEBUG` instead of `NDEBUG`. +#pragma GCC visibility push(default) #ifdef NDEBUG # ifndef JL_NDEBUG # undef NDEBUG @@ -28,3 +29,4 @@ # include # endif #endif +#pragma GCC visibility pop From a2fda258b0ed82535f1969f9b0c8407ccafc806d Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Wed, 19 Jul 2023 15:36:59 -0400 Subject: [PATCH 034/413] Fix memory corruption if task is launched inside finalizer (#50597) In #48919, the tid selection logic inside `enq_task` gained a `!GC.in_finalizer()` condition. However, this made it possible for `workqueue_at` to be reached with `tid==0`, which would attempt and out-of-bounds write under `@inbounds`, corrupting memory. This was not caught in the test suite despite `--check-bounds=yes`, because our `--check-bounds=yes` is currently best effort. That would be fixed by #50239, which exposed this bug. This PR attempts to fix this by marking any tasks launched inside a finalizer as not sticky. Finalizers don't have any thread they run on semantically, so i don't think there's a meaningful sense in which tasks launched inside finalizers could be sticky. (cherry picked from commit bd8350b3475b0a7c6feace151ebe2752820efa8a) --- base/task.jl | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/base/task.jl b/base/task.jl index f7a82b9c42ab9..5a1b37d4252a8 100644 --- a/base/task.jl +++ b/base/task.jl @@ -774,17 +774,25 @@ function enq_work(t::Task) # Sticky tasks go into their thread's work queue. if t.sticky tid = Threads.threadid(t) - if tid == 0 && !GC.in_finalizer() + if tid == 0 # The task is not yet stuck to a thread. Stick it to the current # thread and do the same to the parent task (the current task) so # that the tasks are correctly co-scheduled (issue #41324). # XXX: Ideally we would be able to unset this. - tid = Threads.threadid() - ccall(:jl_set_task_tid, Cint, (Any, Cint), t, tid-1) - current_task().sticky = true + if GC.in_finalizer() + # The task was launched in a finalizer. There is no thread to sticky it + # to, so just allow it to run anywhere as if it had been non-sticky. + t.sticky = false + @goto not_sticky + else + tid = Threads.threadid() + ccall(:jl_set_task_tid, Cint, (Any, Cint), t, tid-1) + current_task().sticky = true + end end push!(workqueue_for(tid), t) else + @label not_sticky tp = Threads.threadpool(t) if Threads.threadpoolsize(tp) == 1 # There's only one thread in the task's assigned thread pool; From a4ba96974fc956f99d9653a2fd752a972faea9ee Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Tue, 18 Jul 2023 19:29:48 +0000 Subject: [PATCH 035/413] build: fix various makefile bugs Trying for cross-compile and disabling CSL and realized both of those configurations were broken now. (cherry picked from commit 9dc13806c28426a0fb32c99ce56451c537b98378) --- Make.inc | 6 +++--- deps/csl.mk | 8 ++++---- deps/sanitizers.mk | 4 ++-- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Make.inc b/Make.inc index 96064cb7eac15..04650e68b643e 100644 --- a/Make.inc +++ b/Make.inc @@ -603,15 +603,15 @@ endif ifeq ($(OS),WINNT) define versioned_libname -$$(if $(2),$(1)-$(2).$(SHLIB_EXT),$(1).$(SHLIB_EXT)) +$(if $(2),$(1)-$(2).$(SHLIB_EXT),$(1).$(SHLIB_EXT)) endef else ifeq ($(OS),Darwin) define versioned_libname -$$(if $(2),$(1).$(2).$(SHLIB_EXT),$(1).$(SHLIB_EXT)) +$(if $(2),$(1).$(2).$(SHLIB_EXT),$(1).$(SHLIB_EXT)) endef else define versioned_libname -$$(if $(2),$(1).$(SHLIB_EXT).$(2),$(1).$(SHLIB_EXT)) +$(if $(2),$(1).$(SHLIB_EXT).$(2),$(1).$(SHLIB_EXT)) endef endif diff --git a/deps/csl.mk b/deps/csl.mk index 457e276c66709..37956ba5c3505 100644 --- a/deps/csl.mk +++ b/deps/csl.mk @@ -32,8 +32,8 @@ ifeq ($(USE_SYSTEM_CSL),1) USE_BINARYBUILDER_CSL ?= 0 else # If it's not, see if we should disable it due to `libstdc++` being newer: -LIBSTDCXX_PATH := $(eval $(call pathsearch,libstdc++,$(STD_LIB_PATH))) -ifneq (,$(and $(LIBSTDCXX_PATH),$(shell objdump -p $(LIBSTDCXX_PATH) | grep $(CSL_NEXT_GLIBCXX_VERSION)))) +LIBSTDCXX_PATH := $(call pathsearch,$(call versioned_libname,libstdc++,6),$(STD_LIB_PATH)) +ifneq (,$(and $(LIBSTDCXX_PATH),$(shell objdump -p '$(LIBSTDCXX_PATH)' | grep '$(CSL_NEXT_GLIBCXX_VERSION)'))) # Found `libstdc++`, grepped it for strings and found a `GLIBCXX` symbol # that is newer that whatever we have in CSL. Default to not using BB. USE_BINARYBUILDER_CSL ?= 0 @@ -50,8 +50,8 @@ ifeq ($(USE_BINARYBUILDER_CSL),0) define copy_csl install-csl: | $$(build_shlibdir) $$(build_shlibdir)/$(1) $$(build_shlibdir)/$(1): | $$(build_shlibdir) - -@SRC_LIB=$$(call pathsearch,$(1),$$(STD_LIB_PATH)); \ - [ -n "$$$${SRC_LIB}" ] && cp $$$${SRC_LIB} $$(build_shlibdir) + -@SRC_LIB='$$(call pathsearch,$(1),$$(STD_LIB_PATH))'; \ + [ -n "$$$${SRC_LIB}" ] && cp "$$$${SRC_LIB}" '$$(build_shlibdir)' endef # libgfortran has multiple names; we're just going to copy any version we can find diff --git a/deps/sanitizers.mk b/deps/sanitizers.mk index 81db75a4ee63e..1a272321c05fa 100644 --- a/deps/sanitizers.mk +++ b/deps/sanitizers.mk @@ -6,12 +6,12 @@ SANITIZER_LIB_PATH := $(dir $(shell LANG=C $(CC) -print-file-name=libasan.so)) endif # Given a colon-separated list of paths in $(2), find the location of the library given in $(1) -define pathsearch +define pathsearch_all $(wildcard $(addsuffix /$(1),$(subst :, ,$(2)))) endef define copy_sanitizer_lib -install-sanitizers: $$(addprefix $$(build_libdir)/, $$(notdir $$(call pathsearch,$(1),$$(SANITIZER_LIB_PATH)))) | $$(build_shlibdir) +install-sanitizers: $$(addprefix $$(build_libdir)/, $$(notdir $$(call pathsearch_all,$(1),$$(SANITIZER_LIB_PATH)))) | $$(build_shlibdir) $$(addprefix $$(build_shlibdir)/,$(2)): $$(addprefix $$(SANITIZER_LIB_PATH)/,$(2)) | $$(build_shlibdir) -cp $$< $$@ endef From 85301f922398f574156904fa15a69cac1ceb5580 Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Fri, 21 Jul 2023 21:55:32 -0300 Subject: [PATCH 036/413] gc: faster invalid object lookup in conservative GC (#50599) Optimizes invalid object lookup in conservative GC by just looking at the page metadata and GC bits. (cherry picked from commit c82656dac05c5802b6a10dce4227246f280bf055) --- src/gc.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/gc.c b/src/gc.c index 732684db332ed..0be48081d5687 100644 --- a/src/gc.c +++ b/src/gc.c @@ -4067,18 +4067,11 @@ JL_DLLEXPORT jl_value_t *jl_gc_internal_obj_base_ptr(void *p) // before the freelist pointer was either live during the last // sweep or has been allocated since. if (gc_page_data(cell) == gc_page_data(pool->freelist) - && (char *)cell < (char *)pool->freelist) { + && (char *)cell < (char *)pool->freelist) goto valid_object; - } - else { - jl_taggedvalue_t *v = pool->freelist; - while (v != NULL) { - if (v == cell) { - return NULL; - } - v = v->next; - } - } + // already skipped marked or old objects above, so here + // the age bits are 0, thus the object is on the freelist + return NULL; // Not a freelist entry, therefore a valid object. valid_object: // We have to treat objects with type `jl_buff_tag` differently, From 77c8fdc345f5e08b9df60f7a81f25a045b143948 Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Sat, 22 Jul 2023 11:53:24 -0400 Subject: [PATCH 037/413] =?UTF-8?q?=F0=9F=A4=96=20[master]=20Bump=20the=20?= =?UTF-8?q?SparseArrays=20stdlib=20from=20b4b0e72=20to=2099c99b4=20(#50634?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stdlib: SparseArrays URL: https://github.com/JuliaSparse/SparseArrays.jl.git Stdlib branch: main Julia branch: master Old commit: b4b0e72 New commit: 99c99b4 Julia version: 1.11.0-DEV SparseArrays version: 1.10.0 (Does not match) Bump invoked by: @dkarrasch Powered by: [BumpStdlibs.jl](https://github.com/JuliaLang/BumpStdlibs.jl) Diff: https://github.com/JuliaSparse/SparseArrays.jl/compare/b4b0e721ada6e8cf5f6391aff4db307be69b0401...99c99b4521eb19a7973643d1aa4d7b1e4d50a6db ``` $ git log --oneline b4b0e72..99c99b4 99c99b4 Specialize 3-arg `dot` for sparse self-adjoint matrices (#398) cb10c1e use unwrapping mechanism for triangular matrices (#396) b3872c8 added warning for iterating while mutating a sparse matrix (#415) f8f0f40 bring coverage of fixed SparseMatrixCSC to 100% (#392) 0eb9c04 fix typos (#414) ``` Co-authored-by: Dilum Aluthge (cherry picked from commit 6691a755c3a5a9941c16df03142fed98f81eb1af) --- .../md5 | 1 + .../sha512 | 1 + .../md5 | 1 - .../sha512 | 1 - stdlib/SparseArrays.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 create mode 100644 deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 delete mode 100644 deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/md5 delete mode 100644 deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/sha512 diff --git a/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 b/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 new file mode 100644 index 0000000000000..6509fe3ef2766 --- /dev/null +++ b/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 @@ -0,0 +1 @@ +b2ddca51d8d39c2869555229575451f2 diff --git a/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 b/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 new file mode 100644 index 0000000000000..2855286b87ab3 --- /dev/null +++ b/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 @@ -0,0 +1 @@ +cff167088056690a7c7453326bc1ad0ca0fcff9ffda85ebfd943ebad9684fc8134b0cda18dd70d8550de35493c6d9579b2fb51090b1c9718fa4290008c6d5f3f diff --git a/deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/md5 b/deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/md5 deleted file mode 100644 index 55bc533861fc0..0000000000000 --- a/deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -e59c1c57b97e17a73eba758d65022bd7 diff --git a/deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/sha512 b/deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/sha512 deleted file mode 100644 index 2213bfe87ccfc..0000000000000 --- a/deps/checksums/SparseArrays-b4b0e721ada6e8cf5f6391aff4db307be69b0401.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -ad88ebe77aaf1580e6d7ee7649ac5b812a23b9d9bf947f26babe9dd79902f6da11aa69bf63f22f67f6eae92a4c6e665cc3b950bb7c648c623e9cb4b9cb4daac4 diff --git a/stdlib/SparseArrays.version b/stdlib/SparseArrays.version index 4290a1d2fc4ca..295400bbd3b57 100644 --- a/stdlib/SparseArrays.version +++ b/stdlib/SparseArrays.version @@ -1,4 +1,4 @@ SPARSEARRAYS_BRANCH = main -SPARSEARRAYS_SHA1 = b4b0e721ada6e8cf5f6391aff4db307be69b0401 +SPARSEARRAYS_SHA1 = 99c99b4521eb19a7973643d1aa4d7b1e4d50a6db SPARSEARRAYS_GIT_URL := https://github.com/JuliaSparse/SparseArrays.jl.git SPARSEARRAYS_TAR_URL = https://api.github.com/repos/JuliaSparse/SparseArrays.jl/tarball/$1 From b21a343ce600112c2bcbc8210110b4cf69416dce Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Sun, 23 Jul 2023 10:28:29 -0400 Subject: [PATCH 038/413] Backport LLVM patches to fix various issues. (#50639) - https://github.com/llvm/llvm-project/commit/af39acda8873cc75db116e326588447f018a99d9 closing https://github.com/JuliaLang/julia/issues/50448 - https://reviews.llvm.org/D139078 closing https://github.com/JuliaLang/julia/issues/49907 (cherry picked from commit 092231cd50d673057e112feb6f5f859afaf23035) --- deps/checksums/clang | 216 ++++++++-------- deps/checksums/lld | 216 ++++++++-------- deps/checksums/llvm | 436 ++++++++++++++++---------------- deps/clang.version | 2 +- deps/lld.version | 2 +- deps/llvm-tools.version | 4 +- deps/llvm.version | 8 +- stdlib/LLD_jll/Project.toml | 2 +- stdlib/libLLVM_jll/Project.toml | 2 +- test/fastmath.jl | 5 + 10 files changed, 449 insertions(+), 444 deletions(-) diff --git a/deps/checksums/clang b/deps/checksums/clang index c16dd849e6fc5..0096189e2e278 100644 --- a/deps/checksums/clang +++ b/deps/checksums/clang @@ -1,108 +1,108 @@ -Clang.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/5dce383804bd3d404b8a1936c12ba457 -Clang.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/5661a1cb2044ded03566c9316978595d692667fbc4e951feca658f9986a8557196557b05ccddf1b00b818aac0893696c3bbbf63a35dc9ed7df146b4488529f6a -Clang.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/549cbc6fa28ebee446e99701aded16e8 -Clang.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/55eea0b514aa2e43ad2f373ad25ea4fad5219ff1cd8d5b639914c218a0a454ae9b27b8d022ae73771d8ec89fa329f5bfde538817653cc59e569b600148d56842 -Clang.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/ac3cd40e47702f306bc42d6be5826029 -Clang.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/73b217caa53702bc6fbbb3286241b7a20c111358cb9436283e9f7f9fec90436d5b54cb4c332afb7e447867a40ba46c9e3b93464acefbca7c0bb6191001525cbf -Clang.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/b1a656501493c15b98442bde584a34d7 -Clang.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/f424254cc887301d4d5b04fa71e2c7da6e4d561725d5b06278925e05be1c62a74769f19c37b431c2e2d73e7e5129acff07ac54a0b7fd381821aece27f260c116 -Clang.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/969170b1a791e89a0094154f34023e86 -Clang.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/d6ae356c9b1b80cbc5cea4eb8632b77ab3ce0d060b103cec4a5f1c73feaaf60688c2253034b2a6e132273fe04c803de93f415cbe2ef40cf1d6f6a30dcfa03af3 -Clang.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/22d599b774af41dcaa54481cc6325b1c -Clang.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b0f257d45f1a920f46b18049b762b5a3cefdf8683c4dce46f48ce2993e6a622dbdfaaa6cc9a9cda8a7f047094a6f804091d1ba6c83e26cefc38fbd1ca5c0a536 -Clang.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/f2f5064217c14700f0f933b704fff233 -Clang.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/2284978d8cfe22aa49b1f3b161c75cb0c9d43f84674ba58a1335edf818b91c6ea1684a9c3580f2e1918fdc050a624c698a4e87dc163e9076b9d6c0023c989d7a -Clang.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/eafd72ec24ec81d42cb044e4e4d638dc -Clang.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/bbfc6c9179fc43a1db0ad82fc8c1fcc8ec8ce94d5c32b38cd1f88490dedc67953283995c0dd4db7262a9206431135cf2671c6ecc6580da65ba8ff4ec0323ab64 -Clang.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/0432eb21283647995e35bd0d486148ab -Clang.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/561beaf45770c06b35bc1626e93a0cd89874026a8afa22017b40eb1e6ba306b05305619d42a4a2145c576b1dcc77ade80cd0bf0e0237761f3517f4db402f9b74 -Clang.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/653b9b87f2573818d66992f969f7811e -Clang.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/517df570b40b51a4f4cbcecbdaacdf0b592fce66ec328139d95eaf8b63c89a1adb41a9cfe4982f5bc032fb29a6b967dc1b16b0eced98cd78756ced36ff2257d8 -Clang.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/4b1a5cf46925575bbc6765f3336e1cc8 -Clang.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/7afb23aa5ce823b1f2371e038faf311e8e21c3843cc50a0b1473038cd746fcdc77dede67130631bfaee778c3d42ac1eaa23ec664a82f43e2ad406962f3019479 -Clang.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/5a6200aef0e6660bb156ecf3e53cc3c8 -Clang.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/0dc564fe753fbccfa03ac94e19828ea5ba2b8b74e7adbe7f501ac8b11d1ed8fd85a65572dcdf957018bfa1be3a6babadb1ec3937966347fe49fb38596a4b1728 -Clang.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/ad693e5cf8f2583c3311a39c095b0bf8 -Clang.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/b4e1120c960bd69f2643f185607bb2139095fa7a2f943fffec65ccad9422f2bd801131185cbeea1b75298c64cbf109fe28bae54c1b9917fe1ce8b2248d623668 -Clang.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/c04cd594e25324c42d97739d72e772e1 -Clang.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/5aeeedbc3f0f8327f7760abe3eb6fda368353a7b429e31ff47a7bf42d612d070cc86f0e97031ca0c2fa9f9f448757d59b2652d89bb05b27fd380f2116a5beb6b -Clang.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/d706ad9062539a37df1e5cedc084086a -Clang.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/4862bbe0c71fe0e8cfddade0f881637ae5f58263208e1154f2284884ddf4ad43d76d98bde57904829f2218db21e4fb6ac038e231b682455fa22deeabe65f1336 -Clang.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/6cc35754a4378902f9f126139bf299a5 -Clang.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/4256e9c3f58dfc896d56eeccd7495601ec585e208857de14f91e2d95295a4d03009149f49254be40b27affd5a2250323c6d0744e1ddfbd5fb924fdedc8a993d6 -Clang.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/128bb901686224fb6d32c9689c03cc21 -Clang.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/b7048ff3d8a3b3e3cddc49b2cd9fbda8ad308fe10e932e8d90000e76c12059547342a1132149254628077d0efc36b34479688b3e9f32e7364301e85a18304cf8 -Clang.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/d860412ac46bdeef203a578f0bfc5b05 -Clang.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/497fa51af138b3c645d5017165aea6d33410262d2ce69e322b259b34fbdcf52a131541dbac66fae8b9a9027b70771199f9a76869721bf18760065ca7cb3b5364 -Clang.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/6fb13f1cc2aec210298c3045f8a7fd94 -Clang.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/085c94f43fb46ecc8cadfed5c5d91978c9ddb9d647eea6e82ff0a548eec53dbddc77721faaa8c43ab5b0674f83fef7aa3b34ba0dc273feabdbb8cb95bf5534ee -Clang.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/63d765b268e792df2aa92f3689de23de -Clang.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/32b2397bb4b627f0ad9b00838e30c965feca902e417117d0884244a2be6a50e0d4d40e55a27a87616e33819967455f90ae0a4319c2eefefd49b82e9041835444 -Clang.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/c00e93211a1e470f1b00a53e776a9e3c -Clang.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/6621b3ab12302657ef2441482e8bc6335535964fda472ab8378221e4a9cc0813968589f457e1af66141821cdedbf8eff3080c20105eec810742e5539fc329fcf -Clang.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/254fdeddad203954ec0531875cecec8c -Clang.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/84a19469231a9204a553abc58073e423173ff828445634501a61837c0e249ed003f9051fcf1da4eb16201f80d755e7bb4b7513536c749eb1e7ea78c7ded59945 -Clang.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/0475a3e401b59e1a34dcbd9d9b980823 -Clang.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/e0c9e1e18cc4f7106effaeb04e0e6f41fe8ad872d67d3d0da928ce36d1bce6be3d5231d149b2d404b3a4b99900b50d280ac6f7dd8965d30c4dcd3913590144a6 -Clang.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/08c9e802640582af0b79bc04702c9771 -Clang.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/d4f413bbb5d5c3ae01cea2b87ef4e46816023fcf4373f00fca13f2edc6278eac651718feea3f8c7d04d3ef82360417dd93b6c7163d54ecd79a3811a0ed588054 -Clang.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/e7c253db924ea5cb5098be57029e009f -Clang.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/373884c492e5862aaff27f5782ba44e202e581e4faeb2cffe14bd696a590c0bc72459fccf3342aadbf189282af0c43efe3db113caa47c27c3ea556f0b3313e7e -Clang.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/9c1867e316ac258d9199b389ea053d2d -Clang.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/9537f285d2a06b8c86ff21aab9daad1ba7e71bcfac55d780c693da8cc250707011ee22ed021e387422543b1e2abbc34de1a7fe49175a27a9c11e43b00549f1be -Clang.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/f9a13a80efacf45f49d6d7591d2cc3ea -Clang.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/c7edc55c4f76ae086080ba639d83793738884b9385618c52b30f5c3fadb0ed2a31bbe95ab80c5eee8504ec6301d73fc7318a8c0f877ba8b5f51170de51179d9a -Clang.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/c9911680ea55b36c4b9f59cfda2a8e33 -Clang.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/9c3722bd402627a4f51b4c98c8712a85031aa79380fe38be0db9df13a5cfabe428fcc7d5d5cf804ac4387d738cad1796bb3f341ebdcf4726ea7f699c6de586e9 -Clang.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/db82d62c163f69038364189a60b18d09 -Clang.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/5dc415426bd99dc2d7b5fc4fe3f2bb1aabc8961fc2b03a2bc14562f330b273c4d1942d7ea5f05b38c76ee753b440cc4f92015a25f9de7980aa3b1d52f7d0f2bb -Clang.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/67b7194b31f68db8ffcf5ec250948740 -Clang.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/a032c2ae911b6318ab23950ac74dc95f2c8bf815196be62e410b20cd2e271c4154f916388d119ca91c77e07853ba2c56bd5e75a4ce6742d2a7bbd9d3e61853ea -Clang.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/50b4fa021c1c9b6bdb29eae63ea22103 -Clang.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/40b377df590521e5291c3f2f9daa8d60863c03253b07d0e537288324819a909ab3466b710b10b1a92ccd6f3566702c515d808f03e6d9fe9d01617b9a836bb63f -Clang.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/d2da27ebc23793c107cb03e176f02d6e -Clang.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/3ed297cfd3c1ec03cbff10d7b54f9f4a374a9cf8c699287f179ebd5fa000dd525fdbed3c31b59a8ae32ef1c56115c3a84640d776f01c8a92bfae979c332043f5 -Clang.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/aefacc80a5f704aa7498b35dfc2441e6 -Clang.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/76c7fd64fc4323ca442fb0aa30b236355b26328f897ea8cf3e3be029246574d150a9790ae1c45b289e4fc3050fdacc20b6d57b588a707f6d0750e6da91815edf -Clang.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/59048d333a8a261d079673828c174d96 -Clang.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/bcd0c3c5e04cea24383fc2472f6190e48f8738fb7fa625ad700d1997f8aa81c9b6909af0fc38a2287b80756fbfd01300f3388c19c8df791d78ed913d8d59dee1 -Clang.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/bb4007dc5b0c0d545f457bdf35e868ee -Clang.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/2f686bdd0bbcc62aaf9e20d3804c83291ad7c41a0a174516d7a83dee7f969f7d50f19f70c0f35901a3eaa8d54fe83204d832a901586feb9eb8e141631c411b3b -Clang.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/08f088ab3498a4f7645393f43098583d -Clang.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/faf62bba3a282f218ea569d3064d6c0cefde9232d055fc3a08c994fe424f2b60dd9bbf1655f6ca101da701e3d05bd813695d6a66628ec2b6b4d11b89f773f0e4 -Clang.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/bb8f05da1e35ab358a96265f68b37f57 -Clang.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/30e3789ccca1fdc5eecaeb25345c30bc4f752cd41b8725c5279654d9b3f500d6e8693c6d1dda8b3167fcce15443682994d66922a17986419eb48bb09970f02e0 -Clang.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/ea9fdfb7c8d1a9c973ea953d4e057f0d -Clang.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/5e5d9298a12e65a7e4d401a0e404eb172c96e70fa906096f549e7eda5dbfb294189e4f3526246f28f71ba3bcf35d1bf790f05522150c5877bf8f186d8c503795 -Clang.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/053334d0c5aabaccc81f22c1a371c9a6 -Clang.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/aa8daa99a4b52985d80e57d175b6fc4489058ed84f06fb2fd67710a873d5333ee77b64ed0620df099ed5617792fb3eab23d9cedf3ab3c79f4eb6f04ad1fd9588 -Clang.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/b80918f03dcdfc5b5f1e8afa90dd4e88 -Clang.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/c0397541e06878535b41ba7479b603699d78f1ea3345d9a1146a0e7d17f42078e8365dc71a117981b2d2b25f35a40aeb707ff9ee8a2145303f3cb6567e82bd54 -Clang.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/78b9e190d5cb7e6fb172814eda2996f7 -Clang.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/2c9a764ba2427faa8e67285205dd1b8c211665046c9a4a19aea02de46d02a6d4287467bacd1260b7996b2b85d3e571e750d92f02c21b180abe37709ee9da78c1 -Clang.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/ba6dcd205dbd7c0301855f2a892c6467 -Clang.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/9a98c10943a8abfbe92b151f184370d21a10ce72afb22f131bd0522672c65875868357f60650122e1a2cc91254adceaf8044de4533aea08c4df400ded8c01669 -Clang.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/ce62f8e67b89c612eea35f4ba0e09d45 -Clang.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/9c3afaf0dd338abed0631b81d5f6c197b5dff6aae637996f5bc2f85f2f7dbf64a7a4bdc07dee9ab72abada5be576bb0466550280a9ee9093946a469a2b6af648 -Clang.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/543ebeb138123ce190e74cf0ad17d43f -Clang.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/aff131b5d0ed372557e3195e15701543ec32db05d5fc18117c4aee789a5cb967706d28b2dc53588bc7566f3a4498fd9e2293518ff28387466464ee07c10e9fff -Clang.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/58617f16466bcb1b56b204dde697cd89 -Clang.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/bdc0c52168beabc0552ee941246b1d4506fec50913030965b374f4cedd67d6fd2b5746f04505aa5bbd4e6d61c5f684dd22c3b207e364578fd8538aef8efe0b14 -Clang.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/aa6f0d9a455f5f0109433b9cfaa8f009 -Clang.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/b267bd6291fc5830ffee075af00fed9a37177141b0cdcaa8ffd602e6a8bfc58e191408c3a6a12c0fb3ea7a5d825adf1ef99122399e8246e0312b4cd056d49a2f -Clang.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/ee2d7c4dc5c95e46c6d46c4fff112e9a -Clang.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/cd11acb2dccd2ac45a53fc48ee6a58299b5e54e80a5b9747c680e9b068381bf87cd388ee75cb0a51ccb1162ee8af03acd4c3f730a5f5a3ed5f443dd24ee91cde -Clang.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/a5c16a8832f5c28346912f610932ecb4 -Clang.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/91b244ccd569597fe42ec45e5a62f6de0ab2c4da048b8b3ed191bbdde0a8ba5a710054d9f40c31a405a6c494a25c7546748870d1170d76e2d3b22dbb0c618e87 -Clang.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/2d789f91744aebb0deed9b91202c1abf -Clang.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/fb991942325fcbfa1ad4903db43e81fcfeda5d007ee664d96a0e0d2ee5f04b5767d6ad5d37e0273f5af626efbf1c6fde84d54536b74cb17433d29b6772bcf7bc -Clang.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/ab8fae829b5822e9123fc3d763d327e1 -Clang.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/1b24b03f6a81fba7400bdaa57899e9cdffd6da7e476832870460a12ab6188662c15a3cadd80ccd7dc0790834aa76ba0df098b400c87fd067eaa9f9fec0b053be -Clang.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/d5638f87a6ac840d571a3973e89316cf -Clang.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/0f07e9e8dd75691ee73ab0e78a29047596a543c5886a137a7503c916ee6792cf7d6a7f279dbd864a2ad36d36aac422555d408381e3781ec004bcde5525abeb68 -Clang.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/e777625c3c7efe2dcb029e74ac7d1ba7 -Clang.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/25e0a48a4d8a2ad7f5f5adb7c30429655ff496e6b5a224fc5707f092233239d4c3f4cc17432de12815e546bb595caf2a70b18ff208a53b9f0236accbd83acda3 -Clang.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/22e03dc887f6e425f98cd66e0859ab2f -Clang.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/ef20886b841ba8b749ffb0c5780a9dc25d5f563ef726b1026ee77607e0572c45b8eb3470e252f882e2c4c23a2159d88ee83d31aae5081c6e4f4c37a61a7875c1 -Clang.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/5d8f1390ff66b6b357768b1994a43d1c -Clang.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/5fd2fc0cf888d95c38531d236564109b284f20faed222d1feeab2beae68662073c9c59baee310e2bd67908f267416cded7b75f73e28969e2a16d2fcea0b03854 +Clang.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/3994ef8cee2fe488709909f5fffdc091 +Clang.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/0713994930b87768dbddeaf5ce5143380e83bfdf3e0e10aa1ba0337fa0ccfc3c84fa05786cccc2b2461d0bf3bf7dee45e18b4f7146c62ae624705f4d3e43df1e +Clang.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/dd097ca34e16abfcee18ec6b955f0d3b +Clang.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/446f31dbca35a307faec0a779737129c7878ce8c879637265120114f4c68365a6593e1f692c76ff160f5b264a0bb0e9b9f157315ee138ddebdcda1e6e9d3c030 +Clang.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/96a5a51c74d4d74ce9a5f7701f7da325 +Clang.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/d27e8931b89aaea97bf10a7bb9d9608a14537e352bbfdb496f0ef9537599f47ce11e519f77912a6befe96189a26c423a8359b1543b39558ec9648a82196c9057 +Clang.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/2bf9499f0016a6d3f192e9b982587fdc +Clang.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/956cc2c49b49a0d56575c8192e8bc8a3378d484ffafb3fc78f2f8d4331f1070a6fa8111c6bcd63d579a0e54546a3d5134a3c760c609a962e2a586d7b0d48646c +Clang.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/28ea22de73f4c555edeeb4ff22ce6099 +Clang.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/88491ec5f0c51e3a6b4b2b6877e9e8437f8b3145a22f8dfb05269f9ddf72c1b8eca496b650ce2e9a26101ad48d2e79d01b4b4a48883fb547d4445b24ab79bfd5 +Clang.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/9058d021eb893fb11313a04359d1d2b0 +Clang.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/5fd93a2278b3d3c6f6a1836722b97ccd099f17a36da900b8bd54f0b399bc9ee42e847bc094058c3f3ce77dfc6950b5cef9b4571f5941857280a370af16c8b7b3 +Clang.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/8ac220c9570fa66c2f13d9247dcfb324 +Clang.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/977077fd338912c2fdbb88f4bcf1591b6b4f648d6e7c9ba2783b331eb67da2e6b9b29f85446500f6dfb15c9e05af8fe9128dbf3e77dfa69bd597999873769e8d +Clang.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/f017a86ee8803f2099b04ecf254e8157 +Clang.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/c773d0c07234b03c71a1c2862f373f76d4c898fdbad35342c2e687a2afadaa220daad759afa5f88aa7eaab3d0d05f1e8eefcfd374bc1c92ddf638d42d20b74fa +Clang.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/80af25bf64203daaccc72f2274b60681 +Clang.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/913f8ee4c7f9618227673db0aad7e5e98f0fccb8a1faa84778ec84ab10ee8fe4d59a8115582420459de67b8667f3f4681bde59dab6dfa70ddeb8ff8b7fd1add2 +Clang.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/5b79fba21be10d03476c52ad0888d562 +Clang.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/075e074a0f460be27fddd32069dcf4ee48aacbdf480ea74356692b3d98808868a18166ae5e689b17faa6b0ae1f1453bb63d98ed119afd3f44a8e662fa602a57e +Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/90a9224695634cc70cc39b603cc8bc57 +Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/c1e388b838723b5251e6bf068a1790f83ccfe618be2e138b397d0a40c4f85f717bf01e8a46bbab48a91f182caef8e3fc291ec71a56df95fa60446a8858ac904b +Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/6f2ec0e8aaaeb7c9e0c1d826010886ba +Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/eb33e93ff5f3e32051c08c0aa42f1cc691dc364683ac484bb292f190911c879226282cea758224c9fea1bfcb934e4abbf4edd07666d9a2dee63d0ba40c2b3b47 +Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/2e8b81ef8017987c5ace824d524545cb +Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/76d1cfba99747038542946680dad02d9deb4fb6dafde6def13e95c393da5d5f5f2aa30889377c6f3a869963075b9181b3d7652016202767768e880f2fdea827d +Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/7556ca721d4e90e64a266c4b59fefc48 +Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/8df1651aaa87364fe47da4fc993551a9f9ba575ca88c749b92d6586390e19c8b059c20081e4b76426b23cc1140d1bd38c216855d968f3dc01505e29dc5760367 +Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/fd294a76698157d71a3a64f4f4e442e5 +Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/71466cd9d0b46686af10e124bb026e02af240b5ad5f3844fa5c0bb152ee334a56d41e5c82c8b2e3778ea409f5dbc1074afe5a8121fcb157745420a2fcc3465f3 +Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/a2ad561f1a41ed993fc2edebbe1a6b3b +Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/51ed85190a1bdf89d0f5fe361381b0e0b773be05f510ac7b77747948f49dea49807d3d46cb3e948d22785884b8b92dcbf36d202087d2c2628fce6c73c6cd9789 +Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/98829294d5c6327582a8f9b1d7232083 +Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/d570b28e6a11d02467075e82931f8529671acd5e61992f462729d690810953535be31dcfe6fbdb3add0e00799809bf3afb529d227820c7f176e6193c24da7853 +Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/bd173830434f85d17e4857b7ffdb2dd1 +Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/ff66a8b1085d67521aa58f766b7bfad2c19ec89add9a67be2c5984a7a5ff5aacf60d54e0448ce70ca80d9a7d972624b9a2be530f767c87ed6839f709a482a7aa +Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/34b020d23cd5b34ae47b2b0473822f14 +Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/250d55dfb02be3cfc4eeca0da386590d9fb0b9d6759360732b72b8663f4a3c843cd9e23ea08b8d272945fa64230e57f9a5bcdc4399dda2db54e51961e7c9f3e6 +Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/b3c76e91d6b43c7794b6ddb9d300d8f4 +Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/efbbcf2cfff1918e58fd850d99eec1e28cdaa11730b722a416e5da233a8fd0be685259052d5e9adf32c2c2364a4f96540a0175a44b8dc8d6ec872ef12394b9f2 +Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/81ae8ac294b1656b188dc437a7de6b10 +Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/1eac2968698b759bba3467205843183ed7279f24ae06f2d47b1cd4965c115d0b9f578ff7e0a6006883a462ad97c1829f3d706767de77a05d159bafa183064f84 +Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/581efd97263d337031ee761326320489 +Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/ae28a7743146eba68831e0f1929f87596117ebf64d9284585c1909ed1b78a60e102618e4232b37017543351208e0d1183d81e0bbf737c7930bd35dd146c9a2bb +Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/34342cc1e94435ddac6ffc7ec89471f9 +Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/2e06c7a4b79a45d2139cadc3c10c4dbc086e6cf20b5f2ce90b50aad9bab6ffa4b55eef3dc9e40b495329a2a1eb9d0948b29a4495dc8a3cd56ce500087b9e63c6 +Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/de880e4c673351c777509ccfdc0a2579 +Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/e1becf694f1edbce097eaff7349c8a2ca8a1dda265c01a40549acf0dbcbbdf3c23d515236b114e6ec124f85e6bde380850ba72029de37cd36d59789936a21e83 +Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/93a4565b236d905021ab84b0a6c9fd34 +Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/d7c5b5e6fb627c2e19c72e42dcbcd8de9784dee522057d9fcdb03b0bba127de5517d72da8ca120c3cafabcfe6ac016526a7fbc090258119f5f6252d26d2c0c17 +Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/31d9e5992d969548f67b9478abfb1575 +Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/28ed4cdf1a289ece1defb2d4f19cb03ad07963f8e9df62073fbde3adaf943e78085a6f2d03b6cbd3f00f10f61a3499f964e104c2c1ee73167965b84be0bca901 +Clang.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/8b6ffb09acc5d80408362b2705629db4 +Clang.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/d69bd543be8848c9349014f216af7ff1cb32401cf1b0a060a3687259cb56518933f65ac8ce24eca74e2bfc79a1900bc638ed1428e7823672d088efee8aa70387 +Clang.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/6dc4752e4987fbf9afc49b0a5a0b62f4 +Clang.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/7617ac0ad1496549f6a38d33414cbbd74b72dbb54758f24ffc88a42226cfb607babba73b7e33d9558bff2d208bac3ee8f3b2594990d5e5fda49819eff3ad0d05 +Clang.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/47cccd1ef2565df7196afe4da7659380 +Clang.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/9d25f2d0634e2b4f5b8d9e4fb57c65c7d5956cadc24bbdb67a62095f2e6378aba3a8f16a0bc3aea6656c97aa035b3179645e352ff1a0b01cb89a773e9edc0b89 +Clang.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/4e3fdf880b91a5fdbdcdff34386ee8de +Clang.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b02b3a7db9796d45d9d1bf1fc95495c71f6575a70ebf7f4d9d249bf117eb8bdbaa100b2d4e867f82da1b9f9d13ae0d7f68097d1b085b0b6f3826ed21723cc709 +Clang.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/859e942a9b7d0ee2fb626552e87586ad +Clang.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/23f4ecd6a2b4967d41a7a7ee18d3930b4c5e9dd4894a75c2f85e59be0c66bc0fccc7931e051258f36290affd64b6fa37b925ed53a68a0d0cb937a66a6ebfd263 +Clang.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/f1c4a569ea5705e9eb5c1807f4053c4a +Clang.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/73cbb461b39b25b9af334487cea4f16ede9d82ea615671a72d9cce28f9069c3f872f8caa85a3ca61d75919424cd03259a9ac7cbc6c245e1aee2f9afbeef37d7a +Clang.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/d350e088544d652bba6e8d7ee787fc5c +Clang.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/a2123559d0be8875dff1336127eee38fb38e1c65cc06ce3c37785b81bd78c0c3a07bdadbb9e1eb700eb93845fe82198ab900a9d4568fa243a39109ec5c3eed54 +Clang.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/70d920b3d62965a011b1884924b549c8 +Clang.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/4937846f3a0c1a2c1ff086e761a30d3cf8dd06b010e77e4d39264d86c3819526cc74f276d0bf2901d47244b07a4e3ae21d9a213e2ae23fb7f95aec4568e6298e +Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/7b0878064a5f8ba1953f5e76c4b63c18 +Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/542f057b2c3d6e829f34a615d7c9c021d793ce3723512b70f7e140640175b237a9669bd9f24563eede1dc5e25e37fa8910b1769ed344af9ea4d21bebc6638801 +Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/e797f5d917b08bdae66fdcab4f8367b5 +Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/40a379b2de5eafa8f202b258b8620bf82fb3eae384337120149ae17c7affa7e166a6b4fb77fb4ce94808c152efdf270ec22f03a2ca57aee27799ccc3c684b88c +Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/1fb0bda6cad1591b1b40752efaa1f198 +Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/0ff8a3d9fc53e5733b9ea9ea30a4c0023fc926704d2dc747a1802343e5c45f6cabed9fd3207cb146218bf8f71b4de79d708c3f169fa13e3eb35dde591509d84a +Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7e2922fc9c5e3f93b73af4b2f8502f7b +Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b7656c67cbe9d6cfcd0837a4646819d9dcad83ab0907a570f8e66894f2650cbaa43c78796435b16bf28878b39e1c9254772b5aaa996f6a5629159c7c63caf26b +Clang.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/828fba3b956b5ae3c53337d7925001c7 +Clang.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/f251d08399c3781c4441cb598ad5d32434db5fc235f023c0c99356cdec94b0806fb46302c431af1944536a124640747577ceb5daf8cc96a9c5fe696ba5faed29 +Clang.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/4b93518a7c69cc83568468089ea98376 +Clang.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/0a7a0a2717e87ca6b2b8d50f5ae123c6ea86391ff6bfd19937b3beef599ef0e5d64cc21ea542ee5cc30f6b6d2951cf99c3448eba86aebe567a51a540d2aae794 +Clang.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/9ccb6fc99b35c72b6e566f3d2336c686 +Clang.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/af926692bcca26ea35450bb2794b94f6694ffbffbf54342f403dc47270e983ee697c06dbaefc143ecd0954100736586838987f51f8259e160b0ca06688514889 +Clang.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/ce36f48d88d7dad1aef44c11b30aebf8 +Clang.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/fbbf65977c5924830ff4c1c2c6d824a3635d09d4ee9304888030b8eca1bd7c06d8c053521068f663df932379cb3b7f0772589f7cca56156dd7053e6722d29953 +Clang.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/2b68c2057aeca1564106dab565fe876b +Clang.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/64c8be7c227fa52c9d90353d5ab72c179c8974b0bc048d6f5793d0ac08110b98c54e2e3f65416986b7049904cf86b5a865cf3de4423d7b0906b4e85a0dcacd21 +Clang.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/04a0a842bc490c440ec65927c285059f +Clang.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/82dc5eba9a795fe8d0e5c660aad1d902cde8c304ddfeb794d55a7b8decc97d27b648f658bb749b3bc25d2d50771febb0b481198459fc739c1d6944542c2b64f0 +Clang.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/1742d997df9bc95ddc7791e0f3ba49c8 +Clang.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/5187a9fddf31ea260d6d46f613d96c79b3c77bb8c7dd2752bc8d7becb7b7210a3d9ce195b2f03d466760bb4e52dee0beda22f238097e1472dbed04170b14e2c4 +Clang.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/79e68396face36fc162ab27b99714b34 +Clang.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/80f22d1bca302debb3e01213da099e5378eb3c1ff8684dbc8efca9145a27d1542a9a065e328c76148465dbb42268dad028004f38215289bbd862fc2cb12abf81 +Clang.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/e2f7246f9e8ebd73e21186f18985755d +Clang.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/6dcaa68abe3abff6f3e288aa34ce3591a8e92d933187715cb9bc7362947fefeba3ce1b3629efdcdcb1fa3be111f7614a10b4f0b73f3ed54f46d6d9791612305e +Clang.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/15a21dc979f82c71a2d743f76a539c5d +Clang.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/684b9d596c4e0c4567841cc913ba91671030765edea4642c1883d87c12ddc2a2e4ec82931b2024a66e37c48820aeedd1fc41982930396cf657596d8d3970bf09 +Clang.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/82d172f6be5b1ae34fb92f85f962b9d5 +Clang.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/62c39f038d7a616986314ec3da0ebc59cbed5a6cbac73becfae5a037e734922f4ab59e45a25c8c31242660fe4409023a1191c7311d0af1303d6170ec87d97413 +Clang.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/89c040d2773aa3f40fc1b0965d19b201 +Clang.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/adb704fc2545d766da18766b2e3b6353f9865dac7e46a54e5d83b6886ca5ba8a091a8ceed86fe12bbfc0b3dc12b990dcf1389ba8d27ffe1bf8291c9855ca69b0 +Clang.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/73b289f442e377a149e9e2e371fb0870 +Clang.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/636e50ba832e753d35aaf102cb1d33cfb29004150f4d8ed5fae2a07264b70c39491447cb376700d842fb9a2f6882156eba58e84d58021ca6a47a7e850823fa59 +Clang.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/9e81b9b49067f19c827c2e2b3386aca0 +Clang.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/45cea529842d1bb142db1b0f5162442cc8ce1c9a26e225a431326d362a239532679a57b2fa875e70ba9679451d975415930c0c7223bbcbca4a933334b12eb6f7 +Clang.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/d73d05082cbe59d44cae0143822f8f5b +Clang.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/6b497147e1bc458296aef639f0cb2c4e9a0ce9b452f970cf3d5f789c81884c41371a28d0608158aba7e1a328ea94334b4e7646ad32dffa915df9492fbfdc9bb5 +Clang.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/a2ea302b51f0bcdc648cc328fb263290 +Clang.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/5f04342029064f71b698a865d5fd4e407caed9751c443a4ed94ab195980ab14f9477a40cb4b914e9ff090d2067694104bc4bcd1b927cb2c07c268e5da142ccf0 diff --git a/deps/checksums/lld b/deps/checksums/lld index 1b238fdbd1a96..2459825b43df3 100644 --- a/deps/checksums/lld +++ b/deps/checksums/lld @@ -1,108 +1,108 @@ -LLD.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/0edc0983135da9e37b18fa3fe6d56237 -LLD.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/2adbb4eb76e72be28951c96140070b6d16c5144f689631d51b56365549a5d38535c1dbb5e351a6bdac4648ba52da02297591874193b1c16e7078060c99d23f04 -LLD.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/59b06fca083f1a5e9bf9517ae4f6a4d6 -LLD.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/7f1dc641df9288dfcd887239b86e7fe2871220b9d7f877b24b3197ab73d2176c4533decbea427b09e8f70ddc6c7570d31f5682eaed7215193e95f323769276a8 -LLD.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/c97e607a661b9ff571eba4238ec649dd -LLD.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/7c7add8a0fac379b580a19a02966adca4932bd4573ba0111262544c0d935fc121c5aadaeadc97f9564331202b08c7366ceb170bb2b318db3425c157772d283ea -LLD.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/d55ebbd25b97a4e4628fad1e04782056 -LLD.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/681729b4d10d8f66b0cdb89ca4500ee8a417561cc886608d06af0809d946bdf7cf5c6bda2b6d5d577bae3a15dc347568a3d7d7428568f86ca61327041026fbd2 -LLD.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/78b06e5a351e6eab372ae29d393ffdcf -LLD.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/37a8b5fa3491ec8ae74da88e81a0c229d38166acbb46ff3f5a819034c40fa59ca2ebf4c0ed58e615baf7bf7da789ba86114738252501cfbd842be95cc2104dd4 -LLD.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7ba5b76c83d746a3c62354bf753db697 -LLD.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1fa403c8923487e2d6a8e8c1d86c2ea955ed32bcde2328cb1167a315cdcf704af896505e9c44b750ffca9e3ae66e805f60831136eb79fe1c6d58eaf81a78b1a4 -LLD.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/f052208026a0fd5120ea838843b244ac -LLD.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/fd9ff2d5836300bcf76e4aeefb1e57860b3203fab0c32e668dce3e636dc362876d0fba1f2c23bf55a342ac17294c73e839a8eaf065d64d4397582dc212b8b9f4 -LLD.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/4d1077835df0f592a168c140ffe6299e -LLD.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/8dfd44113b817f607bc38ac1b4ffb192be340c826b9bc8f9d41e92e0f0333d8fc4227f93aaed16a4b9e94a5ec8b79628f2d3a73fb644684a595921f36ccfbeb8 -LLD.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/0f31939f4ff00c572eb392b6e70aab38 -LLD.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/581441087ad4869cfdba13808b2d6adaf929ea1b38ce96c357f276d77c3e63439f8edbb822c8f41770cb61fc08837d7eed2466d187683bc44f2cb3c553e2e60e -LLD.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/ca767173044b5a19a86c6a890dda3b05 -LLD.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/0577785079039b534fd736ea7a51d9b5176693d81e0bcda4fccd760d7c1218042999b6a38b973a903c0ef68e57dfb3b86e9e2f9e307dbaf603997a853f34eed3 -LLD.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/89bb950f17a5b792a6e60ef98450a6b4 -LLD.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/54bb68159743cd14ac0fce7f218a66ff6bf29e626df8dbdbd6e8581699d9b1d357a3c10d86c6822bde7299c14728bc55480f91cefd041d1de61cc179ed347b9a -LLD.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/735e4dda5f8cc06934f6bda59eab21d6 -LLD.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/a9b91beed959804b9e121fee786f28808a7670fc5d2728688cca1c7e0fe56e82e47d95712e38fdfc42e02030896843c4b3df9928eb34c2aca9ac02262427c76c -LLD.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/30a95179bef252aaca41984daa54c680 -LLD.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/0302db3c04396a30d1f6ab8d8d585bbe3a9e70342f068747ddb875b024c173bb9bb34518da7e76a10d3a325dfd741118f36f67fb83251bdb8a9901c4799ad79f -LLD.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/4386c746c5d9b1408dbe7df04bc6a08d -LLD.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/d71c6ebf5d3eb42368ab336cf8520afcd05470308ea117fe95797171e5c573948412ce777f62cbd45ee99ffa59cc769c276a60393a22fecffbeaf8b77b50ea35 -LLD.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/49287977de61b100979355e458c8970c -LLD.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/85ed3b2c7d2478a307a393a2003e694fc3097cc6812143abb3cbdd73a7d36bcb6f06a7d341ea639b9849f714c2d8f418a8b96035ed1c19a3957b42d005c0427a -LLD.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/80a97341c9537b8a58c7df23f86d5cf4 -LLD.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/5774b246ae820de4230a1f4f65bd683145dad5cbc4d326fd75649e06e773c74c2cffd48108a79ee0cc93175786450b6d50f7ac532e6f68961c18fe6119ef94f5 -LLD.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/6f84d6858aecdfd95726a37c9b6a0e0f -LLD.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/2cdac9a810c777ec6d85093926292c75e4287f83b7224246f6fa248e3874a2078c46377cd5ccb0f36a5e25b139691f1111d705079e89ea4215c9bc8659414094 -LLD.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/d40f0956cc36aa7846630755a672a91c -LLD.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/01368311a0ecfbe3f23514115f0bce7ce816c878815d937f3fa067b9daab07da0c02f520a96ad793212e5056bfb6294dd0129dae75f274dfeb48191e504c5322 -LLD.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/689120b8091b9da8cc9528c96f5c5df2 -LLD.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/ab78810af7d77116a4973b5825d5090133218cf08d5d77be14f83e028821e83493a112adf71094cc208f74cf4deabda63d7fff98866cc0304793aec9b27b7222 -LLD.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/5627ccf1677c48b7ef8ac9e5faac1d20 -LLD.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/454d2636cd72974c79c2d907e56e3c69c30c3fff78b199591c9ebe4f14d04c40c4bd7331f8dc2c957c37e214da8d28ef3a47ed8d3dd4ca9d480d52bab3429b39 -LLD.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/8f50e5f684c41845308c123f8e45a0d5 -LLD.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/21baf8a00fa65473ff6cf7ef2974ef88cd5b0eadd06ff85598de10d09425074297bcff3472ef001047a5440065a2de2fc6b1eefe3a32c7c1b3e3261165dc063c -LLD.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/c2e0a5f58e38a9acf2c3914177ceb827 -LLD.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/2a1653d171a2ff08bde55c53973e62955fe9d9629388ae014a645d3199d8f4bcf0fb923d06812ccd62e224032b261c8ebed56ebebed750acbc87671203d7aee5 -LLD.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/fa3959aa413a2b707d8831edd2bd7867 -LLD.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/8b74fef916a72c2f4933c21d3344410c7e03e64265a44dd62cf2ef2ac0feeafeb2b443eafa5dad3d3d0028be96b9424ff67b16391f1b3a2185826de68921adab -LLD.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/b0751bf7eba4f7f7a28dc22993eac9cc -LLD.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/7510f7349b06365e9cd260229e7b8c84da26bac072c5fe9a4e59484d82a0753d4ecf1066ffe41343f881a682590dc9ee4ef4a49cd83dba45c21b8d76dfb80f67 -LLD.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/5abfe9e960bab4c8a44f41aaccaf936b -LLD.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/efda0e0a35e2774af2f2df53f89d61f146a5730086d40865d448b009c833934b23ea4b296c3dc3f2039527b72ef40493fdee6f7c630484f64cec2d1aebf4a4c1 -LLD.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/bfe87378e965050b1b20e993c8b13a53 -LLD.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/ef2fd5e81f349673417bffd68c4122a87c09caed3f6f8f0235bc70b75deca7363cad68276aa708fb9ad8f7edd249d49f78d9f5fe7b226b62e8604c7bd3d4b9cc -LLD.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/4ee16f57d7dc060007250e17ffd55817 -LLD.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/27fd3a21bac676feb2c2c2363c027cf12988c70d889174e52c6bc1fcb4a93241f4bae85d5750ceba5fa971611700a9d15e3e02803cc14382cf6a1ab2918b719c -LLD.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/06699da5617371442b0539203152405d -LLD.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/83ba6300d5669b52c1913440598a2577106ea73e0b83549a5b3b0f081a94b6b8ca9fc05687d2be4b60c2d6a524bafd43b839082f0eee58b4685758061b229fde -LLD.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/a051688aa3a6383b4be4faa4f4aee985 -LLD.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/2059c6ac6579c4720e7167cd547b679a9c1a27a2c68174ed543be935ee23122234b3f2a4555de0abab3a982aba73d1751db336f3e28005ce8e4659d61f9269aa -LLD.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/600baa66310cf348ef3b4351ada014f4 -LLD.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/52b4718993d8abdca8ab701e86022367655d7927dabb8f3a8e41e43dbc90a9af78caf8abd37907a79b0f05017b6f0ef72314a187dab5bdac8ef7996e74c96e2d -LLD.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/4bc599fc07e9c7c717355802c1538a6b -LLD.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/4521e40cf6cca31cc9ec8ad974c6eb922632d8ad0d5008c951e23b7ec193a71dba5f3bc2dadcfe47e2ca29395646293c6559bd88ac286c5d31d5c4521756177d -LLD.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/462b9c453405768c2d93535fc83308b8 -LLD.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/39dee4d4a0073a8dc4ea63d43bc9a357bcf8e26e3c5c17f1441fa72145f5a4ff6a53e0aae6de687b8fcbace40207ba06e61cb8452c9bfff7882ab48e9f9f5ff0 -LLD.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/8b12a4f5db80b925785f42a97e6489f0 -LLD.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/797d12888668712658fce85ff842d812a255fa4633bf4e78b21488867518a1fc2de746885e2fca1055595ae476670790239a714797f2322ca04027afbf27330f -LLD.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/acb8716cf94f654078c7dce4a140f71c -LLD.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/cf64ae04ae3e55575d5781ad30212b1c0ec734f81b42e3c26da8766bde7c47b6a9512515997afd15f9eeef2ee326c7aa589ee1b557c45b4ef955a8afc72fd759 -LLD.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/331d844c447f564171345009764321a1 -LLD.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/978349a74fc5498408a5318c87ec6d25c01268b9d21fb85e6bb601243ad0d33be8501b181d1f9ab7663433a740912f5bcb7160caf1011b1a2c84fdd51e0fce78 -LLD.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/8595a49c49e851973fffae7c4062911d -LLD.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/f707e514843a206b53f380c7bd8d4d8203cc62219344c1234416462dc1cb3d3f8a7452ddfd0f07178d43dfb193b4402a018cc465dc76b43b687fd20fa1ea5222 -LLD.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/5b4463e81c156dabe3d182c42eb647e1 -LLD.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/995db577d4a78d62cfcfca3f1fafb333ff26548b41d8aa8d763e4705dcdfe8005e2f68873faba4040599a6d15821a523261d0451d75fdf6e1c5224e8e777a71e -LLD.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/d2f9f08cc952c0639f7ef1073c8630d6 -LLD.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b1cab7b813fe0f7c26c55261e8561295cbdf1e812db3844b87605fb527d09855f2bef4a40ddb0a7cd354c7cbb626293d4d4012f33acc242f9af4abe1dbbbeeb7 -LLD.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/e82e3b67a073cfa6b019bf5604eabf2a -LLD.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/9bb18adf78afa9dfa0054e6511f5750a9e2fa9138aeb1bd83f7a51d37d031e2f3c151463ea8f682dc7130cb98fafae0b84c60d3befe27f9d0d3dc3334ef82420 -LLD.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/56da3cbe81ddff089ccf6b6392a9396c -LLD.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/2af483a1761022dcad414fa7cec7fb5c6fd54be28185e49539f4824cb0b6acdc1cfa5c78de31268dbdc444201936c5a6d2e04f39ef6f0b9fb184985ba4e3daa2 -LLD.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/15cbf5eaf89c7b834ee19629387515a5 -LLD.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/75ce7c398bdfd57af2c09dfc946b024d5a72e90575ed92f28e015e620ca89e421dfc9a391f4a78277c3e06c38dd696d572c5601a2b1866e521dbc2fc5a60da56 -LLD.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/b895da29b6082cdff6f0324179352fdf -LLD.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/e89a97dfd6c345158e3e12cdf97d33c22f849e5438401cf5a3670c0d1cf0252ca03e4c52475a42c3e6c2b2d689c2f53fc5cb7c925a23167ac51fa1a5e01e3d7f -LLD.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/7edda2d8c2eaadec2d262ded2456934a -LLD.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/0b1d60840d638c0b0269b901a3f5198e18e244da338aef2fb49b474b3601d44a2b4dec13e258909985e363ef8a8749838b01dd195e05a266ca36e6d9f274ef17 -LLD.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/e26138e3491a053ea9a998dd00ad728b -LLD.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1215861fa52b1ee21196bbce0e99912b25f887f5734e0c2628ac78c1af5fdf57c4d7cf099cddcd7031a26c60cf141aeea66a0147428008cb485c207e90801835 -LLD.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/a1e786ac775517b8b483bbe3f6571d37 -LLD.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/3937f156fc2fb8eecb13444c71f380753c16b08f29124228808c91ea4258ee2195219c4a9b601d4468cc24bd584403c16175518a620bd94a7dadff868b3771d7 -LLD.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/976d840de14ef6ee2c0a538197fe8f10 -LLD.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/7f58f975dc3d69f502537aca79509bbc3c4f5da2ff8ddb1c7e27180a6bb2123713eb42da61cfabd7a48a31fc464fd74554b34935dfdb3ec095d14ff443f514f3 -LLD.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/ab0295ba327cfa6b9a252b0e7a4b50a5 -LLD.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/7c750916d4157ba0a37cd1277a0f8faf32123dfc626ea76f848a7c567fd889a7801f8402a307c190ab34fc21b156f2a23967abc9972fc103e5847a200ffc7305 -LLD.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/6827f38ed653f33953ff7ae510a517d5 -LLD.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/f01c655f6433ec6808b62872b8fb4c5a2d8e187643c11f0b4f5c06e2302e462353b516f431c1e26ee60b579c0f8c8c6385f018db3011c619745a39f9ef263436 -LLD.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/385cd2715d29de3e85a3ac10bcbc88d8 -LLD.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/5c90e8e583176ed9dd563f794073bb344283284a10e303834b6c5a9b71369f50dfbcbac61400ff70f34f3065279c848dc29086309ad38774e50eca3fdd5f9799 -LLD.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/241978345735e3b57a88918693c0c0db -LLD.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/916c6a4540ce9a2b2574d92c3aed42171f9e49f776ab97d3e5be84df832d463b7e542529c3ae81e4d6a31d5789d55b96f9559f48c0e4c8be36d70e3ff6f4292f -LLD.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/a4f16e809240c1837b90d28930e3f711 -LLD.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/983201793e0f9e6416bcea23b4a70a5a1a36fbdd72bed2cc60ec267eee441aa3d9c850b4aa3da6a232f3de451089754138ecd5411e5431f632e48c1993513ef9 -LLD.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/70f47c2be55741f754ffe89e4749dafa -LLD.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/f2dcf4f6ce888801e8a14875909f78b46d8ed853a7063a185356c7f21e42e15323d847d9a9d4b020481a7fcec9539d979e4c7f2b083ac1c1bf75a275a200562b -LLD.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/becf7c6cc39a98cb722899c94b32ca34 -LLD.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/84818621307779e27cc149afbf958653049e47a62ca44ff78552878114c2fb0f7c40cc83722394ee8d880a6ddfdec79012235a6ed20bbfd1e5d9e83ed0a0199b -LLD.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/0117c05f8dabf41c4628532d59cccd3b -LLD.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/b276dff2c54fdb6403a461ecf5435978e2cf9c9273934edcf3a31e7f640ecccf37de672f6b0b3f296ddb6a7059b0d95ca6c5bf62d62ca545cc62a69ebb84b8ce +LLD.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/0edc0983135da9e37b18fa3fe6d56237 +LLD.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/2adbb4eb76e72be28951c96140070b6d16c5144f689631d51b56365549a5d38535c1dbb5e351a6bdac4648ba52da02297591874193b1c16e7078060c99d23f04 +LLD.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/59b06fca083f1a5e9bf9517ae4f6a4d6 +LLD.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/7f1dc641df9288dfcd887239b86e7fe2871220b9d7f877b24b3197ab73d2176c4533decbea427b09e8f70ddc6c7570d31f5682eaed7215193e95f323769276a8 +LLD.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/c97e607a661b9ff571eba4238ec649dd +LLD.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/7c7add8a0fac379b580a19a02966adca4932bd4573ba0111262544c0d935fc121c5aadaeadc97f9564331202b08c7366ceb170bb2b318db3425c157772d283ea +LLD.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/d55ebbd25b97a4e4628fad1e04782056 +LLD.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/681729b4d10d8f66b0cdb89ca4500ee8a417561cc886608d06af0809d946bdf7cf5c6bda2b6d5d577bae3a15dc347568a3d7d7428568f86ca61327041026fbd2 +LLD.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/78b06e5a351e6eab372ae29d393ffdcf +LLD.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/37a8b5fa3491ec8ae74da88e81a0c229d38166acbb46ff3f5a819034c40fa59ca2ebf4c0ed58e615baf7bf7da789ba86114738252501cfbd842be95cc2104dd4 +LLD.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7ba5b76c83d746a3c62354bf753db697 +LLD.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1fa403c8923487e2d6a8e8c1d86c2ea955ed32bcde2328cb1167a315cdcf704af896505e9c44b750ffca9e3ae66e805f60831136eb79fe1c6d58eaf81a78b1a4 +LLD.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/f052208026a0fd5120ea838843b244ac +LLD.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/fd9ff2d5836300bcf76e4aeefb1e57860b3203fab0c32e668dce3e636dc362876d0fba1f2c23bf55a342ac17294c73e839a8eaf065d64d4397582dc212b8b9f4 +LLD.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/4d1077835df0f592a168c140ffe6299e +LLD.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/8dfd44113b817f607bc38ac1b4ffb192be340c826b9bc8f9d41e92e0f0333d8fc4227f93aaed16a4b9e94a5ec8b79628f2d3a73fb644684a595921f36ccfbeb8 +LLD.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/0f31939f4ff00c572eb392b6e70aab38 +LLD.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/581441087ad4869cfdba13808b2d6adaf929ea1b38ce96c357f276d77c3e63439f8edbb822c8f41770cb61fc08837d7eed2466d187683bc44f2cb3c553e2e60e +LLD.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/ca767173044b5a19a86c6a890dda3b05 +LLD.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/0577785079039b534fd736ea7a51d9b5176693d81e0bcda4fccd760d7c1218042999b6a38b973a903c0ef68e57dfb3b86e9e2f9e307dbaf603997a853f34eed3 +LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/89bb950f17a5b792a6e60ef98450a6b4 +LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/54bb68159743cd14ac0fce7f218a66ff6bf29e626df8dbdbd6e8581699d9b1d357a3c10d86c6822bde7299c14728bc55480f91cefd041d1de61cc179ed347b9a +LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/735e4dda5f8cc06934f6bda59eab21d6 +LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/a9b91beed959804b9e121fee786f28808a7670fc5d2728688cca1c7e0fe56e82e47d95712e38fdfc42e02030896843c4b3df9928eb34c2aca9ac02262427c76c +LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/30a95179bef252aaca41984daa54c680 +LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/0302db3c04396a30d1f6ab8d8d585bbe3a9e70342f068747ddb875b024c173bb9bb34518da7e76a10d3a325dfd741118f36f67fb83251bdb8a9901c4799ad79f +LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/4386c746c5d9b1408dbe7df04bc6a08d +LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/d71c6ebf5d3eb42368ab336cf8520afcd05470308ea117fe95797171e5c573948412ce777f62cbd45ee99ffa59cc769c276a60393a22fecffbeaf8b77b50ea35 +LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/49287977de61b100979355e458c8970c +LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/85ed3b2c7d2478a307a393a2003e694fc3097cc6812143abb3cbdd73a7d36bcb6f06a7d341ea639b9849f714c2d8f418a8b96035ed1c19a3957b42d005c0427a +LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/80a97341c9537b8a58c7df23f86d5cf4 +LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/5774b246ae820de4230a1f4f65bd683145dad5cbc4d326fd75649e06e773c74c2cffd48108a79ee0cc93175786450b6d50f7ac532e6f68961c18fe6119ef94f5 +LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/6f84d6858aecdfd95726a37c9b6a0e0f +LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/2cdac9a810c777ec6d85093926292c75e4287f83b7224246f6fa248e3874a2078c46377cd5ccb0f36a5e25b139691f1111d705079e89ea4215c9bc8659414094 +LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/d40f0956cc36aa7846630755a672a91c +LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/01368311a0ecfbe3f23514115f0bce7ce816c878815d937f3fa067b9daab07da0c02f520a96ad793212e5056bfb6294dd0129dae75f274dfeb48191e504c5322 +LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/689120b8091b9da8cc9528c96f5c5df2 +LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/ab78810af7d77116a4973b5825d5090133218cf08d5d77be14f83e028821e83493a112adf71094cc208f74cf4deabda63d7fff98866cc0304793aec9b27b7222 +LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/5627ccf1677c48b7ef8ac9e5faac1d20 +LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/454d2636cd72974c79c2d907e56e3c69c30c3fff78b199591c9ebe4f14d04c40c4bd7331f8dc2c957c37e214da8d28ef3a47ed8d3dd4ca9d480d52bab3429b39 +LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/8f50e5f684c41845308c123f8e45a0d5 +LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/21baf8a00fa65473ff6cf7ef2974ef88cd5b0eadd06ff85598de10d09425074297bcff3472ef001047a5440065a2de2fc6b1eefe3a32c7c1b3e3261165dc063c +LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/c2e0a5f58e38a9acf2c3914177ceb827 +LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/2a1653d171a2ff08bde55c53973e62955fe9d9629388ae014a645d3199d8f4bcf0fb923d06812ccd62e224032b261c8ebed56ebebed750acbc87671203d7aee5 +LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/fa3959aa413a2b707d8831edd2bd7867 +LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/8b74fef916a72c2f4933c21d3344410c7e03e64265a44dd62cf2ef2ac0feeafeb2b443eafa5dad3d3d0028be96b9424ff67b16391f1b3a2185826de68921adab +LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/b0751bf7eba4f7f7a28dc22993eac9cc +LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/7510f7349b06365e9cd260229e7b8c84da26bac072c5fe9a4e59484d82a0753d4ecf1066ffe41343f881a682590dc9ee4ef4a49cd83dba45c21b8d76dfb80f67 +LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/5abfe9e960bab4c8a44f41aaccaf936b +LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/efda0e0a35e2774af2f2df53f89d61f146a5730086d40865d448b009c833934b23ea4b296c3dc3f2039527b72ef40493fdee6f7c630484f64cec2d1aebf4a4c1 +LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/bfe87378e965050b1b20e993c8b13a53 +LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/ef2fd5e81f349673417bffd68c4122a87c09caed3f6f8f0235bc70b75deca7363cad68276aa708fb9ad8f7edd249d49f78d9f5fe7b226b62e8604c7bd3d4b9cc +LLD.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/4ee16f57d7dc060007250e17ffd55817 +LLD.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/27fd3a21bac676feb2c2c2363c027cf12988c70d889174e52c6bc1fcb4a93241f4bae85d5750ceba5fa971611700a9d15e3e02803cc14382cf6a1ab2918b719c +LLD.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/06699da5617371442b0539203152405d +LLD.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/83ba6300d5669b52c1913440598a2577106ea73e0b83549a5b3b0f081a94b6b8ca9fc05687d2be4b60c2d6a524bafd43b839082f0eee58b4685758061b229fde +LLD.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/a051688aa3a6383b4be4faa4f4aee985 +LLD.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/2059c6ac6579c4720e7167cd547b679a9c1a27a2c68174ed543be935ee23122234b3f2a4555de0abab3a982aba73d1751db336f3e28005ce8e4659d61f9269aa +LLD.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/600baa66310cf348ef3b4351ada014f4 +LLD.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/52b4718993d8abdca8ab701e86022367655d7927dabb8f3a8e41e43dbc90a9af78caf8abd37907a79b0f05017b6f0ef72314a187dab5bdac8ef7996e74c96e2d +LLD.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/e1e12162e5c63141dd95fca83cf1be64 +LLD.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/ce21d1cfa4af89fee1cb13587e15d355f179d38a4a9b4ffb9f357d46fe9b7fed4a5cad801ddf75d66b71d77170427609a51144450f83c8dd59af5c02fb0a9017 +LLD.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/932639f712fb881f621e5bb369921132 +LLD.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/86426de75c4fd1e1d56e1bee08bb6447be0c7417f8492639158f436caa5794862dd3b2981f26f1828852f35806dd2177fbdaacbee67ea849e8de597948b276b9 +LLD.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/2ff9f42465eb6e845ed6b7567b9d14d8 +LLD.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/a19b985b28a642b9a40ef25d02d4e94608b7e5c9925db5202e9d34ca8258e0b02d758de5bbeed63f958602f7fb59b70c4f32434a59008af3f0dd1b757a20e2bf +LLD.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/6de812afa415af04eb9d806adbd4b2ed +LLD.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/c6799fb148f8b019d0b05fa707d58ac7f449347290fc3f47458cb84e0bef704fd179e6d29d2efdeb0c35e4ee799284f5850b1ec5c04ccfad45b38e058e449554 +LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/331d844c447f564171345009764321a1 +LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/978349a74fc5498408a5318c87ec6d25c01268b9d21fb85e6bb601243ad0d33be8501b181d1f9ab7663433a740912f5bcb7160caf1011b1a2c84fdd51e0fce78 +LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/8595a49c49e851973fffae7c4062911d +LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/f707e514843a206b53f380c7bd8d4d8203cc62219344c1234416462dc1cb3d3f8a7452ddfd0f07178d43dfb193b4402a018cc465dc76b43b687fd20fa1ea5222 +LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/5b4463e81c156dabe3d182c42eb647e1 +LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/995db577d4a78d62cfcfca3f1fafb333ff26548b41d8aa8d763e4705dcdfe8005e2f68873faba4040599a6d15821a523261d0451d75fdf6e1c5224e8e777a71e +LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/d2f9f08cc952c0639f7ef1073c8630d6 +LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b1cab7b813fe0f7c26c55261e8561295cbdf1e812db3844b87605fb527d09855f2bef4a40ddb0a7cd354c7cbb626293d4d4012f33acc242f9af4abe1dbbbeeb7 +LLD.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/e82e3b67a073cfa6b019bf5604eabf2a +LLD.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/9bb18adf78afa9dfa0054e6511f5750a9e2fa9138aeb1bd83f7a51d37d031e2f3c151463ea8f682dc7130cb98fafae0b84c60d3befe27f9d0d3dc3334ef82420 +LLD.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/56da3cbe81ddff089ccf6b6392a9396c +LLD.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/2af483a1761022dcad414fa7cec7fb5c6fd54be28185e49539f4824cb0b6acdc1cfa5c78de31268dbdc444201936c5a6d2e04f39ef6f0b9fb184985ba4e3daa2 +LLD.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/15cbf5eaf89c7b834ee19629387515a5 +LLD.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/75ce7c398bdfd57af2c09dfc946b024d5a72e90575ed92f28e015e620ca89e421dfc9a391f4a78277c3e06c38dd696d572c5601a2b1866e521dbc2fc5a60da56 +LLD.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/b895da29b6082cdff6f0324179352fdf +LLD.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/e89a97dfd6c345158e3e12cdf97d33c22f849e5438401cf5a3670c0d1cf0252ca03e4c52475a42c3e6c2b2d689c2f53fc5cb7c925a23167ac51fa1a5e01e3d7f +LLD.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/7edda2d8c2eaadec2d262ded2456934a +LLD.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/0b1d60840d638c0b0269b901a3f5198e18e244da338aef2fb49b474b3601d44a2b4dec13e258909985e363ef8a8749838b01dd195e05a266ca36e6d9f274ef17 +LLD.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/e26138e3491a053ea9a998dd00ad728b +LLD.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1215861fa52b1ee21196bbce0e99912b25f887f5734e0c2628ac78c1af5fdf57c4d7cf099cddcd7031a26c60cf141aeea66a0147428008cb485c207e90801835 +LLD.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/a1e786ac775517b8b483bbe3f6571d37 +LLD.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/3937f156fc2fb8eecb13444c71f380753c16b08f29124228808c91ea4258ee2195219c4a9b601d4468cc24bd584403c16175518a620bd94a7dadff868b3771d7 +LLD.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/976d840de14ef6ee2c0a538197fe8f10 +LLD.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/7f58f975dc3d69f502537aca79509bbc3c4f5da2ff8ddb1c7e27180a6bb2123713eb42da61cfabd7a48a31fc464fd74554b34935dfdb3ec095d14ff443f514f3 +LLD.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/ab0295ba327cfa6b9a252b0e7a4b50a5 +LLD.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/7c750916d4157ba0a37cd1277a0f8faf32123dfc626ea76f848a7c567fd889a7801f8402a307c190ab34fc21b156f2a23967abc9972fc103e5847a200ffc7305 +LLD.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/6827f38ed653f33953ff7ae510a517d5 +LLD.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/f01c655f6433ec6808b62872b8fb4c5a2d8e187643c11f0b4f5c06e2302e462353b516f431c1e26ee60b579c0f8c8c6385f018db3011c619745a39f9ef263436 +LLD.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/d444e6188476c8b7bb6026aac6ea0a1f +LLD.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/69510929896bcfdc4377b180ed206617f96e1fa13fe9f8ccb18d78958c3f9f951a2ff8ada9d1217a02407819caed5308d91bf8fd72434ba347f548c9ba000a5e +LLD.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/728e79f334e5151fe5595711763baca7 +LLD.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/2501a5cae4e61302e44f06fb7d38d15a776d750c6e99c30f89e1464e836a29c735d40972d48d19f1b38aac3f487cfb532d71ce9db2df8bfddd03d1fea5f3750a +LLD.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/12329ff896ea6018df464e0d97154f74 +LLD.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/f44e3e2c8b27b8c3a8f5c90d58a286e29b5ba6d05fabcd891749fee57b441c3ea846103116fe02e2d7f754e77e8ebd97198a180bd855fc8009e9e285a28435ba +LLD.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/0771c767ba9babc3961102d8dbb0087b +LLD.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/6ddf5174189f06a7cfa0be0e14f73e593786e02be51ed1e5576dfdf2f66149e68e0162a9fc23bafd5f1c2b445861734799cb0316a6762acc2c303bff417df3f5 +LLD.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/bbb2c448fef481ce9ee96d311323bf7e +LLD.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/9f6fde5aa099e2eef3aabdb6a67f5664f0c3bcfd5b3bcb955565d26334f49acf1b976458b44867ce2d7aa0238370bdb9e98cfef30311177c059036b1c51d6109 +LLD.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/e1b7c87717936fe073638b22892fd380 +LLD.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/96bf89bd3edf2225a704ba54675af2c172a469adda9f2700a091af63168b46da7bf13499fccd7a4bede8ec6f9c6da14c42f69df9c1f2ff3b3a9b1ec9801f2eff diff --git a/deps/checksums/llvm b/deps/checksums/llvm index 6380397ffb84f..02de35bbaa43a 100644 --- a/deps/checksums/llvm +++ b/deps/checksums/llvm @@ -1,111 +1,111 @@ -LLVM.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/f18fa63ec97c79f3773af2bba51f69c6 -LLVM.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/4ee1c3e746177296fbe976976c58b6ca09dec22943ac1e63008aeed94f46619e4e60d8278566e74f4912fa9d3aa21c8b03ae2bee360db54c7dcdfa2381469148 -LLVM.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/f482e543971546cd59d946cc33d79d5a -LLVM.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/d026b746f419e9bcc04daea60b1e66e26d4132e7a551b0f14c95ea95dc9a0f4e645110d8cd5b91b92bce7775ababb715747a2e4a09c0920787e2f25ef1bfbf19 -LLVM.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/5d12f50225285b180274cc89c21e7c44 -LLVM.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/3947f0d909444716a29c26a0645288e0f02ab19e6fa6ac0104c5ffc9659f01337198a5914beca2ccea7c98c9aeb12fc537891d440766054c0b9d3bbc40e24165 -LLVM.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/e555476d3324996897cb0845ca22312b -LLVM.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/a809d8c455d6f72c2bfc2517ab375d6ce329880ae33c5c1bf575dfd599d6132e38df35fac4300a0e72726ca33ae1db69ae67f5fb03d5c617eb34f7ad20f09b8d -LLVM.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/6432ac27166a0ebb550c7b000c27e2da -LLVM.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/be6440412d46252292e6d907f04193ed3f438b06419d0fb8b067a7cd89e5cd2dd9143af4605de9a2a697ec2745efbdaf6021d065346041fec3b86051de42a26b -LLVM.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/0bfd05e6bd23c92b73751a86826b288e -LLVM.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/68c08b2624bd0d38c7cfaa8b61b7e1ed70c7a106dda814f146a3f5796cbd42f476ef19f726d3ce368d89e624c7a3fa7f07829c171d79581f3cf565dba28c27de -LLVM.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/53a9db6445352b44717f7e0f81d896b2 -LLVM.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/ae34208c128f1d4468d8a25b060bd1904f36a73dd0029606394061843f90aa26f9c3071e8281e76dbc10fcfd103f04602fde370a0cb04d435fe2f7a230989cb2 -LLVM.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/f7320272ec2f3cc86a742a8ce3b4cec2 -LLVM.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/612f03f49b04fce2a21e3e0242c3ae591ccdf6398e31aaa63956c40fb805d4a060da8acd6e5ca1d1c0a7b1f994105ad74b1acf78490e31a149368c8a9c96c026 -LLVM.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/db7b7a03c047a6aa7b599cafbf6023c0 -LLVM.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/05474495e73c56a8bf8a2459e705198a6c6e32df5b83ab153f1080a763d2f7d79dbe014592e12f0f3063b30bb0641dcfbf4f161ed988c777c8955ce9bdb89cbe -LLVM.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/88255189a80045bb410da1eee3c277e2 -LLVM.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/b944ed004867d6bcf48dbc089d6ee5904318d6a2ab3a7dac3c802cb7646d4df21950a6e4bcd5bc57bbea872f99f39ef9e174dde8dfa4f5518f23a1fa0e8cf959 -LLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/a25160098b55d2ec00cde15d088343f9 -LLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/2e84a0b52a4852a69155aa4cdf33366b863caba7ced42db573e401a64c0fd2acd1d27446a3ad0ff94740a5fc4c579e745802bc32f925bb505177afdc64fb85eb -LLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/10b225be9d25681a36fbffdb5f3e315f -LLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/6c38d87c8aa321fa08ff9880bb27cedda1806bf6aece891f08f757e6276dd37e450a899c4fca587bb693f683f9ad0d85f388e7c4ec4a76c96e73f0f26ff6766a -LLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/320b77cc43b91549ae0e6b538ff53f7b -LLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/6b297c643530c06be5ef1d8dc2fd47abbfaa3a7862ba42ee9e4cff1361e54aa7ce77d4d9d7f5d2db38a3c780cd38a472eba1308e1f50aba74d3de3bf188fe91a -LLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/c3e0fe843bfcbe0c03a563bd40a16f0d -LLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/b62c3d8867594e34b1eb0c16f1db609c4b43146deceeabc23d4ee9af2046d8b2ae1a8566e2613a69691646d1991017f0a7d37ba8636a395d471f8f385a478479 -LLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/be03ae93d0825f335411a4039905052a -LLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/9e0159681e8ecfe477d3099314ccf2986eb2a8325cee274b6ab35e04ee9e89ea61356e5082d9adab6c41b8be98d0171e41642afca283ec59ed91267e66223c6e -LLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/9e244718d094dd6b2cdc50be77a284af -LLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/705668d6b44bc754fff8f28246d8359773f29888c1f6ead6a5f1e10386c88572de27d4d47b8a1bb160211c07fcde2667833615c31ae445d1929229d981e36e3c -LLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/12162558c4c89913f0486f3a4c969c8f -LLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/dc6a48cdc9a04b3f0938784d5d40d0b453bf438881895c78a0cad9ebd83090cd9f1d12fc00df6538d053b2943a590a3217a8309aa0912fb3615d728280979276 -LLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/e5012844af1fd76d6cf92ff0921a9f24 -LLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/436ace73907097593bd060ff5674db2e36f7a6e4081033b078554b76244ba0d2caea30dd94a49fb62c96f2a1c3e1f190de440bd2bb9242c1206f4794b65b30a8 -LLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/9ee929acc7c52d18a7c42808761ae233 -LLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/12f07258d295245f2b53414d0df0144c547c60b090354b5548f50bb704a82e1623e55ad353eec233407f1840a50d423d1404fc3e7b87f2386863189e7f886813 -LLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/c94a2e1f4bc031a7c663111babb0f8fd -LLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/4c82406d8df72312798d95ac0d038b38eb332b4f4f8a586bca7103bdbf7759365daccb6f3bdef9a9c74a06d04a12e96c01ac9fd03aa38f3c586a7ef3c7ec7e8c -LLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/e038b8feabb2e60b866756a8dc7a5947 -LLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/c3e03bff11db87c7f131dbf7163b414cac91556795e4c5c340bec52409c39f7e91c26cb34a6339c10610d0906f57a209d36f6cfd458b26d24ffca9a43d259f5a -LLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/b3bf4ff216946ad38ac6be230e0865e6 -LLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/0daba831dda378b2add9607fdc0d32046c0390a0a63758a6cdd9c0b90f660559cad0e71c5ee0b1c4264f3427e523a8c615bb87ebdfb63a65b983acfcb8df43e1 -LLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/33a3c56ab597e6f2c2863842f0103e53 -LLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/fb15d07a66b1f56b73625ead591f90b57a843cd9cb140e5158159a5f7c9249437678c61d0e19a11a65a536776dad37abd6be34ee0ec5dec7c0736079a0fcc7e6 -LLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/7488ef289e45e6c44753a42dc51aad7c -LLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/6ecd62f0756a1941c8df92605a7edf9fc2e70957f39ae407e5b1b49977301ac6e82d55bcb856668135c27f1a75d156f3dfe7a27c47c6a3594c2c9f032af8ef19 -LLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/5a286dd05b936c0a3ab61722531ef5ee -LLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/80016717959246708eec8588fd6bb5cb4894bf05c2d78cd1641e31cb43f38c0fda866283dabf1d999c77d030b70b89363e2346bd9b9310a2999623e47b2e4e7f -LLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/b62420d31c65fd8720427900b72f9aa4 -LLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/f63f62a667f6f2c6ea76db2b142d58cad3165a426fd420348f0831d447a9eacfda5ec9c006e05f60c1f2804e8b25e87369e754a0bace28257035a63a1ea23a76 -LLVM.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/ea922c8edae65c855e40f6ff924c35d7 -LLVM.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/d83a3737058da3c2427c061cac83ad910c43368e47bd1f9ff86c21ef0b40669946b128bd1063a8fcb081563ecf606d70a783a0747ec951c3443077b3ec8e93f8 -LLVM.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/7a20fc23311317b85127fa033cb69059 -LLVM.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/36d51f84dcb3c76556b6ee677a4f0fde1610df30a7030d1799fe9681c27e04faf1ecb4b5731db9a58060879076c037e3e5bab65faecc527296b439743bdd7d86 -LLVM.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/bf6859a7e73fb51bf91e2c7ce5b879e9 -LLVM.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/39aa6b1e2923aa572458cba58a328bf6ac0efd5f11974e04343d65cbb56fc5804066f7cedb1e9c58252313f94ee0487d6855a1714adebb3b71fd6c783a01018b -LLVM.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/10c32deaee824ed7a19dca9055a138ae -LLVM.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b9b14c9ddc2b0b07c07a53bbd3b711737d1a7d71626d3c34812bc3862145865205e5da07b052e119aeaf54fb97968b27e86450d768312623a7a87c6b8179d872 -LLVM.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/caa574701f180bf4dc323ecb441fa53d -LLVM.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/1c97d2311111f4411c3eedc6f1338a8c899932e7fc3490a03c0c9b2bc4c9a52d5797c50339ec7105d60edca951fc57c6f11bc7198c8e1c96334147d2b2dc670c -LLVM.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/f46c39e2f848fb5fbc9f1eed7fa695af -LLVM.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/ed5bfd8057b2d6d543c4a11f0c1c6502dc7aafd07d0c5a96ca2b1d0c5194093f20f995ee38a4a25cc0291b31c682c6dcee460f9fb657b90be5afd43258ce4c43 -LLVM.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/06533f3ac22a8a9be2501b6708821806 -LLVM.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/5284308b46ab1d8ed896e0425fae4288f87a640707c8cd5f298520cb19cea8d6311b0e6d21d5ed016f6d87f47b93d92d371abfe9bf1810b357972b7c9b437811 -LLVM.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/f75c2acc329a9ee041ff2c81aa93b4ed -LLVM.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/6ec83776bac9e2cf2cbf3f890412a940c9507ba06eb50b6a05148c9c336775168cd5b6ec4aa1aa148703e6724c414830e54c3ae075e4d3649280ada705ce9816 -LLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/7e2ea1a3e9c61976b446cbceadf33193 -LLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/b21830528362115476cec7f32b11f3c1541a5779027c824882fdc00b248ea0f0ca8d08ebd86b938c10fc80a7f7930d86e2cd4482fdce33822613128eb250884c -LLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/d77b1c5ec7cb8bd02ccd24347e2e620a -LLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/84ddacf1c222bb5d895939ba4aab80dc6b5c5c596a36fcc2869a87d639d006a156750f04d268b6c10b47d286cf3bb5e8c20804174fc93881383f2512833ad7cc -LLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/26f634aff16b5c8cff48b0183f3f8ddd -LLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/cc3619c9c8adf322bb334a6b2c9de1ad088a17f117bcb9aae5b51a4f7613a50391c3478b7f892e9dcdb802067de69b098ba7d61edc9979b8f960028af0fa172b -LLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/891a1f113e7f3f8dfa56f5f28e1c8176 -LLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/9b6a4a26c8f83764f892f7caf5f09a5453ab6e89c742ae4cb1e831a0711104d131d8fe0d9a8cbdd384b2d881edb3d9026af804f47f5f79d62da1d51dad4ec0e0 -LLVM.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/7dbc009fb3ef6ba400baaafa733afb54 -LLVM.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/c279c4be6a5e131b567625173b33e1f51a56c53eb0740895c1afc8b6824a00d4331df76bae9960c2143f7bfc2a9758dcbc7898fb49ef4aab56df6bba7030d636 -LLVM.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/007fdc357a995d68a01fb45d52a92da9 -LLVM.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/2bf2752f654db140822f4ed74494bcdddb85f4040ae24a753ed9c77efa29d2f50397719fa20de031325823004a66ddc1c00c9624887289c8020d6627ffd21f5a -LLVM.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/fb17aeedc48fb6a24f0aa2d078ceb2f3 -LLVM.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/bd622d2472f85ac5b0cb255a929413ae3b30ee06ec7204148072dc1f9da7bf451b07960f4905a66d2673db9926797e4bc33b262cff656e7bf4cbcfd132b49868 -LLVM.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/eceea244f8fdaf61c6addac8b8f57319 -LLVM.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/44ab4a30ff65685a121dc54c2de55de441fad95b02f54cb359ad44fb298adbf48fd7651ce871fecb40b08d95e1ca701ad4c857f975a37a5e5a42280dab6fc670 -LLVM.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/b09f19c4940f6fa12ea8b5076501e297 -LLVM.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/a52da2ace1f0f2ce0090a582a267fcba526c86a88be3d8e55020ea07e00a1cbb0323f8b8b0205c9417982774fcc05d667b8330f7676dd40c869f374130dcc50c -LLVM.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/a365e7fd610b6f6ad2dda2d94a141b4b -LLVM.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/5242fa37a93dfd99720f9c4966b4f9ac164987cb8de136c01b3474860c6229538e73db7727a6c7c832f651ce7ccb97dba0082cd66da2fe812dbc8ecd44fe2cf8 -LLVM.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/6645a6254d82bf854e50e47d671b192e -LLVM.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/d330eb15c34e13cad0eeb046e2e27f10eaefcf1d6cb68bc4d55668b55e3c00cfa07bccfb4292647a737ffc69bdf4070cf5a8bb1cb7f6319a1caf0faddde7aafe -LLVM.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/4073ae0cc33b7f803644a272cd0730d2 -LLVM.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/2ea897e3ed3688e2ae45918db51c5a1273afabf46d01a6a27739ac951803645861c549fd438b48dcda05294a4d87b6c39778d42e916301277a0bfc1d9ce53979 -LLVM.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/e223954ddf9e11830cbab24e4ed435c9 -LLVM.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/fb88bfc543ccae5cc9ef737e81757a8f7f61d1a2816501d569456fa62bd8ce30ae57b837ed32dd6d2a7c55fdc26c2c1b1a9965968f784eb3c01680f25ee5bd8e -LLVM.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/356d2f3008be6e04843a278d182834ff -LLVM.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/ae5b30925cce41593a34cf2e76b606e978c352f2bc915d8869b01600c8a81547ad392fc900766db2ade06355c2d95aa473bd51dd3d45f6bf20289d9cdfbb126a -LLVM.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/c31804464c51d1967e73f491948e2763 -LLVM.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/84ab795067bbe71390f15b2d700ff9e0c4fc124c3d111bdd141643242cf6dd7d3317a92d9c97ef5129ef089cfa3d703abc2b12c6a9d2287c90a9ad58a4de8478 -LLVM.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/9f205efa80dbc9d43560830c668659b9 -LLVM.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/54548970bc7b3988142c1a5c2be36f877c4d2cbdb3a58dba71acd7bb32b20cab2ab12c82619abeb6b3bde9a95fb66942e08104df0fb0f59d2ead7eda957b783d -LLVM.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/ab175b04b9c8dc73f2c06c06bd9d6915 -LLVM.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/c28bb2033ce2fe182f6a5a29e34a6ce4cdd22e994245f7122c4efb39cedd491c9d4343d8ba2aa8062eac156ad36d9f54605e6832feadce3c6e9f66e9ed7c760f -LLVM.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/7e4dedc77bdcd6853d613d8b0e3e9af0 -LLVM.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/e09c451cf018548bb388f9a0b419496a6c6540cdf1e204be391391b3a5645c2198562c2f995c3ae30f775c786e9e59e8b93c0fbb5d00fc9ebf1529dbca9c568a -LLVM.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/0835b50b6cd53b4d1fd894f27b3e072a -LLVM.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/8d228561f66feaaa96cf0af71421032f6c241e8a8ce3b8352771072d7bdd972e1b6270e15b0a4f5f4b76764cbd65ec371626cabe8607294041679fe9b6bac5f4 -LLVM.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/bb61fbd156bb0a70184f6f425ba770a5 -LLVM.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/ec310cab20f39facaa6c0b3a8badded0e4ffbd7bbc1fea6b3e67717046bfe6932a94cf562d3e35dba5052d5cfe62c540c6a38477452e535da52e650fe5dd4d6c +LLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/8b23ac6a55ad8a8a911af1cd2be84f7c +LLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/60df009ecef6b7d435fc198dd477e9198e1f96d89b3c583b06af5b6b938b9f4d545f75f09d0daee93f94448f6fef36ca2e0b541e1179280e6d918b02c619291f +LLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/649c61e6bb2ddc619d2f967d923a62d6 +LLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/864910013f659f473def2a5df78adf5c13f6f84f400d3b87c5660ef51a97c86520a73cc6072db2ed739f3e7e3e2d326f34634bc9ab432edbab59baaf2085f4bf +LLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/2bae4d31c56385e73f3cf667e5cb5582 +LLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/27f8479a639434329fc5e67326df2c22aacee61237cb1eb1bf9938a58b1dcf883ea0476a066dd284047388a42a3b676c37b2c800f97feab694edf091aa10a8b7 +LLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/040485a871ce0036fb19f3e9ab9ed1f6 +LLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/0472ab3fb75efe1b67ba8c34cd9b36377ef9206506f741ea9a6289d3dad4ba4d0560578661bf9e433b51c03c77a9de5ed23df37e160a9225bcb50c27e5431e76 +LLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/12f54c1888f00373ea1e8fcafffbc313 +LLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/fc246d39c1711cc041b014a77e8b0c9fbbdf86c92a1c027e35a152d18bf6cc72d8b059c65457851ce240a5c745ebd39934ed6ce6f553d408ec8ad4078135c746 +LLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7065ccae75d0e16876aec6d96de41409 +LLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1c0bdce88797baca3188be7927d7694861bc491b4ad7970e485332ecf36b28e121a57e3a4ffbe83f6919f00da66d04d7809c589b8f9bf4b9940b15cc5c1590e0 +LLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/708f78fb147a1a5455b1f0e27e0a8946 +LLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/f7aa0dab1f2b0a7dc5324ef1ed9969e31334245938f2954425eaea2c034072d844a3c9eed8b522bf1794a22d822117d6beff6c23872c875dcbcdd7cc719a6d61 +LLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/eaf4c42566b3ffbd6c3fa3fdab126d0a +LLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/7d60771a1795fe328c8f5fb534580d34016f6dcd85c268e94d6ed8af7e68fc74e3bb25ed8262bef4100b9341dea180a2961d1705e453d37dc5d6a01ff9b00ae8 +LLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/f4ed6360b1e46be18392900cf5e6e413 +LLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/0dbc3f7954ef085bff00cf1a7d18bf338bd76f67ab98d972a486942ade7f11a6c9761a4605ae653402d867c543a065d6c238bd6a375852544e89eb9f9cc6c335 +LLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/b8cfc0edd85f79fe0ee22b84b9271d62 +LLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/8f8b5111223d433bbbb7ec48df5436ee5a4c21c4cd57fab1b6a4121d72230251998035c9d62993d442af279e3d393afa2df1c161af2762420ec149ee16f01833 +LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/5cff8a24ca2d1da58ea709d34c33decd +LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/2c20fef573744dacafc6333687be408b474c9773c558fe08ff1702d1957aac3bc99dd9998866651bf9af7473214d1be236273725501cf9f5c38d1807f1605456 +LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/2721d242b457748e3f8301b085282c3c +LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/8a73828ebd84e683f9a043007bba955ca85deec608d9602fe29ef18fc999b4959bc8e87c865bcd060adb8b4c15f8cb04113027b37c3b4e075cc8c7946831a52d +LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/8c8171ed600e466b022a96956fb93e69 +LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/48798715ab9866528d55b0c75a9aa6a87e03b771c3a29b0f3d88bc8d89845ee8f39ddeb6232a0337eb1491092322fb7617e5ebef1e55c0bc4c46f05ed115a0f8 +LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/8343d87440928bdc76f0209eb905fac6 +LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/e20a0fb7e3cff62832ba840782b84c12ce8ac38cbcd0eff82dbc6a6ab5cd58c59cb760f5b85e4e60dec63aa274e8e43035c5e1fa5e77639d607971690487b3a4 +LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/f6a415de133867e9045c5821ae2bb286 +LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/acd4c6a31f998f506c747f3d8d4ddae393f6a58a282a928913d4eab850147e485e99fc953d4847d00555a1bde295255eed530e4dcf1dbd46e62d2c0a4df9c4c3 +LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/4164c3a46ea05eeda4c471b290b9c782 +LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/c19df17b57f67d2dd281f1939462250aca5b6cfd99598b0dd45eb76ba46f4b02c4e3ccc8e09ca57843c12de822a94df88d5593a34b401050f148452986094ec2 +LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/1d3bd6f4770fba34a9f1b14a3871665c +LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/686a8be7a96e37b91d70bd06259a8a61b6e8d2fbb3b28d9252b987b7ed58ae476a4cb1b773b143d41dc6de23a7b969cedf35c9b8070052a7b9882503379d4f6f +LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/3783a3c99a4c8c27ae367e5bb717cf3a +LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/34bc40f96d054487022879477eb826ce769b507c90de9c481107f582a1c995a9af9172d1d017eb30e6a9875f68877c26b76fd3ec48a4338c9e5608d970d012f5 +LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/b6d3fd4b5460fb336ccf71ed4f27112c +LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/9558ed5556c8c0ef5f3882f76bf4f4f5ba8bb642eecd3a6f9f7d4ad82c0d9a15038e8fda0e613eb614b747ef045e3bdb1cc3cad6a674627e9f54e56abac67daf +LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/37ef614a98b59a8100ead9a5a0b3a369 +LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/02f99b72dd23aeaeb5326c555e26f2090c311c8b111e3b203235ac503faa3d8499afda2e3541d0744dbbd8b6451c50d377b09ff7dfe37d3934b931e31b643640 +LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/f0b6cfc6d392e597e305a77985949bbe +LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/9e2487984369a573e000b92899888ec845cb76dc20aaf200eaa1f52dbaedc8311c4161f3c9febce47b077be86aa8780c6d9c550f508c6b4949d76d236ecefcea +LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/a369c3db68953d38d71d2e342ebb72d4 +LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/e0a4f18dd056578b690903dddc971aa91f91b194758a4ec69422f4834dd1c85224bdfd2b95d6f801cd4d23aa26c09a104452266ba8d61b5f1a429b57b2f597b4 +LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/ab49be8073da48f3a353346fd6d9a833 +LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/3f0a76b3940a918bf8206529a15d538db59e4c419cdeb4af0f338d343912d5708bf89ff89435a95b7ea42d3d36a83616a2f45bd21e1e8e4a067df5be22898ba8 +LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/493df42ef5cae32a099ca7ee2c2dfb1d +LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/ac27639cd6273f6dd38bad0db9bba82f1dd299d9260c6877cc4b876d4f82fd518c758aeeea58b389e790eb7e212d0976fd1af1741e7854e8c287c4a381c5f0dd +LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/529256ff2095f50c1c57356819122ed5 +LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/3922fb3a3419ee319392c68124550824e6644e7a638d39ac2831b6595c1e1fdce6934eaadb74415dc81f6ab349714e5443f746a61c0d8927c78b51987dc95a32 +LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/82216b18dcc9148c3cdc00bdaed163f2 +LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/c212134793544ba37247842c733b540055bb987b0854194d038f90dabbdf9ab5df6ca1e64c7e85d8071263d0b8f1d2feb99ac9d842b731551aa58ee2be2618ea +LLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/465288c493241318c5947f756319d2ae +LLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/4ef949ced9cf6c9f30c56388a8e53eb67c528e0635bb3c00d1dd204c8b8f74e72a6bc2104745dcfecf7c653ce1499d86c3a7acac98b565546b3826230710b92d +LLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/0437433a85900470209cde06ee185e9f +LLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/efa646ae330dcb5d4dc40a8e91a51248b55811d090111deddd415e22d8d7f26009dd4a124756dcdb9df4d83804f11576b786758692a5e82ceaefc88de3b9b00d +LLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/895eedc69041096b1643f66976f2a51b +LLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/dab5fcbd7e48e60c7d16031930e954a83a87e705ac72cba3f660bd569fa8b6a05d7ddf2551eb8e5f163d385c31ce197ca519e47e6ccf85982c6ae7072c6a301d +LLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/083c0b15d8747cedfd617a9127792ca6 +LLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/427d8caba92e5bc3f88b9f33ca951fdb01dd6ce94bd852af61cd94f3476c35e82f9c387989c5847af8ae65d5e9ddfb6efc4afdcb57320bac1115b3ef23e9563b +LLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/d66a108fbedcb078aa8c81b70688d5b8 +LLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/521d7008bee38328649657c4235c82f431639aac21f68aec9edcc4859958ea608c9f8dea537d63df3f41c9160f4eae18f2943518f6a71e83e3fb41ce0ec94c26 +LLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/3ca9fa624a36b101a1147890359c0920 +LLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/7cf691b77e252e11aa56b2d568ad5b2dcb131b1f2e685a6e77bd3a5b9a51c30aa2e654b8d4ef732f5c8bd5f9e4379846d4a002377760f3eda49264c958df9ddf +LLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/a946f58fbf446c1605758b92b85b8798 +LLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/23b7e5b42611d7bce50bdc36326557807bd343e50a7cc8ddd7517a8b7807793bbdab2de0042e7dc413cdb7ee2ef565692844547cbd281341398265c8232fd61a +LLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/daa0bc251d8f712d09544cd60ab5690b +LLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/d86b55eb775a5f0e1eddb412e2ac4afe818b1ba0a40b96e764ab3c7f3324a31b45a0f23051903fe84a5020f3ce1bdb42130c21dffd1f6277e6c2f5db840cc50d +LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/ff278e2aa1a91a9bd6dc0d240ce23e3b +LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/5903a1cb350391f7e15ad81ed9c0690b43e267c5b061e011c61badbf324be544287869fbb4c2d68415c4621ecc37cc798762cbde34ccb64194547d63cb3a980b +LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/a02b1dea41d86fd28411798b535f7674 +LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/7b6c94d8e60985206a7e6faefaca1dfab04a1a1378e8b52cd981726f6b6558caba23b716d44824fdb9fb54c16ec478e8de4296db9b2ef0be67680784ed26831c +LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/1d1f3db1b9a23c5948a5b982b46e5de6 +LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/d741dcb76c3a143fe3b000999a627ba4a3abd36d738028e739e96c861be661cd1de12f5c7ee7e03826b1109aea11e80371d18865fb5332d1834f4dcf0ceca245 +LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/3ed7af8b8e34820a83a8459edeb3843d +LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/eaab7e410cb433f2b83e6b38671a6e7489556865cc7007ce1588c8fcb0421c64dda480be231f96b30ce6fa75c2d9e99fbdb2a6293fa108ed9bc0599d2ca2ca63 +LLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/88003e4d20bce7d175d8e4db003e0eeb +LLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/aed46b6b3aacf7ef373f9812da24edaf71ff1a382299e5f15eaffec605bb308fb3732846b9dde6d3afdeaa010de61773ba0e725d41e3b160fab37d2d0cf389cd +LLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/ef75e04e4946bb58091eb1a57b08ace2 +LLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/7e6ff0a8d511f19eb868d61fa50ff8c0014da4ea50ad960603f0851a6c09a693a66baea4563af6cdcf2f2fcd018bf2456a9e9479b9278c656ef64f0a08aa11ae +LLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/95a8b1fe9135120ee5fba2441ad16f2c +LLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/167dcff24d6144a4e211ee473b389d5fb4daa51d4ddbd98655456d3bee6c00554b91580a627ca5355e5c2d38a9a326f13c13454de64c0cc32a1f214a52b21400 +LLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/ba2fd64dcb09926f754fdde94ec5cde1 +LLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/fac4e6ab8875aa94cf6cf2065d718403b733954c18b0f5dee11148b70ecafabd92ff23155224ba5628c743fe963ee82a376ba9025f8ec8ca199a66412855ecd2 +LLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/f80738de98ca42cfc8c4ef141ec7cf0c +LLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/ddf7670f555db3916933ea202672c7ffb51d254422af801ae928fa3618b3b7db1f7513710576dabd52f219cb2791e19803b5a4f3470f7ea05f71b0b04b03aaf4 +LLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/a502a8057b19bebe8aac1c42d9cda20f +LLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/6e20328737c46fae6204cca68b16fa72e55c4b00fbaf8470b4847a869741fc0e2cef0da2ed9507fc4980678500dffbd42ccfe9f173321dee633bb0cf5adbe57e +LLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/3b06471de330c6f4a53012711c7c9d72 +LLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/c19a9a2d8e4d3bca25a1568b0fdc01653b0b467dadc68967c4ab88512b4b78cab2e829fcfcd3d1e7139ad5bc3fab62dfdfd50be57f0d0099de383d820dafd306 +LLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/06a632eb722009eb4bbd49689b49a8a8 +LLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/67969cd09ab313b395cdf9f614dffeeda1ab72b2fa9e68057bc8dae9bad36d39443569b91ad88bbab9a6309a8084e09d40dff76d5d4bd261a1553afd5c3dd6c8 +LLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/bc000f09920a305fea5b32cf2d1bebd4 +LLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/580a3b12d7620d4c3148f988125d081b3fc76defb0e78702286806e08dcecf2b9c41ad8071334ff1e4e9ee4155d8949d07c57e8470109c01acecd2b37a07083b +LLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/6cd4cf2922f69efe968637d240bcfd62 +LLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/7a23f48faf2c4e85247c684bc43239a21ea0732c980b4d46b50df27857f143cdfc081bca867a5692b086d32ff9031a230d496c0231d3ccb5fe3f48beb6ad480e +LLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/e7c54d9144ba36f697cd9be10e8e59cd +LLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/bd96434dd2a79b335bd7169222bf5bd78fdc00eeb7ef2f364bb5ec71071d68846a0ba6b51d5b182522e6ff577d8e3d7ca3c014962cbc04ef5a04a7157887cd6d +LLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/22005a7066939bef459f0fa7ad8508a4 +LLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/2742a12f8a9054d6aa70fa823d2cae8126fc7a591849259e92b87b2e6b90ad7d21ffd855d34e08999600a5e2b591492502788d2ebd0a2564325ecc1860607b50 +LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/76c1ef843acb9d29acf6c804ae9cbe1c +LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/7b25d5e6df47850c2c959b4e0d29db67582c3e0bbf102eaaad848f42787f421839cba1ed66a35ac99e106384a49e0474cdc7d7298569f95ff11df5f422554bf3 +LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/d5358364b37f1bba07d2b22e16e76e71 +LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/e2115a60b5fa74093b4d62a7397d7905d3cc89afc1051a3bee035925c6d5c06e2b4d16f7d86bdd2cc7519a506630697c6ad329841e7f8ced2992e7e969855fc1 +LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/37702697b8cfbe73ce7f355d0eec9ef9 +LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/bae316dae5e3bc2428c8b316155a8e02f9558580e65c1a8ca975bd10bda7170d1fe8584d0917e4af2f698362e18084cea8e0cbbe46707af3d3f07d0bf9a799de +LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/b0ba5f21e0724c66ab4e0afd40ffc630 +LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/d25fd0015b67072fe2e57813a2250848ec8b86ba71443e294dc11e42e1b15148eed3c388cb242fa154c10ecb2bf6fb6b48272484a45e3337064fce4fad685b54 LLVMLibUnwind.v12.0.1+0.aarch64-apple-darwin.tar.gz/md5/b95ad4844e649bf46db43683b55b9f4f LLVMLibUnwind.v12.0.1+0.aarch64-apple-darwin.tar.gz/sha512/15e0996aebe6db91fe58121001aa7ea4b23685ead3c26b5d89afae34b535e34b4e801a971f4854d8e1a1fbc805cece06272470622eef863e225358113a127913 LLVMLibUnwind.v12.0.1+0.aarch64-linux-gnu.tar.gz/md5/6d8783dc9b86c9884e0877f0d8ac4167 @@ -138,115 +138,115 @@ LLVMLibUnwind.v12.0.1+0.x86_64-unknown-freebsd.tar.gz/md5/54ac594b4c8e7f261034a8 LLVMLibUnwind.v12.0.1+0.x86_64-unknown-freebsd.tar.gz/sha512/a43756afd92081e6dd7244d162862fc318b41ca110a5e8be6e4ee2d8fdfd8fb0f79961ae55e48913e055779791bd1c0ecd34fd59281fb66b3c4f24a1f44128f0 LLVMLibUnwind.v12.0.1+0.x86_64-w64-mingw32.tar.gz/md5/83cf8fc2a085a73b8af4245a82b7d32f LLVMLibUnwind.v12.0.1+0.x86_64-w64-mingw32.tar.gz/sha512/297a5c7b33bd3f57878871eccb3b9879ea5549639523a1b9db356b710cafb232906a74d668315340d60ba0c5087d3400f14ab92c3704e32e062e6b546abf7df6 -libLLVM.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/c1bfb47e9a53cc612fe98505788e1838 -libLLVM.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/f16c9f1faa3e959d486fbb109add976c2a2018597a0b053ac3168abad074ff9c2b23874f8969f0a71c6551c8092082938bcc35ad846913a0a9965dd27d6dc876 -libLLVM.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/cbe0859ffa50e2de82b8fe86c2540f6f -libLLVM.v15.0.7+5.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/e864e7d62eb3b62066fe14210c43b79dfab704f04381ba29fcfc2a2e2b839e8db2ad3f61bb257b64cb6a546cc45e95195089e8b734425d9d4afa3168211f6762 -libLLVM.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/352f8869f53096a566b387b885a74918 -libLLVM.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/67dc69f8b327791ab77d4082208653ca74ce2cc750d9cba833cadf4d0f311dba73dbc951d0ce088a66b06321f7addda34bd5705a6c38d4d901b5813b2d1bd37b -libLLVM.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/220916b081fea2190e372df195daf13f -libLLVM.v15.0.7+5.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/28bc05009335d61bfec33f24c89e67412f13760de72ea9acf7a12b2abf6d89cc3f3067fddb4ce598031b054b33efcf6773b4057d5adad830ab15c88fdbe56955 -libLLVM.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/2774e9f2922e087d06e0976076d3ecf3 -libLLVM.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/2aacbce77120fa9d24fd4026220e610b70c08b36175dee70f718f4d023b0ced9f8ae9dd2d58e35b61db7ca77ae337ed6f2da6a0de70296b4160a3f8e99ecdf67 -libLLVM.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/63801b5fa51c2e75abd4b46f4ab1046c -libLLVM.v15.0.7+5.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/eec9642a9c000d1aa3d298382a5b7c66caa81714665c7a405b416818f2e7a0cf1bedb81bc2a650452424391fe57061c33c2559abfc55bbac9b58e19d82131d5d -libLLVM.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/b3b3975a9a00b0292b9ba4b7fdf5e757 -libLLVM.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/c886fff05f76053682a906dd94c6674f072206f37781b1025ec8a977eb952e0aeefcf20d76a3411e54782a6425667ee3a373f0a48d5a486fd4f37c02b0ecef78 -libLLVM.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/88cf748f1a8086f949cb6217fcdd40b7 -libLLVM.v15.0.7+5.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/4e3d3cef71062b002406afb923f3d16508206662c3835242bf522cc7c881ea236695cee6add1b1f85a0b2708510dab2b59eafe004e67ee1d87a5970602a9d942 -libLLVM.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/dae6e06bf26505fff786d0187cc5f90c -libLLVM.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/ed76e52223f84dd8c1ad7190341b167928493c2c617968aa17266c274527d18348865d9289cb82dd1c0d12240220750ac31e6c1354ddd9bc5ec2e226f360ba87 -libLLVM.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/1bdae6507ca26b09a81c3b5b89f17908 -libLLVM.v15.0.7+5.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/b2704c0ef478467eb0fa21c7b436d6efc9602e8723bcf194dfcf6b3ac33d316b79de66c0c1c291e92f45f5bb09b6ab579a45782fa1ba3c03192177aaad6c29e1 -libLLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/8906c5b197baec7fc795256b92ca0a75 -libLLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/b79ec5ef4e59b0016784d31e51a94c9b292d19c36d66eadcfb3be6579244048b2650206836b4e017a63d84d8a0c72cd487f22ea08fd92f5b5ab4cb46d218e1a0 -libLLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/bd81f6f43b54364bef1e6486c17e3dea -libLLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/892e4478e672fed55d63bfbf20a959b488e1cfafa332e2f1743cb519594526b5e0f2167b67636714dec6f43c76dcc0eb0bb2775eb43e4d898e63a0d1e78e9c94 -libLLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/6437ac1aa63c9b83c72238f4b0eaca00 -libLLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/f5e2bdb0af587e5cd55a5a2f16bf551c0e0fbadd2d9232fd5d3b2b38cdfaa80920d25903af5d79cb52a45a703a5bc07e550ca07163628cd1a79d3b3dda0d05d1 -libLLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/5616fc6e683ab133ed751d60164ca894 -libLLVM.v15.0.7+5.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/40944ea809c3f4000038b7b26e6297a5ce9d2710995c57b4e0751e74dcbeed9c00b1d89d0c75bf0f0d9094fd4811f5c5ca0cc5b83f54cbe20c1b2db85de44d72 -libLLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/dcdb815f425a6ec2aca7f29f601a73b5 -libLLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/3619419dbc81807db63e5c7bd7b237a6355ec60d2aada9bf26c1d38f10b4cb87a3cb3fc9a81e7f695ed7a195d2c3c214cd9bf96d3ccca68422898be323797fb1 -libLLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/ab2250406d3a69d68755b77b79b61f53 -libLLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/f5eaf02c7d19689a9cff2410269daccc00a075abde9287b025de3aff1d5b539b43001d1f2120f88c4c149af27eaf0caedb2942ae029550cc822e6af103b32960 -libLLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/77576af5b13b2916dae4e7e24760afec -libLLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/1b3708202ccebd47aecca5a7c6396799ef14c4235b0904d23d6b6b4fdd91fb6b13a1627f65211ee0283a15d96b8a68cfc962d7aa2ddf75c08f2670a767c6cfa8 -libLLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/81277b7fde4cf08293f8ca956417fe05 -libLLVM.v15.0.7+5.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/72caccf9933e1790bdb0b6f6dc1ec5da6a84a5fc06336e29f2928142f3182261afd39477be913427d65655c40ddbda5ec5042c360bc49383e88c871db19b018b -libLLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/d326fe9ccfbbf179571fdcd684bb7b80 -libLLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/a34550dcbb416f79648a5c4306775f1aca041c4e8e3b269e94f960ec0925d5b7cca0ed1934b2b63b9f4437d304d658adc6c0d3e0169c629d50d7c0b5051dbb04 -libLLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/5ced197907e87c470e5cc1ab08a7eedf -libLLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/b57810b718bbfb1ec48415ec3e727388bb647fa3768ee191d81fbb16248edbde9332086d445ff57ad53e9d62fb9c8fb1f8be176649350f5eb57c744404c63cb9 -libLLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/4d5133f794e0b53d563ccfc10ca42e98 -libLLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/9fc7bbb8dee022304c4aedb930318db04345987bb7ec9b78c3d488a5616680738ca2b9a9087f60b7d6cc68650234295d18c6cee4a45d1956d2240791993fe45a -libLLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/e5c8eae08bd2defe76e0985687d6f057 -libLLVM.v15.0.7+5.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/d632971cd93131b90d5a26fdcd8a262f2042a2dd59a09c82a8523558f2b292f9a3f285b0a6276f0e6b255f34d855736c0bfb9f426488c5929f2abf6c0b921b73 -libLLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/f0fb4b9b0257e0ead2e5aeafebb64214 -libLLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/1993c7d6ceb7efd93f2eb21379c046073b7d9d2460d6eab5aca26cae94bcbe07658780a2f6382a052e4d64813614078b5e582a933a0bc9a5d64d8388df98ce69 -libLLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/e236983a6c801d33ead6f60140cf1ddd -libLLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/c6b44cd0d9139e0b1d47c8b17e9035099a6b360f873a2fc5c6e84c1c97dd455510f4f4262c746b47910703158fe0ceba0d19b8e6a61117d9723346f4c3e89004 -libLLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/c3ad2f3774b9b7651078fa3b2dfbe7ff -libLLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/009561d4fecd65e35960843670048b79e70495c2cfc80a7c80614f253bea7ca46d8278d338bdf7719229fa7eb9f02299bf8bc39ace683b862ad005cfebcca0e7 -libLLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/6f8d226436a2822eb7e0f25d1073925c -libLLVM.v15.0.7+5.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/b63a32b1eb4a8af210f6a9511bcc4c90ad39091a6b2c50431253f4fe5e1ab304b68f79e71fe55e173449ebc96a3395dd1ee55a9a8cdd289950b609a5bec8e722 -libLLVM.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/a618c88b200fa25434e969a168b93a15 -libLLVM.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/940d6b61162bdd2d9ab5c264c9ba71789638fec646e62b9204e9304c8244d10c8a5ea3603c84bff76c5471e7f3184a21e4d1760bfe05deec80c8126a7207db04 -libLLVM.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/8a4e4c69ff51c941244d0765947dfaba -libLLVM.v15.0.7+5.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/287e59ff6e8e81e1650796da7a01be568b9ef024eef0505eaa34cdaf4cfd8d798596e9396e48fafa39acab5e70c3a41129917e8ec7d625f9acb896bc4e9e7b5e -libLLVM.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/3f131f5c0e11db8de1e0268708ff17c4 -libLLVM.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/04d1371a970694c234880ccd826f6a75615793867a3ba1fdce683a844cac3c9d33a58d34163bf2141624dde71f3af0e3582effbfce679ad2134894f86ac3ce98 -libLLVM.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/8636def624785ea4b99d12c0d65bc0c3 -libLLVM.v15.0.7+5.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b8ae5cc249664d32a8dbc26a2bf180a782f51ba69126d099bb239ee94afdca7b8492a7458971cc91aef0ca55a1ca38d3bf3c8716234ded81319a2ad5ac082732 -libLLVM.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/bedb9f6540966fc382de1a4544ce8c9c -libLLVM.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/527ad792c220e491fcfb46de81b9b15cf4f6a1d50cfe4435296e0f94ae4d8e53165b6f634f85e95a8c7369a1e7b3788d1683fa77b843f56dfb1264313f80dae1 -libLLVM.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/62051888207139e47c9a0694cf4de5c6 -libLLVM.v15.0.7+5.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/034e4e272d09ae8f573d3a7e591f93dc551651c7a32e2b8923fcd7fcf36be5bb491530f4673cb9bf39a54c1527cc3e3ecab64c79e3fd7075209fd81f32f7f4f9 -libLLVM.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/8543a076a97e6c72e7c514021ca5f121 -libLLVM.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/fc11ac25945adee135ebc523fe3908bcd5c5a7aa4c2a405e3dba61e0fb59502e5aef3cf4982502da7f7ee1974bcee8354ac675e0e0182f9319ea20c299813a1f -libLLVM.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/6247a9f59f87a2b923aacdc0a7c128ca -libLLVM.v15.0.7+5.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/f13adadc653d2f8442c8ee4ecca9563d6cad5f958abf2893d8a3eda331d9ed8c33cd4a52bb721be811dec66b3b5566f038bfebbcfea620bf0094c305cd3aef0f -libLLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/873155e60b133d597cf8c40169c5745e -libLLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/a000e1fe4698d5c19bf85b048bcf76cdffea191ee281b44ffbd83230de5dd93c9efb564a51da082df070f2358d6dce423bf0d6023836217c5b34d563844d977e -libLLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/17467f361317ad56762b7e455d869724 -libLLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/62a8d601c8db178cbdaa57a23a26cd65a8f3855be40ba2966b445afc9ee223db2ed6c2fc344ea98ff129d8917c14f34ed93158633521780d52763fc4a4f2a799 -libLLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/2c094ecef656dc6c9317038b0c5a47cc -libLLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/af5972750be3de00df275a0f03c9c8a3b487a040f9bd29356457bc18661ffba9b3aa909849b24ae1c518fd2975a9b687c33353ba927f8713796a6c8eefa6e509 -libLLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/c10497e3f473e80e309d4c6102fc194d -libLLVM.v15.0.7+5.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/2349230301cbebe8c7a7d7054bb4e60d991e1798dbb8bc6b8cf73350738e7058a9eb3c1067ce7d3ece1780e360080d00dd4777359742aff924d2db5c463f2a8b -libLLVM.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/15c99e56a9e8ed664deb2d6aedeb7ea0 -libLLVM.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/c7d3d6d33f0fc0cad0394c02662bed2dd7d5389a6aa21027d7ebee124c3c9f5910316c44bd4485f1d45c6bb9fe12775c697a176602809bb52c8d3cfadf4f2737 -libLLVM.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/b8d748a34a381d085c962549612a212f -libLLVM.v15.0.7+5.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/02afa1db42ff68a3ea0443ab539a7c613e5acb6170f7849cce1d36969ddad36e7546427bc55cd289df46a5fd8e83477b70941b8fd9aba0717dd861c84473da49 -libLLVM.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/12f825c1c1586a8f7c9ce56e243b6bbf -libLLVM.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/f6c9cb33f129f1ff95800c0c88152d27e6de3fd78e01b29d75a80df9fdd8d95de70003dee0df3868215009cf434006223b488c64d6eb240f1e18799f529e980d -libLLVM.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/19d05d46cd97714abd23b668693afe4e -libLLVM.v15.0.7+5.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/deb786016835fb34967e474235b1ca9c2e9f0258c88394979c41654fc4487ef83ac622f1e049aed5d83da8738b8f1079b3dbc67ca788f6c68b432d7007b850e7 -libLLVM.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/0fee1aea27ac30304228af1f398dbf14 -libLLVM.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/e14eb6fad8ef734efd5dae610cc1906901b389c7557853e7fad27c4cbf6c06614996bdd5840ee3640b9fcd8a870ea058c212bc978b6b869f4594cd8b06b42ca7 -libLLVM.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/dc14c7faeadb0c42f4e9cffcae8c7684 -libLLVM.v15.0.7+5.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/10ef07d1e1fe3bcf8bc52da169156ad10de7b3bd54f16bf1d694bd243bc4c86b4244643f1a71fec94b024ffa2e605141eec9b10e6e65dce5d96aee2b454fdb6a -libLLVM.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/ee90487acb75a33b77f24fdb075402f9 -libLLVM.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/6bc8605021dbb23aa71636318468a1f81f8dbf7308d637f551132700634fea208d24608c4afb28a9609a7a866302597f684d204f718fd8cae10a616abc1b7b0a -libLLVM.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/2c96c511ef55496a1044f63d4fdb096e -libLLVM.v15.0.7+5.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/564202d6cd321b8b058124c4623bfa7d7310a5020140f194bfecd44a25490ff9590e661bbb838b1af4f7e40fc15f88363a1510d8f7a2138f8ccc52ad76700506 -libLLVM.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/555ea3150d5eeeec54b1d463380447cf -libLLVM.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/9da05a39e8d4d9cffffe85bc2717e105a47137682ede9cbbd2f216065ebdbb6624b68a2e120a1b87247838276cd8a501c83aec63c91673229bde8d207f651f4c -libLLVM.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/a1f6daa0703ddcbc87b8f9d17c9ad54a -libLLVM.v15.0.7+5.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/e803ba34861b600b350bc99484adb619bd75a82162633e8d80f1456a908d42d95842f194a6752fa43e683c26356592fb94b64f7823b64edc922aca154d970288 -libLLVM.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/364b73f29c1df14d8b942183cb113dd2 -libLLVM.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/c4966e3607314acbace4b31dc095b81770ac3414ac1bddb43084443191b92b2b96f6702177dec76b70be12f7a3af4797c9692cf872ea7eaf60569dc7fdd92ee4 -libLLVM.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/d4aea085c08951e0facaa553b3c22a91 -libLLVM.v15.0.7+5.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/cc5cc36d50a342b5692144905ae52676fe9ff19054245152e3fff02276250604009881325cb5ef063f274b51cb2b45dcc88db0a929f6244d81cad1f241bd0c64 -libLLVM.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/5cdf36e1300bbc9b032bebe5cba7bd6a -libLLVM.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/c732ba652aaf7a5f6aa8cd2f39088d83b78d2fe3121c4e2415bdc935b0a3ccdff7f028d3ef50f0b5f7bccff54f1fb5acbf970fc28301510d09b3f3847556c613 -libLLVM.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/c5b335f634ec9e663a7c5d54dfeb1967 -libLLVM.v15.0.7+5.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/51c7b1ceb0e235d9d7db9727eb7744cbd8b2e51e189c58bfa6d3b65bc4b6e7a8224e8b7b57eeeefce01c7f65a4df48da97a975dec61fb000d83d23d15737728d -libLLVM.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/822be345af871cd1d5e595b2a83bedf3 -libLLVM.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/fda0ff71c7a26e783436da214acc22842fe73df1f9d1d526955f4acd0794c3afa8722df8e4c9671b11948fd96e4c079fe525c9bf3e38b5119a79793a22baf16c -libLLVM.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/1201b56c0dea9d1fd2a5ceb4d62f78a9 -libLLVM.v15.0.7+5.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/550c041f495a2d2439e6c4abcd4db6da06702d32046f6574f6a595fceea467ebf896635bc70d9c3e41c99b42404c87d98e3cd76a34b0f959d21284e3e4f15941 -llvm-julia-15.0.7-5.tar.gz/md5/1ffb5b00586262196d24dcc7baa4a4c0 -llvm-julia-15.0.7-5.tar.gz/sha512/5b5c93b4359cee649974bbdb5c3c191cff5ce5c3862e7cce00e2e35dd0627bf50e0aee454e67ea0fadd21c36065b7c1cae6e77abdd512fab70b71899d369cfac +libLLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/6f46148833fa386b55dd92e946561c85 +libLLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/ea1912f9a75c07374bc9c22c7b8b4321a0700f4ea196d29169e14a648a30d164897215ef4c4c6478810e5c5cdc76b1f2937fec4e6b0bb3e4f579bae06a219d0e +libLLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/0f2558df8ed485a93837e790bc646018 +libLLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/e7f962c4dd9675b6abec6129e7fa460ba3ba4bbe9eead4f9327a1db5fc9c64651d7424f9439ef396f0546f8e232bdc34eb625df0fa36bdfaed0e6b7af4dd0070 +libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/3317b67ebfb01c8d3dcb17c04d0f5ee5 +libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/383ec73210e00b02b3fe3f247bfe81a8c81668d3faf59c0ba9b0f032c41603807cb65808f28fc8a91dcf7cf72f3f5fa3bc68277bcb17cd35ec758ba3dd8ec857 +libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/f49e5ae9b0eb96cddeb3d68bec320d7b +libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/e2cf6ef242479bc781f6ea70d7123b087370bad917c8f398757ba32d9446ef3b8c3d3b813be2c1ad3a8945dce1464551b57d3bc40a2e063199dfe555ad697dc8 +libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/e8eb2e0bc1b0693fbdf01c9dbe0e0170 +libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/245a157bd6b49ece87075d6250315f419506262c43ad6c5c76340d60ca1eedb00dab77c6588b91bb5cd8033e7ed1d97c21d801f8359486c9c350ded3bfae7642 +libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/60dea992b59646da2d719185f32f4a7e +libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/7fcd64e51c87de8683923460d4596e406c5775d2ec6b7f4111bcb0689692dee09584622ecfae17ce91d1632f03a37cc9d43696190a5b92e916f4b8d4d0a50003 +libLLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/86385feda64011d17952300a29a28a46 +libLLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/2cf9f4934932b39a4a0195eab39f28c718c7cb5b830a425bddeb2f0a643fe6a74c7754483324f57e876ca8b92b5cfa1aaca802a44dc9ebcde86d8875c0493952 +libLLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/72cd1154871445247a6af96536ae1b51 +libLLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/b35740ff38e77c2b718f151e3ef55831bb4145d164c9c74bb78b7cce94693a6accb39cc747c67171cc43c72fff6cc72b3a19ba73e4dc8cf127ffe61f640ceac0 +libLLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/8dd9a908e0d94695352762d87bb5cfd4 +libLLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/3d9fbede7af089548bca9348c5ad13f146386ee4e2391223b4f9d299f9a52f7062dc758ab098805e481f434a5057ed37cb031d48de7fc3eb3137699f5540587e +libLLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/f55864a3ee48940270502c637412dd58 +libLLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/c52bca8cb48cee54ad86bb86696f489d6a6d471238e49affb9af70b0e88ec6a4af57391a72f88fbea31f7c597a066d57978b1d3ea63a29cfae559457c66f6e06 +libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/20d1d88a807f96b469032e5c932c0696 +libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/d6cdc9746c81c504faa968638ea9d7fd9ded72ad0abdcf6c5adb8bcd127126d35506c2b6b3bedb977736a76318edb5c899ba555ff1d05df21f797a8f9a4e5122 +libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/b4d7d4ebce4c7bbe3ac11cca0017a67a +libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/bb388db416d805ef5fbdbf4d2210d4b2188d6eae2c864692cfb1da7ba89de772423667e4648889db7cf43d9127aa13f77981d0b99ef321ff3f09faf7fd4b8bb9 +libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/b9382496b307f7e72fb12d394eef4e39 +libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/122a5f8daf1240c5d7b4f1926292311a3d287c4461516ee3321d1657ff3c9ca5caff54a1298f0d2a2b4c19627a57d626a4fb4455921862d87fe5897d672bdfae +libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/bd564398619c3338e509e2f9ef7d7ba0 +libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/a54812732e95604031ef1fb420057ed40b909e211a68d5a533be617556c7c41e4022dea35fc6b8c81d8cb1227e4086d46b345cfcb6022dad9efc456ed85d7825 +libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/39daf88d35f518325138f8562dec70dd +libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/2b2fd30a04cbdcffa57d12ea2785e3016456fbf1dfe99b74a1628ce213bdc28d65f8c6937175c700c0df4f5f8f1c257ef71f27d1d5cca2c5efe5598c893d5011 +libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/af88ec70f786750081d2948b6b9fd0ba +libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/f2a6bf3d74ddd06115d4791bd7ed833fc9ff1c24c0a317d7756d181f7cc59d21da73e085abb7ab0b46a12b0cbe4656df0e9e509b057cdf7d3d0cae2304f6b39c +libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/5dfdae75a373ef890d7e6c004cb16b2d +libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/3993609a2199c78cc12f430f76c2c3b58b0d6f208271bc474e3869d9f505fadfa61e1c2c5774ca5190c7886cad68507fff9a0f6d11641106507fc4b5e3bc8a41 +libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/e426a70337cf4e38ba22f64c9adbabd0 +libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/c5ac86c22d016adf70e77970ae976a5081a85ebe1943a46fcb93be53f85f82e4aaa724e41b450306d0cf50dc4eb64367059737b6c828eab554f6166774201310 +libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/523077c1c0fedd6d5e62536e933b2c8a +libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/246df1e0d1a038ea2cb77a9678ed0e13f568ca35bc2c751547b9e871163c0dd7e18ea321c88eb6c9b2ccce9ec4347c29c69e5cbc41dbbd43d23d7a658ca5fc15 +libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/23aa72bc1511ff8f4c09a2bdf70085a7 +libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/4d1d46652e98e75925478a86bc3b2e613ce54d3e99cbd75fecc637dab70a72187c36a979e2124592cb764d867c39555c013497fc3438103aa320fb7e45247254 +libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/ba162cc558297ef830f94323e351aae0 +libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/f98f1c74f5fb3a1e8936692c0b9c57fb8da1ae8fcbe187e019d61ff6691cbcdb03e7f53b5254bd219856bc3dc4408cb29926744f6086a13c3a32e66c1a79f422 +libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/9b364f0c1f2bf550d5908407120ab68a +libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/c7bb0a90cb24352926c6a0d3599490db75f84e907697f48d1ac099767f4d3480e94a6e19995bd16d2c26c7cac1309bb579f71208899ce83aa617ec06cea2847f +libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/06ff2d8850863f47c6d7391d9bdc4cd9 +libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/6d03c53673b072ba1936124b681219ca474f7d269dbeb3c0278ea88aeba5949a5af5388f3776f9bf5c1f05fef81922c9720d16fbb57737bd9b83925206f46cf1 +libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/7d37c75e75b9fa3e5db8cc2422a65b90 +libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/ffdb947940a033a01d0568f25018c125a743f3c71ce46565965ddbad52bd88596092190070c827aa6f7e70e22338e5d5162dfcb008deb80734f59d35437b41ed +libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/c31df5def85016f499c1a7daedf006ef +libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/d1b7220c0037450ec6efc4a2119c4dc4b9c48a20281c60b923f33bd80a9d146a69270983fe15cd8623ccfbac6c4bc4f4df3b44ad36cbcf86da8086f932e4da4d +libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/a178f55baca2221e71a0badc79b49bd2 +libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/d613e2744c59b845b8893eba4a4579750d9dd4bf4375837aadd963f051475dcbf074d254dc8eacec2f4b2f77a9c1cca68f88b7948df8065910b1b0752dd2004b +libLLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/2c5cd46b8a66d959807f4b285f5a221c +libLLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/43061164687d44c1aa92f11198e218af19e96b1fc6519a2f41a2626302b3089beda58d24040e3220424e718366c761c41a064479411c8c923eea1708b4bb4c77 +libLLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/1a0850a7e8c88088a6c26a50cd746396 +libLLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/57bb6a55f7b84488d72195e1420826e94f082541fdaa0f981da1abcd8b1fb4f0a12f1398d786abd51943c6920513914e9476a05c7477b2e003e30a068304f0ae +libLLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/538b7f590bfe5145c39c06aed74c845f +libLLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/98e59c9a2354f4881b61bc23ebc34c2f70e6394a54cbc6735a56f59688e248db85b8a674e1e4a2a60bb8802f23213767c17985c44eb530743132d3366b0ed2ce +libLLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/854ce5a05f524762390216637048a2c5 +libLLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/028714472e5e5ae01b667f1058dc704b051030c8c95ef4816aae1118aea6442f44d824e48c13cf4111f81ea151a7dd951aad40e4c05208730da4a4f9f4e52c3f +libLLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/dc6aabdb3fff4b33a9eb75ace7e6615e +libLLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/457a1f6d28b287033f501247499c4a9871be7db7880b65f34ab615846c06759fcbb9b4643a6692f670d56bb2346311806475fc7bb82a699755ea6410dd999d37 +libLLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/0578542bbde3db752171f9420ce30d74 +libLLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/93a8310e3b5bf85bcc7d1b20ee836805eb087a318bde258d5117babb877689e05d5a0d66e8c00946544b6e07a322c2af5bfd1499927cc325a98fb5b6aefdbed3 +libLLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/c2b7dec7d566c3f110f84a69e781866b +libLLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/44652389f9aeea2a8ba4e49bf78fa7d11ef3579205f178af844567e8e999917d737e233fe74a31cb3bf9a49847e364824109634e6683b75096b3f45a9fb4150d +libLLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/1c13dbb8577ad9e7020059a474560286 +libLLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/1d3e4a06f3d6ae3afa976713ad8937a51c4e9fd0b544c1e9f8c74ae8579dba29fd8e77eb8acec0873dec8ec58fa91bfa6738212a504769807a758caa1f203b2e +libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/ba4c9eceaa281a177f1f8b878bde35e6 +libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/c0f8fecd3f6e1b342a075630ef0fbcd76d964e9bac08ac5e8a48ab0686c0ab91d327c263e045056a66b93f44346a0624af1687ea36d7f3c41c94d23d33c0d2ef +libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/396cd763186100f920279ea551db8d09 +libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/c79d60d522b4c186b51b7ea50fa8916ec63f64941225d535f8cceb25e3732458291260186684d098776091f8ba235c7c890fc635e8f39ac3c603aeb7c84f0782 +libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/8288ec83ada261b340994f5ea62c2efb +libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/c612e99e655dec48f0c1b2b28d5aa999c3ba8e83f7796a1f2807074ceccdb08a8b6a5e3554eacfc3ba7a99aeeb8c6b28217cdc957937e344a94636920cf288e0 +libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/039c44655a46ee04f7de2b184bba432a +libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/a47b840e221933001b9366aa90b5862f25eced86bead68164b98ac3b095a1a948a9d89a6d2f9e7db2fabf40df4de211b5ff5d7d10fc3572c24470764d14a559e +libLLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/036be0a300369212fe943134678ba985 +libLLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/7dc49931b9775372385a61cd9de441dae567df791c83adcdacd45602e8cb64848895b26e8c53476fe53d86d21a06a00c21623eba4ef71ca97a545bc4fc2c5b18 +libLLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/747b5946945160209c2e5705a0ab0bcd +libLLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/da1b2b543c648e322a1d87d2294a0cf87f4ae4c1c5b5708a3de6bfd29ffd589f970fa8f01182017db1743bc53d6726f9118438efef07484c7388ff0b0918c99b +libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/b5eebac2361874017e0908dd2b655953 +libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/b3e1b05afb00e44d1b6b1ce9adc6934e2f2caf1d8bc8d112a7aee5526a39cf77d52b256b888bdc54ac848a98aa2714c6a8beca5603fff62e974595f2c2ce1b25 +libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/16864fadbf7366031ec0f5aa69a295ac +libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/2099f8f4167f7a96ad2e9145e2c4e26d201aececd8a34d21c1e21b3865e8c63192cfef6e012863a6920b55d7865143527aba17805412b122f1fa0e2ff304b515 +libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/3146935cca2cf625311fda3df6860aef +libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/745310983881e2839797b3da1f56e4adc115f34ac932215546ee1bbc869baecea1be077b546c9a68dd0fddb89551dea19ff181c691892e572f86ada885da3bfc +libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7c3ba44af8f1fecd3c370614fda602dd +libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/ddf418ea2dbfbb61ce4c977e0b0ae29137e378458fab37b5fc18db8a7d196663d7012e28161efbaaa75824ad0bd0c16841625349d89c8e3f7738d973e760cd27 +libLLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/b7985ca8dc4eb2b89239ce6e0083db89 +libLLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/babb426085a330434ffca6e55d1b237b780754845e4699621ef581b2cdbd803c0e0a0b3f91693f76848ba2cf1f177b6c342ebbd459d9926d6a4e0b7f4184de18 +libLLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/cc912aceddbfdd5278f302dff233aacc +libLLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/fbdd72353b76cab6c82af9e19e7f2abc7b5e19c634abb66d25cda0276c79e4c75f14eeaa8de6f03197a3b69cab130f0693bc3b17f144bed476a2e14268f2a5cb +libLLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/e9bc3f99cf16ad7e37b6f8692610c0c5 +libLLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/b7e0b1b1804d3641e8763eb35d08e1f9c9c2bdbcf9d129d1fae5835067d5b6ccda1acf0888b686c5e8a268b14fa455f52451e3cb6909446c9d053d3d1d261fb2 +libLLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/ba454f84baa9f746de63e22714c740f2 +libLLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/2b61a1a6693c7899fd9af8630c9eb45b54b6c84519e50828d80a6f7eb88dfb3df6ee4d473f8e30ca11a0e1db2c096711164dc08cc61707277f7beb1902930f43 +libLLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/1ebc12781d75fa94145bb6c7a2ba235e +libLLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/43898f026a1f43ef035999654555afe4410425f2b6f56341100115e2a66825843fe93777c10ba052d60562a64a1150095fca4181a1c09f0820baa83736611627 +libLLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/7259f7a15909745b0176c7bec2d5bb8e +libLLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/fcf10dcc6bc0bfd4389859db1ab6a827fcc15368cbd42f1f50a2b7a3e752c4cd2676e65fcd69bf0eb42579293d303d770e06c6d10150ff17d7fdd6fc71d0155f +libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/15ce58ac469ed16d371c103718d12957 +libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/e671652b802a31311bc36a443b616b3826bbf9a5045cdf2593e055b224401bacc50b1439d13ae6eb7f55376c73c40ea5c972ee4a518777b85d4774a76bd15b10 +libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/44e02ae3f143c0cca893332f73962050 +libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/a2b832da758f2d9911db535747d244b4f29b9f7730eca43eceac1fdbde4e262c14d6622f9c0ae38f2429221c5a113d8d59c0bedc243af6810ef1b75063fadb8b +libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/b30e6e6fdc1ade7a4148724facd5c934 +libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/51d7faebdb7863e6f2c8d97e0a5d119c2115aada5a6189b3b8b2928fdf8b3350f7b6eda67ce4ebe087821fda86ad2cfd0042ef3dc4a37c678e21267e04389541 +libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/596a32ac2f4a2e4aedcef09cea7541a6 +libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/2ad659ebede4fbd2b09d487bd4efdf050988da7267797c4b884387f35c5e02cc0dbf93f56e51316dbdca3e8ffd6a7d9120c2cf10387fd1fead4a05d81366d83e +llvm-julia-15.0.7-7.tar.gz/md5/20678ba77ec517e16df67b6683fe1fd6 +llvm-julia-15.0.7-7.tar.gz/sha512/dd18b1d1817d7bff23bbd9598eb691e2d65ef679666e7219e4137223e739b62d5f4ef11d8c42474438b954026e0c3f0c5e350d3df23d8b4b294765d8d7788802 llvmunwind-12.0.1.tar.xz/md5/4ec327cee517fdb1f6a20e83748e2c7b llvmunwind-12.0.1.tar.xz/sha512/847b6ba03010a43f4fdbfdc49bf16d18fd18474d01584712e651b11191814bf7c1cf53475021d9ee447ed78413202b4ed97973d7bdd851d3e49f8d06f55a7af4 diff --git a/deps/clang.version b/deps/clang.version index d291dc8e8f8d8..c33134b5cb0f0 100644 --- a/deps/clang.version +++ b/deps/clang.version @@ -1,4 +1,4 @@ ## jll artifact # Clang (paired with LLVM, only here as a JLL download) CLANG_JLL_NAME := Clang -CLANG_JLL_VER := 15.0.7+5 +CLANG_JLL_VER := 15.0.7+7 diff --git a/deps/lld.version b/deps/lld.version index d4b2a664d980c..9dc25700fd088 100644 --- a/deps/lld.version +++ b/deps/lld.version @@ -1,3 +1,3 @@ ## jll artifact LLD_JLL_NAME := LLD -LLD_JLL_VER := 15.0.7+5 +LLD_JLL_VER := 15.0.7+7 diff --git a/deps/llvm-tools.version b/deps/llvm-tools.version index f2ecd0b33e989..6166718149c66 100644 --- a/deps/llvm-tools.version +++ b/deps/llvm-tools.version @@ -1,5 +1,5 @@ ## jll artifact # LLVM_tools (downloads LLVM_jll to get things like `lit` and `opt`) LLVM_TOOLS_JLL_NAME := LLVM -LLVM_TOOLS_JLL_VER := 15.0.7+5 -LLVM_TOOLS_ASSERT_JLL_VER := 15.0.7+5 +LLVM_TOOLS_JLL_VER := 15.0.7+7 +LLVM_TOOLS_ASSERT_JLL_VER := 15.0.7+7 diff --git a/deps/llvm.version b/deps/llvm.version index 4e7969994141e..06473a9ed2960 100644 --- a/deps/llvm.version +++ b/deps/llvm.version @@ -2,14 +2,14 @@ ## jll artifact LLVM_JLL_NAME := libLLVM -LLVM_ASSERT_JLL_VER := 15.0.7+5 +LLVM_ASSERT_JLL_VER := 15.0.7+7 ## source build # Version number of LLVM LLVM_VER := 15.0.7 # Git branch name in `LLVM_GIT_URL` repository -LLVM_BRANCH=julia-15.0.7-5 +LLVM_BRANCH=julia-15.0.7-7 # Git ref in `LLVM_GIT_URL` repository -LLVM_SHA1=julia-15.0.7-5 +LLVM_SHA1=julia-15.0.7-7 ## Following options are used to automatically fetch patchset from Julia's fork. This is ## useful if you want to build an external LLVM while still applying Julia's patches. @@ -20,4 +20,4 @@ LLVM_JULIA_DIFF_GITHUB_REPO := https://github.com/llvm/llvm-project # Base GitHub ref for generating the diff. LLVM_BASE_REF := llvm:llvmorg-15.0.7 # Julia fork's GitHub ref for generating the diff. -LLVM_JULIA_REF := JuliaLang:julia-15.0.7-5 +LLVM_JULIA_REF := JuliaLang:julia-15.0.7-7 diff --git a/stdlib/LLD_jll/Project.toml b/stdlib/LLD_jll/Project.toml index 90d867ca0f7da..38b89e449e399 100644 --- a/stdlib/LLD_jll/Project.toml +++ b/stdlib/LLD_jll/Project.toml @@ -1,6 +1,6 @@ name = "LLD_jll" uuid = "d55e3150-da41-5e91-b323-ecfd1eec6109" -version = "15.0.7+5" +version = "15.0.7+7" [deps] Zlib_jll = "83775a58-1f1d-513f-b197-d71354ab007a" diff --git a/stdlib/libLLVM_jll/Project.toml b/stdlib/libLLVM_jll/Project.toml index 87519e5a824b0..804fd0f320d5e 100644 --- a/stdlib/libLLVM_jll/Project.toml +++ b/stdlib/libLLVM_jll/Project.toml @@ -1,6 +1,6 @@ name = "libLLVM_jll" uuid = "8f36deef-c2a5-5394-99ed-8e07531fb29a" -version = "15.0.7+5" +version = "15.0.7+7" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/test/fastmath.jl b/test/fastmath.jl index 21f3ebc1e603f..34744f325ad7f 100644 --- a/test/fastmath.jl +++ b/test/fastmath.jl @@ -293,3 +293,8 @@ end @test x == [1, 1] @test i == 1 end + +@testset "@fastmath-related crash (#49907)" begin + x = @fastmath maximum(Float16[1,2,3]; init = Float16(0)) + @test x == Float16(3) +end From e12f065dc217c693539fcce31b16590137c938b0 Mon Sep 17 00:00:00 2001 From: Nicholas Bauer Date: Sun, 23 Jul 2023 10:39:55 -0400 Subject: [PATCH 039/413] Revert storage of method instance in LineInfoNode (#50546) Due to #50082, reverting the causative portion from #41099, which stored MethodInstances in LineInfoNodes. (cherry picked from commit ae798cd6427918e78f2d05c5fcc578085fba920c) --- base/compiler/ssair/inlining.jl | 2 +- base/compiler/typeinfer.jl | 2 +- test/stacktraces.jl | 13 ++++++++++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/base/compiler/ssair/inlining.jl b/base/compiler/ssair/inlining.jl index 505a517e1bf98..304a5e78a13e1 100644 --- a/base/compiler/ssair/inlining.jl +++ b/base/compiler/ssair/inlining.jl @@ -330,7 +330,7 @@ function ir_inline_linetable!(linetable::Vector{LineInfoNode}, inlinee_ir::IRCod # Append the linetable of the inlined function to our line table topline::Int32 = linetable_offset + Int32(1) coverage_by_path = JLOptions().code_coverage == 3 - push!(linetable, LineInfoNode(inlinee_def.module, inlinee, inlinee_def.file, inlinee_def.line, inlined_at)) + push!(linetable, LineInfoNode(inlinee_def.module, inlinee_def.name, inlinee_def.file, inlinee_def.line, inlined_at)) oldlinetable = inlinee_ir.linetable extra_coverage_line = zero(Int32) for oldline in eachindex(oldlinetable) diff --git a/base/compiler/typeinfer.jl b/base/compiler/typeinfer.jl index 77e1fd02de8d0..92e6b0dd5f666 100644 --- a/base/compiler/typeinfer.jl +++ b/base/compiler/typeinfer.jl @@ -1015,7 +1015,7 @@ function typeinf_ext(interp::AbstractInterpreter, mi::MethodInstance) tree.slotflags = fill(IR_FLAG_NULL, nargs) tree.ssavaluetypes = 1 tree.codelocs = Int32[1] - tree.linetable = LineInfoNode[LineInfoNode(method.module, mi, method.file, method.line, Int32(0))] + tree.linetable = LineInfoNode[LineInfoNode(method.module, method.name, method.file, method.line, Int32(0))] tree.ssaflags = UInt8[0] set_inlineable!(tree, true) tree.parent = mi diff --git a/test/stacktraces.jl b/test/stacktraces.jl index 590abb90c590f..882114e71d833 100644 --- a/test/stacktraces.jl +++ b/test/stacktraces.jl @@ -91,9 +91,16 @@ trace = (try; f(3); catch; stacktrace(catch_backtrace()); end)[1:3] can_inline = Bool(Base.JLOptions().can_inline) for (frame, func, inlined) in zip(trace, [g,h,f], (can_inline, can_inline, false)) @test frame.func === typeof(func).name.mt.name - @test frame.linfo.def.module === which(func, (Any,)).module - @test frame.linfo.def === which(func, (Any,)) - @test frame.linfo.specTypes === Tuple{typeof(func), Int} + # broken until #50082 can be addressed + if inlined + @test frame.linfo.def.module === which(func, (Any,)).module broken=true + @test frame.linfo.def === which(func, (Any,)) broken=true + @test frame.linfo.specTypes === Tuple{typeof(func), Int} broken=true + else + @test frame.linfo.def.module === which(func, (Any,)).module + @test frame.linfo.def === which(func, (Any,)) + @test frame.linfo.specTypes === Tuple{typeof(func), Int} + end # line @test frame.file === Symbol(@__FILE__) @test !frame.from_c From def06fe9fbea0657f1b22ec9cad09e4d03bc705f Mon Sep 17 00:00:00 2001 From: pchintalapudi <34727397+pchintalapudi@users.noreply.github.com> Date: Sun, 23 Jul 2023 17:27:17 +0000 Subject: [PATCH 040/413] Shift DCE pass to optimize imaging mode code better (#50631) (cherry picked from commit e23e1168a27ef60e92307dc076b786421dfb4911) --- src/pipeline.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/pipeline.cpp b/src/pipeline.cpp index ca5992b6f3135..e5dead97f7195 100644 --- a/src/pipeline.cpp +++ b/src/pipeline.cpp @@ -342,9 +342,12 @@ static void buildEarlySimplificationPipeline(ModulePassManager &MPM, PassBuilder if (O.getSpeedupLevel() >= 2) { JULIA_PASS(FPM.addPass(PropagateJuliaAddrspacesPass())); } + // DCE must come before simplifycfg + // codegen can generate unused statements when generating builtin calls, + // and those dead statements can alter how simplifycfg optimizes the CFG + FPM.addPass(DCEPass()); FPM.addPass(SimplifyCFGPass(basicSimplifyCFGOptions())); if (O.getSpeedupLevel() >= 1) { - FPM.addPass(DCEPass()); FPM.addPass(SROAPass()); } MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM))); From f8b0f298e8e6752fc05d30eb789072148d931083 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Wed, 19 Jul 2023 01:24:51 +0530 Subject: [PATCH 041/413] isassigned for ranges with BigInt indices (#50587) This fixes certain possible regressions in `isassigned` for ranges to restore the 1.9-like behavior. On v1.9 ```julia julia> r = 1:big(2)^65 1:36893488147419103232 julia> isassigned(r, lastindex(r)) true julia> isassigned(r, true) ERROR: ArgumentError: invalid index: true of type Bool ``` On v1.10.0-alpha1 ```julia julia> isassigned(r, lastindex(r)) ERROR: InexactError: Int64(36893488147419103232) julia> isassigned(r, true) # Bool is converted to Int true julia> r[true] # but indexing with Bool doesn't work ERROR: ArgumentError: invalid index: true of type Bool ``` This PR ```julia julia> isassigned(r, lastindex(r)) true julia> isassigned(r, true) ERROR: ArgumentError: invalid index: true of type Bool ``` This still leaves ```julia julia> isassigned(collect(1:3), true) true ``` so that should perhaps be changed as well. (cherry picked from commit d270a71191372c4fe51306264daa1270b8b43ef1) --- base/range.jl | 5 ++++- test/ranges.jl | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/base/range.jl b/base/range.jl index 6b701d31b0358..bac5c389bd9da 100644 --- a/base/range.jl +++ b/base/range.jl @@ -905,7 +905,10 @@ end ## indexing -isassigned(r::AbstractRange, i::Int) = firstindex(r) <= i <= lastindex(r) +function isassigned(r::AbstractRange, i::Integer) + i isa Bool && throw(ArgumentError("invalid index: $i of type Bool")) + firstindex(r) <= i <= lastindex(r) +end _in_unit_range(v::UnitRange, val, i::Integer) = i > 0 && val <= v.stop && val >= v.start diff --git a/test/ranges.jl b/test/ranges.jl index b263e6d4d530d..c9cf9228f091b 100644 --- a/test/ranges.jl +++ b/test/ranges.jl @@ -2490,3 +2490,12 @@ function check_ranges(rx, ry) end @test Core.Compiler.is_foldable(Base.infer_effects(check_ranges, (UnitRange{Int},UnitRange{Int}))) # TODO JET.@test_opt check_ranges(1:2, 3:4) + +@testset "isassigned" begin + for (r, val) in ((1:3, 3), (1:big(2)^65, big(2)^65)) + @test isassigned(r, lastindex(r)) + # test that the indexing actually succeeds + @test r[end] == val + @test_throws ArgumentError isassigned(r, true) + end +end From 75734b3a6f6725d05015a12b9b110ff011cec5f3 Mon Sep 17 00:00:00 2001 From: Oscar Smith Date: Sun, 23 Jul 2023 09:11:50 -0400 Subject: [PATCH 042/413] Page based heap size heuristics (#50144) This PR implements GC heuristics based on the amount of pages allocated instead of live objects like was done before. The heuristic for new heap target is based on https://dl.acm.org/doi/10.1145/3563323 (in summary it argues that the heap target should have square root behaviour). From my testing this fixes https://github.com/JuliaLang/julia/issues/49545 and https://github.com/JuliaLang/julia/issues/49761 (cherry picked from commit 32aa29f561a3dcaffad7b2595928a4aa41c51b81) --- NEWS.md | 1 + doc/src/devdocs/gc.md | 12 +- src/gc-debug.c | 17 ++- src/gc-pages.c | 4 + src/gc.c | 256 ++++++++++++++++++++++---------------- src/gc.h | 11 +- src/jl_exported_funcs.inc | 1 + src/julia_threads.h | 4 +- test/testenv.jl | 9 ++ 9 files changed, 203 insertions(+), 112 deletions(-) diff --git a/NEWS.md b/NEWS.md index 81f744158d58e..112b229c3cf7e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -31,6 +31,7 @@ Language changes Compiler/Runtime improvements ----------------------------- +* Updated GC heuristics to count allocated pages instead of individual objects ([#50144]). * The `@pure` macro is now deprecated. Use `Base.@assume_effects :foldable` instead ([#48682]). * The mark phase of the Garbage Collector is now multi-threaded ([#48600]). diff --git a/doc/src/devdocs/gc.md b/doc/src/devdocs/gc.md index c072912e77c3f..942535f426b34 100644 --- a/doc/src/devdocs/gc.md +++ b/doc/src/devdocs/gc.md @@ -67,6 +67,12 @@ This scheme eliminates the need of explicitly keeping a flag to indicate a full ## Heuristics GC heuristics tune the GC by changing the size of the allocation interval between garbage collections. -If a GC was unproductive, then we increase the size of the allocation interval to allow objects more time to die. -If a GC returns a lot of space we can shrink the interval. The goal is to find a steady state where we are -allocating just about the same amount as we are collecting. + +The GC heuristics measure how big the heap size is after a collection and set the next +collection according to the algorithm described by https://dl.acm.org/doi/10.1145/3563323, +in summary, it argues that the heap target should have a square root relationship with the live heap, and that it should also be scaled by how fast the GC is freeing objects and how fast the mutators are allocating. +The heuristics measure the heap size by counting the number of pages that are in use and the objects that use malloc. Previously we measured the heap size by counting +the alive objects, but that doesn't take into account fragmentation which could lead to bad decisions, that also meant that we used thread local information (allocations) to make +decisions about a process wide (when to GC), measuring pages means the decision is global. + +The GC will do full collections when the heap size reaches 80% of the maximum allowed size. diff --git a/src/gc-debug.c b/src/gc-debug.c index bab2c5b0fa607..6e1587b17a6d9 100644 --- a/src/gc-debug.c +++ b/src/gc-debug.c @@ -1,7 +1,10 @@ // This file is a part of Julia. License is MIT: https://julialang.org/license #include "gc.h" +#include "julia.h" #include +#include +#include #include // re-include assert.h without NDEBUG, @@ -1216,15 +1219,25 @@ JL_DLLEXPORT void jl_enable_gc_logging(int enable) { gc_logging_enabled = enable; } -void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect) JL_NOTSAFEPOINT { +void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect, int64_t live_bytes) JL_NOTSAFEPOINT { if (!gc_logging_enabled) { return; } jl_safe_printf("GC: pause %.2fms. collected %fMB. %s %s\n", - pause/1e6, freed/1e6, + pause/1e6, freed/(double)(1<<20), full ? "full" : "incr", recollect ? "recollect" : "" ); + + jl_safe_printf("Heap stats: bytes_mapped %.2f MB, bytes_resident %.2f MB, heap_size %.2f MB, heap_target %.2f MB, live_bytes %.2f MB\n, Fragmentation %.3f", + jl_atomic_load_relaxed(&gc_heap_stats.bytes_mapped)/(double)(1<<20), + jl_atomic_load_relaxed(&gc_heap_stats.bytes_resident)/(double)(1<<20), + jl_atomic_load_relaxed(&gc_heap_stats.heap_size)/(double)(1<<20), + jl_atomic_load_relaxed(&gc_heap_stats.heap_target)/(double)(1<<20), + live_bytes/(double)(1<<20), + (double)live_bytes/(double)jl_atomic_load_relaxed(&gc_heap_stats.heap_size) + ); + // Should fragmentation use bytes_resident instead of heap_size? } #ifdef __cplusplus diff --git a/src/gc-pages.c b/src/gc-pages.c index 682e76611f5d9..8d596f4a815ca 100644 --- a/src/gc-pages.c +++ b/src/gc-pages.c @@ -52,6 +52,8 @@ char *jl_gc_try_alloc_pages_(int pg_cnt) JL_NOTSAFEPOINT // round data pointer up to the nearest gc_page_data-aligned // boundary if mmap didn't already do so. mem = (char*)gc_page_data(mem + GC_PAGE_SZ - 1); + jl_atomic_fetch_add_relaxed(&gc_heap_stats.bytes_mapped, pages_sz); + jl_atomic_fetch_add_relaxed(&gc_heap_stats.bytes_resident, pages_sz); return mem; } @@ -115,6 +117,7 @@ NOINLINE jl_gc_pagemeta_t *jl_gc_alloc_page(void) JL_NOTSAFEPOINT // try to get page from `pool_freed` meta = pop_lf_page_metadata_back(&global_page_pool_freed); if (meta != NULL) { + jl_atomic_fetch_add_relaxed(&gc_heap_stats.bytes_resident, GC_PAGE_SZ); gc_alloc_map_set(meta->data, GC_PAGE_ALLOCATED); goto exit; } @@ -188,6 +191,7 @@ void jl_gc_free_page(jl_gc_pagemeta_t *pg) JL_NOTSAFEPOINT madvise(p, decommit_size, MADV_DONTNEED); #endif msan_unpoison(p, decommit_size); + jl_atomic_fetch_add_relaxed(&gc_heap_stats.bytes_resident, -decommit_size); } #ifdef __cplusplus diff --git a/src/gc.c b/src/gc.c index 0be48081d5687..41c0baf492507 100644 --- a/src/gc.c +++ b/src/gc.c @@ -42,6 +42,8 @@ static jl_gc_callback_list_t *gc_cblist_pre_gc; static jl_gc_callback_list_t *gc_cblist_post_gc; static jl_gc_callback_list_t *gc_cblist_notify_external_alloc; static jl_gc_callback_list_t *gc_cblist_notify_external_free; +static jl_gc_callback_list_t *gc_cblist_notify_gc_pressure; +typedef void (*jl_gc_cb_notify_gc_pressure_t)(void); #define gc_invoke_callbacks(ty, list, args) \ do { \ @@ -128,6 +130,14 @@ JL_DLLEXPORT void jl_gc_set_cb_notify_external_free(jl_gc_cb_notify_external_fre jl_gc_deregister_callback(&gc_cblist_notify_external_free, (jl_gc_cb_func_t)cb); } +JL_DLLEXPORT void jl_gc_set_cb_notify_gc_pressure(jl_gc_cb_notify_gc_pressure_t cb, int enable) +{ + if (enable) + jl_gc_register_callback(&gc_cblist_notify_gc_pressure, (jl_gc_cb_func_t)cb); + else + jl_gc_deregister_callback(&gc_cblist_notify_gc_pressure, (jl_gc_cb_func_t)cb); +} + // Protect all access to `finalizer_list_marked` and `to_finalize`. // For accessing `ptls->finalizers`, the lock is needed if a thread // is going to realloc the buffer (of its own list) or accessing the @@ -178,6 +188,8 @@ jl_gc_num_t gc_num = {0}; static size_t last_long_collect_interval; int gc_n_threads; jl_ptls_t* gc_all_tls_states; +gc_heapstatus_t gc_heap_stats = {0}; +int next_sweep_full = 0; const uint64_t _jl_buff_tag[3] = {0x4eadc0004eadc000ull, 0x4eadc0004eadc000ull, 0x4eadc0004eadc000ull}; // aka 0xHEADER00 JL_DLLEXPORT uintptr_t jl_get_buff_tag(void) { @@ -665,19 +677,26 @@ static int64_t last_gc_total_bytes = 0; #ifdef _P64 typedef uint64_t memsize_t; static const size_t default_collect_interval = 5600 * 1024 * sizeof(void*); -static const size_t max_collect_interval = 1250000000UL; static size_t total_mem; // We expose this to the user/ci as jl_gc_set_max_memory static memsize_t max_total_memory = (memsize_t) 2 * 1024 * 1024 * 1024 * 1024 * 1024; #else typedef uint32_t memsize_t; static const size_t default_collect_interval = 3200 * 1024 * sizeof(void*); -static const size_t max_collect_interval = 500000000UL; // Work really hard to stay within 2GB // Alternative is to risk running out of address space // on 32 bit architectures. -static memsize_t max_total_memory = (memsize_t) 2 * 1024 * 1024 * 1024; +#define MAX32HEAP 1536 * 1024 * 1024 +static memsize_t max_total_memory = (memsize_t) MAX32HEAP; #endif +// heuristic stuff for https://dl.acm.org/doi/10.1145/3563323 +static uint64_t old_pause_time = 0; +static uint64_t old_mut_time = 0; +static uint64_t old_heap_size = 0; +static uint64_t old_alloc_diff = 0; +static uint64_t old_freed_diff = 0; +static uint64_t gc_end_time = 0; + // global variables for GC stats @@ -730,6 +749,7 @@ static int mark_reset_age = 0; static int64_t scanned_bytes; // young bytes scanned while marking static int64_t perm_scanned_bytes; // old bytes scanned while marking int prev_sweep_full = 1; +int under_pressure = 0; // Full collection heuristics static int64_t live_bytes = 0; @@ -916,7 +936,7 @@ void gc_setmark_buf(jl_ptls_t ptls, void *o, uint8_t mark_mode, size_t minsz) JL STATIC_INLINE void maybe_collect(jl_ptls_t ptls) { - if (jl_atomic_load_relaxed(&ptls->gc_num.allocd) >= 0 || jl_gc_debug_check_other()) { + if (jl_atomic_load_relaxed(&gc_heap_stats.heap_size) >= jl_atomic_load_relaxed(&gc_heap_stats.heap_target) || jl_gc_debug_check_other()) { jl_gc_collect(JL_GC_AUTO); } else { @@ -1005,6 +1025,13 @@ STATIC_INLINE jl_value_t *jl_gc_big_alloc_inner(jl_ptls_t ptls, size_t sz) jl_atomic_load_relaxed(&ptls->gc_num.allocd) + allocsz); jl_atomic_store_relaxed(&ptls->gc_num.bigalloc, jl_atomic_load_relaxed(&ptls->gc_num.bigalloc) + 1); + uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); + if (alloc_acc + allocsz < 16*1024) + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + allocsz); + else { + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + allocsz); + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); + } #ifdef MEMDEBUG memset(v, 0xee, allocsz); #endif @@ -1050,6 +1077,8 @@ static bigval_t **sweep_big_list(int sweep_full, bigval_t **pv) JL_NOTSAFEPOINT if (nxt) nxt->prev = pv; gc_num.freed += v->sz&~3; + jl_atomic_store_relaxed(&gc_heap_stats.heap_size, + jl_atomic_load_relaxed(&gc_heap_stats.heap_size) - (v->sz&~3)); #ifdef MEMDEBUG memset(v, 0xbb, v->sz&~3); #endif @@ -1109,6 +1138,13 @@ void jl_gc_count_allocd(size_t sz) JL_NOTSAFEPOINT jl_ptls_t ptls = jl_current_task->ptls; jl_atomic_store_relaxed(&ptls->gc_num.allocd, jl_atomic_load_relaxed(&ptls->gc_num.allocd) + sz); + uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); + if (alloc_acc + sz < 16*1024) + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + sz); + else { + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + sz); + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); + } } static void combine_thread_gc_counts(jl_gc_num_t *dest) JL_NOTSAFEPOINT @@ -1121,12 +1157,13 @@ static void combine_thread_gc_counts(jl_gc_num_t *dest) JL_NOTSAFEPOINT jl_ptls_t ptls = gc_all_tls_states[i]; if (ptls) { dest->allocd += (jl_atomic_load_relaxed(&ptls->gc_num.allocd) + gc_num.interval); - dest->freed += jl_atomic_load_relaxed(&ptls->gc_num.freed); dest->malloc += jl_atomic_load_relaxed(&ptls->gc_num.malloc); dest->realloc += jl_atomic_load_relaxed(&ptls->gc_num.realloc); dest->poolalloc += jl_atomic_load_relaxed(&ptls->gc_num.poolalloc); dest->bigalloc += jl_atomic_load_relaxed(&ptls->gc_num.bigalloc); - dest->freecall += jl_atomic_load_relaxed(&ptls->gc_num.freecall); + uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); + uint64_t free_acc = jl_atomic_load_relaxed(&ptls->gc_num.free_acc); + jl_atomic_store_relaxed(&gc_heap_stats.heap_size, alloc_acc - free_acc + jl_atomic_load_relaxed(&gc_heap_stats.heap_size)); } } } @@ -1183,6 +1220,8 @@ static void jl_gc_free_array(jl_array_t *a) JL_NOTSAFEPOINT jl_free_aligned(d); else free(d); + jl_atomic_store_relaxed(&gc_heap_stats.heap_size, + jl_atomic_load_relaxed(&gc_heap_stats.heap_size) - jl_array_nbytes(a)); gc_num.freed += jl_array_nbytes(a); gc_num.freecall++; } @@ -1257,6 +1296,7 @@ static NOINLINE jl_taggedvalue_t *gc_add_page(jl_gc_pool_t *p) JL_NOTSAFEPOINT set_page_metadata(pg); push_page_metadata_back(&ptls->page_metadata_allocd, pg); jl_taggedvalue_t *fl = gc_reset_page(ptls, p, pg); + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, GC_PAGE_SZ); p->newpages = fl; return fl; } @@ -1451,8 +1491,10 @@ static jl_taggedvalue_t **gc_sweep_page(jl_gc_pool_t *p, jl_gc_pagemeta_t **allo else if (freed_lazily) { gc_alloc_map_set(pg->data, GC_PAGE_LAZILY_FREED); push_page_metadata_back(lazily_freed, pg); + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -GC_PAGE_SZ); } else { + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -GC_PAGE_SZ); #ifdef _P64 // only enable concurrent sweeping on 64bit if (jl_n_sweepthreads == 0) { jl_gc_free_page(pg); @@ -3067,6 +3109,11 @@ JL_DLLEXPORT int64_t jl_gc_live_bytes(void) return live_bytes; } +double jl_gc_smooth(uint64_t old_val, uint64_t new_val, double factor) +{ + return factor * old_val + (1.0-factor) * new_val; +} + size_t jl_maxrss(void); // Only one thread should be running in this function @@ -3081,6 +3128,8 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) jl_gc_markqueue_t *mq = &ptls->mark_queue; uint64_t gc_start_time = jl_hrtime(); + uint64_t mutator_time = gc_start_time - gc_end_time; + uint64_t before_free_heap_size = jl_atomic_load_relaxed(&gc_heap_stats.heap_size); int64_t last_perm_scanned_bytes = perm_scanned_bytes; uint64_t start_mark_time = jl_hrtime(); JL_PROBE_GC_MARK_BEGIN(); @@ -3171,19 +3220,14 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) uint64_t mark_time = end_mark_time - start_mark_time; gc_num.mark_time = mark_time; gc_num.total_mark_time += mark_time; - int64_t allocd = gc_num.allocd; gc_settime_postmark_end(); // marking is over // Flush everything in mark cache gc_sync_all_caches_nolock(ptls); - int64_t live_sz_ub = live_bytes + allocd; - int64_t live_sz_est = scanned_bytes + perm_scanned_bytes; - int64_t estimate_freed = live_sz_ub - live_sz_est; gc_verify(ptls); - gc_stats_all_pool(); gc_stats_big_obj(); objprofile_printall(); @@ -3192,42 +3236,17 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) if (!prev_sweep_full) promoted_bytes += perm_scanned_bytes - last_perm_scanned_bytes; // 5. next collection decision - int not_freed_enough = (collection == JL_GC_AUTO) && estimate_freed < (7*(allocd/10)); - int nptr = 0; + int remset_nptr = 0; + int sweep_full = next_sweep_full; + int recollect = 0; assert(gc_n_threads); for (int i = 0; i < gc_n_threads; i++) { jl_ptls_t ptls2 = gc_all_tls_states[i]; if (ptls2 != NULL) - nptr += ptls2->heap.remset_nptr; + remset_nptr += ptls2->heap.remset_nptr; } + (void)remset_nptr; //Use this information for something? - // many pointers in the intergen frontier => "quick" mark is not quick - int large_frontier = nptr*sizeof(void*) >= default_collect_interval; - int sweep_full = 0; - int recollect = 0; - - // update heuristics only if this GC was automatically triggered - if (collection == JL_GC_AUTO) { - if (large_frontier) { - sweep_full = 1; - gc_num.interval = last_long_collect_interval; - } - if (not_freed_enough || large_frontier) { - gc_num.interval = gc_num.interval * 2; - } - - size_t maxmem = 0; -#ifdef _P64 - // on a big memory machine, increase max_collect_interval to totalmem / nthreads / 2 - maxmem = total_mem / (gc_n_threads - jl_n_gcthreads) / 2; -#endif - if (maxmem < max_collect_interval) - maxmem = max_collect_interval; - if (gc_num.interval > maxmem) { - sweep_full = 1; - gc_num.interval = maxmem; - } - } // If the live data outgrows the suggested max_total_memory // we keep going with minimum intervals and full gcs until @@ -3247,7 +3266,6 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) // on the first collection after sweep_full, and the current scan perm_scanned_bytes = 0; promoted_bytes = 0; - last_long_collect_interval = gc_num.interval; } scanned_bytes = 0; // 6. start sweeping @@ -3272,9 +3290,10 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) if (sweep_full) gc_sweep_perm_alloc(); } + JL_PROBE_GC_SWEEP_END(); - uint64_t gc_end_time = jl_hrtime(); + gc_end_time = jl_hrtime(); uint64_t pause = gc_end_time - gc_start_time; uint64_t sweep_time = gc_end_time - start_sweep_time; gc_num.total_sweep_time += sweep_time; @@ -3283,6 +3302,49 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) gc_num.last_full_sweep = gc_end_time; } + int thrashing = 0; // maybe we should report this to the user or error out? + size_t heap_size = jl_atomic_load_relaxed(&gc_heap_stats.heap_size); + double target_allocs = 0.0; + double min_interval = default_collect_interval; + if (collection == JL_GC_AUTO) { + uint64_t alloc_diff = before_free_heap_size - old_heap_size; + uint64_t freed_diff = before_free_heap_size - heap_size; + double alloc_smooth_factor = 0.95; + double collect_smooth_factor = 0.5; + double tuning_factor = 0.03; + double alloc_mem = jl_gc_smooth(old_alloc_diff, alloc_diff, alloc_smooth_factor); + double alloc_time = jl_gc_smooth(old_mut_time, mutator_time, alloc_smooth_factor); + double gc_mem = jl_gc_smooth(old_freed_diff, freed_diff, collect_smooth_factor); + double gc_time = jl_gc_smooth(old_pause_time, pause, collect_smooth_factor); + old_alloc_diff = alloc_diff; + old_mut_time = mutator_time; + old_freed_diff = freed_diff; + old_pause_time = pause; + old_heap_size = heap_size; + thrashing = gc_time > mutator_time * 98 ? 1 : 0; + if (alloc_mem != 0 && alloc_time != 0 && gc_mem != 0 && gc_time != 0 ) { + double alloc_rate = alloc_mem/alloc_time; + double gc_rate = gc_mem/gc_time; + target_allocs = sqrt(((double)heap_size/min_interval * alloc_rate)/(gc_rate * tuning_factor)); // work on multiples of min interval + } + } + if (target_allocs == 0.0 || thrashing) // If we are thrashing go back to default + target_allocs = 2*sqrt((double)heap_size/min_interval); + + uint64_t target_heap = (uint64_t)target_allocs*min_interval + heap_size; + if (target_heap > max_total_memory && !thrashing) // Allow it to go over if we are thrashing if we die we die + target_heap = max_total_memory; + else if (target_heap < default_collect_interval) + target_heap = default_collect_interval; + jl_atomic_store_relaxed(&gc_heap_stats.heap_target, target_heap); + + double old_ratio = (double)promoted_bytes/(double)heap_size; + if (heap_size > max_total_memory * 0.8 || old_ratio > 0.15) + next_sweep_full = 1; + else + next_sweep_full = 0; + if (heap_size > max_total_memory * 0.8 || thrashing) + under_pressure = 1; // sweeping is over // 7. if it is a quick sweep, put back the remembered objects in queued state // so that we don't trigger the barrier again on them. @@ -3314,55 +3376,19 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) } #endif - _report_gc_finished(pause, gc_num.freed, sweep_full, recollect); - - gc_final_pause_end(gc_start_time, gc_end_time); - gc_time_sweep_pause(gc_end_time, allocd, live_bytes, - estimate_freed, sweep_full); - gc_num.full_sweep += sweep_full; + _report_gc_finished(pause, gc_num.freed, sweep_full, recollect, live_bytes); uint64_t max_memory = last_live_bytes + gc_num.allocd; if (max_memory > gc_num.max_memory) { gc_num.max_memory = max_memory; } - + gc_final_pause_end(gc_start_time, gc_end_time); + gc_time_sweep_pause(gc_end_time, allocd, live_bytes, + estimate_freed, sweep_full); + gc_num.full_sweep += sweep_full; last_live_bytes = live_bytes; - // Can't call inc_live_bytes here because we already added allocd - // to the graph earlier live_bytes += -gc_num.freed + gc_num.allocd; jl_timing_counter_dec(JL_TIMING_COUNTER_HeapSize, gc_num.freed); - if (collection == JL_GC_AUTO) { - //If we aren't freeing enough or are seeing lots and lots of pointers let it increase faster - if (!not_freed_enough || large_frontier) { - int64_t tot = 2 * (live_bytes + gc_num.allocd) / 3; - if (gc_num.interval > tot) { - gc_num.interval = tot; - last_long_collect_interval = tot; - } - // If the current interval is larger than half the live data decrease the interval - } - else { - int64_t half = (live_bytes / 2); - if (gc_num.interval > half) - gc_num.interval = half; - } - - // But never go below default - if (gc_num.interval < default_collect_interval) gc_num.interval = default_collect_interval; - } - - if (gc_num.interval + live_bytes > max_total_memory) { - if (live_bytes < max_total_memory) { - gc_num.interval = max_total_memory - live_bytes; - last_long_collect_interval = max_total_memory - live_bytes; - } - else { - // We can't stay under our goal so let's go back to - // the minimum interval and hope things get better - gc_num.interval = default_collect_interval; - } - } - gc_time_summary(sweep_full, t_start, gc_end_time, gc_num.freed, live_bytes, gc_num.interval, pause, gc_num.time_to_safepoint, @@ -3468,6 +3494,10 @@ JL_DLLEXPORT void jl_gc_collect(jl_gc_collection_t collection) gc_invoke_callbacks(jl_gc_cb_post_gc_t, gc_cblist_post_gc, (collection)); + if (under_pressure) + gc_invoke_callbacks(jl_gc_cb_notify_gc_pressure_t, + gc_cblist_notify_gc_pressure, ()); + under_pressure = 0; #ifdef _OS_WINDOWS_ SetLastError(last_error); #endif @@ -3553,7 +3583,7 @@ void jl_gc_init(void) arraylist_new(&finalizer_list_marked, 0); arraylist_new(&to_finalize, 0); - + jl_atomic_store_relaxed(&gc_heap_stats.heap_target, default_collect_interval); gc_num.interval = default_collect_interval; last_long_collect_interval = default_collect_interval; gc_num.allocd = 0; @@ -3565,12 +3595,6 @@ void jl_gc_init(void) uint64_t constrained_mem = uv_get_constrained_memory(); if (constrained_mem > 0 && constrained_mem < total_mem) total_mem = constrained_mem; - double percent; - if (total_mem < 128e9) - percent = total_mem * 2.34375e-12 + 0.6; // 60% at 0 gigs and 90% at 128 to not - else // overcommit too much on memory contrained devices - percent = 0.9; - max_total_memory = total_mem * percent; #endif if (jl_options.heap_size_hint) jl_gc_set_max_memory(jl_options.heap_size_hint); @@ -3582,7 +3606,11 @@ JL_DLLEXPORT void jl_gc_set_max_memory(uint64_t max_mem) { if (max_mem > 0 && max_mem < (uint64_t)1 << (sizeof(memsize_t) * 8 - 1)) { + #ifdef _P64 max_total_memory = max_mem; + #else + max_total_memory = max_mem < MAX32HEAP ? max_mem : MAX32HEAP; + #endif } } @@ -3610,6 +3638,13 @@ JL_DLLEXPORT void *jl_gc_counted_malloc(size_t sz) jl_atomic_load_relaxed(&ptls->gc_num.allocd) + sz); jl_atomic_store_relaxed(&ptls->gc_num.malloc, jl_atomic_load_relaxed(&ptls->gc_num.malloc) + 1); + uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); + if (alloc_acc + sz < 16*1024) + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + sz); + else { + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + sz); + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); + } } return malloc(sz); } @@ -3625,6 +3660,13 @@ JL_DLLEXPORT void *jl_gc_counted_calloc(size_t nm, size_t sz) jl_atomic_load_relaxed(&ptls->gc_num.allocd) + nm*sz); jl_atomic_store_relaxed(&ptls->gc_num.malloc, jl_atomic_load_relaxed(&ptls->gc_num.malloc) + 1); + uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); + if (alloc_acc + sz < 16*1024) + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + sz * nm); + else { + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + sz * nm); + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); + } } return calloc(nm, sz); } @@ -3636,10 +3678,13 @@ JL_DLLEXPORT void jl_gc_counted_free_with_size(void *p, size_t sz) free(p); if (pgcstack != NULL && ct->world_age) { jl_ptls_t ptls = ct->ptls; - jl_atomic_store_relaxed(&ptls->gc_num.freed, - jl_atomic_load_relaxed(&ptls->gc_num.freed) + sz); - jl_atomic_store_relaxed(&ptls->gc_num.freecall, - jl_atomic_load_relaxed(&ptls->gc_num.freecall) + 1); + uint64_t free_acc = jl_atomic_load_relaxed(&ptls->gc_num.free_acc); + if (free_acc + sz < 16*1024) + jl_atomic_store_relaxed(&ptls->gc_num.free_acc, free_acc + sz); + else { + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -(free_acc + sz)); + jl_atomic_store_relaxed(&ptls->gc_num.free_acc, 0); + } } } @@ -3650,14 +3695,12 @@ JL_DLLEXPORT void *jl_gc_counted_realloc_with_old_size(void *p, size_t old, size if (pgcstack != NULL && ct->world_age) { jl_ptls_t ptls = ct->ptls; maybe_collect(ptls); - if (sz < old) - jl_atomic_store_relaxed(&ptls->gc_num.freed, - jl_atomic_load_relaxed(&ptls->gc_num.freed) + (old - sz)); - else + if (!(sz < old)) jl_atomic_store_relaxed(&ptls->gc_num.allocd, jl_atomic_load_relaxed(&ptls->gc_num.allocd) + (sz - old)); jl_atomic_store_relaxed(&ptls->gc_num.realloc, jl_atomic_load_relaxed(&ptls->gc_num.realloc) + 1); + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, sz-old); } return realloc(p, sz); } @@ -3732,6 +3775,13 @@ JL_DLLEXPORT void *jl_gc_managed_malloc(size_t sz) jl_atomic_load_relaxed(&ptls->gc_num.allocd) + allocsz); jl_atomic_store_relaxed(&ptls->gc_num.malloc, jl_atomic_load_relaxed(&ptls->gc_num.malloc) + 1); + uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); + if (alloc_acc + allocsz < 16*1024) + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + allocsz); + else { + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + allocsz); + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); + } int last_errno = errno; #ifdef _OS_WINDOWS_ DWORD last_error = GetLastError(); @@ -3762,15 +3812,12 @@ static void *gc_managed_realloc_(jl_ptls_t ptls, void *d, size_t sz, size_t olds ptls->gc_cache.perm_scanned_bytes += allocsz - oldsz; inc_live_bytes(allocsz - oldsz); } - else if (allocsz < oldsz) - jl_atomic_store_relaxed(&ptls->gc_num.freed, - jl_atomic_load_relaxed(&ptls->gc_num.freed) + (oldsz - allocsz)); - else + else if (!(allocsz < oldsz)) jl_atomic_store_relaxed(&ptls->gc_num.allocd, jl_atomic_load_relaxed(&ptls->gc_num.allocd) + (allocsz - oldsz)); jl_atomic_store_relaxed(&ptls->gc_num.realloc, jl_atomic_load_relaxed(&ptls->gc_num.realloc) + 1); - + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, allocsz-oldsz); int last_errno = errno; #ifdef _OS_WINDOWS_ DWORD last_error = GetLastError(); @@ -3859,6 +3906,7 @@ static void *gc_perm_alloc_large(size_t sz, int zero, unsigned align, unsigned o #ifdef _OS_WINDOWS_ SetLastError(last_error); #endif + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size,sz); errno = last_errno; jl_may_leak(base); assert(align > 0); diff --git a/src/gc.h b/src/gc.h index b1eee5a1d5bda..4bfe5dc328e9d 100644 --- a/src/gc.h +++ b/src/gc.h @@ -10,6 +10,7 @@ #define JL_GC_H #include +#include #include #include #include @@ -257,6 +258,13 @@ typedef struct { pagetable1_t *meta1[REGION2_PG_COUNT]; } pagetable_t; +typedef struct { + _Atomic(size_t) bytes_mapped; + _Atomic(size_t) bytes_resident; + _Atomic(size_t) heap_size; + _Atomic(size_t) heap_target; +} gc_heapstatus_t; + #define GC_PAGE_UNMAPPED 0 #define GC_PAGE_ALLOCATED 1 #define GC_PAGE_LAZILY_FREED 2 @@ -374,6 +382,7 @@ extern int64_t lazy_freed_pages; extern int gc_first_tid; extern int gc_n_threads; extern jl_ptls_t* gc_all_tls_states; +extern gc_heapstatus_t gc_heap_stats; STATIC_INLINE bigval_t *bigval_header(jl_taggedvalue_t *o) JL_NOTSAFEPOINT { @@ -637,7 +646,7 @@ void gc_count_pool(void); size_t jl_array_nbytes(jl_array_t *a) JL_NOTSAFEPOINT; JL_DLLEXPORT void jl_enable_gc_logging(int enable); -void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect) JL_NOTSAFEPOINT; +void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect, int64_t live_bytes) JL_NOTSAFEPOINT; #ifdef __cplusplus } diff --git a/src/jl_exported_funcs.inc b/src/jl_exported_funcs.inc index c2b2a1578fd76..a7ffedd5cba10 100644 --- a/src/jl_exported_funcs.inc +++ b/src/jl_exported_funcs.inc @@ -191,6 +191,7 @@ XX(jl_gc_schedule_foreign_sweepfunc) \ XX(jl_gc_set_cb_notify_external_alloc) \ XX(jl_gc_set_cb_notify_external_free) \ + XX(jl_gc_set_cb_notify_gc_pressure) \ XX(jl_gc_set_cb_post_gc) \ XX(jl_gc_set_cb_pre_gc) \ XX(jl_gc_set_cb_root_scanner) \ diff --git a/src/julia_threads.h b/src/julia_threads.h index f4c235243e684..d4cbb88e619ba 100644 --- a/src/julia_threads.h +++ b/src/julia_threads.h @@ -130,12 +130,12 @@ typedef struct { typedef struct { _Atomic(int64_t) allocd; - _Atomic(int64_t) freed; _Atomic(uint64_t) malloc; _Atomic(uint64_t) realloc; _Atomic(uint64_t) poolalloc; _Atomic(uint64_t) bigalloc; - _Atomic(uint64_t) freecall; + _Atomic(int64_t) free_acc; + _Atomic(uint64_t) alloc_acc; } jl_thread_gc_num_t; typedef struct { diff --git a/test/testenv.jl b/test/testenv.jl index 41706dd24e75e..21f3ee3b31dd1 100644 --- a/test/testenv.jl +++ b/test/testenv.jl @@ -37,6 +37,15 @@ if !@isdefined(testenv_defined) function addprocs_with_testenv(X; rr_allowed=true, kwargs...) exename = rr_allowed ? `$rr_exename $test_exename` : test_exename + if X isa Integer + if Sys.iswindows() + heap_size=round(Int,(Sys.free_memory()/(1024^2)/(X+1))) + heap_size -= 300 # I don't know anymore + else + heap_size=round(Int,(Sys.total_memory()/(1024^2)/(X+1))) + end + push!(test_exeflags.exec, "--heap-size-hint=$(heap_size)M") + end addprocs(X; exename=exename, exeflags=test_exeflags, kwargs...) end From 152f0e94f67286925c8d63b17e23d13776ef5d85 Mon Sep 17 00:00:00 2001 From: Nicholas Bauer Date: Fri, 7 Jul 2023 15:11:29 -0400 Subject: [PATCH 043/413] Merge new `reinterpret` with essentials.jl `reinterpret` (#50367) (cherry picked from commit b99f251e86c7c09b957a1b362b6408dbba106ff0) --- base/essentials.jl | 32 ++++++++++++++++++++++++++------ base/reinterpretarray.jl | 36 ++---------------------------------- test/core.jl | 2 +- test/numbers.jl | 4 ++-- 4 files changed, 31 insertions(+), 43 deletions(-) diff --git a/base/essentials.jl b/base/essentials.jl index c0d871608b1a9..68dd0c06d646f 100644 --- a/base/essentials.jl +++ b/base/essentials.jl @@ -543,21 +543,41 @@ unsafe_convert(::Type{T}, x::T) where {T<:Ptr} = x # to resolve ambiguity with unsafe_convert(::Type{P}, x::Ptr) where {P<:Ptr} = convert(P, x) """ - reinterpret(type, x) + reinterpret(::Type{Out}, x::In) -Change the type-interpretation of the binary data in the primitive value `x` -to that of the primitive type `type`. -The size of `type` has to be the same as that of the type of `x`. +Change the type-interpretation of the binary data in the isbits value `x` +to that of the isbits type `Out`. +The size (ignoring padding) of `Out` has to be the same as that of the type of `x`. For example, `reinterpret(Float32, UInt32(7))` interprets the 4 bytes corresponding to `UInt32(7)` as a [`Float32`](@ref). -# Examples ```jldoctest julia> reinterpret(Float32, UInt32(7)) 1.0f-44 + +julia> reinterpret(NTuple{2, UInt8}, 0x1234) +(0x34, 0x12) + +julia> reinterpret(UInt16, (0x34, 0x12)) +0x1234 + +julia> reinterpret(Tuple{UInt16, UInt8}, (0x01, 0x0203)) +(0x0301, 0x02) ``` + +!!! warning + + Use caution if some combinations of bits in `Out` are not considered valid and would + otherwise be prevented by the type's constructors and methods. Unexpected behavior + may result without additional validation. """ -reinterpret(::Type{T}, x) where {T} = bitcast(T, x) +function reinterpret(Out::Type, x::In) where {In} + if isprimitivetype(Out) && isprimitivetype(In) + return bitcast(Out, x) + end + # only available when Base is fully loaded. + return _reinterpret(Out, x) +end """ sizeof(T::DataType) diff --git a/base/reinterpretarray.jl b/base/reinterpretarray.jl index d33c127b78c76..74b888a39fd76 100644 --- a/base/reinterpretarray.jl +++ b/base/reinterpretarray.jl @@ -795,42 +795,10 @@ function _copyfrompacked!(ptr_out::Ptr{Out}, ptr_in::Ptr{In}) where {Out, In} end end -""" - reinterpret(::Type{Out}, x::In) - -Reinterpret the valid non-padding bytes of an isbits value `x` as isbits type `Out`. - -Both types must have the same amount of non-padding bytes. This operation is guaranteed -to be reversible. - -```jldoctest -julia> reinterpret(NTuple{2, UInt8}, 0x1234) -(0x34, 0x12) - -julia> reinterpret(UInt16, (0x34, 0x12)) -0x1234 - -julia> reinterpret(Tuple{UInt16, UInt8}, (0x01, 0x0203)) -(0x0301, 0x02) -``` - -!!! warning - - Use caution if some combinations of bits in `Out` are not considered valid and would - otherwise be prevented by the type's constructors and methods. Unexpected behavior - may result without additional validation. -""" -@inline function reinterpret(::Type{Out}, x::In) where {Out, In} +@inline function _reinterpret(::Type{Out}, x::In) where {Out, In} + # handle non-primitive types isbitstype(Out) || throw(ArgumentError("Target type for `reinterpret` must be isbits")) isbitstype(In) || throw(ArgumentError("Source type for `reinterpret` must be isbits")) - if isprimitivetype(Out) && isprimitivetype(In) - outsize = sizeof(Out) - insize = sizeof(In) - outsize == insize || - throw(ArgumentError("Sizes of types $Out and $In do not match; got $outsize \ - and $insize, respectively.")) - return bitcast(Out, x) - end inpackedsize = packedsize(In) outpackedsize = packedsize(Out) inpackedsize == outpackedsize || diff --git a/test/core.jl b/test/core.jl index 13f4640210f51..087234abe1a94 100644 --- a/test/core.jl +++ b/test/core.jl @@ -1897,7 +1897,7 @@ function f4528(A, B) end end @test f4528(false, Int32(12)) === nothing -@test_throws ArgumentError f4528(true, Int32(12)) +@test_throws ErrorException f4528(true, Int32(12)) # issue #4518 f4518(x, y::Union{Int32,Int64}) = 0 diff --git a/test/numbers.jl b/test/numbers.jl index d7fd6531b157d..e89dffd8e33cf 100644 --- a/test/numbers.jl +++ b/test/numbers.jl @@ -2216,11 +2216,11 @@ end @test round(Int16, -32768.1) === Int16(-32768) end # issue #7508 -@test_throws ArgumentError reinterpret(Int, 0x01) +@test_throws ErrorException reinterpret(Int, 0x01) @testset "issue #12832" begin @test_throws ArgumentError reinterpret(Float64, Complex{Int64}(1)) - @test_throws ArgumentError reinterpret(Int32, false) + @test_throws ErrorException reinterpret(Int32, false) end # issue #41 ndigf(n) = Float64(log(Float32(n))) From 6616549950e6e91eb7ab06708fa064b9d75c6282 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 25 Jul 2023 13:43:26 -0400 Subject: [PATCH 044/413] release-1.10: set VERSON to 1.10.0-beta1 (#50662) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 61f71d0ffe369..e00a6c71830e9 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.0-alpha1 +1.10.0-beta1 From ea34b132453f66e958bb2dad805547c1c39bb32c Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Mon, 24 Jul 2023 19:22:47 +0200 Subject: [PATCH 045/413] Remove SparseArrays legacy code (#50637) (cherry picked from commit c57d33a17ae713497052cddbba83a5f4b5aaeaa3) --- stdlib/LinearAlgebra/src/adjtrans.jl | 15 --------------- stdlib/LinearAlgebra/src/triangular.jl | 6 ------ 2 files changed, 21 deletions(-) diff --git a/stdlib/LinearAlgebra/src/adjtrans.jl b/stdlib/LinearAlgebra/src/adjtrans.jl index 0d31e402aec00..b3a06f8e7414b 100644 --- a/stdlib/LinearAlgebra/src/adjtrans.jl +++ b/stdlib/LinearAlgebra/src/adjtrans.jl @@ -64,21 +64,6 @@ end Adjoint(A) = Adjoint{Base.promote_op(adjoint,eltype(A)),typeof(A)}(A) Transpose(A) = Transpose{Base.promote_op(transpose,eltype(A)),typeof(A)}(A) -# TODO: remove, is already replaced by wrapperop -""" - adj_or_trans(::AbstractArray) -> adjoint|transpose|identity - adj_or_trans(::Type{<:AbstractArray}) -> adjoint|transpose|identity -Return [`adjoint`](@ref) from an `Adjoint` type or object and -[`transpose`](@ref) from a `Transpose` type or object. Otherwise, -return [`identity`](@ref). Note that `Adjoint` and `Transpose` have -to be the outer-most wrapper object for a non-`identity` function to be -returned. -""" -adj_or_trans(::T) where {T<:AbstractArray} = adj_or_trans(T) -adj_or_trans(::Type{<:AbstractArray}) = identity -adj_or_trans(::Type{<:Adjoint}) = adjoint -adj_or_trans(::Type{<:Transpose}) = transpose - """ inplace_adj_or_trans(::AbstractArray) -> adjoint!|transpose!|copyto! inplace_adj_or_trans(::Type{<:AbstractArray}) -> adjoint!|transpose!|copyto! diff --git a/stdlib/LinearAlgebra/src/triangular.jl b/stdlib/LinearAlgebra/src/triangular.jl index c943945432bd0..07a28f7f575a0 100644 --- a/stdlib/LinearAlgebra/src/triangular.jl +++ b/stdlib/LinearAlgebra/src/triangular.jl @@ -671,12 +671,6 @@ fillstored!(A::UnitUpperTriangular, x) = (fillband!(A.data, x, 1, size(A,2)-1); # BlasFloat routines # ###################### -# legacy stuff, to be removed -_multrimat!(C, A, B) = _trimul!(C, A, B) -_mulmattri!(C, A, B) = _trimul!(C, A, B) -_uconvert_copyto!(c, b, oA) = (c .= Ref(oA) .\ b) -_uconvert_copyto!(c::AbstractArray{T}, b::AbstractArray{T}, _) where {T} = copyto!(c, b) - # which triangle to use of the underlying data uplo_char(::UpperOrUnitUpperTriangular) = 'U' uplo_char(::LowerOrUnitLowerTriangular) = 'L' From 6ea6ddd00e556d24b1e23b5a918227a14e75d5a5 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Tue, 25 Jul 2023 11:59:28 -0400 Subject: [PATCH 046/413] print `@time` msg into print buffer (#50665) (cherry picked from commit 912423456dfe9f54c7454efd252a496aa1ea579f) --- base/timing.jl | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/base/timing.jl b/base/timing.jl index d166b4162db59..d089a43071e78 100644 --- a/base/timing.jl +++ b/base/timing.jl @@ -136,10 +136,14 @@ function format_bytes(bytes) # also used by InteractiveUtils end end -function time_print(io::IO, elapsedtime, bytes=0, gctime=0, allocs=0, compile_time=0, recompile_time=0, newline=false, _lpad=true) +function time_print(io::IO, elapsedtime, bytes=0, gctime=0, allocs=0, compile_time=0, recompile_time=0, newline=false; msg::Union{String,Nothing}=nothing) timestr = Ryu.writefixed(Float64(elapsedtime/1e9), 6) str = sprint() do io - _lpad && print(io, length(timestr) < 10 ? (" "^(10 - length(timestr))) : "") + if msg isa String + print(io, msg, ": ") + else + print(io, length(timestr) < 10 ? (" "^(10 - length(timestr))) : "") + end print(io, timestr, " seconds") parens = bytes != 0 || allocs != 0 || gctime > 0 || compile_time > 0 parens && print(io, " (") @@ -176,11 +180,11 @@ function time_print(io::IO, elapsedtime, bytes=0, gctime=0, allocs=0, compile_ti nothing end -function timev_print(elapsedtime, diff::GC_Diff, compile_times, _lpad) +function timev_print(elapsedtime, diff::GC_Diff, compile_times; msg::Union{String,Nothing}=nothing) allocs = gc_alloc_count(diff) compile_time = first(compile_times) recompile_time = last(compile_times) - time_print(stdout, elapsedtime, diff.allocd, diff.total_time, allocs, compile_time, recompile_time, true, _lpad) + time_print(stdout, elapsedtime, diff.allocd, diff.total_time, allocs, compile_time, recompile_time, true; msg) padded_nonzero_print(elapsedtime, "elapsed time (ns)") padded_nonzero_print(diff.total_time, "gc time (ns)") padded_nonzero_print(diff.allocd, "bytes allocated") @@ -279,9 +283,7 @@ macro time(msg, ex) ) local diff = GC_Diff(gc_num(), stats) local _msg = $(esc(msg)) - local has_msg = !isnothing(_msg) - has_msg && print(_msg, ": ") - time_print(stdout, elapsedtime, diff.allocd, diff.total_time, gc_alloc_count(diff), first(compile_elapsedtimes), last(compile_elapsedtimes), true, !has_msg) + time_print(stdout, elapsedtime, diff.allocd, diff.total_time, gc_alloc_count(diff), first(compile_elapsedtimes), last(compile_elapsedtimes), true; msg=_msg) val end end @@ -363,9 +365,7 @@ macro timev(msg, ex) ) local diff = GC_Diff(gc_num(), stats) local _msg = $(esc(msg)) - local has_msg = !isnothing(_msg) - has_msg && print(_msg, ": ") - timev_print(elapsedtime, diff, compile_elapsedtimes, !has_msg) + timev_print(elapsedtime, diff, compile_elapsedtimes; msg=_msg) val end end From d673a25b23b335bc778c3cfea9e0c6fa71738f99 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Tue, 25 Jul 2023 16:31:27 -0300 Subject: [PATCH 047/413] Avoid generic call in most cases for getproperty (#50523) More generic than https://github.com/JuliaLang/julia/pull/50444. Should we keep the boundscheck on the getfield since we got the index from the runtime itself? (cherry picked from commit 207c09a6b1e22fe6148de664f1e718c06faf12fb) --- src/codegen.cpp | 29 +++++++++++++++++++++++++---- test/compiler/codegen.jl | 16 ++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index 04f7564dd3e33..d11ba8cb851ec 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -1099,6 +1099,18 @@ static const auto jlgetnthfieldchecked_func = new JuliaFunction{ + XSTR(jl_field_index), + [](LLVMContext &C) { + auto T_prjlvalue = JuliaType::get_prjlvalue_ty(C); + return FunctionType::get(getInt32Ty(C), + {T_prjlvalue, T_prjlvalue, getInt32Ty(C)}, false); + }, + [](LLVMContext &C) { return AttributeList::get(C, + Attributes(C, {Attribute::NoUnwind, Attribute::ReadOnly, Attribute::WillReturn}), + AttributeSet(), + None); }, // This function can error if the third argument is 1 so don't do that. +}; static const auto jlfieldisdefinedchecked_func = new JuliaFunction{ XSTR(jl_field_isdefined_checked), [](LLVMContext &C, Type *T_size) { @@ -3828,9 +3840,9 @@ static bool emit_builtin_call(jl_codectx_t &ctx, jl_cgval_t *ret, jl_value_t *f, return true; } } - else if (fld.typ == (jl_value_t*)jl_symbol_type) { - if (jl_is_datatype(utt) && !jl_is_namedtuple_type(utt)) { // TODO: Look into this for NamedTuple - if (jl_struct_try_layout(utt) && (jl_datatype_nfields(utt) == 1)) { + else if (fld.typ == (jl_value_t*)jl_symbol_type) { // Known type but unknown symbol + if (jl_is_datatype(utt) && (utt != jl_module_type) && jl_struct_try_layout(utt)) { + if ((jl_datatype_nfields(utt) == 1 && !jl_is_namedtuple_type(utt))) { jl_svec_t *fn = jl_field_names(utt); assert(jl_svec_len(fn) == 1); Value *typ_sym = literal_pointer_val(ctx, jl_svecref(fn, 0)); @@ -3839,9 +3851,17 @@ static bool emit_builtin_call(jl_codectx_t &ctx, jl_cgval_t *ret, jl_value_t *f, *ret = emit_getfield_knownidx(ctx, obj, 0, utt, order); return true; } + else { + Value *index = ctx.builder.CreateCall(prepare_call(jlfieldindex_func), + {emit_typeof(ctx, obj, false, false), boxed(ctx, fld), ConstantInt::get(getInt32Ty(ctx.builder.getContext()), 0)}); + Value *cond = ctx.builder.CreateICmpNE(index, ConstantInt::get(getInt32Ty(ctx.builder.getContext()), -1)); + emit_hasnofield_error_ifnot(ctx, cond, utt->name->name, fld); + Value *idx2 = ctx.builder.CreateAdd(ctx.builder.CreateIntCast(index, ctx.types().T_size, false), ConstantInt::get(ctx.types().T_size, 1)); // getfield_unknown is 1 based + if (emit_getfield_unknownidx(ctx, ret, obj, idx2, utt, jl_false, order)) + return true; + } } } - // TODO: generic getfield func with more efficient calling convention return false; } @@ -9093,6 +9113,7 @@ static void init_jit_functions(void) add_named_global("jl_adopt_thread", &jl_adopt_thread); add_named_global(jlgetcfunctiontrampoline_func, &jl_get_cfunction_trampoline); add_named_global(jlgetnthfieldchecked_func, &jl_get_nth_field_checked); + add_named_global(jlfieldindex_func, &jl_field_index); add_named_global(diff_gc_total_bytes_func, &jl_gc_diff_total_bytes); add_named_global(sync_gc_total_bytes_func, &jl_gc_sync_total_bytes); add_named_global(jlarray_data_owner_func, &jl_array_data_owner); diff --git a/test/compiler/codegen.jl b/test/compiler/codegen.jl index 85013ce30d2ca..26d9f0c08e797 100644 --- a/test/compiler/codegen.jl +++ b/test/compiler/codegen.jl @@ -832,3 +832,19 @@ let res = @timed issue50317() @test res.bytes == 0 return res # must return otherwise the compiler may eliminate the result entirely end +struct Wrapper50317_2 + lock::ReentrantLock + fun::Vector{Int} +end +const MONITOR50317_2 = Wrapper50317_2(ReentrantLock(),[1]) +issue50317_2() = @noinline MONITOR50317.lock +issue50317_2() +let res = @timed issue50317_2() + @test res.bytes == 0 + return res +end +const a50317 = (b=3,) +let res = @timed a50317[:b] + @test res.bytes == 0 + return res +end From 291dc6b01506507fd1489be45cf34c628bfa65d3 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Wed, 26 Jul 2023 15:40:55 -0400 Subject: [PATCH 048/413] `versioninfo()`: include build info and unofficial warning (#50635) (cherry picked from commit c43e5a10be27b7f93b5368875aa1d2596b4d4947) --- .../InteractiveUtils/src/InteractiveUtils.jl | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/stdlib/InteractiveUtils/src/InteractiveUtils.jl b/stdlib/InteractiveUtils/src/InteractiveUtils.jl index 25f06250c3f8f..6cbfc23ac905d 100644 --- a/stdlib/InteractiveUtils/src/InteractiveUtils.jl +++ b/stdlib/InteractiveUtils/src/InteractiveUtils.jl @@ -99,8 +99,25 @@ function versioninfo(io::IO=stdout; verbose::Bool=false) if !isempty(Base.GIT_VERSION_INFO.commit_short) println(io, "Commit $(Base.GIT_VERSION_INFO.commit_short) ($(Base.GIT_VERSION_INFO.date_string))") end - if Base.isdebugbuild() - println(io, "DEBUG build") + official_release = Base.TAGGED_RELEASE_BANNER == "Official https://julialang.org/ release" + if Base.isdebugbuild() || !isempty(Base.TAGGED_RELEASE_BANNER) || (Base.GIT_VERSION_INFO.tagged_commit && !official_release) + println(io, "Build Info:") + if Base.isdebugbuild() + println(io, " DEBUG build") + end + if !isempty(Base.TAGGED_RELEASE_BANNER) + println(io, " ", Base.TAGGED_RELEASE_BANNER) + end + if Base.GIT_VERSION_INFO.tagged_commit && !official_release + println(io, + """ + + 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 + """ + ) + end end println(io, "Platform Info:") println(io, " OS: ", Sys.iswindows() ? "Windows" : Sys.isapple() ? From 528d4ed7eaf8f3096ac39d2da965c0f7b83c4d35 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Thu, 27 Jul 2023 08:09:58 -0300 Subject: [PATCH 049/413] Make reinterpret specialize fully. (#50670) Fixes https://github.com/JuliaLang/julia/issues/50612 The issue here was the reinterpret change made a bunch of operations like `Core.bitcast(UInt64,24)` not fold, even though they are fully known at compile time. That made `UInt32(Char)` not inline which then caused the regression. (cherry picked from commit dc064683087d017927381e64c38bd162aea47b4e) --- base/essentials.jl | 4 ++-- test/compiler/inline.jl | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/base/essentials.jl b/base/essentials.jl index 68dd0c06d646f..ad6e02cab145c 100644 --- a/base/essentials.jl +++ b/base/essentials.jl @@ -571,8 +571,8 @@ julia> reinterpret(Tuple{UInt16, UInt8}, (0x01, 0x0203)) otherwise be prevented by the type's constructors and methods. Unexpected behavior may result without additional validation. """ -function reinterpret(Out::Type, x::In) where {In} - if isprimitivetype(Out) && isprimitivetype(In) +function reinterpret(::Type{Out}, x) where {Out} + if isprimitivetype(Out) && isprimitivetype(typeof(x)) return bitcast(Out, x) end # only available when Base is fully loaded. diff --git a/test/compiler/inline.jl b/test/compiler/inline.jl index be821a88f00cc..3bc7ab5ccbc82 100644 --- a/test/compiler/inline.jl +++ b/test/compiler/inline.jl @@ -2061,3 +2061,7 @@ let src = code_typed1((Union{DataType,UnionAll},); interp=NoCompileSigInvokes()) (x.args[1]::MethodInstance).specTypes == Tuple{typeof(no_compile_sig_invokes),UnionAll} end == 1 end + +# https://github.com/JuliaLang/julia/issues/50612 +f50612(x) = UInt32(x) +@test all(!isinvoke(:UInt32),get_code(f50612,Tuple{Char})) From 21fe72332bfaa0c81881a95d872a4abe5dce6388 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Thu, 27 Jul 2023 13:35:04 -0400 Subject: [PATCH 050/413] include `--pkgimage=no` caches for stdlibs (#50666) (cherry picked from commit 62605cc40f51f5a921e5a9bdced1821afd49183f) --- pkgimage.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgimage.mk b/pkgimage.mk index 0803a188851bb..8b127173b4e05 100644 --- a/pkgimage.mk +++ b/pkgimage.mk @@ -37,11 +37,13 @@ $1_SRCS := $$(shell find $$(build_datarootdir)/julia/stdlib/$$(VERSDIR)/$1/src - $$(wildcard $$(build_prefix)/manifest/$$(VERSDIR)/$1) $$(BUILDDIR)/stdlib/$1.release.image: $$($1_SRCS) $$(addsuffix .release.image,$$(addprefix $$(BUILDDIR)/stdlib/,$2)) $(build_private_libdir)/sys.$(SHLIB_EXT) @$$(call PRINT_JULIA, $$(call spawn,$$(JULIA_EXECUTABLE)) --startup-file=no --check-bounds=yes -e 'Base.compilecache(Base.identify_package("$1"))') + @$$(call PRINT_JULIA, $$(call spawn,$$(JULIA_EXECUTABLE)) --startup-file=no --pkgimage=no -e 'Base.compilecache(Base.identify_package("$1"))') @$$(call PRINT_JULIA, $$(call spawn,$$(JULIA_EXECUTABLE)) --startup-file=no -e 'Base.compilecache(Base.identify_package("$1"))') touch $$@ cache-release-$1: $$(BUILDDIR)/stdlib/$1.release.image $$(BUILDDIR)/stdlib/$1.debug.image: $$($1_SRCS) $$(addsuffix .debug.image,$$(addprefix $$(BUILDDIR)/stdlib/,$2)) $(build_private_libdir)/sys-debug.$(SHLIB_EXT) @$$(call PRINT_JULIA, $$(call spawn,$$(JULIA_EXECUTABLE)) --startup-file=no --check-bounds=yes -e 'Base.compilecache(Base.identify_package("$1"))') + @$$(call PRINT_JULIA, $$(call spawn,$$(JULIA_EXECUTABLE)) --startup-file=no --pkgimage=no -e 'Base.compilecache(Base.identify_package("$1"))') @$$(call PRINT_JULIA, $$(call spawn,$$(JULIA_EXECUTABLE)) --startup-file=no -e 'Base.compilecache(Base.identify_package("$1"))') cache-debug-$1: $$(BUILDDIR)/stdlib/$1.debug.image .SECONDARY: $$(BUILDDIR)/stdlib/$1.release.image $$(BUILDDIR)/stdlib/$1.debug.image From 821f6a583195c0c5a174daf47b15ec15a98ecbad Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Wed, 2 Aug 2023 19:22:32 -0400 Subject: [PATCH 051/413] effects: fix `:nothrow` modeling of `getglobal` (#50765) --- base/compiler/tfuncs.jl | 21 ++++++++++----------- test/compiler/effects.jl | 12 ++++++++++++ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/base/compiler/tfuncs.jl b/base/compiler/tfuncs.jl index f5690f4e5b8d6..bc5c4240ac222 100644 --- a/base/compiler/tfuncs.jl +++ b/base/compiler/tfuncs.jl @@ -2347,19 +2347,18 @@ function getfield_effects(𝕃::AbstractLattice, arginfo::ArgInfo, @nospecialize end function getglobal_effects(argtypes::Vector{Any}, @nospecialize(rt)) + 2 ≤ length(argtypes) ≤ 3 || return EFFECTS_THROWS consistent = inaccessiblememonly = ALWAYS_FALSE nothrow = false - if length(argtypes) ≥ 2 - M, s = argtypes[1], argtypes[2] - if getglobal_nothrow(M, s) - nothrow = true - # typeasserts below are already checked in `getglobal_nothrow` - Mval, sval = (M::Const).val::Module, (s::Const).val::Symbol - if isconst(Mval, sval) - consistent = ALWAYS_TRUE - if is_mutation_free_argtype(rt) - inaccessiblememonly = ALWAYS_TRUE - end + M, s = argtypes[1], argtypes[2] + if (length(argtypes) == 3 ? getglobal_nothrow(M, s, argtypes[3]) : getglobal_nothrow(M, s)) + nothrow = true + # typeasserts below are already checked in `getglobal_nothrow` + Mval, sval = (M::Const).val::Module, (s::Const).val::Symbol + if isconst(Mval, sval) + consistent = ALWAYS_TRUE + if is_mutation_free_argtype(rt) + inaccessiblememonly = ALWAYS_TRUE end end end diff --git a/test/compiler/effects.jl b/test/compiler/effects.jl index a4b21da523a8e..2cf421073a166 100644 --- a/test/compiler/effects.jl +++ b/test/compiler/effects.jl @@ -998,3 +998,15 @@ f50198() = (hf50198(Ref(:x)[]); nothing) f50311(x, s) = Symbol(s) g50311(x) = Val{f50311((1.0, x), "foo")}() @test fully_eliminated(g50311, Tuple{Float64}) + +# getglobal effects +const my_defined_var = 42 +@test Base.infer_effects() do + getglobal(@__MODULE__, :my_defined_var, :monotonic) +end |> Core.Compiler.is_foldable_nothrow +@test Base.infer_effects() do + getglobal(@__MODULE__, :my_defined_var, :foo) +end |> !Core.Compiler.is_nothrow +@test Base.infer_effects() do + getglobal(@__MODULE__, :my_defined_var, :foo, nothing) +end |> !Core.Compiler.is_nothrow From f10c4618e5e84b06dfd000c9eec3b27582f18527 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Thu, 3 Aug 2023 06:56:24 -0400 Subject: [PATCH 052/413] irinterp: refine `:nothrow` only when it is not proved yet (#50764) This makes irinterp not override `:nothrow=true` that are assumed by `Base.@assume_effects`. --- base/compiler/abstractinterpretation.jl | 7 +++++-- test/compiler/effects.jl | 13 +++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 0cf3e6c00a1b7..3c36057bb19b5 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -1158,8 +1158,11 @@ function semi_concrete_eval_call(interp::AbstractInterpreter, # that are newly resovled by irinterp # state = InliningState(interp) # ir = ssa_inlining_pass!(irsv.ir, state, propagate_inbounds(irsv)) - new_effects = Effects(result.effects; nothrow) - return ConstCallResults(rt, SemiConcreteResult(mi, ir, new_effects), new_effects, mi) + effects = result.effects + if !is_nothrow(effects) + effects = Effects(effects; nothrow) + end + return ConstCallResults(rt, SemiConcreteResult(mi, ir, effects), effects, mi) end end end diff --git a/test/compiler/effects.jl b/test/compiler/effects.jl index 2cf421073a166..44554690b1b98 100644 --- a/test/compiler/effects.jl +++ b/test/compiler/effects.jl @@ -1010,3 +1010,16 @@ end |> !Core.Compiler.is_nothrow @test Base.infer_effects() do getglobal(@__MODULE__, :my_defined_var, :foo, nothing) end |> !Core.Compiler.is_nothrow + +# irinterp should refine `:nothrow` information only if profitable +Base.@assume_effects :nothrow function irinterp_nothrow_override(x, y) + z = sin(y) + if x + return "julia" + end + return z +end +@test Base.infer_effects((Float64,)) do y + isinf(y) && return zero(y) + irinterp_nothrow_override(true, y) +end |> Core.Compiler.is_nothrow From 2a70dac9bcf31a8d93544c5d15d0811e02ad791e Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Thu, 3 Aug 2023 11:36:54 -0400 Subject: [PATCH 053/413] ssair: `compact!` constant `PiNode` (#50768) Currently the `compact!`-ion pass fails to fold constant `PiNode` like `PiNode(0.0, Const(0.0))`. This commit fixes it up. --- base/compiler/ssair/ir.jl | 5 +++-- test/compiler/inline.jl | 2 +- test/compiler/irutils.jl | 7 +++++-- test/compiler/ssair.jl | 12 +++++++++++- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/base/compiler/ssair/ir.jl b/base/compiler/ssair/ir.jl index d133b88721238..be8d5c3e9e932 100644 --- a/base/compiler/ssair/ir.jl +++ b/base/compiler/ssair/ir.jl @@ -1359,8 +1359,9 @@ function process_node!(compact::IncrementalCompact, result_idx::Int, inst::Instr return result_idx end elseif !isa(pi_val, AnySSAValue) && !isa(pi_val, GlobalRef) - valtyp = isa(pi_val, QuoteNode) ? typeof(pi_val.value) : typeof(pi_val) - if valtyp === stmt.typ + pi_val′ = isa(pi_val, QuoteNode) ? pi_val.value : pi_val + stmttyp = stmt.typ + if isa(stmttyp, Const) ? pi_val′ === stmttyp.val : typeof(pi_val′) === stmttyp ssa_rename[idx] = pi_val return result_idx end diff --git a/test/compiler/inline.jl b/test/compiler/inline.jl index 3bc7ab5ccbc82..638f7e0185568 100644 --- a/test/compiler/inline.jl +++ b/test/compiler/inline.jl @@ -1130,7 +1130,7 @@ function f44200() x44200 end let src = code_typed1(f44200) - @test_broken count(x -> isa(x, Core.PiNode), src.code) == 0 + @test count(x -> isa(x, Core.PiNode), src.code) == 0 end # Test that peeling off one case from (::Any) doesn't introduce diff --git a/test/compiler/irutils.jl b/test/compiler/irutils.jl index 00de9b2472de4..c2f6fd3314c1b 100644 --- a/test/compiler/irutils.jl +++ b/test/compiler/irutils.jl @@ -37,8 +37,11 @@ isinvoke(y) = @nospecialize(x) -> isinvoke(y, x) isinvoke(sym::Symbol, @nospecialize(x)) = isinvoke(mi->mi.def.name===sym, x) isinvoke(pred::Function, @nospecialize(x)) = isexpr(x, :invoke) && pred(x.args[1]::MethodInstance) -function fully_eliminated(@nospecialize args...; retval=(@__FILE__), kwargs...) - code = code_typed1(args...; kwargs...).code +fully_eliminated(@nospecialize args...; retval=(@__FILE__), kwargs...) = + fully_eliminated(code_typed1(args...; kwargs...); retval) +fully_eliminated(src::CodeInfo; retval=(@__FILE__)) = fully_eliminated(src.code; retval) +fully_eliminated(ir::IRCode; retval=(@__FILE__)) = fully_eliminated(ir.stmts.inst; retval) +function fully_eliminated(code::Vector{Any}; retval=(@__FILE__), kwargs...) if retval !== (@__FILE__) length(code) == 1 || return false code1 = code[1] diff --git a/test/compiler/ssair.jl b/test/compiler/ssair.jl index 98cab349b46ee..ea833fa4ce5ff 100644 --- a/test/compiler/ssair.jl +++ b/test/compiler/ssair.jl @@ -5,7 +5,7 @@ using Core.IR const Compiler = Core.Compiler using .Compiler: CFG, BasicBlock, NewSSAValue -include(normpath(@__DIR__, "irutils.jl")) +include("irutils.jl") make_bb(preds, succs) = BasicBlock(Compiler.StmtRange(0, 0), preds, succs) @@ -593,6 +593,16 @@ let ci = make_ci([ @test Core.Compiler.verify_ir(ir) === nothing end +# compact constant PiNode +let ci = make_ci(Any[ + PiNode(0.0, Const(0.0)) + ReturnNode(SSAValue(1)) + ]) + ir = Core.Compiler.inflate_ir(ci) + ir = Core.Compiler.compact!(ir) + @test fully_eliminated(ir) +end + # insert_node! with new instruction with flag computed let ir = Base.code_ircode((Int,Int); optimize_until="inlining") do a, b a^b From 9e9f67da0760f17e59df59df56541b2be8240c4d Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Thu, 3 Aug 2023 14:03:42 -0400 Subject: [PATCH 054/413] optimizer: move inlineable constants into argument position during `compact!`-ion (#50767) In code like below ```julia Base.@assume_effects :nothrow function erase_before_inlining(x, y) z = sin(y) if x return "julia" end return z end let y::Float64 length(erase_before_inlining(true, y)) end ``` the constant prop' can figure out the constant return type of `erase_before_inlining(true, y)` while it is profitable not to inline expand it since otherwise we left some `!:nothrow` callees there (xref: https://github.com/JuliaLang/julia/pull/47305). In order to workaround this problem, this commit makes `compact!`move inlineable constants into argument positions so that the such "inlineable, but safe as a whole" calls to be erased during compaction. This should give us general compile-time performance improvement too as we no longer need to expand the IR for those calls. Requires: - #50764 - #50765 - #50768 --- base/compiler/ssair/ir.jl | 7 ++++++- test/compiler/EscapeAnalysis/interprocedural.jl | 6 ++---- test/compiler/inline.jl | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/base/compiler/ssair/ir.jl b/base/compiler/ssair/ir.jl index be8d5c3e9e932..5c731205366f0 100644 --- a/base/compiler/ssair/ir.jl +++ b/base/compiler/ssair/ir.jl @@ -1338,7 +1338,12 @@ function process_node!(compact::IncrementalCompact, result_idx::Int, inst::Instr return result_idx end end - ssa_rename[idx] = SSAValue(result_idx) + typ = inst[:type] + if isa(typ, Const) && is_inlineable_constant(typ.val) + ssa_rename[idx] = quoted(typ.val) + else + ssa_rename[idx] = SSAValue(result_idx) + end result[result_idx][:inst] = stmt result_idx += 1 elseif isa(stmt, PiNode) diff --git a/test/compiler/EscapeAnalysis/interprocedural.jl b/test/compiler/EscapeAnalysis/interprocedural.jl index 756e5489ed637..15d2a878d253b 100644 --- a/test/compiler/EscapeAnalysis/interprocedural.jl +++ b/test/compiler/EscapeAnalysis/interprocedural.jl @@ -98,10 +98,8 @@ identity_if_string(x::SafeRef) = nothing let result = code_escapes((SafeRef{String},); optimize=false) do x identity_if_string(x) end - i = only(findall(iscall((result.ir, identity_if_string)), result.ir.stmts.inst)) - r = only(findall(isreturn, result.ir.stmts.inst)) - @test !has_thrown_escape(result.state[Argument(2)], i) - @test !has_return_escape(result.state[Argument(2)], r) + @test !has_thrown_escape(result.state[Argument(2)]) + @test !has_return_escape(result.state[Argument(2)]) end let result = code_escapes((Union{SafeRef{String},Vector{String}},); optimize=false) do x identity_if_string(x) diff --git a/test/compiler/inline.jl b/test/compiler/inline.jl index 638f7e0185568..be9a2e98e2dc3 100644 --- a/test/compiler/inline.jl +++ b/test/compiler/inline.jl @@ -2065,3 +2065,20 @@ end # https://github.com/JuliaLang/julia/issues/50612 f50612(x) = UInt32(x) @test all(!isinvoke(:UInt32),get_code(f50612,Tuple{Char})) + +# move inlineable constant values into statement position during `compact!`-ion +# so that we don't inline DCE-eligibile calls +Base.@assume_effects :nothrow function erase_before_inlining(x, y) + z = sin(y) + if x + return "julia" + end + return z +end +@test fully_eliminated((Float64,); retval=5) do y + length(erase_before_inlining(true, y)) +end +@test fully_eliminated((Float64,); retval=(5,5)) do y + z = erase_before_inlining(true, y) + return length(z), length(z) +end From 80ccc374635f00f1280074e27c2893ec2b6fcbee Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Sat, 5 Aug 2023 12:15:02 +0900 Subject: [PATCH 055/413] inference: continue const-prop' when concrete-eval returns non-inlineable (#50618) --- base/compiler/abstractinterpretation.jl | 43 +++++++++++++++++-------- test/compiler/inference.jl | 13 ++++++++ test/compiler/inline.jl | 14 ++++++++ 3 files changed, 57 insertions(+), 13 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 3c36057bb19b5..48b6a234d13ba 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -773,11 +773,13 @@ struct ConstCallResults const_result::ConstResult effects::Effects edge::MethodInstance - ConstCallResults(@nospecialize(rt), - const_result::ConstResult, - effects::Effects, - edge::MethodInstance) = - new(rt, const_result, effects, edge) + function ConstCallResults( + @nospecialize(rt), + const_result::ConstResult, + effects::Effects, + edge::MethodInstance) + return new(rt, const_result, effects, edge) + end end function abstract_call_method_with_const_args(interp::AbstractInterpreter, @@ -791,24 +793,33 @@ function abstract_call_method_with_const_args(interp::AbstractInterpreter, return nothing end eligibility = concrete_eval_eligible(interp, f, result, arginfo, sv) + concrete_eval_result = nothing if eligibility === :concrete_eval - return concrete_eval_call(interp, f, result, arginfo, sv, invokecall) + concrete_eval_result = concrete_eval_call(interp, f, result, arginfo, sv, invokecall) + # if we don't inline the result of this concrete evaluation, + # give const-prop' a chance to inline a better method body + if !may_optimize(interp) || ( + may_inline_concrete_result(concrete_eval_result.const_result::ConcreteResult) || + concrete_eval_result.rt === Bottom) # unless this call deterministically throws and thus is non-inlineable + return concrete_eval_result + end + # TODO allow semi-concrete interp for this call? end mi = maybe_get_const_prop_profitable(interp, result, f, arginfo, si, match, sv) - mi === nothing && return nothing + mi === nothing && return concrete_eval_result if is_constprop_recursed(result, mi, sv) add_remark!(interp, sv, "[constprop] Edge cycle encountered") return nothing end # try semi-concrete evaluation if eligibility === :semi_concrete_eval - res = semi_concrete_eval_call(interp, mi, result, arginfo, sv) - if res !== nothing - return res + irinterp_result = semi_concrete_eval_call(interp, mi, result, arginfo, sv) + if irinterp_result !== nothing + return irinterp_result end end # try constant prop' - return const_prop_call(interp, mi, result, arginfo, sv) + return const_prop_call(interp, mi, result, arginfo, sv, concrete_eval_result) end function const_prop_enabled(interp::AbstractInterpreter, sv::AbsIntState, match::MethodMatch) @@ -900,7 +911,7 @@ function concrete_eval_call(interp::AbstractInterpreter, Core._call_in_world_total(world, f, args...) catch # The evaluation threw. By :consistent-cy, we're guaranteed this would have happened at runtime - return ConstCallResults(Union{}, ConcreteResult(edge, result.effects), result.effects, edge) + return ConstCallResults(Bottom, ConcreteResult(edge, result.effects), result.effects, edge) end return ConstCallResults(Const(value), ConcreteResult(edge, EFFECTS_TOTAL, value), EFFECTS_TOTAL, edge) end @@ -1170,7 +1181,8 @@ function semi_concrete_eval_call(interp::AbstractInterpreter, end function const_prop_call(interp::AbstractInterpreter, - mi::MethodInstance, result::MethodCallResult, arginfo::ArgInfo, sv::AbsIntState) + mi::MethodInstance, result::MethodCallResult, arginfo::ArgInfo, sv::AbsIntState, + concrete_eval_result::Union{Nothing,ConstCallResults}=nothing) inf_cache = get_inference_cache(interp) 𝕃ᵢ = typeinf_lattice(interp) inf_result = cache_lookup(𝕃ᵢ, mi, arginfo.argtypes, inf_cache) @@ -1193,6 +1205,11 @@ function const_prop_call(interp::AbstractInterpreter, return nothing end @assert inf_result.result !== nothing + if concrete_eval_result !== nothing + # override return type and effects with concrete evaluation result if available + inf_result.result = concrete_eval_result.rt + inf_result.ipo_effects = concrete_eval_result.effects + end else # found the cache for this constant prop' if inf_result.result === nothing diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index cb16cb604881b..2ef172b3e3643 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -5030,3 +5030,16 @@ h_issue50544(x::T) where T = g_issue50544(f_issue50544(T, 1), f_issue50544(T, 2, let x = Issue50544((1, Issue50544((2.0, 'x')))) @test only(Base.return_types(h_issue50544, (typeof(x),))) == Type{Issue50544{Tuple{Int,Float64}}} end + +# override const-prop' return type with the concrete-eval result +# if concrete-eval returns non-inlineable constant +Base.@assume_effects :foldable function continue_const_prop(i, j) + chars = map(Char, i:j) + String(chars) +end +@test Base.return_types() do + Val(length(continue_const_prop(1, 5))) +end |> only === Val{5} +@test fully_eliminated() do + length(continue_const_prop(1, 5)) +end diff --git a/test/compiler/inline.jl b/test/compiler/inline.jl index be9a2e98e2dc3..65920f16b3da7 100644 --- a/test/compiler/inline.jl +++ b/test/compiler/inline.jl @@ -2082,3 +2082,17 @@ end z = erase_before_inlining(true, y) return length(z), length(z) end + +# continue const-prop' when concrete-eval result is too big +const THE_BIG_TUPLE_2 = ntuple(identity, 1024) +return_the_big_tuple2(a) = (a, THE_BIG_TUPLE_2) +let src = code_typed1() do + return return_the_big_tuple2(42)[2] + end + @test count(isinvoke(:return_the_big_tuple2), src.code) == 0 +end +let src = code_typed1() do + return iterate(("1", '2'), 1) + end + @test count(isinvoke(:iterate), src.code) == 0 +end From ffa2f9a50e0c40d31e8bd8ac8020abbfa3ab60fe Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Wed, 9 Aug 2023 15:19:32 -0400 Subject: [PATCH 056/413] rename env var JULIA_USE_NEW_PARSER -> JULIA_USE_FLISP_PARSER (#50849) (cherry picked from commit 1116d7c23805a264457ef9c35e5cff4d83ef6e29) Co-authored-by: Navid C. Constantinou --- NEWS.md | 2 +- base/Base.jl | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/NEWS.md b/NEWS.md index 112b229c3cf7e..95e0bf5ff2b38 100644 --- a/NEWS.md +++ b/NEWS.md @@ -5,7 +5,7 @@ New language features --------------------- * JuliaSyntax.jl is now used as the default parser, providing better diagnostics and faster - parsing. Set environment variable `JULIA_USE_NEW_PARSER` to `0` to switch back to the old + parsing. Set environment variable `JULIA_USE_FLISP_PARSER` to `1` to switch back to the old parser if necessary (and if you find this necessary, please file an issue) ([#46372]). * `⥺` (U+297A, `\leftarrowsubset`) and `⥷` (U+2977, `\leftarrowless`) may now be used as binary operators with arrow precedence. ([#45962]) diff --git a/base/Base.jl b/base/Base.jl index 1fc20293aa384..0ec70add2a2c4 100644 --- a/base/Base.jl +++ b/base/Base.jl @@ -604,7 +604,7 @@ function __init__() _require_world_age[] = get_world_counter() # Prevent spawned Julia process from getting stuck waiting on Tracy to connect. delete!(ENV, "JULIA_WAIT_FOR_TRACY") - if get_bool_env("JULIA_USE_NEW_PARSER", true) === true + if get_bool_env("JULIA_USE_FLISP_PARSER", false) === false JuliaSyntax.enable_in_core!() end nothing From 47993880262cd7d01bae57d9a988557ff253bf78 Mon Sep 17 00:00:00 2001 From: Sebastian Stock <42280794+sostock@users.noreply.github.com> Date: Sat, 29 Jul 2023 18:39:50 +0200 Subject: [PATCH 057/413] Attach `tanpi` docstring to method (#50689) (cherry picked from commit 5c69561b0028ae97fc120b6a4714bfc2eb11a947) --- base/special/trig.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/base/special/trig.jl b/base/special/trig.jl index 5b2a23688ca6b..6463560caa3e5 100644 --- a/base/special/trig.jl +++ b/base/special/trig.jl @@ -895,7 +895,6 @@ Compute ``\\tan(\\pi x)`` more accurately than `tan(pi*x)`, especially for large See also [`tand`](@ref), [`sinpi`](@ref), [`cospi`](@ref), [`sincospi`](@ref). """ - function tanpi(_x::T) where T<:Union{IEEEFloat, Rational} # This is modified from sincospi. # Would it be faster or more accurate to make a tanpi_kernel? From 6a8559d16a255f6e88563675478c448d7ddc7383 Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Sat, 29 Jul 2023 18:59:04 +0200 Subject: [PATCH 058/413] Fix rdiv of complex lhs by real factorizations (#50671) Co-authored-by: Martin Holters (cherry picked from commit 210c5b526b828a2335232300252b2f113b41ccb5) --- stdlib/LinearAlgebra/src/factorization.jl | 56 ++++++++++++----------- stdlib/LinearAlgebra/src/hessenberg.jl | 1 - stdlib/LinearAlgebra/src/lu.jl | 2 - stdlib/LinearAlgebra/test/hessenberg.jl | 4 +- stdlib/LinearAlgebra/test/lu.jl | 9 ++++ 5 files changed, 42 insertions(+), 30 deletions(-) diff --git a/stdlib/LinearAlgebra/src/factorization.jl b/stdlib/LinearAlgebra/src/factorization.jl index 8c35a23e6b6d5..6f5a631cf9164 100644 --- a/stdlib/LinearAlgebra/src/factorization.jl +++ b/stdlib/LinearAlgebra/src/factorization.jl @@ -137,6 +137,12 @@ function Base.show(io::IO, ::MIME"text/plain", x::TransposeFactorization) show(io, MIME"text/plain"(), parent(x)) end +function (\)(F::Factorization, B::AbstractVecOrMat) + require_one_based_indexing(B) + TFB = typeof(oneunit(eltype(F)) \ oneunit(eltype(B))) + ldiv!(F, copy_similar(B, TFB)) +end +(\)(F::TransposeFactorization, B::AbstractVecOrMat) = conj!(adjoint(F.parent) \ conj.(B)) # With a real lhs and complex rhs with the same precision, we can reinterpret # the complex rhs as a real rhs with twice the number of columns or rows function (\)(F::Factorization{T}, B::VecOrMat{Complex{T}}) where {T<:BlasReal} @@ -151,32 +157,6 @@ end (\)(F::AdjointFactorization{T}, B::VecOrMat{Complex{T}}) where {T<:BlasReal} = @invoke \(F::typeof(F), B::VecOrMat) -function (/)(B::VecOrMat{Complex{T}}, F::Factorization{T}) where {T<:BlasReal} - require_one_based_indexing(B) - x = rdiv!(copy(reinterpret(T, B)), F) - return copy(reinterpret(Complex{T}, x)) -end -# don't do the reinterpretation for [Adjoint/Transpose]Factorization -(/)(B::VecOrMat{Complex{T}}, F::TransposeFactorization{T}) where {T<:BlasReal} = - conj!(adjoint(parent(F)) \ conj.(B)) -(/)(B::VecOrMat{Complex{T}}, F::AdjointFactorization{T}) where {T<:BlasReal} = - @invoke /(B::VecOrMat{Complex{T}}, F::Factorization{T}) - -function (\)(F::Factorization, B::AbstractVecOrMat) - require_one_based_indexing(B) - TFB = typeof(oneunit(eltype(F)) \ oneunit(eltype(B))) - ldiv!(F, copy_similar(B, TFB)) -end -(\)(F::TransposeFactorization, B::AbstractVecOrMat) = conj!(adjoint(F.parent) \ conj.(B)) - -function (/)(B::AbstractMatrix, F::Factorization) - require_one_based_indexing(B) - TFB = typeof(oneunit(eltype(B)) / oneunit(eltype(F))) - rdiv!(copy_similar(B, TFB), F) -end -(/)(A::AbstractMatrix, F::AdjointFactorization) = adjoint(adjoint(F) \ adjoint(A)) -(/)(A::AbstractMatrix, F::TransposeFactorization) = transpose(transpose(F) \ transpose(A)) - function ldiv!(Y::AbstractVector, A::Factorization, B::AbstractVector) require_one_based_indexing(Y, B) m, n = size(A) @@ -200,3 +180,27 @@ function ldiv!(Y::AbstractMatrix, A::Factorization, B::AbstractMatrix) return ldiv!(A, Y) end end + +function (/)(B::AbstractMatrix, F::Factorization) + require_one_based_indexing(B) + TFB = typeof(oneunit(eltype(B)) / oneunit(eltype(F))) + rdiv!(copy_similar(B, TFB), F) +end +# reinterpretation trick for complex lhs and real factorization +function (/)(B::Union{Matrix{Complex{T}},AdjOrTrans{Complex{T},Vector{Complex{T}}}}, F::Factorization{T}) where {T<:BlasReal} + require_one_based_indexing(B) + x = rdiv!(copy(reinterpret(T, B)), F) + return copy(reinterpret(Complex{T}, x)) +end +# don't do the reinterpretation for [Adjoint/Transpose]Factorization +(/)(B::Union{Matrix{Complex{T}},AdjOrTrans{Complex{T},Vector{Complex{T}}}}, F::TransposeFactorization{T}) where {T<:BlasReal} = + @invoke /(B::AbstractMatrix, F::Factorization) +(/)(B::Matrix{Complex{T}}, F::AdjointFactorization{T}) where {T<:BlasReal} = + @invoke /(B::AbstractMatrix, F::Factorization) +(/)(B::Adjoint{Complex{T},Vector{Complex{T}}}, F::AdjointFactorization{T}) where {T<:BlasReal} = + (F' \ B')' +(/)(B::Transpose{Complex{T},Vector{Complex{T}}}, F::TransposeFactorization{T}) where {T<:BlasReal} = + transpose(transpose(F) \ transpose(B)) + +rdiv!(B::AbstractMatrix, A::TransposeFactorization) = transpose(ldiv!(A.parent, transpose(B))) +rdiv!(B::AbstractMatrix, A::AdjointFactorization) = adjoint(ldiv!(A.parent, adjoint(B))) diff --git a/stdlib/LinearAlgebra/src/hessenberg.jl b/stdlib/LinearAlgebra/src/hessenberg.jl index 8b45a116c1a48..6f5efd1c42d16 100644 --- a/stdlib/LinearAlgebra/src/hessenberg.jl +++ b/stdlib/LinearAlgebra/src/hessenberg.jl @@ -600,7 +600,6 @@ function rdiv!(B::AbstractVecOrMat{<:Complex}, F::Hessenberg{<:Complex,<:Any,<:A end ldiv!(F::AdjointFactorization{<:Any,<:Hessenberg}, B::AbstractVecOrMat) = rdiv!(B', F')' -rdiv!(B::AbstractMatrix, F::AdjointFactorization{<:Any,<:Hessenberg}) = ldiv!(F', B')' det(F::Hessenberg) = det(F.H; shift=F.μ) logabsdet(F::Hessenberg) = logabsdet(F.H; shift=F.μ) diff --git a/stdlib/LinearAlgebra/src/lu.jl b/stdlib/LinearAlgebra/src/lu.jl index f45386fa7649c..b01ea13ca87d3 100644 --- a/stdlib/LinearAlgebra/src/lu.jl +++ b/stdlib/LinearAlgebra/src/lu.jl @@ -709,8 +709,6 @@ function ldiv!(adjA::AdjointFactorization{<:Any,<:LU{T,Tridiagonal{T,V}}}, B::Ab end rdiv!(B::AbstractMatrix, A::LU) = transpose(ldiv!(transpose(A), transpose(B))) -rdiv!(B::AbstractMatrix, A::TransposeFactorization{<:Any,<:LU}) = transpose(ldiv!(A.parent, transpose(B))) -rdiv!(B::AbstractMatrix, A::AdjointFactorization{<:Any,<:LU}) = adjoint(ldiv!(A.parent, adjoint(B))) # Conversions AbstractMatrix(F::LU) = (F.L * F.U)[invperm(F.p),:] diff --git a/stdlib/LinearAlgebra/test/hessenberg.jl b/stdlib/LinearAlgebra/test/hessenberg.jl index 61e498211ca7b..105b9f8970ec8 100644 --- a/stdlib/LinearAlgebra/test/hessenberg.jl +++ b/stdlib/LinearAlgebra/test/hessenberg.jl @@ -178,8 +178,10 @@ let n = 10 @test H \ B ≈ A \ B ≈ H \ complex(B) @test (H - I) \ B ≈ (A - I) \ B @test (H - (3+4im)I) \ B ≈ (A - (3+4im)I) \ B - @test b' / H ≈ b' / A ≈ complex.(b') / H + @test b' / H ≈ b' / A ≈ complex(b') / H + @test transpose(b) / H ≈ transpose(b) / A ≈ transpose(complex(b)) / H @test B' / H ≈ B' / A ≈ complex(B') / H + @test b' / H' ≈ complex(b)' / H' @test B' / (H - I) ≈ B' / (A - I) @test B' / (H - (3+4im)I) ≈ B' / (A - (3+4im)I) @test (H - (3+4im)I)' \ B ≈ (A - (3+4im)I)' \ B diff --git a/stdlib/LinearAlgebra/test/lu.jl b/stdlib/LinearAlgebra/test/lu.jl index 25a75e13233f0..744cc543b993e 100644 --- a/stdlib/LinearAlgebra/test/lu.jl +++ b/stdlib/LinearAlgebra/test/lu.jl @@ -391,6 +391,15 @@ end B = randn(elty, 5, 5) @test rdiv!(transform(A), transform(lu(B))) ≈ transform(C) / transform(B) end + for elty in (Float32, Float64, ComplexF64), transF in (identity, transpose), + transB in (transpose, adjoint), transT in (identity, complex) + A = randn(elty, 5, 5) + F = lu(A) + b = randn(transT(elty), 5) + @test rdiv!(transB(copy(b)), transF(F)) ≈ transB(b) / transF(F) ≈ transB(b) / transF(A) + B = randn(transT(elty), 5, 5) + @test rdiv!(copy(B), transF(F)) ≈ B / transF(F) ≈ B / transF(A) + end end @testset "transpose(A) / lu(B)' should not overwrite A (#36657)" begin From 2e714929c98e576072b3c5bfd19330d0efca3f8c Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Tue, 1 Aug 2023 15:29:33 -0400 Subject: [PATCH 059/413] only limit types in stack traces in the REPL (#50598) fixes #50575 Co-authored-by: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> (cherry picked from commit 98222572628fa67d733389cc718f2c70d45d2ea1) --- base/errorshow.jl | 6 ------ base/show.jl | 8 +++----- stdlib/REPL/src/REPL.jl | 17 +++++++++++++++-- stdlib/REPL/test/repl.jl | 11 +++++++++++ test/stacktraces.jl | 5 ++--- 5 files changed, 31 insertions(+), 16 deletions(-) diff --git a/base/errorshow.jl b/base/errorshow.jl index 81f4c9c2ee9e0..2a02747dc2a2b 100644 --- a/base/errorshow.jl +++ b/base/errorshow.jl @@ -772,9 +772,6 @@ function show_backtrace(io::IO, t::Vector) if haskey(io, :last_shown_line_infos) empty!(io[:last_shown_line_infos]) end - # this will be set to true if types in the stacktrace are truncated - limitflag = Ref(false) - io = IOContext(io, :stacktrace_types_limited => limitflag) # t is a pre-processed backtrace (ref #12856) if t isa Vector{Any} @@ -800,9 +797,6 @@ function show_backtrace(io::IO, t::Vector) # process_backtrace returns a Vector{Tuple{Frame, Int}} show_full_backtrace(io, filtered; print_linebreaks = stacktrace_linebreaks()) end - if limitflag[] - print(io, "\nSome type information was truncated. Use `show(err)` to see complete types.") - end nothing end diff --git a/base/show.jl b/base/show.jl index 45d6a502619db..b259e95e54720 100644 --- a/base/show.jl +++ b/base/show.jl @@ -2557,14 +2557,12 @@ function show_tuple_as_call(out::IO, name::Symbol, sig::Type; print_within_stacktrace(io, ")", bold=true) show_method_params(io, tv) str = String(take!(unwrapcontext(io)[1])) - if get(out, :limit, false)::Bool + typelimitflag = get(out, :stacktrace_types_limited, nothing) + if typelimitflag isa RefValue{Bool} sz = get(out, :displaysize, (typemax(Int), typemax(Int)))::Tuple{Int, Int} str_lim = type_depth_limit(str, max(sz[2], 120)) if sizeof(str_lim) < sizeof(str) - typelimitflag = get(out, :stacktrace_types_limited, nothing) - if typelimitflag !== nothing - typelimitflag[] = true - end + typelimitflag[] = true end str = str_lim end diff --git a/stdlib/REPL/src/REPL.jl b/stdlib/REPL/src/REPL.jl index 1328a87f1a77d..218f89de798c8 100644 --- a/stdlib/REPL/src/REPL.jl +++ b/stdlib/REPL/src/REPL.jl @@ -285,6 +285,19 @@ function print_response(repl::AbstractREPL, response, show_value::Bool, have_col end return nothing end + +function repl_display_error(errio::IO, @nospecialize errval) + # this will be set to true if types in the stacktrace are truncated + limitflag = Ref(false) + errio = IOContext(errio, :stacktrace_types_limited => limitflag) + Base.invokelatest(Base.display_error, errio, errval) + if limitflag[] + print(errio, "Some type information was truncated. Use `show(err)` to see complete types.") + println(errio) + end + return nothing +end + function print_response(errio::IO, response, show_value::Bool, have_color::Bool, specialdisplay::Union{AbstractDisplay,Nothing}=nothing) Base.sigatomic_begin() val, iserr = response @@ -294,7 +307,7 @@ function print_response(errio::IO, response, show_value::Bool, have_color::Bool, if iserr val = Base.scrub_repl_backtrace(val) Base.istrivialerror(val) || setglobal!(Base.MainInclude, :err, val) - Base.invokelatest(Base.display_error, errio, val) + repl_display_error(errio, val) else if val !== nothing && show_value try @@ -317,7 +330,7 @@ function print_response(errio::IO, response, show_value::Bool, have_color::Bool, try excs = Base.scrub_repl_backtrace(current_exceptions()) setglobal!(Base.MainInclude, :err, excs) - Base.invokelatest(Base.display_error, errio, excs) + repl_display_error(errio, excs) catch e # at this point, only print the name of the type as a Symbol to # minimize the possibility of further errors. diff --git a/stdlib/REPL/test/repl.jl b/stdlib/REPL/test/repl.jl index f0d5052ff9e32..20f07864a275b 100644 --- a/stdlib/REPL/test/repl.jl +++ b/stdlib/REPL/test/repl.jl @@ -1659,3 +1659,14 @@ fake_repl() do stdin_write, stdout_read, repl write(stdin_write, '\x04') Base.wait(repltask) end + +fake_repl() do stdin_write, stdout_read, repl + backend = REPL.REPLBackend() + repltask = @async REPL.run_repl(repl; backend) + write(stdin_write, + "a = UInt8(81):UInt8(160); b = view(a, 1:64); c = reshape(b, (8, 8)); d = reinterpret(reshape, Float64, c); sqrteach(a) = [sqrt(x) for x in a]; sqrteach(d)\n\"ZZZZZ\"\n") + txt = readuntil(stdout_read, "ZZZZZ") + write(stdin_write, '\x04') + wait(repltask) + @test contains(txt, "Some type information was truncated. Use `show(err)` to see complete types.") +end diff --git a/test/stacktraces.jl b/test/stacktraces.jl index 882114e71d833..5b17a0ced4058 100644 --- a/test/stacktraces.jl +++ b/test/stacktraces.jl @@ -241,8 +241,7 @@ struct F49231{a,b,c,d,e,f,g} end catch e stacktrace(catch_backtrace()) end - str = sprint(Base.show_backtrace, st, context = (:limit=>true, :color=>true, :displaysize=>(50,105))) - @test endswith(str, "to see complete types.") + str = sprint(Base.show_backtrace, st, context = (:limit=>true, :stacktrace_types_limited => Ref(false), :color=>true, :displaysize=>(50,105))) @test contains(str, "[5] \e[0m\e[1mcollect_to!\e[22m\e[0m\e[1m(\e[22m\e[90mdest\e[39m::\e[0mVector\e[90m{…}\e[39m, \e[90mitr\e[39m::\e[0mBase.Generator\e[90m{…}\e[39m, \e[90moffs\e[39m::\e[0m$Int, \e[90mst\e[39m::\e[0mTuple\e[90m{…}\e[39m\e[0m\e[1m)\e[22m\n\e[90m") st = try @@ -250,6 +249,6 @@ struct F49231{a,b,c,d,e,f,g} end catch e stacktrace(catch_backtrace()) end - str = sprint(Base.show_backtrace, st, context = (:limit=>true, :color=>true, :displaysize=>(50,132))) + str = sprint(Base.show_backtrace, st, context = (:limit=>true, :stacktrace_types_limited => Ref(false), :color=>true, :displaysize=>(50,132))) @test contains(str, "[2] \e[0m\e[1m(::$F49231{Vector, Val{…}, Vector{…}, NTuple{…}, $Int, $Int, $Int})\e[22m\e[0m\e[1m(\e[22m\e[90ma\e[39m::\e[0m$Int, \e[90mb\e[39m::\e[0m$Int, \e[90mc\e[39m::\e[0m$Int\e[0m\e[1m)\e[22m\n\e[90m") end From ac0eec2880c5f576b242065f34a7a2051111747a Mon Sep 17 00:00:00 2001 From: pchintalapudi <34727397+pchintalapudi@users.noreply.github.com> Date: Wed, 2 Aug 2023 21:51:31 +0000 Subject: [PATCH 060/413] Don't partition alwaysinline functions (#50766) (cherry picked from commit bea8c444141c9cbbf4a3f6515ce572a28be3c0a1) --- src/aotcompile.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index 1f02a014175b4..bad02bcc56e65 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -720,13 +720,18 @@ static inline bool verify_partitioning(const SmallVectorImpl &partiti gvars[gvar.second] = i+1; } } - for (auto &GV : M.globals()) { + for (auto &GV : M.global_values()) { if (GV.isDeclaration()) { if (GVNames.count(GV.getName())) { bad = true; dbgs() << "Global " << GV.getName() << " is a declaration but is in partition " << GVNames[GV.getName()] << "\n"; } } else { + if (auto F = dyn_cast(&GV)) { + // Ignore alwaysinline functions + if (F->hasFnAttribute(Attribute::AlwaysInline)) + continue; + } if (!GVNames.count(GV.getName())) { bad = true; dbgs() << "Global " << GV << " not in any partition\n"; @@ -806,8 +811,12 @@ static SmallVector partitionModule(Module &M, unsigned threads) { for (auto &G : M.global_values()) { if (G.isDeclaration()) continue; - if (isa(G)) { - partitioner.make(&G, getFunctionWeight(cast(G)).weight); + if (auto F = dyn_cast(&G)) { + // alwaysinline functions cannot be partitioned, + // they must remain in every module in order to be inlined + if (F->hasFnAttribute(Attribute::AlwaysInline)) + continue; + partitioner.make(&G, getFunctionWeight(*F).weight); } else { partitioner.make(&G, 1); } @@ -1104,6 +1113,12 @@ static void materializePreserved(Module &M, Partition &partition) { for (auto &F : M.functions()) { if (!F.isDeclaration()) { if (!Preserve.contains(&F)) { + if (F.hasFnAttribute(Attribute::AlwaysInline)) { + F.setLinkage(GlobalValue::InternalLinkage); + F.setVisibility(GlobalValue::DefaultVisibility); + F.setDSOLocal(true); + continue; + } F.deleteBody(); F.setLinkage(GlobalValue::ExternalLinkage); F.setVisibility(GlobalValue::HiddenVisibility); From aed6f5a93c63d7a7bfc7922580d77c4f5e246472 Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Thu, 3 Aug 2023 16:18:56 -0400 Subject: [PATCH 061/413] re-allow non-string values in ENV `get!` (#50771) fixes #50472 (cherry picked from commit 6dd763bf2a0b130f03183e99c0ebf0a3c14c97d6) --- base/env.jl | 4 ++++ test/env.jl | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/base/env.jl b/base/env.jl index a4a55d9dad013..077b3a4ed28e5 100644 --- a/base/env.jl +++ b/base/env.jl @@ -138,6 +138,10 @@ end getindex(::EnvDict, k::AbstractString) = access_env(k->throw(KeyError(k)), k) get(::EnvDict, k::AbstractString, def) = access_env(Returns(def), k) get(f::Callable, ::EnvDict, k::AbstractString) = access_env(k->f(), k) +function get!(default::Callable, ::EnvDict, k::AbstractString) + haskey(ENV, k) && return ENV[k] + ENV[k] = default() +end in(k::AbstractString, ::KeySet{String, EnvDict}) = _hasenv(k) pop!(::EnvDict, k::AbstractString) = (v = ENV[k]; _unsetenv(k); v) pop!(::EnvDict, k::AbstractString, def) = haskey(ENV,k) ? pop!(ENV,k) : def diff --git a/test/env.jl b/test/env.jl index de5cf92d9edb9..4a3529f6d4081 100644 --- a/test/env.jl +++ b/test/env.jl @@ -52,6 +52,11 @@ end @test get!(ENV, key, "default") == "default" @test haskey(ENV, key) @test ENV[key] == "default" + + key = randstring(25) + @test !haskey(ENV, key) + @test get!(ENV, key, 0) == 0 + @test ENV[key] == "0" end @testset "#17956" begin @test length(ENV) > 1 @@ -168,7 +173,7 @@ end end # Restore the original environment -for k in keys(ENV) +for k in collect(keys(ENV)) if !haskey(original_env, k) delete!(ENV, k) end From 8cfb35057ca1e2d6499656ff64d1af3e0e31e5a5 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Fri, 4 Aug 2023 21:29:42 -0300 Subject: [PATCH 062/413] Add fallback if we have make a weird GC decision. (#50682) If something odd happens during GC (the PC goes to sleep) or a very big transient the heuristics might make a bad decision. What this PR implements is if we try to make our target more than double the one we had before we fallback to a more conservative method. This fixes the new issue @vtjnash found in https://github.com/JuliaLang/julia/issues/40644 for me. (cherry picked from commit ab94fadc9f8cd83c4c1550ac43483d4e0b1a3e9c) --- Make.inc | 2 +- src/gc-debug.c | 6 ++-- src/gc.c | 79 ++++++++++++++++++++++++++++++++++++--------- test/cmdlineargs.jl | 4 +-- test/testenv.jl | 7 +--- 5 files changed, 70 insertions(+), 28 deletions(-) diff --git a/Make.inc b/Make.inc index 04650e68b643e..4eacd49e5155a 100644 --- a/Make.inc +++ b/Make.inc @@ -1503,7 +1503,7 @@ endef WINE ?= wine ifeq ($(BINARY),32) -HEAPLIM := --heap-size-hint=500M +HEAPLIM := --heap-size-hint=1000M else HEAPLIM := endif diff --git a/src/gc-debug.c b/src/gc-debug.c index 6e1587b17a6d9..23d1ca8f5f884 100644 --- a/src/gc-debug.c +++ b/src/gc-debug.c @@ -1223,18 +1223,18 @@ void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect if (!gc_logging_enabled) { return; } - jl_safe_printf("GC: pause %.2fms. collected %fMB. %s %s\n", + jl_safe_printf("\nGC: pause %.2fms. collected %fMB. %s %s\n", pause/1e6, freed/(double)(1<<20), full ? "full" : "incr", recollect ? "recollect" : "" ); - jl_safe_printf("Heap stats: bytes_mapped %.2f MB, bytes_resident %.2f MB, heap_size %.2f MB, heap_target %.2f MB, live_bytes %.2f MB\n, Fragmentation %.3f", + jl_safe_printf("Heap stats: bytes_mapped %.2f MB, bytes_resident %.2f MB,\nheap_size %.2f MB, heap_target %.2f MB, Fragmentation %.3f\n", jl_atomic_load_relaxed(&gc_heap_stats.bytes_mapped)/(double)(1<<20), jl_atomic_load_relaxed(&gc_heap_stats.bytes_resident)/(double)(1<<20), + // live_bytes/(double)(1<<20), live byes tracking is not accurate. jl_atomic_load_relaxed(&gc_heap_stats.heap_size)/(double)(1<<20), jl_atomic_load_relaxed(&gc_heap_stats.heap_target)/(double)(1<<20), - live_bytes/(double)(1<<20), (double)live_bytes/(double)jl_atomic_load_relaxed(&gc_heap_stats.heap_size) ); // Should fragmentation use bytes_resident instead of heap_size? diff --git a/src/gc.c b/src/gc.c index 41c0baf492507..ad0c545c13e8d 100644 --- a/src/gc.c +++ b/src/gc.c @@ -1,6 +1,7 @@ // This file is a part of Julia. License is MIT: https://julialang.org/license #include "gc.h" +#include "julia.h" #include "julia_gcext.h" #include "julia_assert.h" #ifdef __GLIBC__ @@ -696,8 +697,8 @@ static uint64_t old_heap_size = 0; static uint64_t old_alloc_diff = 0; static uint64_t old_freed_diff = 0; static uint64_t gc_end_time = 0; - - +static int thrash_counter = 0; +static int thrashing = 0; // global variables for GC stats // Resetting the object to a young object, this is used when marking the @@ -1163,7 +1164,10 @@ static void combine_thread_gc_counts(jl_gc_num_t *dest) JL_NOTSAFEPOINT dest->bigalloc += jl_atomic_load_relaxed(&ptls->gc_num.bigalloc); uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); uint64_t free_acc = jl_atomic_load_relaxed(&ptls->gc_num.free_acc); + dest->freed += jl_atomic_load_relaxed(&ptls->gc_num.free_acc); jl_atomic_store_relaxed(&gc_heap_stats.heap_size, alloc_acc - free_acc + jl_atomic_load_relaxed(&gc_heap_stats.heap_size)); + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); + jl_atomic_store_relaxed(&ptls->gc_num.free_acc, 0); } } } @@ -3251,9 +3255,6 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) // If the live data outgrows the suggested max_total_memory // we keep going with minimum intervals and full gcs until // we either free some space or get an OOM error. - if (live_bytes > max_total_memory) { - sweep_full = 1; - } if (gc_sweep_always_full) { sweep_full = 1; } @@ -3302,7 +3303,6 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) gc_num.last_full_sweep = gc_end_time; } - int thrashing = 0; // maybe we should report this to the user or error out? size_t heap_size = jl_atomic_load_relaxed(&gc_heap_stats.heap_size); double target_allocs = 0.0; double min_interval = default_collect_interval; @@ -3313,24 +3313,32 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) double collect_smooth_factor = 0.5; double tuning_factor = 0.03; double alloc_mem = jl_gc_smooth(old_alloc_diff, alloc_diff, alloc_smooth_factor); - double alloc_time = jl_gc_smooth(old_mut_time, mutator_time, alloc_smooth_factor); + double alloc_time = jl_gc_smooth(old_mut_time, mutator_time + sweep_time, alloc_smooth_factor); // Charge sweeping to the mutator double gc_mem = jl_gc_smooth(old_freed_diff, freed_diff, collect_smooth_factor); - double gc_time = jl_gc_smooth(old_pause_time, pause, collect_smooth_factor); + double gc_time = jl_gc_smooth(old_pause_time, pause - sweep_time, collect_smooth_factor); old_alloc_diff = alloc_diff; old_mut_time = mutator_time; old_freed_diff = freed_diff; old_pause_time = pause; - old_heap_size = heap_size; - thrashing = gc_time > mutator_time * 98 ? 1 : 0; + old_heap_size = heap_size; // TODO: Update these values dynamically instead of just during the GC + if (gc_time > alloc_time * 95 && !(thrash_counter < 4)) + thrash_counter += 1; + else if (thrash_counter > 0) + thrash_counter -= 1; if (alloc_mem != 0 && alloc_time != 0 && gc_mem != 0 && gc_time != 0 ) { double alloc_rate = alloc_mem/alloc_time; double gc_rate = gc_mem/gc_time; target_allocs = sqrt(((double)heap_size/min_interval * alloc_rate)/(gc_rate * tuning_factor)); // work on multiples of min interval } } - if (target_allocs == 0.0 || thrashing) // If we are thrashing go back to default - target_allocs = 2*sqrt((double)heap_size/min_interval); + if (thrashing == 0 && thrash_counter >= 3) + thrashing = 1; + else if (thrashing == 1 && thrash_counter <= 2) + thrashing = 0; // maybe we should report this to the user or error out? + int bad_result = (target_allocs*min_interval + heap_size) > 2 * jl_atomic_load_relaxed(&gc_heap_stats.heap_target); // Don't follow through on a bad decision + if (target_allocs == 0.0 || thrashing || bad_result) // If we are thrashing go back to default + target_allocs = 2*sqrt((double)heap_size/min_interval); uint64_t target_heap = (uint64_t)target_allocs*min_interval + heap_size; if (target_heap > max_total_memory && !thrashing) // Allow it to go over if we are thrashing if we die we die target_heap = max_total_memory; @@ -3594,10 +3602,10 @@ void jl_gc_init(void) total_mem = uv_get_total_memory(); uint64_t constrained_mem = uv_get_constrained_memory(); if (constrained_mem > 0 && constrained_mem < total_mem) - total_mem = constrained_mem; + jl_gc_set_max_memory(constrained_mem - 250*1024*1024); // LLVM + other libraries need some amount of memory #endif if (jl_options.heap_size_hint) - jl_gc_set_max_memory(jl_options.heap_size_hint); + jl_gc_set_max_memory(jl_options.heap_size_hint - 250*1024*1024); t_start = jl_hrtime(); } @@ -3700,7 +3708,26 @@ JL_DLLEXPORT void *jl_gc_counted_realloc_with_old_size(void *p, size_t old, size jl_atomic_load_relaxed(&ptls->gc_num.allocd) + (sz - old)); jl_atomic_store_relaxed(&ptls->gc_num.realloc, jl_atomic_load_relaxed(&ptls->gc_num.realloc) + 1); - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, sz-old); + + int64_t diff = sz - old; + if (diff < 0) { + uint64_t free_acc = jl_atomic_load_relaxed(&ptls->gc_num.free_acc); + if (free_acc + diff < 16*1024) + jl_atomic_store_relaxed(&ptls->gc_num.free_acc, free_acc + (-diff)); + else { + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -(free_acc + (-diff))); + jl_atomic_store_relaxed(&ptls->gc_num.free_acc, 0); + } + } + else { + uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); + if (alloc_acc + diff < 16*1024) + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + diff); + else { + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + diff); + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); + } + } } return realloc(p, sz); } @@ -3817,7 +3844,27 @@ static void *gc_managed_realloc_(jl_ptls_t ptls, void *d, size_t sz, size_t olds jl_atomic_load_relaxed(&ptls->gc_num.allocd) + (allocsz - oldsz)); jl_atomic_store_relaxed(&ptls->gc_num.realloc, jl_atomic_load_relaxed(&ptls->gc_num.realloc) + 1); - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, allocsz-oldsz); + + int64_t diff = allocsz - oldsz; + if (diff < 0) { + uint64_t free_acc = jl_atomic_load_relaxed(&ptls->gc_num.free_acc); + if (free_acc + diff < 16*1024) + jl_atomic_store_relaxed(&ptls->gc_num.free_acc, free_acc + (-diff)); + else { + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -(free_acc + (-diff))); + jl_atomic_store_relaxed(&ptls->gc_num.free_acc, 0); + } + } + else { + uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); + if (alloc_acc + diff < 16*1024) + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + diff); + else { + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + diff); + jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); + } + } + int last_errno = errno; #ifdef _OS_WINDOWS_ DWORD last_error = GetLastError(); diff --git a/test/cmdlineargs.jl b/test/cmdlineargs.jl index 917031b57fe5f..417ac82973558 100644 --- a/test/cmdlineargs.jl +++ b/test/cmdlineargs.jl @@ -971,6 +971,6 @@ end @test lines[3] == "foo" @test lines[4] == "bar" end -#heap-size-hint -@test readchomp(`$(Base.julia_cmd()) --startup-file=no --heap-size-hint=500M -e "println(@ccall jl_gc_get_max_memory()::UInt64)"`) == "524288000" +#heap-size-hint, we reserve 250 MB for non GC memory (llvm, etc.) +@test readchomp(`$(Base.julia_cmd()) --startup-file=no --heap-size-hint=500M -e "println(@ccall jl_gc_get_max_memory()::UInt64)"`) == "$((500-250)*1024*1024)" end diff --git a/test/testenv.jl b/test/testenv.jl index 21f3ee3b31dd1..a4bec15a34130 100644 --- a/test/testenv.jl +++ b/test/testenv.jl @@ -38,12 +38,7 @@ if !@isdefined(testenv_defined) function addprocs_with_testenv(X; rr_allowed=true, kwargs...) exename = rr_allowed ? `$rr_exename $test_exename` : test_exename if X isa Integer - if Sys.iswindows() - heap_size=round(Int,(Sys.free_memory()/(1024^2)/(X+1))) - heap_size -= 300 # I don't know anymore - else - heap_size=round(Int,(Sys.total_memory()/(1024^2)/(X+1))) - end + heap_size=round(Int,(Sys.free_memory()/(1024^2)/(X+1))) push!(test_exeflags.exec, "--heap-size-hint=$(heap_size)M") end addprocs(X; exename=exename, exeflags=test_exeflags, kwargs...) From e57f1c7d050bdac541120ea9d20fc77e203faaa9 Mon Sep 17 00:00:00 2001 From: Oscar Smith Date: Sat, 5 Aug 2023 17:10:15 -0400 Subject: [PATCH 063/413] fix `bit_map!` with aliasing (#50781) fixes #50780 caused by #47013. (cherry picked from commit 3e04129d61e19fe2957680b39e03b350db8e8c0d) --- base/bitarray.jl | 10 ++++++---- test/bitarray.jl | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/base/bitarray.jl b/base/bitarray.jl index f29b30d0ac8c0..0fd2a665f9f29 100644 --- a/base/bitarray.jl +++ b/base/bitarray.jl @@ -1791,9 +1791,10 @@ function bit_map!(f::F, dest::BitArray, A::BitArray) where F dest_last = destc[len_Ac] _msk = _msk_end(A) # first zero out the bits mask is going to change - destc[len_Ac] = (dest_last & (~_msk)) # then update bits by `or`ing with a masked RHS - destc[len_Ac] |= f(Ac[len_Ac]) & _msk + # DO NOT SEPARATE ONTO TO LINES. + # Otherwise there will be bugs when Ac aliases destc + destc[len_Ac] = (dest_last & (~_msk)) | f(Ac[len_Ac]) & _msk dest end function bit_map!(f::F, dest::BitArray, A::BitArray, B::BitArray) where F @@ -1812,9 +1813,10 @@ function bit_map!(f::F, dest::BitArray, A::BitArray, B::BitArray) where F dest_last = destc[len_Ac] _msk = _msk_end(min_bitlen) # first zero out the bits mask is going to change - destc[len_Ac] = (dest_last & ~(_msk)) # then update bits by `or`ing with a masked RHS - destc[len_Ac] |= f(Ac[end], Bc[end]) & _msk + # DO NOT SEPARATE ONTO TO LINES. + # Otherwise there will be bugs when Ac or Bc aliases destc + destc[len_Ac] = (dest_last & ~(_msk)) | f(Ac[end], Bc[end]) & _msk dest end diff --git a/test/bitarray.jl b/test/bitarray.jl index 5d0bff62ab6e1..056a201bd4f6f 100644 --- a/test/bitarray.jl +++ b/test/bitarray.jl @@ -1539,6 +1539,21 @@ timesofar("reductions") end end end + @testset "Issue #50780, map! bitarray map! where dest aliases source" begin + a = BitVector([1,0]) + b = map(!, a) + map!(!, a, a) # a .= !.a + @test a == b == BitVector([0,1]) + + a = BitVector([1,0]) + c = map(|, a, b) + map!(|, a, a, b) + @test c == a == BitVector([1, 1]) + + a = BitVector([1,0]) + map!(|, b, a, b) + @test c == b == BitVector([1, 1]) + end end ## Filter ## From 9b78fb580e183c06f67436b257bcfb7284834e94 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Mon, 7 Aug 2023 17:48:25 -0400 Subject: [PATCH 064/413] print feature flags used for matching pkgimage (#50172) ``` julia> @ccall jl_dump_host_cpu()::Cvoid CPU: znver2 Features: sse3, pclmul, ssse3, fma, cx16, sse4.1, sse4.2, movbe, popcnt, aes, xsave, avx, f16c, rdrnd, fsgsbase, bmi, avx2, bmi2, rdseed, adx, clflushopt, clwb, sha, rdpid, sahf, lzcnt, sse4a, prfchw, mwaitx, xsaveopt, xsavec, xsaves, clzero, wbnoinvd julia> target = only(Base.current_image_targets()) znver2; flags=0; features_en=(sse3, pclmul, ssse3, fma, cx16, sse4.1, sse4.2, movbe, popcnt, aes, xsave, avx, f16c, fsgsbase, bmi, avx2, bmi2, adx, clflushopt, clwb, sha, rdpid, sahf, lzcnt, sse4a, prfchw, mwaitx, xsavec, xsaves, clzero, wbnoinvd) ``` Co-authored-by: Prem Chintalapudi Co-authored-by: Jameson Nash (cherry picked from commit 958da95647da5f9a824f99cb56846eed22a4d098) --- base/loading.jl | 99 +++++++++++++++++++++++++++++++++++--- src/processor.cpp | 79 ++++++++++++++++++++++++------ src/processor.h | 11 ++++- src/processor_arm.cpp | 21 +++++--- src/processor_fallback.cpp | 17 +++++-- src/processor_x86.cpp | 20 +++++--- 6 files changed, 206 insertions(+), 41 deletions(-) diff --git a/base/loading.jl b/base/loading.jl index 1ea4412ecc68f..90f549b7a5cb9 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -2841,11 +2841,9 @@ get_compiletime_preferences(m::Module) = get_compiletime_preferences(PkgId(m).uu get_compiletime_preferences(::Nothing) = String[] function check_clone_targets(clone_targets) - try - ccall(:jl_check_pkgimage_clones, Cvoid, (Ptr{Cchar},), clone_targets) - return true - catch - return false + rejection_reason = ccall(:jl_check_pkgimage_clones, Any, (Ptr{Cchar},), clone_targets) + if rejection_reason !== nothing + return rejection_reason end end @@ -2877,6 +2875,88 @@ function show(io::IO, cf::CacheFlags) print(io, ", opt_level = ", cf.opt_level) end +struct ImageTarget + name::String + flags::Int32 + ext_features::String + features_en::Vector{UInt8} + features_dis::Vector{UInt8} +end + +function parse_image_target(io::IO) + flags = read(io, Int32) + nfeature = read(io, Int32) + feature_en = read(io, 4*nfeature) + feature_dis = read(io, 4*nfeature) + name_len = read(io, Int32) + name = String(read(io, name_len)) + ext_features_len = read(io, Int32) + ext_features = String(read(io, ext_features_len)) + ImageTarget(name, flags, ext_features, feature_en, feature_dis) +end + +function parse_image_targets(targets::Vector{UInt8}) + io = IOBuffer(targets) + ntargets = read(io, Int32) + targets = Vector{ImageTarget}(undef, ntargets) + for i in 1:ntargets + targets[i] = parse_image_target(io) + end + return targets +end + +function current_image_targets() + targets = @ccall jl_reflect_clone_targets()::Vector{UInt8} + return parse_image_targets(targets) +end + +struct FeatureName + name::Cstring + bit::UInt32 # bit index into a `uint32_t` array; + llvmver::UInt32 # 0 if it is available on the oldest LLVM version we support +end + +function feature_names() + fnames = Ref{Ptr{FeatureName}}() + nf = Ref{Csize_t}() + @ccall jl_reflect_feature_names(fnames::Ptr{Ptr{FeatureName}}, nf::Ptr{Csize_t})::Cvoid + if fnames[] == C_NULL + @assert nf[] == 0 + return Vector{FeatureName}(undef, 0) + end + Base.unsafe_wrap(Array, fnames[], nf[], own=false) +end + +function test_feature(features::Vector{UInt8}, feat::FeatureName) + bitidx = feat.bit + u8idx = div(bitidx, 8) + 1 + bit = bitidx % 8 + return (features[u8idx] & (1 << bit)) != 0 +end + +function show(io::IO, it::ImageTarget) + print(io, it.name) + if !isempty(it.ext_features) + print(io, ",", it.ext_features) + end + print(io, "; flags=", it.flags) + print(io, "; features_en=(") + first = true + for feat in feature_names() + if test_feature(it.features_en, feat) + name = Base.unsafe_string(feat.name) + if first + first = false + print(io, name) + else + print(io, ", ", name) + end + end + end + print(io, ")") + # Is feature_dis useful? +end + # Set by FileWatching.__init__() global mkpidlock_hook global trymkpidlock_hook @@ -2914,7 +2994,6 @@ function maybe_cachefile_lock(f, pkg::PkgId, srcpath::String; stale_age=300) f() end end - # returns true if it "cachefile.ji" is stale relative to "modpath.jl" and build_id for modkey # otherwise returns the list of dependencies to also check @constprop :none function stale_cachefile(modpath::String, cachefile::String; ignore_loaded::Bool = false) @@ -2948,8 +3027,12 @@ end @debug "Rejecting cache file $cachefile for $modkey since it would require usage of pkgimage" return true end - if !check_clone_targets(clone_targets) - @debug "Rejecting cache file $cachefile for $modkey since pkgimage can't be loaded on this target" + rejection_reasons = check_clone_targets(clone_targets) + if !isnothing(rejection_reasons) + @debug("Rejecting cache file $cachefile for $modkey:", + Reasons=rejection_reasons, + var"Image Targets"=parse_image_targets(clone_targets), + var"Current Targets"=current_image_targets()) return true end if !isfile(ocachefile) diff --git a/src/processor.cpp b/src/processor.cpp index 24a434af91ad3..9a602ba836f89 100644 --- a/src/processor.cpp +++ b/src/processor.cpp @@ -107,13 +107,13 @@ static inline bool test_nbit(const T1 &bits, T2 _bitidx) } template -static inline void unset_bits(T &bits) +static inline void unset_bits(T &bits) JL_NOTSAFEPOINT { (void)bits; } template -static inline void unset_bits(T &bits, T1 _bitidx, Rest... rest) +static inline void unset_bits(T &bits, T1 _bitidx, Rest... rest) JL_NOTSAFEPOINT { auto bitidx = static_cast(_bitidx); auto u32idx = bitidx / 32; @@ -142,7 +142,7 @@ static inline void set_bit(T &bits, T1 _bitidx, bool val) template struct FeatureList { uint32_t eles[n]; - uint32_t &operator[](size_t pos) + uint32_t &operator[](size_t pos) JL_NOTSAFEPOINT { return eles[pos]; } @@ -297,12 +297,6 @@ static inline void append_ext_features(std::vector &features, * Target specific type/constant definitions, always enable. */ -struct FeatureName { - const char *name; - uint32_t bit; // bit index into a `uint32_t` array; - uint32_t llvmver; // 0 if it is available on the oldest LLVM version we support -}; - template struct CPUSpec { const char *name; @@ -636,7 +630,13 @@ static inline jl_image_t parse_sysimg(void *hdl, F &&callback) jl_dlsym(hdl, "jl_image_pointers", (void**)&pointers, 1); const void *ids = pointers->target_data; - uint32_t target_idx = callback(ids); + jl_value_t* rejection_reason = nullptr; + JL_GC_PUSH1(&rejection_reason); + uint32_t target_idx = callback(ids, &rejection_reason); + if (target_idx == (uint32_t)-1) { + jl_throw(jl_new_struct(jl_errorexception_type, rejection_reason)); + } + JL_GC_POP(); if (pointers->header->version != 1) { jl_error("Image file is not compatible with this version of Julia"); @@ -855,17 +855,20 @@ struct SysimgMatch { // Find the best match in the sysimg. // Select the best one based on the largest vector register and largest compatible feature set. template -static inline SysimgMatch match_sysimg_targets(S &&sysimg, T &&target, F &&max_vector_size) +static inline SysimgMatch match_sysimg_targets(S &&sysimg, T &&target, F &&max_vector_size, jl_value_t **rejection_reason) { SysimgMatch match; bool match_name = false; int feature_size = 0; + std::vector rejection_reasons; + rejection_reasons.reserve(sysimg.size()); for (uint32_t i = 0; i < sysimg.size(); i++) { auto &imgt = sysimg[i]; if (!(imgt.en.features & target.dis.features).empty()) { // Check sysimg enabled features against runtime disabled features // This is valid (and all what we can do) // even if one or both of the targets are unknown. + rejection_reasons.push_back("Rejecting this target due to use of runtime-disabled features\n"); continue; } if (imgt.name == target.name) { @@ -876,25 +879,44 @@ static inline SysimgMatch match_sysimg_targets(S &&sysimg, T &&target, F &&max_v } } else if (match_name) { + rejection_reasons.push_back("Rejecting this target since another target has a cpu name match\n"); continue; } int new_vsz = max_vector_size(imgt.en.features); - if (match.vreg_size > new_vsz) + if (match.vreg_size > new_vsz) { + rejection_reasons.push_back("Rejecting this target since another target has a larger vector register size\n"); continue; + } int new_feature_size = imgt.en.features.nbits(); if (match.vreg_size < new_vsz) { match.best_idx = i; match.vreg_size = new_vsz; feature_size = new_feature_size; + rejection_reasons.push_back("Updating best match to this target due to larger vector register size\n"); continue; } - if (new_feature_size < feature_size) + if (new_feature_size < feature_size) { + rejection_reasons.push_back("Rejecting this target since another target has a larger feature set\n"); continue; + } match.best_idx = i; feature_size = new_feature_size; + rejection_reasons.push_back("Updating best match to this target\n"); + } + if (match.best_idx == (uint32_t)-1) { + // Construct a nice error message for debugging purposes + std::string error_msg = "Unable to find compatible target in cached code image.\n"; + for (size_t i = 0; i < rejection_reasons.size(); i++) { + error_msg += "Target "; + error_msg += std::to_string(i); + error_msg += " ("; + error_msg += sysimg[i].name; + error_msg += "): "; + error_msg += rejection_reasons[i]; + } + if (rejection_reason) + *rejection_reason = jl_pchar_to_string(error_msg.data(), error_msg.size()); } - if (match.best_idx == (uint32_t)-1) - jl_error("Unable to find compatible target in system image."); return match; } @@ -946,3 +968,30 @@ static inline void dump_cpu_spec(uint32_t cpu, const FeatureList &features, #include "processor_fallback.cpp" #endif + +extern "C" JL_DLLEXPORT jl_value_t* jl_reflect_clone_targets() { + auto specs = jl_get_llvm_clone_targets(); + const uint32_t base_flags = 0; + std::vector data; + auto push_i32 = [&] (uint32_t v) { + uint8_t buff[4]; + memcpy(buff, &v, 4); + data.insert(data.end(), buff, buff + 4); + }; + push_i32(specs.size()); + for (uint32_t i = 0; i < specs.size(); i++) { + push_i32(base_flags | (specs[i].flags & JL_TARGET_UNKNOWN_NAME)); + auto &specdata = specs[i].data; + data.insert(data.end(), specdata.begin(), specdata.end()); + } + + jl_value_t *arr = (jl_value_t*)jl_alloc_array_1d(jl_array_uint8_type, data.size()); + uint8_t *out = (uint8_t*)jl_array_data(arr); + memcpy(out, data.data(), data.size()); + return arr; +} + +extern "C" JL_DLLEXPORT void jl_reflect_feature_names(const FeatureName **fnames, size_t *nf) { + *fnames = feature_names; + *nf = nfeature_names; +} diff --git a/src/processor.h b/src/processor.h index 2255cf4c10daa..74610cbe64b28 100644 --- a/src/processor.h +++ b/src/processor.h @@ -226,7 +226,7 @@ JL_DLLEXPORT jl_value_t *jl_get_cpu_features(void); // Dump the name and feature set of the host CPU // For debugging only JL_DLLEXPORT void jl_dump_host_cpu(void); -JL_DLLEXPORT void jl_check_pkgimage_clones(char* data); +JL_DLLEXPORT jl_value_t* jl_check_pkgimage_clones(char* data); JL_DLLEXPORT int32_t jl_set_zero_subnormals(int8_t isZero); JL_DLLEXPORT int32_t jl_get_zero_subnormals(void); @@ -274,6 +274,15 @@ struct jl_target_spec_t { extern "C" JL_DLLEXPORT std::vector jl_get_llvm_clone_targets(void) JL_NOTSAFEPOINT; std::string jl_get_cpu_name_llvm(void) JL_NOTSAFEPOINT; std::string jl_get_cpu_features_llvm(void) JL_NOTSAFEPOINT; + +struct FeatureName { + const char *name; + uint32_t bit; // bit index into a `uint32_t` array; + uint32_t llvmver; // 0 if it is available on the oldest LLVM version we support +}; + +extern "C" JL_DLLEXPORT jl_value_t* jl_reflect_clone_targets(); +extern "C" JL_DLLEXPORT void jl_reflect_feature_names(const FeatureName **feature_names, size_t *nfeatures); #endif #endif diff --git a/src/processor_arm.cpp b/src/processor_arm.cpp index 0a8090a8a6d9c..f47d1509f4975 100644 --- a/src/processor_arm.cpp +++ b/src/processor_arm.cpp @@ -1561,7 +1561,7 @@ static int max_vector_size(const FeatureList &features) #endif } -static uint32_t sysimg_init_cb(const void *id) +static uint32_t sysimg_init_cb(const void *id, jl_value_t **rejection_reason) { // First see what target is requested for the JIT. auto &cmdline = get_cmdline_targets(); @@ -1573,7 +1573,9 @@ static uint32_t sysimg_init_cb(const void *id) t.name = nname; } } - auto match = match_sysimg_targets(sysimg, target, max_vector_size); + auto match = match_sysimg_targets(sysimg, target, max_vector_size, rejection_reason); + if (match.best_idx == -1) + return match.best_idx; // Now we've decided on which sysimg version to use. // Make sure the JIT target is compatible with it and save the JIT target. if (match.vreg_size != max_vector_size(target.en.features) && @@ -1586,7 +1588,7 @@ static uint32_t sysimg_init_cb(const void *id) return match.best_idx; } -static uint32_t pkgimg_init_cb(const void *id) +static uint32_t pkgimg_init_cb(const void *id, jl_value_t **rejection_reason JL_REQUIRE_ROOTED_SLOT) { TargetData target = jit_targets.front(); auto pkgimg = deserialize_target_data((const uint8_t*)id); @@ -1595,8 +1597,7 @@ static uint32_t pkgimg_init_cb(const void *id) t.name = nname; } } - auto match = match_sysimg_targets(pkgimg, target, max_vector_size); - + auto match = match_sysimg_targets(pkgimg, target, max_vector_size, rejection_reason); return match.best_idx; } @@ -1823,9 +1824,15 @@ jl_image_t jl_init_processor_pkgimg(void *hdl) return parse_sysimg(hdl, pkgimg_init_cb); } -JL_DLLEXPORT void jl_check_pkgimage_clones(char *data) +JL_DLLEXPORT jl_value_t* jl_check_pkgimage_clones(char *data) { - pkgimg_init_cb(data); + jl_value_t *rejection_reason = NULL; + JL_GC_PUSH1(&rejection_reason); + uint32_t match_idx = pkgimg_init_cb(data, &rejection_reason); + JL_GC_POP(); + if (match_idx == (uint32_t)-1) + return rejection_reason; + return jl_nothing; } std::pair> jl_get_llvm_target(bool imaging, uint32_t &flags) diff --git a/src/processor_fallback.cpp b/src/processor_fallback.cpp index d50edc8e9b621..08a4274f44ac8 100644 --- a/src/processor_fallback.cpp +++ b/src/processor_fallback.cpp @@ -2,6 +2,9 @@ // Fallback processor detection and dispatch +static constexpr FeatureName *feature_names = nullptr; +static constexpr uint32_t nfeature_names = 0; + namespace Fallback { static inline const std::string &host_cpu_name() @@ -33,7 +36,7 @@ static TargetData<1> arg_target_data(const TargetData<1> &arg, bool require_host return res; } -static uint32_t sysimg_init_cb(const void *id) +static uint32_t sysimg_init_cb(const void *id, jl_value_t **rejection_reason) { // First see what target is requested for the JIT. auto &cmdline = get_cmdline_targets(); @@ -51,7 +54,7 @@ static uint32_t sysimg_init_cb(const void *id) return best_idx; } -static uint32_t pkgimg_init_cb(const void *id) +static uint32_t pkgimg_init_cb(const void *id, jl_value_t **rejection_reason) { TargetData<1> target = jit_targets.front(); // Find the last name match or use the default one. @@ -175,9 +178,15 @@ JL_DLLEXPORT void jl_dump_host_cpu(void) jl_safe_printf("Features: %s\n", jl_get_cpu_features_llvm().c_str()); } -JL_DLLEXPORT void jl_check_pkgimage_clones(char *data) +JL_DLLEXPORT jl_value_t* jl_check_pkgimage_clones(char *data) { - pkgimg_init_cb(data); + jl_value_t *rejection_reason = NULL; + JL_GC_PUSH1(&rejection_reason); + uint32_t match_idx = pkgimg_init_cb(data, &rejection_reason); + JL_GC_POP(); + if (match_idx == (uint32_t)-1) + return rejection_reason; + return jl_nothing; } extern "C" int jl_test_cpu_feature(jl_cpu_feature_t) diff --git a/src/processor_x86.cpp b/src/processor_x86.cpp index b9e7d8c0f0daf..73e0992bcf37c 100644 --- a/src/processor_x86.cpp +++ b/src/processor_x86.cpp @@ -840,7 +840,7 @@ static int max_vector_size(const FeatureList &features) return 16; } -static uint32_t sysimg_init_cb(const void *id) +static uint32_t sysimg_init_cb(const void *id, jl_value_t** rejection_reason) { // First see what target is requested for the JIT. auto &cmdline = get_cmdline_targets(); @@ -868,7 +868,9 @@ static uint32_t sysimg_init_cb(const void *id) "virtualized environment. Please read " "https://docs.julialang.org/en/v1/devdocs/sysimg/ for more."); } - auto match = match_sysimg_targets(sysimg, target, max_vector_size); + auto match = match_sysimg_targets(sysimg, target, max_vector_size, rejection_reason); + if (match.best_idx == (uint32_t)-1) + return match.best_idx; // Now we've decided on which sysimg version to use. // Make sure the JIT target is compatible with it and save the JIT target. if (match.vreg_size != max_vector_size(target.en.features) && @@ -884,7 +886,7 @@ static uint32_t sysimg_init_cb(const void *id) return match.best_idx; } -static uint32_t pkgimg_init_cb(const void *id) +static uint32_t pkgimg_init_cb(const void *id, jl_value_t **rejection_reason) { TargetData target = jit_targets.front(); auto pkgimg = deserialize_target_data((const uint8_t*)id); @@ -893,7 +895,7 @@ static uint32_t pkgimg_init_cb(const void *id) t.name = nname; } } - auto match = match_sysimg_targets(pkgimg, target, max_vector_size); + auto match = match_sysimg_targets(pkgimg, target, max_vector_size, rejection_reason); return match.best_idx; } @@ -1032,9 +1034,15 @@ JL_DLLEXPORT void jl_dump_host_cpu(void) cpus, ncpu_names); } -JL_DLLEXPORT void jl_check_pkgimage_clones(char *data) +JL_DLLEXPORT jl_value_t* jl_check_pkgimage_clones(char *data) { - pkgimg_init_cb(data); + jl_value_t *rejection_reason = NULL; + JL_GC_PUSH1(&rejection_reason); + uint32_t match_idx = pkgimg_init_cb(data, &rejection_reason); + JL_GC_POP(); + if (match_idx == (uint32_t)-1) + return rejection_reason; + return jl_nothing; } JL_DLLEXPORT jl_value_t *jl_get_cpu_name(void) From 98db4d5068160431ef3dd332e1fdde54cd201f78 Mon Sep 17 00:00:00 2001 From: "Viral B. Shah" Date: Tue, 8 Aug 2023 21:45:48 -0400 Subject: [PATCH 065/413] Bump OpenBLAS binaries to use the new GEMM multithreading threshold (#50844) Detailed discussion and benchmarks by @oscardssmith in https://github.com/JuliaPackaging/Yggdrasil/pull/7189 (cherry picked from commit 626f6872ed8043b1565623a4653bc50f7e9a07cc) --- deps/checksums/openblas | 184 +++++++++++++++---------------- deps/openblas.mk | 2 +- stdlib/OpenBLAS_jll/Project.toml | 2 +- 3 files changed, 94 insertions(+), 94 deletions(-) diff --git a/deps/checksums/openblas b/deps/checksums/openblas index 5cd8d27baf25e..19fc9fd32275e 100644 --- a/deps/checksums/openblas +++ b/deps/checksums/openblas @@ -1,94 +1,94 @@ -OpenBLAS.v0.3.23+0.aarch64-apple-darwin-libgfortran5.tar.gz/md5/f4ab1aa718db6ab731179199b48506ad -OpenBLAS.v0.3.23+0.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/5cd6326eab751d087b6638acc256a7c5dfc3a8a4be8949f4e2b5b8079aedc05cd8569774da19912fcbcd2dc1eac6a09d72d19bdbeded1198317992a85ccd605b -OpenBLAS.v0.3.23+0.aarch64-linux-gnu-libgfortran3.tar.gz/md5/57b8903e05998d293d28e70ee6cbc4d8 -OpenBLAS.v0.3.23+0.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/03325728191f88dcfc2bea16d818c0325b4f42019ed9c2e0533233e8e2a4da09a2c70503632fef2ab55ed12b7da39fdab470b801d34a9b6f576bda509f8a8a8d -OpenBLAS.v0.3.23+0.aarch64-linux-gnu-libgfortran4.tar.gz/md5/fe529647382de5693557363f658c71b6 -OpenBLAS.v0.3.23+0.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/77ac56f683a481477fa898d208e67c0c04c1ab8ca9dacb1e4e4ea3795fadb2604faffd1f3fd35d53eecb223c7f92de40cc8b2bdeb9c8a6a1b6a9949965cb9380 -OpenBLAS.v0.3.23+0.aarch64-linux-gnu-libgfortran5.tar.gz/md5/5aea8a00a946273a154110ca7b468214 -OpenBLAS.v0.3.23+0.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/a606933bed17e563d15ac206a4a37d38d75e9bb0bef46ef62485dcd32aa5a0e8501dab01f6887a1e60736c59177c6fbf0ec541fa521a9a8de854f44703f337c3 -OpenBLAS.v0.3.23+0.aarch64-linux-musl-libgfortran3.tar.gz/md5/d81dc2a42a8c0d87f4ee9bad98579f2a -OpenBLAS.v0.3.23+0.aarch64-linux-musl-libgfortran3.tar.gz/sha512/f2bda57546f1b9aa1f8dfe9a07b2243cadc002a9ffefbcfdde344ccc96efb07608a55bf8dbb6de34925af03f01ac5487f9fe293befa84edd9a84c01a9b7409e1 -OpenBLAS.v0.3.23+0.aarch64-linux-musl-libgfortran4.tar.gz/md5/400ba512f73a60420aa0d316bc24db48 -OpenBLAS.v0.3.23+0.aarch64-linux-musl-libgfortran4.tar.gz/sha512/927c711c3950f24e6b4c22c6dd92cd2b212e3df9241c637ff42f5b9135e7bee8f3864868aea594c6e8ba5b40f0563d63a5f8634ea3c3276bec35d480601e76e5 -OpenBLAS.v0.3.23+0.aarch64-linux-musl-libgfortran5.tar.gz/md5/6a91ea53f3aff17b602b324d025309c5 -OpenBLAS.v0.3.23+0.aarch64-linux-musl-libgfortran5.tar.gz/sha512/8ee85883fcc605c16031bafdd0f1a4f4d4a5957a4f85c2022466232f902a4cf64c284537dd2f237221f7d0c154e2b46200501891d3990e94dcf49a74a66c36de -OpenBLAS.v0.3.23+0.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/c653ff340dc25b19ca36309060dd6b1a -OpenBLAS.v0.3.23+0.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/cc77c84538bb0301eaa98ca1a32f024da6242e40e847e71f4a36ab69233590422aea41a32ee67031d8055c929f741617053416e5b9d446affa36e7233e5af48b -OpenBLAS.v0.3.23+0.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/18a914a1df2be07ff6b419617cb6347f -OpenBLAS.v0.3.23+0.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/eafab27655b0c179ad8b9b1dc818e8394d365f19cf75a0d77402951a38e204aa2fbe580037116a28e8e1254b66d15a543ccd0f438f3ae388e8bcad39f5953c64 -OpenBLAS.v0.3.23+0.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/4b8d18500b4bdc6f1081da6f0837340f -OpenBLAS.v0.3.23+0.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/6512bd03d58b7669dba7f9830d3f8654b2747ee66c7bfc05acdbca6c3d2c3750c9d1163768a3f91d56c5a87cb30705ad6f10395652fee4c9cd06cd2920db3027 -OpenBLAS.v0.3.23+0.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/27fd022a3b84c3a92da9d6062d8dafaf -OpenBLAS.v0.3.23+0.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/c0e73f2012df2453cc6231a9e7a644609ba1280c9aea63d2cbbf9594539fb26c8f9ab6976de8ec9870cab483b1fe7e3a1fc81246fa99bbd7526051e74a4733e1 -OpenBLAS.v0.3.23+0.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/e2b0503bf1144f4b6a65ae9f09b25828 -OpenBLAS.v0.3.23+0.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/204678995b9f337e4ddae793762c3a00968faa3da3433ea17578944fd56f33c381150521b6a561d6ff2022693f8d46b9d0f32f330e500036b4bfc08a7dbd8a62 -OpenBLAS.v0.3.23+0.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/3e733c1c668a3efaccfde643092595e5 -OpenBLAS.v0.3.23+0.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/4a37e5de66920f20a648118f62555755b51e6e089e7ee43d2b7b8ec0dc47e68c7705b878158ad83d152cfebf77118f789d1bf7b2ee0702334d4317f0c6a926a1 -OpenBLAS.v0.3.23+0.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/c653ff340dc25b19ca36309060dd6b1a -OpenBLAS.v0.3.23+0.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/cc77c84538bb0301eaa98ca1a32f024da6242e40e847e71f4a36ab69233590422aea41a32ee67031d8055c929f741617053416e5b9d446affa36e7233e5af48b -OpenBLAS.v0.3.23+0.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/18a914a1df2be07ff6b419617cb6347f -OpenBLAS.v0.3.23+0.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/eafab27655b0c179ad8b9b1dc818e8394d365f19cf75a0d77402951a38e204aa2fbe580037116a28e8e1254b66d15a543ccd0f438f3ae388e8bcad39f5953c64 -OpenBLAS.v0.3.23+0.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/4b8d18500b4bdc6f1081da6f0837340f -OpenBLAS.v0.3.23+0.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/6512bd03d58b7669dba7f9830d3f8654b2747ee66c7bfc05acdbca6c3d2c3750c9d1163768a3f91d56c5a87cb30705ad6f10395652fee4c9cd06cd2920db3027 -OpenBLAS.v0.3.23+0.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/27fd022a3b84c3a92da9d6062d8dafaf -OpenBLAS.v0.3.23+0.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/c0e73f2012df2453cc6231a9e7a644609ba1280c9aea63d2cbbf9594539fb26c8f9ab6976de8ec9870cab483b1fe7e3a1fc81246fa99bbd7526051e74a4733e1 -OpenBLAS.v0.3.23+0.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/e2b0503bf1144f4b6a65ae9f09b25828 -OpenBLAS.v0.3.23+0.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/204678995b9f337e4ddae793762c3a00968faa3da3433ea17578944fd56f33c381150521b6a561d6ff2022693f8d46b9d0f32f330e500036b4bfc08a7dbd8a62 -OpenBLAS.v0.3.23+0.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/3e733c1c668a3efaccfde643092595e5 -OpenBLAS.v0.3.23+0.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/4a37e5de66920f20a648118f62555755b51e6e089e7ee43d2b7b8ec0dc47e68c7705b878158ad83d152cfebf77118f789d1bf7b2ee0702334d4317f0c6a926a1 -OpenBLAS.v0.3.23+0.i686-linux-gnu-libgfortran3.tar.gz/md5/639643a12f8018e4be7bb1f9f29e57f6 -OpenBLAS.v0.3.23+0.i686-linux-gnu-libgfortran3.tar.gz/sha512/0993e1967964874a3f90610745d82369ee70fa4313445391fdcb26c4218c6badb18577c67648d2f77f359b163dafde31a3723998e0b006622effeace506b669f -OpenBLAS.v0.3.23+0.i686-linux-gnu-libgfortran4.tar.gz/md5/13ec86d62840258c425b0a5a6824a609 -OpenBLAS.v0.3.23+0.i686-linux-gnu-libgfortran4.tar.gz/sha512/0bc74dac87b8ab5ea244fa5bcd05baf2968b7041c4eb392ff808d0aae897cec4b3082ef7fecda28aea2662b6cd956a5254212740b1802a947dd3f1e5a3dfe2d2 -OpenBLAS.v0.3.23+0.i686-linux-gnu-libgfortran5.tar.gz/md5/413d4eae7b9c409204ab5fb7867dc30f -OpenBLAS.v0.3.23+0.i686-linux-gnu-libgfortran5.tar.gz/sha512/4a484d2aa239d8c1e2733cd9d16bd17549f5048d9958899a4e20039a7efcfd280bba901f3fe63b3b079fd7fae88911f7201a7649a472d47d0148ba8520f350cb -OpenBLAS.v0.3.23+0.i686-linux-musl-libgfortran3.tar.gz/md5/7f342d27a9b193b5d37e2ae4de6e4640 -OpenBLAS.v0.3.23+0.i686-linux-musl-libgfortran3.tar.gz/sha512/2927b18e176e07fe8a05d2eba24f6160680131832094bde9634f0890c1bc3b877c3293163fc65067cea402f3e75871c41b47e4a9999f273e667ac400878aa2b2 -OpenBLAS.v0.3.23+0.i686-linux-musl-libgfortran4.tar.gz/md5/523c007c319adbdde6e8cd7d3d89a9a1 -OpenBLAS.v0.3.23+0.i686-linux-musl-libgfortran4.tar.gz/sha512/ddb7a8d67c9430976ad967e21a6b8717c8a5501e8808fabf6e7b2e7298a0ca56049dcfc12214a5a19dbf7bd52d625b0b2b1bcc6b4c1d921c3ee62fd2766da891 -OpenBLAS.v0.3.23+0.i686-linux-musl-libgfortran5.tar.gz/md5/7dd91db180e59da5f866f73eaccc4d1d -OpenBLAS.v0.3.23+0.i686-linux-musl-libgfortran5.tar.gz/sha512/ff0ee65e536eae5ece7fbc00a0735349d560a142e025084d64f28891bdd3da5914e976640be354d8ad34fd3d89bfb90461eb95f2426d5e292906ed4ead1cfafc -OpenBLAS.v0.3.23+0.i686-w64-mingw32-libgfortran3.tar.gz/md5/fef43c3fed5ed7e9fdd9c7757be6b95e -OpenBLAS.v0.3.23+0.i686-w64-mingw32-libgfortran3.tar.gz/sha512/b580c1da073ed94d1a259183c5b2a6896a746c5e88c83e2df57fea801f259cb49f99b3468bbc5c1d7dc6bb84f597843bc3c383c9cab7608dbfbbb15352fb1012 -OpenBLAS.v0.3.23+0.i686-w64-mingw32-libgfortran4.tar.gz/md5/88db137baca7ce99e58ff3b13ee73644 -OpenBLAS.v0.3.23+0.i686-w64-mingw32-libgfortran4.tar.gz/sha512/1608f3ee3964df833db9a1277fb9f69e3bb1d328a27482ac419e08520a51b2cb25501cf8986b2ff617bc04881984ce73ecd2b55b0c99afb5cb28f32d24d89052 -OpenBLAS.v0.3.23+0.i686-w64-mingw32-libgfortran5.tar.gz/md5/32c1ca252dcae7d02bcd54d2b00a4409 -OpenBLAS.v0.3.23+0.i686-w64-mingw32-libgfortran5.tar.gz/sha512/401126557d3072d965327aa1440eeaf22fdfb1e5265c28dca779d81b94ababd1d487603d55e384f2bac305125c9ed3826f0bb7be99af20b0d18a674a8069ce5b -OpenBLAS.v0.3.23+0.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/3059083c8293106486a0f28a3564e499 -OpenBLAS.v0.3.23+0.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/019bb4bc71d7be14f040b36d1b44f653ee89aac680749a6a3b8b72446dffae185dd3d8172ca7ac9aac45cfe564c0fc6cf3221a6f8496b9ba10d04ab44d897b65 -OpenBLAS.v0.3.23+0.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/648167f83536f32921f1208d09cc8f47 -OpenBLAS.v0.3.23+0.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/084346b93a99671967433f4ac6548d7b828aa65c402bac7e68aee78bbf75e5cb06b22f42a7d4876fdea3e838162278ee3fcf011fa18530c8d8b0e853a4c6440c -OpenBLAS.v0.3.23+0.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/9796916fb0acbea2e93747dafa96d496 -OpenBLAS.v0.3.23+0.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/7c3643c3669fea262907bb5c0f27b492adfec910716498a0bd992d705a544b21023d77801f27c967c07be9d5b30bbd936137c8f59f61632fb16cc0e1f2efebd1 -OpenBLAS.v0.3.23+0.x86_64-apple-darwin-libgfortran3.tar.gz/md5/cbf9ad429547ebd1a473f735b6c65442 -OpenBLAS.v0.3.23+0.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/5e98ec17ee35624bf0a286a2dbe01f5ae4fa879274af70b218080c537a325a92fe76331b746e98b3ce3a0d127df2c03f522f554cb43c169a2b7b1890a9a8a81f -OpenBLAS.v0.3.23+0.x86_64-apple-darwin-libgfortran4.tar.gz/md5/28792164b6c34bc627966e338221ff34 -OpenBLAS.v0.3.23+0.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/433dcec661ff2459740c4d1e72d766549135f6f41a7ffb488502d76751fcb00c3d75aaa0e3db182441ef6b5e3b487a9df3e1b8b979da3681496f4ac6c6ce819b -OpenBLAS.v0.3.23+0.x86_64-apple-darwin-libgfortran5.tar.gz/md5/7013b806bfcd2c65582df5f224bd7d86 -OpenBLAS.v0.3.23+0.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/1078cf5583d158af5d38690acf913db378195b79b4743d977e7654c246fecb0ded4ebee96d89f54c5ec5f04af1b9858bcc0700251ccce1bf7c87926ede069b91 -OpenBLAS.v0.3.23+0.x86_64-linux-gnu-libgfortran3.tar.gz/md5/f959117d5c3fd001412c790bd478f7f6 -OpenBLAS.v0.3.23+0.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/e6fbe9fe1b7a92e10760d2b945bcc2c1c5e8399d729fbbb771764e7b72856707629123bc2d2fed2549f551776f8f0a737b0f414ffddc820a655172d933c10af9 -OpenBLAS.v0.3.23+0.x86_64-linux-gnu-libgfortran4.tar.gz/md5/af04d6bd91df5c9bcc63fe06c88a4b79 -OpenBLAS.v0.3.23+0.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/0cd4972d0a44505f9d8d3958bd20e491c986f55f5f84000ab534020dc8d39d788402355fa51bbd521c8c1bf6884d9d35c1db156bd106a98fbde80c104e8dd5a1 -OpenBLAS.v0.3.23+0.x86_64-linux-gnu-libgfortran5.tar.gz/md5/c5e6138630c5b616df1d045e1c388710 -OpenBLAS.v0.3.23+0.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/a54db7cb7e28dd792bd2c4f33945e7d99db1ee9a620bbe77a21cd7fa7f4cddc5c7744d27116951582f00223df09e7dc2258754032cebd57f61a723762743d3fb -OpenBLAS.v0.3.23+0.x86_64-linux-musl-libgfortran3.tar.gz/md5/7d407633f4f59c305896f9132c098cd2 -OpenBLAS.v0.3.23+0.x86_64-linux-musl-libgfortran3.tar.gz/sha512/8a04d46b6dc2eef87d6c4ac43bcdacf5da2b1669bb829c42f07f7f73bc0dba35a6e48f303d1e9cb951062fa2c3a4cce894406c5551c2bac7f57f02d2f92122a3 -OpenBLAS.v0.3.23+0.x86_64-linux-musl-libgfortran4.tar.gz/md5/1d6c7e0b6f3eeedb41ecfea9881d0bac -OpenBLAS.v0.3.23+0.x86_64-linux-musl-libgfortran4.tar.gz/sha512/9152b7f584ecc3f06caf0eaf0a496d9e9c16afe41a4750a9bcce0477cd3cabcdcec5c97c24fa3fba03d603148c8a3dcf7199c171abe10121aaee2f8a68b93c91 -OpenBLAS.v0.3.23+0.x86_64-linux-musl-libgfortran5.tar.gz/md5/fdd5c9e5f746403f7ba4789d8d8c47e1 -OpenBLAS.v0.3.23+0.x86_64-linux-musl-libgfortran5.tar.gz/sha512/2bd980e1e2021b32f3455fb3fdbae407fb672074ca798664c77e063ea6a7503b625eac7655c8cf25307afbfd9abaa64af52fbb3ed811ff8eb6515e3edcf26b1d -OpenBLAS.v0.3.23+0.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/8c69d9b7b6fbd0896f839c8979c35a81 -OpenBLAS.v0.3.23+0.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/d8859f485fa35b33be167dd45f1fe87696be0b12f27dd041087cfbb9df0da94bb726fb9c5f89162405de473969013e3a6a11b0520236db7f5603b25466ebf0d9 -OpenBLAS.v0.3.23+0.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/40724e1d694288f930a15860650f37bd -OpenBLAS.v0.3.23+0.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/b7bd75b57803da93d19016f5fe63bd88357aa4e728fdde026a55ab2382957f5a82254b12e701ffb19085a6d1ecc0c0b0c685efb6fa9654e7537f146087cce00a -OpenBLAS.v0.3.23+0.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/d78352f4e9baf1225aa135b03da9315b -OpenBLAS.v0.3.23+0.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/aa4d3b0972429af7376e80eab93375ea0368f2f3a31cdbacdb782ff32f7b1c708c5e2d7f1c30ba5b8a7c604a3a7c27a7601fc7f09c8dad2b6dbc54ff099fc0e2 -OpenBLAS.v0.3.23+0.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/dbf8b0592102b01de80df0767f681227 -OpenBLAS.v0.3.23+0.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/9bdf9ab9c3ff36281fa501771c4ed932e8a481ffc4cef08725b4877999bd320c99f9c756beba7143050705323bdc0bea150ab3a11e47f3f7c60f206595c37b73 -OpenBLAS.v0.3.23+0.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/feba9f9647e82992ba310650e3b8ff71 -OpenBLAS.v0.3.23+0.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/b6c98a5a57764eef4940d81461f9706f905d376d165abdbd0fafbdd5802e34523ad15e6ee75a4550555b7c969630c43438d6cce3d6e37ac95e57b58bcc9d542c -OpenBLAS.v0.3.23+0.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/732544eb61201b6dd7c27d5be376d50d -OpenBLAS.v0.3.23+0.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/7b68cceb0bdb892ae74e2744f2a9139602a03e01d937188ca9c875d606d79f555594a5ff022b64d955613b6eb0026a26003011dc17382f019882d9c4c612e8e2 +OpenBLAS.v0.3.23+2.aarch64-apple-darwin-libgfortran5.tar.gz/md5/f4ab1aa718db6ab731179199b48506ad +OpenBLAS.v0.3.23+2.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/5cd6326eab751d087b6638acc256a7c5dfc3a8a4be8949f4e2b5b8079aedc05cd8569774da19912fcbcd2dc1eac6a09d72d19bdbeded1198317992a85ccd605b +OpenBLAS.v0.3.23+2.aarch64-linux-gnu-libgfortran3.tar.gz/md5/57b8903e05998d293d28e70ee6cbc4d8 +OpenBLAS.v0.3.23+2.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/03325728191f88dcfc2bea16d818c0325b4f42019ed9c2e0533233e8e2a4da09a2c70503632fef2ab55ed12b7da39fdab470b801d34a9b6f576bda509f8a8a8d +OpenBLAS.v0.3.23+2.aarch64-linux-gnu-libgfortran4.tar.gz/md5/fe529647382de5693557363f658c71b6 +OpenBLAS.v0.3.23+2.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/77ac56f683a481477fa898d208e67c0c04c1ab8ca9dacb1e4e4ea3795fadb2604faffd1f3fd35d53eecb223c7f92de40cc8b2bdeb9c8a6a1b6a9949965cb9380 +OpenBLAS.v0.3.23+2.aarch64-linux-gnu-libgfortran5.tar.gz/md5/5aea8a00a946273a154110ca7b468214 +OpenBLAS.v0.3.23+2.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/a606933bed17e563d15ac206a4a37d38d75e9bb0bef46ef62485dcd32aa5a0e8501dab01f6887a1e60736c59177c6fbf0ec541fa521a9a8de854f44703f337c3 +OpenBLAS.v0.3.23+2.aarch64-linux-musl-libgfortran3.tar.gz/md5/d81dc2a42a8c0d87f4ee9bad98579f2a +OpenBLAS.v0.3.23+2.aarch64-linux-musl-libgfortran3.tar.gz/sha512/f2bda57546f1b9aa1f8dfe9a07b2243cadc002a9ffefbcfdde344ccc96efb07608a55bf8dbb6de34925af03f01ac5487f9fe293befa84edd9a84c01a9b7409e1 +OpenBLAS.v0.3.23+2.aarch64-linux-musl-libgfortran4.tar.gz/md5/400ba512f73a60420aa0d316bc24db48 +OpenBLAS.v0.3.23+2.aarch64-linux-musl-libgfortran4.tar.gz/sha512/927c711c3950f24e6b4c22c6dd92cd2b212e3df9241c637ff42f5b9135e7bee8f3864868aea594c6e8ba5b40f0563d63a5f8634ea3c3276bec35d480601e76e5 +OpenBLAS.v0.3.23+2.aarch64-linux-musl-libgfortran5.tar.gz/md5/6a91ea53f3aff17b602b324d025309c5 +OpenBLAS.v0.3.23+2.aarch64-linux-musl-libgfortran5.tar.gz/sha512/8ee85883fcc605c16031bafdd0f1a4f4d4a5957a4f85c2022466232f902a4cf64c284537dd2f237221f7d0c154e2b46200501891d3990e94dcf49a74a66c36de +OpenBLAS.v0.3.23+2.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/c653ff340dc25b19ca36309060dd6b1a +OpenBLAS.v0.3.23+2.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/cc77c84538bb0301eaa98ca1a32f024da6242e40e847e71f4a36ab69233590422aea41a32ee67031d8055c929f741617053416e5b9d446affa36e7233e5af48b +OpenBLAS.v0.3.23+2.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/18a914a1df2be07ff6b419617cb6347f +OpenBLAS.v0.3.23+2.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/eafab27655b0c179ad8b9b1dc818e8394d365f19cf75a0d77402951a38e204aa2fbe580037116a28e8e1254b66d15a543ccd0f438f3ae388e8bcad39f5953c64 +OpenBLAS.v0.3.23+2.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/4b8d18500b4bdc6f1081da6f0837340f +OpenBLAS.v0.3.23+2.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/6512bd03d58b7669dba7f9830d3f8654b2747ee66c7bfc05acdbca6c3d2c3750c9d1163768a3f91d56c5a87cb30705ad6f10395652fee4c9cd06cd2920db3027 +OpenBLAS.v0.3.23+2.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/27fd022a3b84c3a92da9d6062d8dafaf +OpenBLAS.v0.3.23+2.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/c0e73f2012df2453cc6231a9e7a644609ba1280c9aea63d2cbbf9594539fb26c8f9ab6976de8ec9870cab483b1fe7e3a1fc81246fa99bbd7526051e74a4733e1 +OpenBLAS.v0.3.23+2.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/e2b0503bf1144f4b6a65ae9f09b25828 +OpenBLAS.v0.3.23+2.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/204678995b9f337e4ddae793762c3a00968faa3da3433ea17578944fd56f33c381150521b6a561d6ff2022693f8d46b9d0f32f330e500036b4bfc08a7dbd8a62 +OpenBLAS.v0.3.23+2.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/3e733c1c668a3efaccfde643092595e5 +OpenBLAS.v0.3.23+2.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/4a37e5de66920f20a648118f62555755b51e6e089e7ee43d2b7b8ec0dc47e68c7705b878158ad83d152cfebf77118f789d1bf7b2ee0702334d4317f0c6a926a1 +OpenBLAS.v0.3.23+2.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/c653ff340dc25b19ca36309060dd6b1a +OpenBLAS.v0.3.23+2.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/cc77c84538bb0301eaa98ca1a32f024da6242e40e847e71f4a36ab69233590422aea41a32ee67031d8055c929f741617053416e5b9d446affa36e7233e5af48b +OpenBLAS.v0.3.23+2.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/18a914a1df2be07ff6b419617cb6347f +OpenBLAS.v0.3.23+2.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/eafab27655b0c179ad8b9b1dc818e8394d365f19cf75a0d77402951a38e204aa2fbe580037116a28e8e1254b66d15a543ccd0f438f3ae388e8bcad39f5953c64 +OpenBLAS.v0.3.23+2.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/4b8d18500b4bdc6f1081da6f0837340f +OpenBLAS.v0.3.23+2.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/6512bd03d58b7669dba7f9830d3f8654b2747ee66c7bfc05acdbca6c3d2c3750c9d1163768a3f91d56c5a87cb30705ad6f10395652fee4c9cd06cd2920db3027 +OpenBLAS.v0.3.23+2.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/27fd022a3b84c3a92da9d6062d8dafaf +OpenBLAS.v0.3.23+2.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/c0e73f2012df2453cc6231a9e7a644609ba1280c9aea63d2cbbf9594539fb26c8f9ab6976de8ec9870cab483b1fe7e3a1fc81246fa99bbd7526051e74a4733e1 +OpenBLAS.v0.3.23+2.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/e2b0503bf1144f4b6a65ae9f09b25828 +OpenBLAS.v0.3.23+2.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/204678995b9f337e4ddae793762c3a00968faa3da3433ea17578944fd56f33c381150521b6a561d6ff2022693f8d46b9d0f32f330e500036b4bfc08a7dbd8a62 +OpenBLAS.v0.3.23+2.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/3e733c1c668a3efaccfde643092595e5 +OpenBLAS.v0.3.23+2.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/4a37e5de66920f20a648118f62555755b51e6e089e7ee43d2b7b8ec0dc47e68c7705b878158ad83d152cfebf77118f789d1bf7b2ee0702334d4317f0c6a926a1 +OpenBLAS.v0.3.23+2.i686-linux-gnu-libgfortran3.tar.gz/md5/639643a12f8018e4be7bb1f9f29e57f6 +OpenBLAS.v0.3.23+2.i686-linux-gnu-libgfortran3.tar.gz/sha512/0993e1967964874a3f90610745d82369ee70fa4313445391fdcb26c4218c6badb18577c67648d2f77f359b163dafde31a3723998e0b006622effeace506b669f +OpenBLAS.v0.3.23+2.i686-linux-gnu-libgfortran4.tar.gz/md5/13ec86d62840258c425b0a5a6824a609 +OpenBLAS.v0.3.23+2.i686-linux-gnu-libgfortran4.tar.gz/sha512/0bc74dac87b8ab5ea244fa5bcd05baf2968b7041c4eb392ff808d0aae897cec4b3082ef7fecda28aea2662b6cd956a5254212740b1802a947dd3f1e5a3dfe2d2 +OpenBLAS.v0.3.23+2.i686-linux-gnu-libgfortran5.tar.gz/md5/413d4eae7b9c409204ab5fb7867dc30f +OpenBLAS.v0.3.23+2.i686-linux-gnu-libgfortran5.tar.gz/sha512/4a484d2aa239d8c1e2733cd9d16bd17549f5048d9958899a4e20039a7efcfd280bba901f3fe63b3b079fd7fae88911f7201a7649a472d47d0148ba8520f350cb +OpenBLAS.v0.3.23+2.i686-linux-musl-libgfortran3.tar.gz/md5/7f342d27a9b193b5d37e2ae4de6e4640 +OpenBLAS.v0.3.23+2.i686-linux-musl-libgfortran3.tar.gz/sha512/2927b18e176e07fe8a05d2eba24f6160680131832094bde9634f0890c1bc3b877c3293163fc65067cea402f3e75871c41b47e4a9999f273e667ac400878aa2b2 +OpenBLAS.v0.3.23+2.i686-linux-musl-libgfortran4.tar.gz/md5/523c007c319adbdde6e8cd7d3d89a9a1 +OpenBLAS.v0.3.23+2.i686-linux-musl-libgfortran4.tar.gz/sha512/ddb7a8d67c9430976ad967e21a6b8717c8a5501e8808fabf6e7b2e7298a0ca56049dcfc12214a5a19dbf7bd52d625b0b2b1bcc6b4c1d921c3ee62fd2766da891 +OpenBLAS.v0.3.23+2.i686-linux-musl-libgfortran5.tar.gz/md5/7dd91db180e59da5f866f73eaccc4d1d +OpenBLAS.v0.3.23+2.i686-linux-musl-libgfortran5.tar.gz/sha512/ff0ee65e536eae5ece7fbc00a0735349d560a142e025084d64f28891bdd3da5914e976640be354d8ad34fd3d89bfb90461eb95f2426d5e292906ed4ead1cfafc +OpenBLAS.v0.3.23+2.i686-w64-mingw32-libgfortran3.tar.gz/md5/98dd37d7921b0a18dfd13d8c17bd4cf9 +OpenBLAS.v0.3.23+2.i686-w64-mingw32-libgfortran3.tar.gz/sha512/dd054c335ce71e52dca9bfa31e1a8d51be4708cc11964425914b36976d6f02ff545e3f583d734c9d8a898773f0dc9d93924afa428ce5e5a276aee28c1acb9bff +OpenBLAS.v0.3.23+2.i686-w64-mingw32-libgfortran4.tar.gz/md5/55e3a7ac93d22cb8dd5b0f1a77ca53a4 +OpenBLAS.v0.3.23+2.i686-w64-mingw32-libgfortran4.tar.gz/sha512/3eae1f9a08b6653c800209681d5dd491f381e1558897a2c2a5330ad67935142a979756911a3a9860b7da6592339d073eba362d6544d988c8b23d8113028b6e5a +OpenBLAS.v0.3.23+2.i686-w64-mingw32-libgfortran5.tar.gz/md5/ce52068bfa5ea392984d2063883241bf +OpenBLAS.v0.3.23+2.i686-w64-mingw32-libgfortran5.tar.gz/sha512/1ea675f145f12de8f3fc9ad573967d384e83b0c41a0503f6e369add12698260b49a880e41bbdd26c9ffe481124f3571b2f95623c3a6b3816b8e4a75253f92f53 +OpenBLAS.v0.3.23+2.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/3059083c8293106486a0f28a3564e499 +OpenBLAS.v0.3.23+2.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/019bb4bc71d7be14f040b36d1b44f653ee89aac680749a6a3b8b72446dffae185dd3d8172ca7ac9aac45cfe564c0fc6cf3221a6f8496b9ba10d04ab44d897b65 +OpenBLAS.v0.3.23+2.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/648167f83536f32921f1208d09cc8f47 +OpenBLAS.v0.3.23+2.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/084346b93a99671967433f4ac6548d7b828aa65c402bac7e68aee78bbf75e5cb06b22f42a7d4876fdea3e838162278ee3fcf011fa18530c8d8b0e853a4c6440c +OpenBLAS.v0.3.23+2.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/9796916fb0acbea2e93747dafa96d496 +OpenBLAS.v0.3.23+2.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/7c3643c3669fea262907bb5c0f27b492adfec910716498a0bd992d705a544b21023d77801f27c967c07be9d5b30bbd936137c8f59f61632fb16cc0e1f2efebd1 +OpenBLAS.v0.3.23+2.x86_64-apple-darwin-libgfortran3.tar.gz/md5/cbf9ad429547ebd1a473f735b6c65442 +OpenBLAS.v0.3.23+2.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/5e98ec17ee35624bf0a286a2dbe01f5ae4fa879274af70b218080c537a325a92fe76331b746e98b3ce3a0d127df2c03f522f554cb43c169a2b7b1890a9a8a81f +OpenBLAS.v0.3.23+2.x86_64-apple-darwin-libgfortran4.tar.gz/md5/28792164b6c34bc627966e338221ff34 +OpenBLAS.v0.3.23+2.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/433dcec661ff2459740c4d1e72d766549135f6f41a7ffb488502d76751fcb00c3d75aaa0e3db182441ef6b5e3b487a9df3e1b8b979da3681496f4ac6c6ce819b +OpenBLAS.v0.3.23+2.x86_64-apple-darwin-libgfortran5.tar.gz/md5/7013b806bfcd2c65582df5f224bd7d86 +OpenBLAS.v0.3.23+2.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/1078cf5583d158af5d38690acf913db378195b79b4743d977e7654c246fecb0ded4ebee96d89f54c5ec5f04af1b9858bcc0700251ccce1bf7c87926ede069b91 +OpenBLAS.v0.3.23+2.x86_64-linux-gnu-libgfortran3.tar.gz/md5/f959117d5c3fd001412c790bd478f7f6 +OpenBLAS.v0.3.23+2.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/e6fbe9fe1b7a92e10760d2b945bcc2c1c5e8399d729fbbb771764e7b72856707629123bc2d2fed2549f551776f8f0a737b0f414ffddc820a655172d933c10af9 +OpenBLAS.v0.3.23+2.x86_64-linux-gnu-libgfortran4.tar.gz/md5/af04d6bd91df5c9bcc63fe06c88a4b79 +OpenBLAS.v0.3.23+2.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/0cd4972d0a44505f9d8d3958bd20e491c986f55f5f84000ab534020dc8d39d788402355fa51bbd521c8c1bf6884d9d35c1db156bd106a98fbde80c104e8dd5a1 +OpenBLAS.v0.3.23+2.x86_64-linux-gnu-libgfortran5.tar.gz/md5/c5e6138630c5b616df1d045e1c388710 +OpenBLAS.v0.3.23+2.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/a54db7cb7e28dd792bd2c4f33945e7d99db1ee9a620bbe77a21cd7fa7f4cddc5c7744d27116951582f00223df09e7dc2258754032cebd57f61a723762743d3fb +OpenBLAS.v0.3.23+2.x86_64-linux-musl-libgfortran3.tar.gz/md5/7d407633f4f59c305896f9132c098cd2 +OpenBLAS.v0.3.23+2.x86_64-linux-musl-libgfortran3.tar.gz/sha512/8a04d46b6dc2eef87d6c4ac43bcdacf5da2b1669bb829c42f07f7f73bc0dba35a6e48f303d1e9cb951062fa2c3a4cce894406c5551c2bac7f57f02d2f92122a3 +OpenBLAS.v0.3.23+2.x86_64-linux-musl-libgfortran4.tar.gz/md5/1d6c7e0b6f3eeedb41ecfea9881d0bac +OpenBLAS.v0.3.23+2.x86_64-linux-musl-libgfortran4.tar.gz/sha512/9152b7f584ecc3f06caf0eaf0a496d9e9c16afe41a4750a9bcce0477cd3cabcdcec5c97c24fa3fba03d603148c8a3dcf7199c171abe10121aaee2f8a68b93c91 +OpenBLAS.v0.3.23+2.x86_64-linux-musl-libgfortran5.tar.gz/md5/fdd5c9e5f746403f7ba4789d8d8c47e1 +OpenBLAS.v0.3.23+2.x86_64-linux-musl-libgfortran5.tar.gz/sha512/2bd980e1e2021b32f3455fb3fdbae407fb672074ca798664c77e063ea6a7503b625eac7655c8cf25307afbfd9abaa64af52fbb3ed811ff8eb6515e3edcf26b1d +OpenBLAS.v0.3.23+2.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/e574046603e2da1ec8893059234f3220 +OpenBLAS.v0.3.23+2.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/8ea6dee8d0958b45f765d5296cdd47d93f739ff9681a7bb12f5549a35967bbac0519d62e0f06e51dbd7e50ccb828dc305afd0a2868cba786f458e53b5fda867b +OpenBLAS.v0.3.23+2.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/8f2233abe6dd7f0ce688131b63073f66 +OpenBLAS.v0.3.23+2.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/7d5296a5c213a99c474228cf7057af0ba38207960d74b5bfe4aa7a5b08b71da60f2cde3ed2a20f06d8526f39661eaa086825678d56b73c03fca6e6a10f64a9b2 +OpenBLAS.v0.3.23+2.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/4467b0b2b5977fe710b270749333dbe9 +OpenBLAS.v0.3.23+2.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/28c315b53d44c1a09fcb9a6a47a45d8e08bf8d5897c85e357ce1544bdf231e66a7d372590b6d67186fa301a499a625400cf4c7776b1a32ebbe65fc6ac63739a4 +OpenBLAS.v0.3.23+2.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/6e5818f491219b4a102790be5703ea8d +OpenBLAS.v0.3.23+2.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/2a5c05c288568a881328cb8b362b864d5d1113ee9570f80c1d84455c4698dc0c34c89934fb6962746350efb99780319a48bec9271f108527c9552aeec1e1365c +OpenBLAS.v0.3.23+2.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/dc6295ac25c2f4616918a07a61230039 +OpenBLAS.v0.3.23+2.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/9f39a8227d692b0d7a4976158a39687f14d8e28f9771de252a74c63b9b28cab4818e0160d3f8fe2b3a66500c0aa9301c4d8bcf6136b26f642db161adcc57f277 +OpenBLAS.v0.3.23+2.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/b3a142aadce39a017d15ce4293c3b86b +OpenBLAS.v0.3.23+2.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/9fd4b2219603c98fa40a5c3d3ab0a48e5e2d0352c984820eda6513aad68e3a25ba36521787704ddf25631e194d512a50ac60cd61aec8483e9273b75e5249579f openblas-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/md5/7ccaaaafc8176b87dc59d4e527ca4d9f openblas-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/sha512/12235f0459469b483a393844c228be5ad4bc60575bbe4b3238198f2480b7b457e4b0609730ce6d99530bb82e1d16fdd2338ceed6d28c952e6fff0da7f571f863 diff --git a/deps/openblas.mk b/deps/openblas.mk index e2837bc47232a..d890a5be6046a 100644 --- a/deps/openblas.mk +++ b/deps/openblas.mk @@ -10,7 +10,7 @@ OPENBLAS_BUILD_OPTS := CC="$(CC) $(SANITIZE_OPTS)" FC="$(FC) $(SANITIZE_OPTS)" L # Thread support ifeq ($(OPENBLAS_USE_THREAD), 1) OPENBLAS_BUILD_OPTS += USE_THREAD=1 -OPENBLAS_BUILD_OPTS += GEMM_MULTITHREADING_THRESHOLD=50 +OPENBLAS_BUILD_OPTS += GEMM_MULTITHREADING_THRESHOLD=400 # Maximum number of threads for parallelism OPENBLAS_BUILD_OPTS += NUM_THREADS=512 else diff --git a/stdlib/OpenBLAS_jll/Project.toml b/stdlib/OpenBLAS_jll/Project.toml index 529c9945e65f1..b4baf955ea04e 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+0" +version = "0.3.23+2" [deps] # See note in `src/OpenBLAS_jll.jl` about this dependency. From c5e7846f597f5188b3c4a336bca50d8e7a102618 Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Wed, 9 Aug 2023 09:50:37 -0700 Subject: [PATCH 066/413] Update dependency builds (#50826) This bumps the build numbers for stdlib and binary dependency JLLs, updates libssh2 to 1.11.0, libgit2 to 1.6.4, and objconv to 2.53. Julia's FreeBSD CI has been running on FreeBSD 13.2 for a while, but until more recently, Yggdrasil was still building FreeBSD binaries using the 12.2 sysroot. The sysroot was updated to 13.2 and I went through and rebuilt the dependencies that Julia uses. The updated build numbers correspond to these rebuilt but otherwise unchanged binaries. The actual version updates are because libssh2 in Yggdrasil was at 1.11.0 so I left it there (its [release notes](https://github.com/libssh2/libssh2/releases/tag/libssh2-1.11.0) suggest it's a safe update), libgit2 had a newer patch version available and needed to be fixed anyway since the Windows build was broken, and objconv needed its Yggdrasil build recipe fixed but Elliot's GitHub mirror of objconv was at 2.53 so I updated to use that. (cherry picked from commit 5e51fbe78df4304d7f4ca776928144905ba494bf) --- deps/checksums/blastrampoline | 64 +-- deps/checksums/clang | 216 ++++----- deps/checksums/compilersupportlibraries | 184 ++++---- deps/checksums/curl | 64 +-- deps/checksums/dsfmt | 64 +-- deps/checksums/gmp | 116 ++--- deps/checksums/libgit2 | 68 +-- deps/checksums/libssh2 | 68 +-- deps/checksums/libtracyclient | 64 +-- deps/checksums/libuv | 64 +-- deps/checksums/lld | 216 ++++----- deps/checksums/llvm | 432 +++++++++--------- deps/checksums/mbedtls | 64 +-- deps/checksums/mpfr | 64 +-- deps/checksums/nghttp2 | 64 +-- deps/checksums/objconv | 64 +-- deps/checksums/openlibm | 64 +-- deps/checksums/p7zip | 64 +-- deps/checksums/pcre | 64 +-- deps/checksums/suitesparse | 64 +-- deps/checksums/unwind | 48 +- deps/checksums/zlib | 64 +-- deps/clang.version | 2 +- deps/libgit2.mk | 2 +- deps/libgit2.version | 4 +- deps/libssh2.version | 6 +- deps/libtracyclient.version | 2 +- deps/lld.version | 2 +- deps/llvm-tools.version | 4 +- deps/llvm.version | 2 +- deps/objconv.version | 4 +- .../CompilerSupportLibraries_jll/Project.toml | 2 +- stdlib/GMP_jll/Project.toml | 2 +- stdlib/LLD_jll/Project.toml | 2 +- stdlib/LibCURL_jll/Project.toml | 2 +- stdlib/LibGit2_jll/Project.toml | 2 +- stdlib/LibGit2_jll/test/runtests.jl | 2 +- stdlib/LibSSH2_jll/Project.toml | 2 +- stdlib/LibUV_jll/Project.toml | 2 +- stdlib/LibUnwind_jll/Project.toml | 2 +- stdlib/MPFR_jll/Project.toml | 2 +- stdlib/MbedTLS_jll/Project.toml | 2 +- stdlib/OpenLibm_jll/Project.toml | 2 +- stdlib/PCRE2_jll/Project.toml | 2 +- stdlib/SuiteSparse_jll/Project.toml | 2 +- stdlib/Zlib_jll/Project.toml | 2 +- stdlib/dSFMT_jll/Project.toml | 2 +- stdlib/libLLVM_jll/Project.toml | 2 +- stdlib/libblastrampoline_jll/Project.toml | 2 +- stdlib/nghttp2_jll/Project.toml | 2 +- stdlib/p7zip_jll/Project.toml | 2 +- 51 files changed, 1156 insertions(+), 1156 deletions(-) diff --git a/deps/checksums/blastrampoline b/deps/checksums/blastrampoline index 011b0f6e4704d..d72a584fd1b0c 100644 --- a/deps/checksums/blastrampoline +++ b/deps/checksums/blastrampoline @@ -1,34 +1,34 @@ blastrampoline-81316155d4838392e8462a92bcac3eebe9acd0c7.tar.gz/md5/0478361eac783b99002b1ad985182f05 blastrampoline-81316155d4838392e8462a92bcac3eebe9acd0c7.tar.gz/sha512/2489ce5770a9861889a2d07e61440ba4f233a92efd4a3544747f83320e0e7a229a8fe01553d99f5f1d98713316f2506daf0adb7d024a46e32b3de1bb2966d637 -libblastrampoline.v5.8.0+0.aarch64-apple-darwin.tar.gz/md5/a28837b9838fef2b3831de3278ec7949 -libblastrampoline.v5.8.0+0.aarch64-apple-darwin.tar.gz/sha512/111ac2fe5f8f8102f2f7c9e9e6aa1d1a12d2db941238c949ff8e64b30335e8b2f6ecce0d5f577879c231eb839c06e259302b709f3d34e94a97047bfa984222f6 -libblastrampoline.v5.8.0+0.aarch64-linux-gnu.tar.gz/md5/9e781a026e03118df81347fb90f10d45 -libblastrampoline.v5.8.0+0.aarch64-linux-gnu.tar.gz/sha512/89469f32a666efd46437351a8fb16758c35e5aecc563d202b480c10ddf9fa5350a5a321076b79b0a1a07ec2cea0b73aa5c28979cc382a198fa96cca0b5899d25 -libblastrampoline.v5.8.0+0.aarch64-linux-musl.tar.gz/md5/b7acda2fdd157bbb183d0dd33643beef -libblastrampoline.v5.8.0+0.aarch64-linux-musl.tar.gz/sha512/cf4125a47334fe2ec0d5a4b11624b12e1366ec031500218f680ad5a53152b9d752c0c02a0b92d0e07f3eb21f2f8f58d0c587438a4869a72197bbd5e91531369d -libblastrampoline.v5.8.0+0.armv6l-linux-gnueabihf.tar.gz/md5/eafabd99fb1287d495acb8efb8091fde -libblastrampoline.v5.8.0+0.armv6l-linux-gnueabihf.tar.gz/sha512/63ff4e6bc400fa8ee713a1c5ae4af0a8e152d49860c6f5e94a17e426ad9f780d41cc0f84d33c75ea5347af1a53f07fc012798d603b6a94ea39f37cfd651a0719 -libblastrampoline.v5.8.0+0.armv6l-linux-musleabihf.tar.gz/md5/9788f74b375ef6b84c16c080f2be5bdd -libblastrampoline.v5.8.0+0.armv6l-linux-musleabihf.tar.gz/sha512/f00ebf794927404e2294a2fbb759b1e3e57836c7f683525fac0b2ac570da2c75904e43f154cf76fce310a624f9b35fbd40e6c7757882bb6f30db790f4221a543 -libblastrampoline.v5.8.0+0.armv7l-linux-gnueabihf.tar.gz/md5/4492bace63d8274d68ecdaa735e47e99 -libblastrampoline.v5.8.0+0.armv7l-linux-gnueabihf.tar.gz/sha512/8868283e6c5224b80145fdfd17f13f713053ba94e49c170f38f0cbf9f794185d7dec9c107ce65dc76121d3ac5b21d2f3857f619d8279bede86a906230ff59a71 -libblastrampoline.v5.8.0+0.armv7l-linux-musleabihf.tar.gz/md5/d66b6ed1d4e5f6a130f36791063e651d -libblastrampoline.v5.8.0+0.armv7l-linux-musleabihf.tar.gz/sha512/414ad07574a6e9aa670bbfea13eaea11da13129c9ccb4193cad708014c31493ff10ff427558b90cb16040fa64c8a325c2e375e3310c39fb37bb3e7fdb6a72a5f -libblastrampoline.v5.8.0+0.i686-linux-gnu.tar.gz/md5/595199a3a01174cfa4d9ce3407bf30dc -libblastrampoline.v5.8.0+0.i686-linux-gnu.tar.gz/sha512/02c3b0c3c0a411d5090a081f3bbbe38aaae40eaa5fe63d0690e0582e233cd9ce76483922557d4f65dc457e29a4e84d86ee5af20a60b082aec7bec4ca8607c1ca -libblastrampoline.v5.8.0+0.i686-linux-musl.tar.gz/md5/5832d0044842cb84f4e1e1b0a04b8205 -libblastrampoline.v5.8.0+0.i686-linux-musl.tar.gz/sha512/d28954d0feef6a33fa0bfeb59acb68821222d36a4e353eaf41936ee2c9aace719c2d0f0b0f080eafe2baecc67a29de4cacc0446aac776bbb615c4426d35c9c8f -libblastrampoline.v5.8.0+0.i686-w64-mingw32.tar.gz/md5/89c07640b6c7ed719199b0cd0a570961 -libblastrampoline.v5.8.0+0.i686-w64-mingw32.tar.gz/sha512/71241e83501ed473af0bf60a3223075e22a48788fdcf0ad5b2932861c89ec0741c61bf6a04c8a26e68b2f39d360b6009a79ea2502b5cccf28249738e7796be89 -libblastrampoline.v5.8.0+0.powerpc64le-linux-gnu.tar.gz/md5/5f76f5c6a88c0caaa6419ba212f8cb94 -libblastrampoline.v5.8.0+0.powerpc64le-linux-gnu.tar.gz/sha512/785071e682075b2cebd992394e66169f4ee2db3a8e23affb88dc05d9abf55f49d597b2a7400a13c83ad106ad825b5ee666b01f8625e51aec267132573273991e -libblastrampoline.v5.8.0+0.x86_64-apple-darwin.tar.gz/md5/21beb51d448bd22e4608a16b3f4fde05 -libblastrampoline.v5.8.0+0.x86_64-apple-darwin.tar.gz/sha512/620ba64d93ef416e483f813617aa313957282d8361f920b5444702fa911ff0051d1f8a8814b5fa0b082fd4dc77d96cb8b763937c786959bbc97cbb6131617152 -libblastrampoline.v5.8.0+0.x86_64-linux-gnu.tar.gz/md5/14c1045ba4d400f490ddea5343a46f04 -libblastrampoline.v5.8.0+0.x86_64-linux-gnu.tar.gz/sha512/0fdae83f4df93b28951521cf426736367f568c1e76fb68eea42b045cc9a288b6836abb3206a6d61e4f88adcf198553e911c45231aecb0f552e06de28eb3bec54 -libblastrampoline.v5.8.0+0.x86_64-linux-musl.tar.gz/md5/59b110676fcb2fcfdcf670a5d435d555 -libblastrampoline.v5.8.0+0.x86_64-linux-musl.tar.gz/sha512/57a5022e9fabc0637a29f3c32f6180cb4f6a90282191232e299df6cea5265b535e4a0af4fde15c8fe80e5a59edea0fae96dd3a510f5720ecd78e85a2a9ffbfe0 -libblastrampoline.v5.8.0+0.x86_64-unknown-freebsd.tar.gz/md5/cb1c14b4f8754561c5eaf8502582f09a -libblastrampoline.v5.8.0+0.x86_64-unknown-freebsd.tar.gz/sha512/d3b19a2a9b3dc674119590d920a2e99705de823e7d01a210485b31f8b1ce59253c4a70f2d8fb967f7fa05efb6ac376d94e79ffc6848607a366b2f0caa58b4208 -libblastrampoline.v5.8.0+0.x86_64-w64-mingw32.tar.gz/md5/34fdc53745245887f968f420b2f02ed9 -libblastrampoline.v5.8.0+0.x86_64-w64-mingw32.tar.gz/sha512/bbf478736b7bd57b340ccd5b6744d526a7a95fc524d30fdf9af6e9d79285641be26fae5f9e5302d71a5be76b05c379e969a829e259d8100ba9c6ce202b632b3d +libblastrampoline.v5.8.0+1.aarch64-apple-darwin.tar.gz/md5/a28837b9838fef2b3831de3278ec7949 +libblastrampoline.v5.8.0+1.aarch64-apple-darwin.tar.gz/sha512/111ac2fe5f8f8102f2f7c9e9e6aa1d1a12d2db941238c949ff8e64b30335e8b2f6ecce0d5f577879c231eb839c06e259302b709f3d34e94a97047bfa984222f6 +libblastrampoline.v5.8.0+1.aarch64-linux-gnu.tar.gz/md5/9e781a026e03118df81347fb90f10d45 +libblastrampoline.v5.8.0+1.aarch64-linux-gnu.tar.gz/sha512/89469f32a666efd46437351a8fb16758c35e5aecc563d202b480c10ddf9fa5350a5a321076b79b0a1a07ec2cea0b73aa5c28979cc382a198fa96cca0b5899d25 +libblastrampoline.v5.8.0+1.aarch64-linux-musl.tar.gz/md5/b7acda2fdd157bbb183d0dd33643beef +libblastrampoline.v5.8.0+1.aarch64-linux-musl.tar.gz/sha512/cf4125a47334fe2ec0d5a4b11624b12e1366ec031500218f680ad5a53152b9d752c0c02a0b92d0e07f3eb21f2f8f58d0c587438a4869a72197bbd5e91531369d +libblastrampoline.v5.8.0+1.armv6l-linux-gnueabihf.tar.gz/md5/eafabd99fb1287d495acb8efb8091fde +libblastrampoline.v5.8.0+1.armv6l-linux-gnueabihf.tar.gz/sha512/63ff4e6bc400fa8ee713a1c5ae4af0a8e152d49860c6f5e94a17e426ad9f780d41cc0f84d33c75ea5347af1a53f07fc012798d603b6a94ea39f37cfd651a0719 +libblastrampoline.v5.8.0+1.armv6l-linux-musleabihf.tar.gz/md5/9788f74b375ef6b84c16c080f2be5bdd +libblastrampoline.v5.8.0+1.armv6l-linux-musleabihf.tar.gz/sha512/f00ebf794927404e2294a2fbb759b1e3e57836c7f683525fac0b2ac570da2c75904e43f154cf76fce310a624f9b35fbd40e6c7757882bb6f30db790f4221a543 +libblastrampoline.v5.8.0+1.armv7l-linux-gnueabihf.tar.gz/md5/4492bace63d8274d68ecdaa735e47e99 +libblastrampoline.v5.8.0+1.armv7l-linux-gnueabihf.tar.gz/sha512/8868283e6c5224b80145fdfd17f13f713053ba94e49c170f38f0cbf9f794185d7dec9c107ce65dc76121d3ac5b21d2f3857f619d8279bede86a906230ff59a71 +libblastrampoline.v5.8.0+1.armv7l-linux-musleabihf.tar.gz/md5/d66b6ed1d4e5f6a130f36791063e651d +libblastrampoline.v5.8.0+1.armv7l-linux-musleabihf.tar.gz/sha512/414ad07574a6e9aa670bbfea13eaea11da13129c9ccb4193cad708014c31493ff10ff427558b90cb16040fa64c8a325c2e375e3310c39fb37bb3e7fdb6a72a5f +libblastrampoline.v5.8.0+1.i686-linux-gnu.tar.gz/md5/595199a3a01174cfa4d9ce3407bf30dc +libblastrampoline.v5.8.0+1.i686-linux-gnu.tar.gz/sha512/02c3b0c3c0a411d5090a081f3bbbe38aaae40eaa5fe63d0690e0582e233cd9ce76483922557d4f65dc457e29a4e84d86ee5af20a60b082aec7bec4ca8607c1ca +libblastrampoline.v5.8.0+1.i686-linux-musl.tar.gz/md5/5832d0044842cb84f4e1e1b0a04b8205 +libblastrampoline.v5.8.0+1.i686-linux-musl.tar.gz/sha512/d28954d0feef6a33fa0bfeb59acb68821222d36a4e353eaf41936ee2c9aace719c2d0f0b0f080eafe2baecc67a29de4cacc0446aac776bbb615c4426d35c9c8f +libblastrampoline.v5.8.0+1.i686-w64-mingw32.tar.gz/md5/46391ac222980a0ad2c2d6d2b54db26d +libblastrampoline.v5.8.0+1.i686-w64-mingw32.tar.gz/sha512/6dd3434648a297639ef327efa5827d6aea70df551774e52ba395cdf187bfb603d365eed84780913fda5f3d12512ac54ccf784da3cf6317671ab346211f5984b3 +libblastrampoline.v5.8.0+1.powerpc64le-linux-gnu.tar.gz/md5/5f76f5c6a88c0caaa6419ba212f8cb94 +libblastrampoline.v5.8.0+1.powerpc64le-linux-gnu.tar.gz/sha512/785071e682075b2cebd992394e66169f4ee2db3a8e23affb88dc05d9abf55f49d597b2a7400a13c83ad106ad825b5ee666b01f8625e51aec267132573273991e +libblastrampoline.v5.8.0+1.x86_64-apple-darwin.tar.gz/md5/21beb51d448bd22e4608a16b3f4fde05 +libblastrampoline.v5.8.0+1.x86_64-apple-darwin.tar.gz/sha512/620ba64d93ef416e483f813617aa313957282d8361f920b5444702fa911ff0051d1f8a8814b5fa0b082fd4dc77d96cb8b763937c786959bbc97cbb6131617152 +libblastrampoline.v5.8.0+1.x86_64-linux-gnu.tar.gz/md5/14c1045ba4d400f490ddea5343a46f04 +libblastrampoline.v5.8.0+1.x86_64-linux-gnu.tar.gz/sha512/0fdae83f4df93b28951521cf426736367f568c1e76fb68eea42b045cc9a288b6836abb3206a6d61e4f88adcf198553e911c45231aecb0f552e06de28eb3bec54 +libblastrampoline.v5.8.0+1.x86_64-linux-musl.tar.gz/md5/59b110676fcb2fcfdcf670a5d435d555 +libblastrampoline.v5.8.0+1.x86_64-linux-musl.tar.gz/sha512/57a5022e9fabc0637a29f3c32f6180cb4f6a90282191232e299df6cea5265b535e4a0af4fde15c8fe80e5a59edea0fae96dd3a510f5720ecd78e85a2a9ffbfe0 +libblastrampoline.v5.8.0+1.x86_64-unknown-freebsd.tar.gz/md5/c22da112cfc7f9fa0f103d08f4b78965 +libblastrampoline.v5.8.0+1.x86_64-unknown-freebsd.tar.gz/sha512/ace02fac0dc6df472456007a081e0aaa85a6b17290321fb214349aac0f2d0f893df602dca28fc26ddfd4ed574fd9063bacff343249e5a1109f5d92dc9cb7a1d3 +libblastrampoline.v5.8.0+1.x86_64-w64-mingw32.tar.gz/md5/34fdc53745245887f968f420b2f02ed9 +libblastrampoline.v5.8.0+1.x86_64-w64-mingw32.tar.gz/sha512/bbf478736b7bd57b340ccd5b6744d526a7a95fc524d30fdf9af6e9d79285641be26fae5f9e5302d71a5be76b05c379e969a829e259d8100ba9c6ce202b632b3d diff --git a/deps/checksums/clang b/deps/checksums/clang index 0096189e2e278..685d7403b5815 100644 --- a/deps/checksums/clang +++ b/deps/checksums/clang @@ -1,108 +1,108 @@ -Clang.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/3994ef8cee2fe488709909f5fffdc091 -Clang.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/0713994930b87768dbddeaf5ce5143380e83bfdf3e0e10aa1ba0337fa0ccfc3c84fa05786cccc2b2461d0bf3bf7dee45e18b4f7146c62ae624705f4d3e43df1e -Clang.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/dd097ca34e16abfcee18ec6b955f0d3b -Clang.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/446f31dbca35a307faec0a779737129c7878ce8c879637265120114f4c68365a6593e1f692c76ff160f5b264a0bb0e9b9f157315ee138ddebdcda1e6e9d3c030 -Clang.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/96a5a51c74d4d74ce9a5f7701f7da325 -Clang.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/d27e8931b89aaea97bf10a7bb9d9608a14537e352bbfdb496f0ef9537599f47ce11e519f77912a6befe96189a26c423a8359b1543b39558ec9648a82196c9057 -Clang.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/2bf9499f0016a6d3f192e9b982587fdc -Clang.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/956cc2c49b49a0d56575c8192e8bc8a3378d484ffafb3fc78f2f8d4331f1070a6fa8111c6bcd63d579a0e54546a3d5134a3c760c609a962e2a586d7b0d48646c -Clang.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/28ea22de73f4c555edeeb4ff22ce6099 -Clang.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/88491ec5f0c51e3a6b4b2b6877e9e8437f8b3145a22f8dfb05269f9ddf72c1b8eca496b650ce2e9a26101ad48d2e79d01b4b4a48883fb547d4445b24ab79bfd5 -Clang.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/9058d021eb893fb11313a04359d1d2b0 -Clang.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/5fd93a2278b3d3c6f6a1836722b97ccd099f17a36da900b8bd54f0b399bc9ee42e847bc094058c3f3ce77dfc6950b5cef9b4571f5941857280a370af16c8b7b3 -Clang.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/8ac220c9570fa66c2f13d9247dcfb324 -Clang.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/977077fd338912c2fdbb88f4bcf1591b6b4f648d6e7c9ba2783b331eb67da2e6b9b29f85446500f6dfb15c9e05af8fe9128dbf3e77dfa69bd597999873769e8d -Clang.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/f017a86ee8803f2099b04ecf254e8157 -Clang.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/c773d0c07234b03c71a1c2862f373f76d4c898fdbad35342c2e687a2afadaa220daad759afa5f88aa7eaab3d0d05f1e8eefcfd374bc1c92ddf638d42d20b74fa -Clang.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/80af25bf64203daaccc72f2274b60681 -Clang.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/913f8ee4c7f9618227673db0aad7e5e98f0fccb8a1faa84778ec84ab10ee8fe4d59a8115582420459de67b8667f3f4681bde59dab6dfa70ddeb8ff8b7fd1add2 -Clang.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/5b79fba21be10d03476c52ad0888d562 -Clang.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/075e074a0f460be27fddd32069dcf4ee48aacbdf480ea74356692b3d98808868a18166ae5e689b17faa6b0ae1f1453bb63d98ed119afd3f44a8e662fa602a57e -Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/90a9224695634cc70cc39b603cc8bc57 -Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/c1e388b838723b5251e6bf068a1790f83ccfe618be2e138b397d0a40c4f85f717bf01e8a46bbab48a91f182caef8e3fc291ec71a56df95fa60446a8858ac904b -Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/6f2ec0e8aaaeb7c9e0c1d826010886ba -Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/eb33e93ff5f3e32051c08c0aa42f1cc691dc364683ac484bb292f190911c879226282cea758224c9fea1bfcb934e4abbf4edd07666d9a2dee63d0ba40c2b3b47 -Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/2e8b81ef8017987c5ace824d524545cb -Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/76d1cfba99747038542946680dad02d9deb4fb6dafde6def13e95c393da5d5f5f2aa30889377c6f3a869963075b9181b3d7652016202767768e880f2fdea827d -Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/7556ca721d4e90e64a266c4b59fefc48 -Clang.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/8df1651aaa87364fe47da4fc993551a9f9ba575ca88c749b92d6586390e19c8b059c20081e4b76426b23cc1140d1bd38c216855d968f3dc01505e29dc5760367 -Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/fd294a76698157d71a3a64f4f4e442e5 -Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/71466cd9d0b46686af10e124bb026e02af240b5ad5f3844fa5c0bb152ee334a56d41e5c82c8b2e3778ea409f5dbc1074afe5a8121fcb157745420a2fcc3465f3 -Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/a2ad561f1a41ed993fc2edebbe1a6b3b -Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/51ed85190a1bdf89d0f5fe361381b0e0b773be05f510ac7b77747948f49dea49807d3d46cb3e948d22785884b8b92dcbf36d202087d2c2628fce6c73c6cd9789 -Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/98829294d5c6327582a8f9b1d7232083 -Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/d570b28e6a11d02467075e82931f8529671acd5e61992f462729d690810953535be31dcfe6fbdb3add0e00799809bf3afb529d227820c7f176e6193c24da7853 -Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/bd173830434f85d17e4857b7ffdb2dd1 -Clang.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/ff66a8b1085d67521aa58f766b7bfad2c19ec89add9a67be2c5984a7a5ff5aacf60d54e0448ce70ca80d9a7d972624b9a2be530f767c87ed6839f709a482a7aa -Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/34b020d23cd5b34ae47b2b0473822f14 -Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/250d55dfb02be3cfc4eeca0da386590d9fb0b9d6759360732b72b8663f4a3c843cd9e23ea08b8d272945fa64230e57f9a5bcdc4399dda2db54e51961e7c9f3e6 -Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/b3c76e91d6b43c7794b6ddb9d300d8f4 -Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/efbbcf2cfff1918e58fd850d99eec1e28cdaa11730b722a416e5da233a8fd0be685259052d5e9adf32c2c2364a4f96540a0175a44b8dc8d6ec872ef12394b9f2 -Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/81ae8ac294b1656b188dc437a7de6b10 -Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/1eac2968698b759bba3467205843183ed7279f24ae06f2d47b1cd4965c115d0b9f578ff7e0a6006883a462ad97c1829f3d706767de77a05d159bafa183064f84 -Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/581efd97263d337031ee761326320489 -Clang.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/ae28a7743146eba68831e0f1929f87596117ebf64d9284585c1909ed1b78a60e102618e4232b37017543351208e0d1183d81e0bbf737c7930bd35dd146c9a2bb -Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/34342cc1e94435ddac6ffc7ec89471f9 -Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/2e06c7a4b79a45d2139cadc3c10c4dbc086e6cf20b5f2ce90b50aad9bab6ffa4b55eef3dc9e40b495329a2a1eb9d0948b29a4495dc8a3cd56ce500087b9e63c6 -Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/de880e4c673351c777509ccfdc0a2579 -Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/e1becf694f1edbce097eaff7349c8a2ca8a1dda265c01a40549acf0dbcbbdf3c23d515236b114e6ec124f85e6bde380850ba72029de37cd36d59789936a21e83 -Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/93a4565b236d905021ab84b0a6c9fd34 -Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/d7c5b5e6fb627c2e19c72e42dcbcd8de9784dee522057d9fcdb03b0bba127de5517d72da8ca120c3cafabcfe6ac016526a7fbc090258119f5f6252d26d2c0c17 -Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/31d9e5992d969548f67b9478abfb1575 -Clang.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/28ed4cdf1a289ece1defb2d4f19cb03ad07963f8e9df62073fbde3adaf943e78085a6f2d03b6cbd3f00f10f61a3499f964e104c2c1ee73167965b84be0bca901 -Clang.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/8b6ffb09acc5d80408362b2705629db4 -Clang.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/d69bd543be8848c9349014f216af7ff1cb32401cf1b0a060a3687259cb56518933f65ac8ce24eca74e2bfc79a1900bc638ed1428e7823672d088efee8aa70387 -Clang.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/6dc4752e4987fbf9afc49b0a5a0b62f4 -Clang.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/7617ac0ad1496549f6a38d33414cbbd74b72dbb54758f24ffc88a42226cfb607babba73b7e33d9558bff2d208bac3ee8f3b2594990d5e5fda49819eff3ad0d05 -Clang.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/47cccd1ef2565df7196afe4da7659380 -Clang.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/9d25f2d0634e2b4f5b8d9e4fb57c65c7d5956cadc24bbdb67a62095f2e6378aba3a8f16a0bc3aea6656c97aa035b3179645e352ff1a0b01cb89a773e9edc0b89 -Clang.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/4e3fdf880b91a5fdbdcdff34386ee8de -Clang.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b02b3a7db9796d45d9d1bf1fc95495c71f6575a70ebf7f4d9d249bf117eb8bdbaa100b2d4e867f82da1b9f9d13ae0d7f68097d1b085b0b6f3826ed21723cc709 -Clang.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/859e942a9b7d0ee2fb626552e87586ad -Clang.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/23f4ecd6a2b4967d41a7a7ee18d3930b4c5e9dd4894a75c2f85e59be0c66bc0fccc7931e051258f36290affd64b6fa37b925ed53a68a0d0cb937a66a6ebfd263 -Clang.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/f1c4a569ea5705e9eb5c1807f4053c4a -Clang.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/73cbb461b39b25b9af334487cea4f16ede9d82ea615671a72d9cce28f9069c3f872f8caa85a3ca61d75919424cd03259a9ac7cbc6c245e1aee2f9afbeef37d7a -Clang.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/d350e088544d652bba6e8d7ee787fc5c -Clang.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/a2123559d0be8875dff1336127eee38fb38e1c65cc06ce3c37785b81bd78c0c3a07bdadbb9e1eb700eb93845fe82198ab900a9d4568fa243a39109ec5c3eed54 -Clang.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/70d920b3d62965a011b1884924b549c8 -Clang.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/4937846f3a0c1a2c1ff086e761a30d3cf8dd06b010e77e4d39264d86c3819526cc74f276d0bf2901d47244b07a4e3ae21d9a213e2ae23fb7f95aec4568e6298e -Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/7b0878064a5f8ba1953f5e76c4b63c18 -Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/542f057b2c3d6e829f34a615d7c9c021d793ce3723512b70f7e140640175b237a9669bd9f24563eede1dc5e25e37fa8910b1769ed344af9ea4d21bebc6638801 -Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/e797f5d917b08bdae66fdcab4f8367b5 -Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/40a379b2de5eafa8f202b258b8620bf82fb3eae384337120149ae17c7affa7e166a6b4fb77fb4ce94808c152efdf270ec22f03a2ca57aee27799ccc3c684b88c -Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/1fb0bda6cad1591b1b40752efaa1f198 -Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/0ff8a3d9fc53e5733b9ea9ea30a4c0023fc926704d2dc747a1802343e5c45f6cabed9fd3207cb146218bf8f71b4de79d708c3f169fa13e3eb35dde591509d84a -Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7e2922fc9c5e3f93b73af4b2f8502f7b -Clang.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b7656c67cbe9d6cfcd0837a4646819d9dcad83ab0907a570f8e66894f2650cbaa43c78796435b16bf28878b39e1c9254772b5aaa996f6a5629159c7c63caf26b -Clang.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/828fba3b956b5ae3c53337d7925001c7 -Clang.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/f251d08399c3781c4441cb598ad5d32434db5fc235f023c0c99356cdec94b0806fb46302c431af1944536a124640747577ceb5daf8cc96a9c5fe696ba5faed29 -Clang.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/4b93518a7c69cc83568468089ea98376 -Clang.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/0a7a0a2717e87ca6b2b8d50f5ae123c6ea86391ff6bfd19937b3beef599ef0e5d64cc21ea542ee5cc30f6b6d2951cf99c3448eba86aebe567a51a540d2aae794 -Clang.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/9ccb6fc99b35c72b6e566f3d2336c686 -Clang.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/af926692bcca26ea35450bb2794b94f6694ffbffbf54342f403dc47270e983ee697c06dbaefc143ecd0954100736586838987f51f8259e160b0ca06688514889 -Clang.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/ce36f48d88d7dad1aef44c11b30aebf8 -Clang.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/fbbf65977c5924830ff4c1c2c6d824a3635d09d4ee9304888030b8eca1bd7c06d8c053521068f663df932379cb3b7f0772589f7cca56156dd7053e6722d29953 -Clang.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/2b68c2057aeca1564106dab565fe876b -Clang.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/64c8be7c227fa52c9d90353d5ab72c179c8974b0bc048d6f5793d0ac08110b98c54e2e3f65416986b7049904cf86b5a865cf3de4423d7b0906b4e85a0dcacd21 -Clang.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/04a0a842bc490c440ec65927c285059f -Clang.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/82dc5eba9a795fe8d0e5c660aad1d902cde8c304ddfeb794d55a7b8decc97d27b648f658bb749b3bc25d2d50771febb0b481198459fc739c1d6944542c2b64f0 -Clang.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/1742d997df9bc95ddc7791e0f3ba49c8 -Clang.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/5187a9fddf31ea260d6d46f613d96c79b3c77bb8c7dd2752bc8d7becb7b7210a3d9ce195b2f03d466760bb4e52dee0beda22f238097e1472dbed04170b14e2c4 -Clang.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/79e68396face36fc162ab27b99714b34 -Clang.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/80f22d1bca302debb3e01213da099e5378eb3c1ff8684dbc8efca9145a27d1542a9a065e328c76148465dbb42268dad028004f38215289bbd862fc2cb12abf81 -Clang.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/e2f7246f9e8ebd73e21186f18985755d -Clang.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/6dcaa68abe3abff6f3e288aa34ce3591a8e92d933187715cb9bc7362947fefeba3ce1b3629efdcdcb1fa3be111f7614a10b4f0b73f3ed54f46d6d9791612305e -Clang.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/15a21dc979f82c71a2d743f76a539c5d -Clang.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/684b9d596c4e0c4567841cc913ba91671030765edea4642c1883d87c12ddc2a2e4ec82931b2024a66e37c48820aeedd1fc41982930396cf657596d8d3970bf09 -Clang.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/82d172f6be5b1ae34fb92f85f962b9d5 -Clang.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/62c39f038d7a616986314ec3da0ebc59cbed5a6cbac73becfae5a037e734922f4ab59e45a25c8c31242660fe4409023a1191c7311d0af1303d6170ec87d97413 -Clang.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/89c040d2773aa3f40fc1b0965d19b201 -Clang.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/adb704fc2545d766da18766b2e3b6353f9865dac7e46a54e5d83b6886ca5ba8a091a8ceed86fe12bbfc0b3dc12b990dcf1389ba8d27ffe1bf8291c9855ca69b0 -Clang.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/73b289f442e377a149e9e2e371fb0870 -Clang.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/636e50ba832e753d35aaf102cb1d33cfb29004150f4d8ed5fae2a07264b70c39491447cb376700d842fb9a2f6882156eba58e84d58021ca6a47a7e850823fa59 -Clang.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/9e81b9b49067f19c827c2e2b3386aca0 -Clang.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/45cea529842d1bb142db1b0f5162442cc8ce1c9a26e225a431326d362a239532679a57b2fa875e70ba9679451d975415930c0c7223bbcbca4a933334b12eb6f7 -Clang.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/d73d05082cbe59d44cae0143822f8f5b -Clang.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/6b497147e1bc458296aef639f0cb2c4e9a0ce9b452f970cf3d5f789c81884c41371a28d0608158aba7e1a328ea94334b4e7646ad32dffa915df9492fbfdc9bb5 -Clang.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/a2ea302b51f0bcdc648cc328fb263290 -Clang.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/5f04342029064f71b698a865d5fd4e407caed9751c443a4ed94ab195980ab14f9477a40cb4b914e9ff090d2067694104bc4bcd1b927cb2c07c268e5da142ccf0 +Clang.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/3994ef8cee2fe488709909f5fffdc091 +Clang.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/0713994930b87768dbddeaf5ce5143380e83bfdf3e0e10aa1ba0337fa0ccfc3c84fa05786cccc2b2461d0bf3bf7dee45e18b4f7146c62ae624705f4d3e43df1e +Clang.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/dd097ca34e16abfcee18ec6b955f0d3b +Clang.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/446f31dbca35a307faec0a779737129c7878ce8c879637265120114f4c68365a6593e1f692c76ff160f5b264a0bb0e9b9f157315ee138ddebdcda1e6e9d3c030 +Clang.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/96a5a51c74d4d74ce9a5f7701f7da325 +Clang.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/d27e8931b89aaea97bf10a7bb9d9608a14537e352bbfdb496f0ef9537599f47ce11e519f77912a6befe96189a26c423a8359b1543b39558ec9648a82196c9057 +Clang.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/2bf9499f0016a6d3f192e9b982587fdc +Clang.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/956cc2c49b49a0d56575c8192e8bc8a3378d484ffafb3fc78f2f8d4331f1070a6fa8111c6bcd63d579a0e54546a3d5134a3c760c609a962e2a586d7b0d48646c +Clang.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/28ea22de73f4c555edeeb4ff22ce6099 +Clang.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/88491ec5f0c51e3a6b4b2b6877e9e8437f8b3145a22f8dfb05269f9ddf72c1b8eca496b650ce2e9a26101ad48d2e79d01b4b4a48883fb547d4445b24ab79bfd5 +Clang.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/9058d021eb893fb11313a04359d1d2b0 +Clang.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/5fd93a2278b3d3c6f6a1836722b97ccd099f17a36da900b8bd54f0b399bc9ee42e847bc094058c3f3ce77dfc6950b5cef9b4571f5941857280a370af16c8b7b3 +Clang.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/8ac220c9570fa66c2f13d9247dcfb324 +Clang.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/977077fd338912c2fdbb88f4bcf1591b6b4f648d6e7c9ba2783b331eb67da2e6b9b29f85446500f6dfb15c9e05af8fe9128dbf3e77dfa69bd597999873769e8d +Clang.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/f017a86ee8803f2099b04ecf254e8157 +Clang.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/c773d0c07234b03c71a1c2862f373f76d4c898fdbad35342c2e687a2afadaa220daad759afa5f88aa7eaab3d0d05f1e8eefcfd374bc1c92ddf638d42d20b74fa +Clang.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/80af25bf64203daaccc72f2274b60681 +Clang.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/913f8ee4c7f9618227673db0aad7e5e98f0fccb8a1faa84778ec84ab10ee8fe4d59a8115582420459de67b8667f3f4681bde59dab6dfa70ddeb8ff8b7fd1add2 +Clang.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/5b79fba21be10d03476c52ad0888d562 +Clang.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/075e074a0f460be27fddd32069dcf4ee48aacbdf480ea74356692b3d98808868a18166ae5e689b17faa6b0ae1f1453bb63d98ed119afd3f44a8e662fa602a57e +Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/90a9224695634cc70cc39b603cc8bc57 +Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/c1e388b838723b5251e6bf068a1790f83ccfe618be2e138b397d0a40c4f85f717bf01e8a46bbab48a91f182caef8e3fc291ec71a56df95fa60446a8858ac904b +Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/6f2ec0e8aaaeb7c9e0c1d826010886ba +Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/eb33e93ff5f3e32051c08c0aa42f1cc691dc364683ac484bb292f190911c879226282cea758224c9fea1bfcb934e4abbf4edd07666d9a2dee63d0ba40c2b3b47 +Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/2e8b81ef8017987c5ace824d524545cb +Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/76d1cfba99747038542946680dad02d9deb4fb6dafde6def13e95c393da5d5f5f2aa30889377c6f3a869963075b9181b3d7652016202767768e880f2fdea827d +Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/7556ca721d4e90e64a266c4b59fefc48 +Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/8df1651aaa87364fe47da4fc993551a9f9ba575ca88c749b92d6586390e19c8b059c20081e4b76426b23cc1140d1bd38c216855d968f3dc01505e29dc5760367 +Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/fd294a76698157d71a3a64f4f4e442e5 +Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/71466cd9d0b46686af10e124bb026e02af240b5ad5f3844fa5c0bb152ee334a56d41e5c82c8b2e3778ea409f5dbc1074afe5a8121fcb157745420a2fcc3465f3 +Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/a2ad561f1a41ed993fc2edebbe1a6b3b +Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/51ed85190a1bdf89d0f5fe361381b0e0b773be05f510ac7b77747948f49dea49807d3d46cb3e948d22785884b8b92dcbf36d202087d2c2628fce6c73c6cd9789 +Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/98829294d5c6327582a8f9b1d7232083 +Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/d570b28e6a11d02467075e82931f8529671acd5e61992f462729d690810953535be31dcfe6fbdb3add0e00799809bf3afb529d227820c7f176e6193c24da7853 +Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/bd173830434f85d17e4857b7ffdb2dd1 +Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/ff66a8b1085d67521aa58f766b7bfad2c19ec89add9a67be2c5984a7a5ff5aacf60d54e0448ce70ca80d9a7d972624b9a2be530f767c87ed6839f709a482a7aa +Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/34b020d23cd5b34ae47b2b0473822f14 +Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/250d55dfb02be3cfc4eeca0da386590d9fb0b9d6759360732b72b8663f4a3c843cd9e23ea08b8d272945fa64230e57f9a5bcdc4399dda2db54e51961e7c9f3e6 +Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/b3c76e91d6b43c7794b6ddb9d300d8f4 +Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/efbbcf2cfff1918e58fd850d99eec1e28cdaa11730b722a416e5da233a8fd0be685259052d5e9adf32c2c2364a4f96540a0175a44b8dc8d6ec872ef12394b9f2 +Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/81ae8ac294b1656b188dc437a7de6b10 +Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/1eac2968698b759bba3467205843183ed7279f24ae06f2d47b1cd4965c115d0b9f578ff7e0a6006883a462ad97c1829f3d706767de77a05d159bafa183064f84 +Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/581efd97263d337031ee761326320489 +Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/ae28a7743146eba68831e0f1929f87596117ebf64d9284585c1909ed1b78a60e102618e4232b37017543351208e0d1183d81e0bbf737c7930bd35dd146c9a2bb +Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/34342cc1e94435ddac6ffc7ec89471f9 +Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/2e06c7a4b79a45d2139cadc3c10c4dbc086e6cf20b5f2ce90b50aad9bab6ffa4b55eef3dc9e40b495329a2a1eb9d0948b29a4495dc8a3cd56ce500087b9e63c6 +Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/de880e4c673351c777509ccfdc0a2579 +Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/e1becf694f1edbce097eaff7349c8a2ca8a1dda265c01a40549acf0dbcbbdf3c23d515236b114e6ec124f85e6bde380850ba72029de37cd36d59789936a21e83 +Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/93a4565b236d905021ab84b0a6c9fd34 +Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/d7c5b5e6fb627c2e19c72e42dcbcd8de9784dee522057d9fcdb03b0bba127de5517d72da8ca120c3cafabcfe6ac016526a7fbc090258119f5f6252d26d2c0c17 +Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/31d9e5992d969548f67b9478abfb1575 +Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/28ed4cdf1a289ece1defb2d4f19cb03ad07963f8e9df62073fbde3adaf943e78085a6f2d03b6cbd3f00f10f61a3499f964e104c2c1ee73167965b84be0bca901 +Clang.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/8b6ffb09acc5d80408362b2705629db4 +Clang.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/d69bd543be8848c9349014f216af7ff1cb32401cf1b0a060a3687259cb56518933f65ac8ce24eca74e2bfc79a1900bc638ed1428e7823672d088efee8aa70387 +Clang.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/6dc4752e4987fbf9afc49b0a5a0b62f4 +Clang.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/7617ac0ad1496549f6a38d33414cbbd74b72dbb54758f24ffc88a42226cfb607babba73b7e33d9558bff2d208bac3ee8f3b2594990d5e5fda49819eff3ad0d05 +Clang.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/47cccd1ef2565df7196afe4da7659380 +Clang.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/9d25f2d0634e2b4f5b8d9e4fb57c65c7d5956cadc24bbdb67a62095f2e6378aba3a8f16a0bc3aea6656c97aa035b3179645e352ff1a0b01cb89a773e9edc0b89 +Clang.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/4e3fdf880b91a5fdbdcdff34386ee8de +Clang.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b02b3a7db9796d45d9d1bf1fc95495c71f6575a70ebf7f4d9d249bf117eb8bdbaa100b2d4e867f82da1b9f9d13ae0d7f68097d1b085b0b6f3826ed21723cc709 +Clang.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/859e942a9b7d0ee2fb626552e87586ad +Clang.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/23f4ecd6a2b4967d41a7a7ee18d3930b4c5e9dd4894a75c2f85e59be0c66bc0fccc7931e051258f36290affd64b6fa37b925ed53a68a0d0cb937a66a6ebfd263 +Clang.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/f1c4a569ea5705e9eb5c1807f4053c4a +Clang.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/73cbb461b39b25b9af334487cea4f16ede9d82ea615671a72d9cce28f9069c3f872f8caa85a3ca61d75919424cd03259a9ac7cbc6c245e1aee2f9afbeef37d7a +Clang.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/f1750649bc2102333fee60be64cfcebc +Clang.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/9c512417ebdc0662a1003978f454d28ec5ddb059270172878a0ca62cc1b85a4e7b7a873d8361f52d0e89372f625f9238404f4b850618ff808592107803e80632 +Clang.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/d88610eb9c37cd5e438087b41960658c +Clang.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/79b241c911a38d363e86761500fd2fba3a439feda270132ec364bcf02189c3a97cfafdf73ef41e00364f8bf5e2ead602cdf5c5a699126e8a372bd3696d7f4b1f +Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/7b0878064a5f8ba1953f5e76c4b63c18 +Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/542f057b2c3d6e829f34a615d7c9c021d793ce3723512b70f7e140640175b237a9669bd9f24563eede1dc5e25e37fa8910b1769ed344af9ea4d21bebc6638801 +Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/e797f5d917b08bdae66fdcab4f8367b5 +Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/40a379b2de5eafa8f202b258b8620bf82fb3eae384337120149ae17c7affa7e166a6b4fb77fb4ce94808c152efdf270ec22f03a2ca57aee27799ccc3c684b88c +Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/1fb0bda6cad1591b1b40752efaa1f198 +Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/0ff8a3d9fc53e5733b9ea9ea30a4c0023fc926704d2dc747a1802343e5c45f6cabed9fd3207cb146218bf8f71b4de79d708c3f169fa13e3eb35dde591509d84a +Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7e2922fc9c5e3f93b73af4b2f8502f7b +Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b7656c67cbe9d6cfcd0837a4646819d9dcad83ab0907a570f8e66894f2650cbaa43c78796435b16bf28878b39e1c9254772b5aaa996f6a5629159c7c63caf26b +Clang.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/795b7f564282b22c2ef2cece8162044c +Clang.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/035781d34cc8ddb7e41eb3d46651589ab519cc4fbe0ba0de8d3602b1353027ad4826b619a33de5c033b85f4261471f6f4bd1e62164c07f945a731bd579919e08 +Clang.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/4430f9cbe83a8d97a993dfe7a4b3b044 +Clang.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/19e4ae8d491734b15fac101cbdbaf652cc37d420f64dcf127bd0fac6eb381fa040312f9c3b836f80fd9d6cb67a1951598dacd9abd826a227e639a685e086637f +Clang.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/9ccb6fc99b35c72b6e566f3d2336c686 +Clang.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/af926692bcca26ea35450bb2794b94f6694ffbffbf54342f403dc47270e983ee697c06dbaefc143ecd0954100736586838987f51f8259e160b0ca06688514889 +Clang.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/ce36f48d88d7dad1aef44c11b30aebf8 +Clang.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/fbbf65977c5924830ff4c1c2c6d824a3635d09d4ee9304888030b8eca1bd7c06d8c053521068f663df932379cb3b7f0772589f7cca56156dd7053e6722d29953 +Clang.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/2b68c2057aeca1564106dab565fe876b +Clang.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/64c8be7c227fa52c9d90353d5ab72c179c8974b0bc048d6f5793d0ac08110b98c54e2e3f65416986b7049904cf86b5a865cf3de4423d7b0906b4e85a0dcacd21 +Clang.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/04a0a842bc490c440ec65927c285059f +Clang.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/82dc5eba9a795fe8d0e5c660aad1d902cde8c304ddfeb794d55a7b8decc97d27b648f658bb749b3bc25d2d50771febb0b481198459fc739c1d6944542c2b64f0 +Clang.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/1742d997df9bc95ddc7791e0f3ba49c8 +Clang.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/5187a9fddf31ea260d6d46f613d96c79b3c77bb8c7dd2752bc8d7becb7b7210a3d9ce195b2f03d466760bb4e52dee0beda22f238097e1472dbed04170b14e2c4 +Clang.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/79e68396face36fc162ab27b99714b34 +Clang.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/80f22d1bca302debb3e01213da099e5378eb3c1ff8684dbc8efca9145a27d1542a9a065e328c76148465dbb42268dad028004f38215289bbd862fc2cb12abf81 +Clang.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/e2f7246f9e8ebd73e21186f18985755d +Clang.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/6dcaa68abe3abff6f3e288aa34ce3591a8e92d933187715cb9bc7362947fefeba3ce1b3629efdcdcb1fa3be111f7614a10b4f0b73f3ed54f46d6d9791612305e +Clang.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/15a21dc979f82c71a2d743f76a539c5d +Clang.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/684b9d596c4e0c4567841cc913ba91671030765edea4642c1883d87c12ddc2a2e4ec82931b2024a66e37c48820aeedd1fc41982930396cf657596d8d3970bf09 +Clang.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/82d172f6be5b1ae34fb92f85f962b9d5 +Clang.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/62c39f038d7a616986314ec3da0ebc59cbed5a6cbac73becfae5a037e734922f4ab59e45a25c8c31242660fe4409023a1191c7311d0af1303d6170ec87d97413 +Clang.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/89c040d2773aa3f40fc1b0965d19b201 +Clang.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/adb704fc2545d766da18766b2e3b6353f9865dac7e46a54e5d83b6886ca5ba8a091a8ceed86fe12bbfc0b3dc12b990dcf1389ba8d27ffe1bf8291c9855ca69b0 +Clang.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/b4c8315bcdb815f012e8c31913a06367 +Clang.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/0bf975521b50c2049bc24b363ae1aa7273471ff20ffbb3d6084561c6c83fd7f08d5ce882ab976d6ec5cffac74cc5ca1c0bf888afdbd8c0c42abc3a6d61a73969 +Clang.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/bbb5fd33559714a6cdc89472a78279e3 +Clang.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/d5635f4b34a21a39c52a494c8baa138d15b9455b08ca7d0882cb8920b5d272ae3b6f3a5f5f1ab7cafb53fd4c93d2bf9b7f1028b09c40e4991ae2e2b04669bad2 +Clang.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/f0a7ba2ba8ba4ef2a75e4e2d9fe5e6ca +Clang.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/0148d0fa525f35a1b8835bfcb7f7ddfb498d118762f960b678d236d5c6b2b16b104d6a56ec2763617ada8faba68d3572d61b73d263fd7dbbbc1111359262828d +Clang.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/7c1a2ade54354864e5d7064e6192a111 +Clang.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/abc8121210650568f4c3e84902f2ffb43f2d660c0b0efeebdcf15d11a87d6a6d0409f4db74d58acf4dea58e3167729e34c82170f65ee1735f4db47c487f723e1 diff --git a/deps/checksums/compilersupportlibraries b/deps/checksums/compilersupportlibraries index 4830109bd7aea..0908c34e13a58 100644 --- a/deps/checksums/compilersupportlibraries +++ b/deps/checksums/compilersupportlibraries @@ -1,92 +1,92 @@ -CompilerSupportLibraries.v1.0.5+0.aarch64-apple-darwin-libgfortran5.tar.gz/md5/20ebaad57850393b6ac9fa924e511fe4 -CompilerSupportLibraries.v1.0.5+0.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/020de4d8b0ff6bedbadaa305ff8445e6849f12053762ea4aa68412d1ec763dbd86f479587a2fbb862487f1feb04d976c38099ddf3887817a3d32b3f029cf85b1 -CompilerSupportLibraries.v1.0.5+0.aarch64-linux-gnu-libgfortran3.tar.gz/md5/3908fa1a2f739b330e787468c9bfb5c8 -CompilerSupportLibraries.v1.0.5+0.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/1741e3403ac7aa99e7cfd9a01222c4153ed300f47cc1b347e1af1a6cd07a82caaa54b9cfbebae8751440420551621cc6524504413446d104f9493dff2c081853 -CompilerSupportLibraries.v1.0.5+0.aarch64-linux-gnu-libgfortran4.tar.gz/md5/2444dbb7637b32cf543675cc12330878 -CompilerSupportLibraries.v1.0.5+0.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/8537f0b243df8544350c884021b21c585fd302e8dd462a30a6ee84c7a36a049133262e5d1bc362f972066b8e8d6a091c32c3b746bab1feb9fccf2e7cca65756c -CompilerSupportLibraries.v1.0.5+0.aarch64-linux-gnu-libgfortran5.tar.gz/md5/d79c1434594c0c5e7d6be798bf52c99e -CompilerSupportLibraries.v1.0.5+0.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/7e71accc401a45b51b298702fb4c79a2fc856c7b28f0935f6ad3a0db5381c55fe5432daff371842930d718024b7c6c1d80e2bd09d397145203673bebbe3496ae -CompilerSupportLibraries.v1.0.5+0.aarch64-linux-musl-libgfortran3.tar.gz/md5/f212059053d99558a9b0bf54b20180e1 -CompilerSupportLibraries.v1.0.5+0.aarch64-linux-musl-libgfortran3.tar.gz/sha512/5c104b1282cec8a944e5d008f44a4d60f4394fd5d797fec7d1f487d13e7328cd9c88ec4916dabf18596d87160756bda914e4f8c5a356b5577f9349d0d9e976d6 -CompilerSupportLibraries.v1.0.5+0.aarch64-linux-musl-libgfortran4.tar.gz/md5/3e3b3795ee93ef317223050e803a9875 -CompilerSupportLibraries.v1.0.5+0.aarch64-linux-musl-libgfortran4.tar.gz/sha512/85d3c955e15f66bfe8bfec2f28c9160bc03d4d531ea4ffe6bc6b51e0d69ccea3ab67a16ca752dabc870861c407381c4519d75c6be3832e8dccd6122ec8c6ed75 -CompilerSupportLibraries.v1.0.5+0.aarch64-linux-musl-libgfortran5.tar.gz/md5/cf2d1315f6a348af2e6c065e2a286e7a -CompilerSupportLibraries.v1.0.5+0.aarch64-linux-musl-libgfortran5.tar.gz/sha512/58420377bc77aa7678034ee5f708eb6be7db359faef2c2638869765453633da9bf455512bd88e95b38ae0428ecc4053561517b176b2371129bdaef9d8d5dadfd -CompilerSupportLibraries.v1.0.5+0.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/f5c09ed7e0eeb8d345d328f950582f26 -CompilerSupportLibraries.v1.0.5+0.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/9c657f55c8fcdeb404be168a3a63a5e84304730fe34f25673d92cdae4b0a1fcc6a877ee1433f060e1be854c7811d66632e32510a2ed591d88330f1340b9c20de -CompilerSupportLibraries.v1.0.5+0.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/c685518aca4721cd8621d510e2039683 -CompilerSupportLibraries.v1.0.5+0.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/b760468c6377dcd2b8dd50200daaabe604006afc070984d78152b2becd0680b59036c9a6e91dea490121bd85b58d285bfc1e1cf696d29af236528400101de36c -CompilerSupportLibraries.v1.0.5+0.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/8faf5c8ad62ab10f71dd2ec9683053e2 -CompilerSupportLibraries.v1.0.5+0.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/921239f241a5c89710cf07272d7f6c3f10201a7533068ed1e9643f9fb2f439e1bb765a4966d913829866ee0ce4f1589d30d06e4b5c1361e3c016a9473f087177 -CompilerSupportLibraries.v1.0.5+0.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/b38fcb70691ac2621379d298eef8c79e -CompilerSupportLibraries.v1.0.5+0.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/06c7f64257ce721f5941f6e50a0d2717cdc9394fc532ded19ce3eaacd5e92a416969534227562e4fee04d2b6340c650d8bc9779e14519b90038bc41e8d1f5ce3 -CompilerSupportLibraries.v1.0.5+0.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/cdfab2c7bc41765caf4441c3caeed761 -CompilerSupportLibraries.v1.0.5+0.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/7109d4a7b32c00309c42685f54a86fc2cc63c0c00f65584ad296b6e44ad3320eed1aaf49684a8831841cdffa5555d72f89272fb722a780596e27ef020528026b -CompilerSupportLibraries.v1.0.5+0.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/441980ebd23d72772cbe603f1c275336 -CompilerSupportLibraries.v1.0.5+0.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/e273d9f1af259a3080df8f173e1808a1ade976a943aba97216bf59a96178e7c052e7a048b0ceee53ab486ed577a2ecb92579857be2f7b29e76322ee1f13c9d76 -CompilerSupportLibraries.v1.0.5+0.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/f5c09ed7e0eeb8d345d328f950582f26 -CompilerSupportLibraries.v1.0.5+0.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/9c657f55c8fcdeb404be168a3a63a5e84304730fe34f25673d92cdae4b0a1fcc6a877ee1433f060e1be854c7811d66632e32510a2ed591d88330f1340b9c20de -CompilerSupportLibraries.v1.0.5+0.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/c685518aca4721cd8621d510e2039683 -CompilerSupportLibraries.v1.0.5+0.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/b760468c6377dcd2b8dd50200daaabe604006afc070984d78152b2becd0680b59036c9a6e91dea490121bd85b58d285bfc1e1cf696d29af236528400101de36c -CompilerSupportLibraries.v1.0.5+0.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/8faf5c8ad62ab10f71dd2ec9683053e2 -CompilerSupportLibraries.v1.0.5+0.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/921239f241a5c89710cf07272d7f6c3f10201a7533068ed1e9643f9fb2f439e1bb765a4966d913829866ee0ce4f1589d30d06e4b5c1361e3c016a9473f087177 -CompilerSupportLibraries.v1.0.5+0.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/b38fcb70691ac2621379d298eef8c79e -CompilerSupportLibraries.v1.0.5+0.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/06c7f64257ce721f5941f6e50a0d2717cdc9394fc532ded19ce3eaacd5e92a416969534227562e4fee04d2b6340c650d8bc9779e14519b90038bc41e8d1f5ce3 -CompilerSupportLibraries.v1.0.5+0.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/cdfab2c7bc41765caf4441c3caeed761 -CompilerSupportLibraries.v1.0.5+0.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/7109d4a7b32c00309c42685f54a86fc2cc63c0c00f65584ad296b6e44ad3320eed1aaf49684a8831841cdffa5555d72f89272fb722a780596e27ef020528026b -CompilerSupportLibraries.v1.0.5+0.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/441980ebd23d72772cbe603f1c275336 -CompilerSupportLibraries.v1.0.5+0.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/e273d9f1af259a3080df8f173e1808a1ade976a943aba97216bf59a96178e7c052e7a048b0ceee53ab486ed577a2ecb92579857be2f7b29e76322ee1f13c9d76 -CompilerSupportLibraries.v1.0.5+0.i686-linux-gnu-libgfortran3.tar.gz/md5/6decf8fd5afb50451771c761e63a8917 -CompilerSupportLibraries.v1.0.5+0.i686-linux-gnu-libgfortran3.tar.gz/sha512/4984724bcc847724b1bc005b6f760a18b68147f7d5402d0faf4e28fc0d14fa10975368a951f9caf2a8856500046dec8343043274557d58269e77492b929a9e4b -CompilerSupportLibraries.v1.0.5+0.i686-linux-gnu-libgfortran4.tar.gz/md5/39d1e8a3baa144c018d3eaf7f3806482 -CompilerSupportLibraries.v1.0.5+0.i686-linux-gnu-libgfortran4.tar.gz/sha512/fc4d429279c5a93b6c28b6e911b1e7cfd1c1cfe46f11f2e901b3832ce90d45f49d3d29f0ef18518a94af6cc8651f67c4ed81672680f9281ada390440b172a2af -CompilerSupportLibraries.v1.0.5+0.i686-linux-gnu-libgfortran5.tar.gz/md5/37dabd9cd224c9fed9633dedccb6c565 -CompilerSupportLibraries.v1.0.5+0.i686-linux-gnu-libgfortran5.tar.gz/sha512/b253149e72eef9486888fbaace66e9b6945f4477f6b818f64f3047331165b0e2bc17aa6e3fc8c88686a72e478eb62c8f53883415d5419db448d8016fa3a1da5e -CompilerSupportLibraries.v1.0.5+0.i686-linux-musl-libgfortran3.tar.gz/md5/afdd32bfadd465848e6be458817a44ae -CompilerSupportLibraries.v1.0.5+0.i686-linux-musl-libgfortran3.tar.gz/sha512/eebd679c499143014514c7c9d1875dedbbab9e3af51526c4dd445a9e3dbade95d24522da8bbad0a50ab400755e47b018828b324c4ad7705e212ccd990e34439a -CompilerSupportLibraries.v1.0.5+0.i686-linux-musl-libgfortran4.tar.gz/md5/bc4a0f0b7cea328f7e8850583774496b -CompilerSupportLibraries.v1.0.5+0.i686-linux-musl-libgfortran4.tar.gz/sha512/82285b67946212b49cddf6259f2c60ff5469f8c5263ccefe44f1d93ace98ab68e2c152e1b54434b2f075fd8d192c06d5451bc8cca26d951ad15f3453102f02b5 -CompilerSupportLibraries.v1.0.5+0.i686-linux-musl-libgfortran5.tar.gz/md5/177f0232abce8d523882530ed7a93092 -CompilerSupportLibraries.v1.0.5+0.i686-linux-musl-libgfortran5.tar.gz/sha512/db80acf0f2434f28ee7680e1beb34f564940071815d1ad89fb5913cbd9ac24da528e826d0d54be6265a7340ebd661b6d308ed79d96b67fa5d8c98dc3f1bee8d6 -CompilerSupportLibraries.v1.0.5+0.i686-w64-mingw32-libgfortran3.tar.gz/md5/f5795dada5360eb8422f45150b13bae9 -CompilerSupportLibraries.v1.0.5+0.i686-w64-mingw32-libgfortran3.tar.gz/sha512/6acd1bf7c81631cef9b8b0576ccece08723c5ae2f49de2487d3aefd25f9a0ad49df09e3782735267997d40687b04b85c89e00f6889b026af599bf1bbe91803a1 -CompilerSupportLibraries.v1.0.5+0.i686-w64-mingw32-libgfortran4.tar.gz/md5/5e590f83161913f0145ba8d496b2504b -CompilerSupportLibraries.v1.0.5+0.i686-w64-mingw32-libgfortran4.tar.gz/sha512/4a3f36588afcdef26173764597054068e26f2376e6126a9a94c46b258b5d7a29951d47b5e1ba24df6c3d139bbc4decc5c501a266811692d7fadadc7bd7b6960d -CompilerSupportLibraries.v1.0.5+0.i686-w64-mingw32-libgfortran5.tar.gz/md5/27da4a7c890fe1427c33fe214cc5feaf -CompilerSupportLibraries.v1.0.5+0.i686-w64-mingw32-libgfortran5.tar.gz/sha512/310ad00f053f9f3ec715ce2e8d20446f397728dff5acc787ea9c9332346607a3d42b678099c424e6d6e5294acddf2aa26051de657b48d34abfd04486951bf241 -CompilerSupportLibraries.v1.0.5+0.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/4e5e4b23dc87450738da33926a07511d -CompilerSupportLibraries.v1.0.5+0.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/fc09879d94b750e75775d8b64a41ab9924d675fb53c5700467604412928fe7f5cb21911da0f64898d2463fa77ffbaf4c96c397b9060f4746eec152747930cddc -CompilerSupportLibraries.v1.0.5+0.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/9a92138ed69aa317a932a615c6e62d69 -CompilerSupportLibraries.v1.0.5+0.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/0b7785379936a2a209b074177b1424dd7e00b29b5165f564e799b0aa4e06a582e9d616525d97274ba2507cb88192028f1ac485d3f99bdc7ee53fc63c1a7e85de -CompilerSupportLibraries.v1.0.5+0.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/8ffee3d6de5197c7a1f354d72c8238fa -CompilerSupportLibraries.v1.0.5+0.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/deadc4d7224c84f9b82dc956b69e815c44ae036802838365d870ab9f58c8bcf8ce0645f2f387c8ff344ac2108fc8e7e1ee907fa55e93c91aa5d9fd921bf3fdcb -CompilerSupportLibraries.v1.0.5+0.x86_64-apple-darwin-libgfortran3.tar.gz/md5/87449e72e3f33dbb69b7053cdc2649d4 -CompilerSupportLibraries.v1.0.5+0.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/5ce02ad10c6f4686a476eb2a5de2988cd8b482f5e693db2880c84ad1c82f468ef03fe01b9d0feefe5d4ee741d1d16643d36b144e6261ed32311b3b6f312fac2f -CompilerSupportLibraries.v1.0.5+0.x86_64-apple-darwin-libgfortran4.tar.gz/md5/0407cde92cfa42fa89ac83217ca0ec16 -CompilerSupportLibraries.v1.0.5+0.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/032c831f1166a336551138939ac40eb2c68a048ce786c0c1403b879a20c1b706caac16d22560b2c7f2b3d6373986c347188675674116005ca251336ee048d09f -CompilerSupportLibraries.v1.0.5+0.x86_64-apple-darwin-libgfortran5.tar.gz/md5/23418763b808371ee94772a90d501f4d -CompilerSupportLibraries.v1.0.5+0.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/7867b843551457b11bda7821dd384c1c1cf23b80a308b2058a693de7b7da099f0b37eb0a6de2b84c04b625a68c60eea55138e200d5d6ec6f6af09bd7ce406a96 -CompilerSupportLibraries.v1.0.5+0.x86_64-linux-gnu-libgfortran3.tar.gz/md5/e3d33ae03c18affea74699bdc1fabb68 -CompilerSupportLibraries.v1.0.5+0.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/42013f4921de5a69ad857195ce5c19ad1bca3c920d79699e5501f1f4534ab132fabd422362b2b5056f5d182215d6c069db5df460bafa700903faf962cc00f77b -CompilerSupportLibraries.v1.0.5+0.x86_64-linux-gnu-libgfortran4.tar.gz/md5/d40c1e8c0393213c6057c53a12f44175 -CompilerSupportLibraries.v1.0.5+0.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/fe7baa4de7490065ab7b953cc12f41462a24bcb49d0a4a64b23249e98e7569b19bb1cb455af2f76090e34066a7d3cdd7a48cae6515ce6c7a5c8486b0cacc5106 -CompilerSupportLibraries.v1.0.5+0.x86_64-linux-gnu-libgfortran5.tar.gz/md5/48541b90f715c4c86ee4da0570275947 -CompilerSupportLibraries.v1.0.5+0.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/7f2683fb98e80f12629f4ed3bea9fd59d32b7e7a9ed1699e782d8e238ff0915ecc61bf00adaf4597cfe41caf82cdca0f9be250f595f5f0bea6d8f77dba99eaf4 -CompilerSupportLibraries.v1.0.5+0.x86_64-linux-musl-libgfortran3.tar.gz/md5/4547059eb905995667be48bf85d49911 -CompilerSupportLibraries.v1.0.5+0.x86_64-linux-musl-libgfortran3.tar.gz/sha512/7400fdabc924434ab4a4949248c3603887ac06ffd2f205ae33e14495d86cd4f816bbd1999eeafa0257f518df1e7f7c522f596e847a71dbfbfccff4859f50acc7 -CompilerSupportLibraries.v1.0.5+0.x86_64-linux-musl-libgfortran4.tar.gz/md5/46267543cad6584d7b7b9fcc8f18f21d -CompilerSupportLibraries.v1.0.5+0.x86_64-linux-musl-libgfortran4.tar.gz/sha512/0353d7d724be48d4185d3c181692970b7996f53f6a01723072aa5c94b53a8c5055faeed30df51659c252a46f4b941dec0cb24569323e3c85c166f14c5b7c8e9e -CompilerSupportLibraries.v1.0.5+0.x86_64-linux-musl-libgfortran5.tar.gz/md5/14dba2897a6e9d370fa9091c045375fc -CompilerSupportLibraries.v1.0.5+0.x86_64-linux-musl-libgfortran5.tar.gz/sha512/10b79f9c059839f5b57fa8d2a381a034c4067262c4088bd354d14ea56bec097878069383aa9cfadaa09d73bd20fc348fb61662d863a8d62cb25d7af6b8e29858 -CompilerSupportLibraries.v1.0.5+0.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/eed836d1addeb10d0901f836724aff1e -CompilerSupportLibraries.v1.0.5+0.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/e33eca424d1529a1fb23ba9cf7fac345ed1cfc8073c975b6b31ca44d2e8c3f5083af65433df009b22483dceb2e43149f3c1e8433681fec5fb812e1d5b4243ce4 -CompilerSupportLibraries.v1.0.5+0.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/d5ae9f9519341fdaabf62267c89461d2 -CompilerSupportLibraries.v1.0.5+0.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/6421aa5d1bd6f08ad43f59ed4dc1bef8b9b598ebbbd3e48149730f3bec3471f8e2c02ffb338427326924290b8f52ef9e626e3313448bc931a61d866c5dc544ae -CompilerSupportLibraries.v1.0.5+0.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/fc1df521395362a5aaa2e2aeef707207 -CompilerSupportLibraries.v1.0.5+0.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/f2e5a08e3cae171242ae6a20d2d4838c1529ce042745dc466148b7bbc06896d94476fd05c7787e6e8641bea752dfc0e6b09e95b160bede600d20d2ad68e7705f -CompilerSupportLibraries.v1.0.5+0.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/0c2fc6fae4ebe293a7f0dc1e91f6531a -CompilerSupportLibraries.v1.0.5+0.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/fdb0ad061cacad0557fde3ec216fd3666284f24ad6a86f4a4b6f946dccb112c9704f52edba86f3b17d84c824affbcfef740720348ef227380cf6017811bda80b -CompilerSupportLibraries.v1.0.5+0.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/005e608dbef2b5cdb7624702ccc426be -CompilerSupportLibraries.v1.0.5+0.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/8bb2bcd0a6b1901e8a9be20f505bead5c78ecafbe5a8271cd13385553e5744e0c7bff62976ac9e7d74b8f3bd467603d4c0f5658e6b120bb23066c15e0a644ed4 -CompilerSupportLibraries.v1.0.5+0.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/d6c2c7ad72bff7f7e5c43678d716a57a -CompilerSupportLibraries.v1.0.5+0.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/36f5eba1b0be440797467cb7104652b74709913d2bad1b08ee2dc70f450fb8eab81b28f2b0bc8dfc238b3c46982c69aac831b4fad5bcee4e9dd114852fcb4a0b +CompilerSupportLibraries.v1.0.5+1.aarch64-apple-darwin-libgfortran5.tar.gz/md5/20ebaad57850393b6ac9fa924e511fe4 +CompilerSupportLibraries.v1.0.5+1.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/020de4d8b0ff6bedbadaa305ff8445e6849f12053762ea4aa68412d1ec763dbd86f479587a2fbb862487f1feb04d976c38099ddf3887817a3d32b3f029cf85b1 +CompilerSupportLibraries.v1.0.5+1.aarch64-linux-gnu-libgfortran3.tar.gz/md5/3908fa1a2f739b330e787468c9bfb5c8 +CompilerSupportLibraries.v1.0.5+1.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/1741e3403ac7aa99e7cfd9a01222c4153ed300f47cc1b347e1af1a6cd07a82caaa54b9cfbebae8751440420551621cc6524504413446d104f9493dff2c081853 +CompilerSupportLibraries.v1.0.5+1.aarch64-linux-gnu-libgfortran4.tar.gz/md5/2444dbb7637b32cf543675cc12330878 +CompilerSupportLibraries.v1.0.5+1.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/8537f0b243df8544350c884021b21c585fd302e8dd462a30a6ee84c7a36a049133262e5d1bc362f972066b8e8d6a091c32c3b746bab1feb9fccf2e7cca65756c +CompilerSupportLibraries.v1.0.5+1.aarch64-linux-gnu-libgfortran5.tar.gz/md5/d79c1434594c0c5e7d6be798bf52c99e +CompilerSupportLibraries.v1.0.5+1.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/7e71accc401a45b51b298702fb4c79a2fc856c7b28f0935f6ad3a0db5381c55fe5432daff371842930d718024b7c6c1d80e2bd09d397145203673bebbe3496ae +CompilerSupportLibraries.v1.0.5+1.aarch64-linux-musl-libgfortran3.tar.gz/md5/f212059053d99558a9b0bf54b20180e1 +CompilerSupportLibraries.v1.0.5+1.aarch64-linux-musl-libgfortran3.tar.gz/sha512/5c104b1282cec8a944e5d008f44a4d60f4394fd5d797fec7d1f487d13e7328cd9c88ec4916dabf18596d87160756bda914e4f8c5a356b5577f9349d0d9e976d6 +CompilerSupportLibraries.v1.0.5+1.aarch64-linux-musl-libgfortran4.tar.gz/md5/3e3b3795ee93ef317223050e803a9875 +CompilerSupportLibraries.v1.0.5+1.aarch64-linux-musl-libgfortran4.tar.gz/sha512/85d3c955e15f66bfe8bfec2f28c9160bc03d4d531ea4ffe6bc6b51e0d69ccea3ab67a16ca752dabc870861c407381c4519d75c6be3832e8dccd6122ec8c6ed75 +CompilerSupportLibraries.v1.0.5+1.aarch64-linux-musl-libgfortran5.tar.gz/md5/cf2d1315f6a348af2e6c065e2a286e7a +CompilerSupportLibraries.v1.0.5+1.aarch64-linux-musl-libgfortran5.tar.gz/sha512/58420377bc77aa7678034ee5f708eb6be7db359faef2c2638869765453633da9bf455512bd88e95b38ae0428ecc4053561517b176b2371129bdaef9d8d5dadfd +CompilerSupportLibraries.v1.0.5+1.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/f5c09ed7e0eeb8d345d328f950582f26 +CompilerSupportLibraries.v1.0.5+1.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/9c657f55c8fcdeb404be168a3a63a5e84304730fe34f25673d92cdae4b0a1fcc6a877ee1433f060e1be854c7811d66632e32510a2ed591d88330f1340b9c20de +CompilerSupportLibraries.v1.0.5+1.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/c685518aca4721cd8621d510e2039683 +CompilerSupportLibraries.v1.0.5+1.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/b760468c6377dcd2b8dd50200daaabe604006afc070984d78152b2becd0680b59036c9a6e91dea490121bd85b58d285bfc1e1cf696d29af236528400101de36c +CompilerSupportLibraries.v1.0.5+1.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/8faf5c8ad62ab10f71dd2ec9683053e2 +CompilerSupportLibraries.v1.0.5+1.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/921239f241a5c89710cf07272d7f6c3f10201a7533068ed1e9643f9fb2f439e1bb765a4966d913829866ee0ce4f1589d30d06e4b5c1361e3c016a9473f087177 +CompilerSupportLibraries.v1.0.5+1.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/b38fcb70691ac2621379d298eef8c79e +CompilerSupportLibraries.v1.0.5+1.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/06c7f64257ce721f5941f6e50a0d2717cdc9394fc532ded19ce3eaacd5e92a416969534227562e4fee04d2b6340c650d8bc9779e14519b90038bc41e8d1f5ce3 +CompilerSupportLibraries.v1.0.5+1.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/cdfab2c7bc41765caf4441c3caeed761 +CompilerSupportLibraries.v1.0.5+1.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/7109d4a7b32c00309c42685f54a86fc2cc63c0c00f65584ad296b6e44ad3320eed1aaf49684a8831841cdffa5555d72f89272fb722a780596e27ef020528026b +CompilerSupportLibraries.v1.0.5+1.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/441980ebd23d72772cbe603f1c275336 +CompilerSupportLibraries.v1.0.5+1.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/e273d9f1af259a3080df8f173e1808a1ade976a943aba97216bf59a96178e7c052e7a048b0ceee53ab486ed577a2ecb92579857be2f7b29e76322ee1f13c9d76 +CompilerSupportLibraries.v1.0.5+1.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/f5c09ed7e0eeb8d345d328f950582f26 +CompilerSupportLibraries.v1.0.5+1.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/9c657f55c8fcdeb404be168a3a63a5e84304730fe34f25673d92cdae4b0a1fcc6a877ee1433f060e1be854c7811d66632e32510a2ed591d88330f1340b9c20de +CompilerSupportLibraries.v1.0.5+1.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/c685518aca4721cd8621d510e2039683 +CompilerSupportLibraries.v1.0.5+1.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/b760468c6377dcd2b8dd50200daaabe604006afc070984d78152b2becd0680b59036c9a6e91dea490121bd85b58d285bfc1e1cf696d29af236528400101de36c +CompilerSupportLibraries.v1.0.5+1.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/8faf5c8ad62ab10f71dd2ec9683053e2 +CompilerSupportLibraries.v1.0.5+1.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/921239f241a5c89710cf07272d7f6c3f10201a7533068ed1e9643f9fb2f439e1bb765a4966d913829866ee0ce4f1589d30d06e4b5c1361e3c016a9473f087177 +CompilerSupportLibraries.v1.0.5+1.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/b38fcb70691ac2621379d298eef8c79e +CompilerSupportLibraries.v1.0.5+1.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/06c7f64257ce721f5941f6e50a0d2717cdc9394fc532ded19ce3eaacd5e92a416969534227562e4fee04d2b6340c650d8bc9779e14519b90038bc41e8d1f5ce3 +CompilerSupportLibraries.v1.0.5+1.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/cdfab2c7bc41765caf4441c3caeed761 +CompilerSupportLibraries.v1.0.5+1.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/7109d4a7b32c00309c42685f54a86fc2cc63c0c00f65584ad296b6e44ad3320eed1aaf49684a8831841cdffa5555d72f89272fb722a780596e27ef020528026b +CompilerSupportLibraries.v1.0.5+1.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/441980ebd23d72772cbe603f1c275336 +CompilerSupportLibraries.v1.0.5+1.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/e273d9f1af259a3080df8f173e1808a1ade976a943aba97216bf59a96178e7c052e7a048b0ceee53ab486ed577a2ecb92579857be2f7b29e76322ee1f13c9d76 +CompilerSupportLibraries.v1.0.5+1.i686-linux-gnu-libgfortran3.tar.gz/md5/6decf8fd5afb50451771c761e63a8917 +CompilerSupportLibraries.v1.0.5+1.i686-linux-gnu-libgfortran3.tar.gz/sha512/4984724bcc847724b1bc005b6f760a18b68147f7d5402d0faf4e28fc0d14fa10975368a951f9caf2a8856500046dec8343043274557d58269e77492b929a9e4b +CompilerSupportLibraries.v1.0.5+1.i686-linux-gnu-libgfortran4.tar.gz/md5/39d1e8a3baa144c018d3eaf7f3806482 +CompilerSupportLibraries.v1.0.5+1.i686-linux-gnu-libgfortran4.tar.gz/sha512/fc4d429279c5a93b6c28b6e911b1e7cfd1c1cfe46f11f2e901b3832ce90d45f49d3d29f0ef18518a94af6cc8651f67c4ed81672680f9281ada390440b172a2af +CompilerSupportLibraries.v1.0.5+1.i686-linux-gnu-libgfortran5.tar.gz/md5/37dabd9cd224c9fed9633dedccb6c565 +CompilerSupportLibraries.v1.0.5+1.i686-linux-gnu-libgfortran5.tar.gz/sha512/b253149e72eef9486888fbaace66e9b6945f4477f6b818f64f3047331165b0e2bc17aa6e3fc8c88686a72e478eb62c8f53883415d5419db448d8016fa3a1da5e +CompilerSupportLibraries.v1.0.5+1.i686-linux-musl-libgfortran3.tar.gz/md5/afdd32bfadd465848e6be458817a44ae +CompilerSupportLibraries.v1.0.5+1.i686-linux-musl-libgfortran3.tar.gz/sha512/eebd679c499143014514c7c9d1875dedbbab9e3af51526c4dd445a9e3dbade95d24522da8bbad0a50ab400755e47b018828b324c4ad7705e212ccd990e34439a +CompilerSupportLibraries.v1.0.5+1.i686-linux-musl-libgfortran4.tar.gz/md5/bc4a0f0b7cea328f7e8850583774496b +CompilerSupportLibraries.v1.0.5+1.i686-linux-musl-libgfortran4.tar.gz/sha512/82285b67946212b49cddf6259f2c60ff5469f8c5263ccefe44f1d93ace98ab68e2c152e1b54434b2f075fd8d192c06d5451bc8cca26d951ad15f3453102f02b5 +CompilerSupportLibraries.v1.0.5+1.i686-linux-musl-libgfortran5.tar.gz/md5/177f0232abce8d523882530ed7a93092 +CompilerSupportLibraries.v1.0.5+1.i686-linux-musl-libgfortran5.tar.gz/sha512/db80acf0f2434f28ee7680e1beb34f564940071815d1ad89fb5913cbd9ac24da528e826d0d54be6265a7340ebd661b6d308ed79d96b67fa5d8c98dc3f1bee8d6 +CompilerSupportLibraries.v1.0.5+1.i686-w64-mingw32-libgfortran3.tar.gz/md5/f5795dada5360eb8422f45150b13bae9 +CompilerSupportLibraries.v1.0.5+1.i686-w64-mingw32-libgfortran3.tar.gz/sha512/6acd1bf7c81631cef9b8b0576ccece08723c5ae2f49de2487d3aefd25f9a0ad49df09e3782735267997d40687b04b85c89e00f6889b026af599bf1bbe91803a1 +CompilerSupportLibraries.v1.0.5+1.i686-w64-mingw32-libgfortran4.tar.gz/md5/5e590f83161913f0145ba8d496b2504b +CompilerSupportLibraries.v1.0.5+1.i686-w64-mingw32-libgfortran4.tar.gz/sha512/4a3f36588afcdef26173764597054068e26f2376e6126a9a94c46b258b5d7a29951d47b5e1ba24df6c3d139bbc4decc5c501a266811692d7fadadc7bd7b6960d +CompilerSupportLibraries.v1.0.5+1.i686-w64-mingw32-libgfortran5.tar.gz/md5/27da4a7c890fe1427c33fe214cc5feaf +CompilerSupportLibraries.v1.0.5+1.i686-w64-mingw32-libgfortran5.tar.gz/sha512/310ad00f053f9f3ec715ce2e8d20446f397728dff5acc787ea9c9332346607a3d42b678099c424e6d6e5294acddf2aa26051de657b48d34abfd04486951bf241 +CompilerSupportLibraries.v1.0.5+1.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/4e5e4b23dc87450738da33926a07511d +CompilerSupportLibraries.v1.0.5+1.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/fc09879d94b750e75775d8b64a41ab9924d675fb53c5700467604412928fe7f5cb21911da0f64898d2463fa77ffbaf4c96c397b9060f4746eec152747930cddc +CompilerSupportLibraries.v1.0.5+1.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/9a92138ed69aa317a932a615c6e62d69 +CompilerSupportLibraries.v1.0.5+1.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/0b7785379936a2a209b074177b1424dd7e00b29b5165f564e799b0aa4e06a582e9d616525d97274ba2507cb88192028f1ac485d3f99bdc7ee53fc63c1a7e85de +CompilerSupportLibraries.v1.0.5+1.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/8ffee3d6de5197c7a1f354d72c8238fa +CompilerSupportLibraries.v1.0.5+1.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/deadc4d7224c84f9b82dc956b69e815c44ae036802838365d870ab9f58c8bcf8ce0645f2f387c8ff344ac2108fc8e7e1ee907fa55e93c91aa5d9fd921bf3fdcb +CompilerSupportLibraries.v1.0.5+1.x86_64-apple-darwin-libgfortran3.tar.gz/md5/87449e72e3f33dbb69b7053cdc2649d4 +CompilerSupportLibraries.v1.0.5+1.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/5ce02ad10c6f4686a476eb2a5de2988cd8b482f5e693db2880c84ad1c82f468ef03fe01b9d0feefe5d4ee741d1d16643d36b144e6261ed32311b3b6f312fac2f +CompilerSupportLibraries.v1.0.5+1.x86_64-apple-darwin-libgfortran4.tar.gz/md5/0407cde92cfa42fa89ac83217ca0ec16 +CompilerSupportLibraries.v1.0.5+1.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/032c831f1166a336551138939ac40eb2c68a048ce786c0c1403b879a20c1b706caac16d22560b2c7f2b3d6373986c347188675674116005ca251336ee048d09f +CompilerSupportLibraries.v1.0.5+1.x86_64-apple-darwin-libgfortran5.tar.gz/md5/23418763b808371ee94772a90d501f4d +CompilerSupportLibraries.v1.0.5+1.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/7867b843551457b11bda7821dd384c1c1cf23b80a308b2058a693de7b7da099f0b37eb0a6de2b84c04b625a68c60eea55138e200d5d6ec6f6af09bd7ce406a96 +CompilerSupportLibraries.v1.0.5+1.x86_64-linux-gnu-libgfortran3.tar.gz/md5/e3d33ae03c18affea74699bdc1fabb68 +CompilerSupportLibraries.v1.0.5+1.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/42013f4921de5a69ad857195ce5c19ad1bca3c920d79699e5501f1f4534ab132fabd422362b2b5056f5d182215d6c069db5df460bafa700903faf962cc00f77b +CompilerSupportLibraries.v1.0.5+1.x86_64-linux-gnu-libgfortran4.tar.gz/md5/d40c1e8c0393213c6057c53a12f44175 +CompilerSupportLibraries.v1.0.5+1.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/fe7baa4de7490065ab7b953cc12f41462a24bcb49d0a4a64b23249e98e7569b19bb1cb455af2f76090e34066a7d3cdd7a48cae6515ce6c7a5c8486b0cacc5106 +CompilerSupportLibraries.v1.0.5+1.x86_64-linux-gnu-libgfortran5.tar.gz/md5/48541b90f715c4c86ee4da0570275947 +CompilerSupportLibraries.v1.0.5+1.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/7f2683fb98e80f12629f4ed3bea9fd59d32b7e7a9ed1699e782d8e238ff0915ecc61bf00adaf4597cfe41caf82cdca0f9be250f595f5f0bea6d8f77dba99eaf4 +CompilerSupportLibraries.v1.0.5+1.x86_64-linux-musl-libgfortran3.tar.gz/md5/4547059eb905995667be48bf85d49911 +CompilerSupportLibraries.v1.0.5+1.x86_64-linux-musl-libgfortran3.tar.gz/sha512/7400fdabc924434ab4a4949248c3603887ac06ffd2f205ae33e14495d86cd4f816bbd1999eeafa0257f518df1e7f7c522f596e847a71dbfbfccff4859f50acc7 +CompilerSupportLibraries.v1.0.5+1.x86_64-linux-musl-libgfortran4.tar.gz/md5/46267543cad6584d7b7b9fcc8f18f21d +CompilerSupportLibraries.v1.0.5+1.x86_64-linux-musl-libgfortran4.tar.gz/sha512/0353d7d724be48d4185d3c181692970b7996f53f6a01723072aa5c94b53a8c5055faeed30df51659c252a46f4b941dec0cb24569323e3c85c166f14c5b7c8e9e +CompilerSupportLibraries.v1.0.5+1.x86_64-linux-musl-libgfortran5.tar.gz/md5/14dba2897a6e9d370fa9091c045375fc +CompilerSupportLibraries.v1.0.5+1.x86_64-linux-musl-libgfortran5.tar.gz/sha512/10b79f9c059839f5b57fa8d2a381a034c4067262c4088bd354d14ea56bec097878069383aa9cfadaa09d73bd20fc348fb61662d863a8d62cb25d7af6b8e29858 +CompilerSupportLibraries.v1.0.5+1.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/1f069e9c832fa1e9c7c8d51e3e841f5c +CompilerSupportLibraries.v1.0.5+1.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/877ed9953bc167ade224fc503a2b639c7c333d420804ccf0d3b1637e29bdaf8c608a8f7accb3ec7983d6881c4b00729a1327a121c741022aff1e627cdffb52ce +CompilerSupportLibraries.v1.0.5+1.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/3e542990ca4192dcecf2e8b8b17e8580 +CompilerSupportLibraries.v1.0.5+1.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/0b9cf0f431a5de28bc11af31d965beaf6774d4e83cb3877fdca630d0327312eb966485d6a99d62b0212f505a6714c23fc7ac1ed17ec619baff13941f6ce7519c +CompilerSupportLibraries.v1.0.5+1.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/b09302632fda815a1248884a82a6f95a +CompilerSupportLibraries.v1.0.5+1.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/7a64ae14e40d285bbcd27a0f54ba6ad0a108ee4f4fed7c99d3a876a70578445e0c7108fa945f3f5a0b202cf95e533b96eedaf7641ded6e9869af77db98075709 +CompilerSupportLibraries.v1.0.5+1.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/0c2fc6fae4ebe293a7f0dc1e91f6531a +CompilerSupportLibraries.v1.0.5+1.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/fdb0ad061cacad0557fde3ec216fd3666284f24ad6a86f4a4b6f946dccb112c9704f52edba86f3b17d84c824affbcfef740720348ef227380cf6017811bda80b +CompilerSupportLibraries.v1.0.5+1.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/005e608dbef2b5cdb7624702ccc426be +CompilerSupportLibraries.v1.0.5+1.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/8bb2bcd0a6b1901e8a9be20f505bead5c78ecafbe5a8271cd13385553e5744e0c7bff62976ac9e7d74b8f3bd467603d4c0f5658e6b120bb23066c15e0a644ed4 +CompilerSupportLibraries.v1.0.5+1.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/d6c2c7ad72bff7f7e5c43678d716a57a +CompilerSupportLibraries.v1.0.5+1.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/36f5eba1b0be440797467cb7104652b74709913d2bad1b08ee2dc70f450fb8eab81b28f2b0bc8dfc238b3c46982c69aac831b4fad5bcee4e9dd114852fcb4a0b diff --git a/deps/checksums/curl b/deps/checksums/curl index 85974ba0bc8a0..a00275ccdde4d 100644 --- a/deps/checksums/curl +++ b/deps/checksums/curl @@ -1,36 +1,36 @@ LibCURL-a65b64f6eabc932f63c2c0a4a5fb5d75f3e688d0.tar.gz/md5/e8c53aa3fb963c80921787d5d565eb2c LibCURL-a65b64f6eabc932f63c2c0a4a5fb5d75f3e688d0.tar.gz/sha512/8e442ea834299df9c02acb87226c121395ad8e550025ac5ee1103df09c6ff43817e9e48dd1bcbc92c80331ef3ddff531962430269115179acbec2bab2de5b011 -LibCURL.v8.0.1+0.aarch64-apple-darwin.tar.gz/md5/f697b4391608c2916ef159187e0d0b29 -LibCURL.v8.0.1+0.aarch64-apple-darwin.tar.gz/sha512/41da87eed77ffac391a60a4af7fdc707f117affebe54960eaf43e3077440ce17d95fbe0f47de41bb1456e222e7a126d687fa0beb26cf98713b3472e9b3ba9e57 -LibCURL.v8.0.1+0.aarch64-linux-gnu.tar.gz/md5/9d3e7e7601ac21a587bbb4289e149225 -LibCURL.v8.0.1+0.aarch64-linux-gnu.tar.gz/sha512/67ac7bc108cc274ee5e088411dd9d652a969952892236d6c37a6dcd710a1887f9ff83df2c01ca0f5b16b2086852077d6c62ae7a13f7b9ac4b9e257cd1aacb0ea -LibCURL.v8.0.1+0.aarch64-linux-musl.tar.gz/md5/bd2b62cd40b9e87fe149d842d4ff55ca -LibCURL.v8.0.1+0.aarch64-linux-musl.tar.gz/sha512/7c6bff3dbe341e2a271b61e02767a25768b74631894c789fffdef580605d821518274a04d9441c9b5d3255b9a9297d0d35f22310dccaab367aa92d928f25c062 -LibCURL.v8.0.1+0.armv6l-linux-gnueabihf.tar.gz/md5/9effcc21c5074ef88ad54c8b6b7a3f8f -LibCURL.v8.0.1+0.armv6l-linux-gnueabihf.tar.gz/sha512/9327fc8e0db9edcf941548b0291e0bafe9b956e92f6edf47795ca961303a24ed305b30b09f29478a70149056411c4ca4652facbeca89c2bb3db41a6c97df14a9 -LibCURL.v8.0.1+0.armv6l-linux-musleabihf.tar.gz/md5/9cb716973ec75e2a2fa7379201aad59f -LibCURL.v8.0.1+0.armv6l-linux-musleabihf.tar.gz/sha512/3e4d22be628af7b478862593653a5d34c2d69623b70f128d9f15641ab3366282aadee96bc46ffacafa0dcbc539fbbda4e92f6ff5c7a4e65f59040948233eabce -LibCURL.v8.0.1+0.armv7l-linux-gnueabihf.tar.gz/md5/95bd98a64034f8dfc5e1dda8fb7ac94e -LibCURL.v8.0.1+0.armv7l-linux-gnueabihf.tar.gz/sha512/6a7898670e71efd7f06e614cdf535cf390eb6def9e93409d4ce2d9811a8e1f892959c0f6ca8e370f49e215df495ee8f95e1b7d9f92e2708ca548344b6ef9cc22 -LibCURL.v8.0.1+0.armv7l-linux-musleabihf.tar.gz/md5/42aeb569e80865377c65bba6cc84b262 -LibCURL.v8.0.1+0.armv7l-linux-musleabihf.tar.gz/sha512/fa46e52d8abd49e22636e48fb43f11be95bfdabbc13142e0cdaf4bb892ff982eb09abd9f3bf1c33ad374efc18ce21ab9968ed22c084411a55afddec0c459ab3d -LibCURL.v8.0.1+0.i686-linux-gnu.tar.gz/md5/ded5d6d6580b979c372992c0fcf0aad6 -LibCURL.v8.0.1+0.i686-linux-gnu.tar.gz/sha512/f8a40285a25d61878e87d525bebcfe6e8c30cc5a40f38297de774c8e3191490c38716b3938cf81582afb23714a38405c20ed0241bcd3d41c68a5594822498b70 -LibCURL.v8.0.1+0.i686-linux-musl.tar.gz/md5/cd2bcf96545c783f5012611824169a93 -LibCURL.v8.0.1+0.i686-linux-musl.tar.gz/sha512/318dd3adcbf36c7979df9f394e78b7fb876dc60c9ec87d6b0edf47676c69df4dc3e73c07b2434b15c6e7497b385dc0fbf3fe7e3235b291a369f6f1d883c99645 -LibCURL.v8.0.1+0.i686-w64-mingw32.tar.gz/md5/276cc56eaf744ac0a5cec6c8c396ede7 -LibCURL.v8.0.1+0.i686-w64-mingw32.tar.gz/sha512/55cd7882ad976aeed1acaab7b1d59279ff3a0d2456d0bffa6240957ac6f152e903485f0ca05baafa5e97e0d1474cb204987eb9c94b1b2ddd657b52864a44c646 -LibCURL.v8.0.1+0.powerpc64le-linux-gnu.tar.gz/md5/cfdc41294b2f4aa85bb8b27beced17ca -LibCURL.v8.0.1+0.powerpc64le-linux-gnu.tar.gz/sha512/24f92091ab44a3be40228a9d9a57febc026f49b12c538c98e46a06dbcd679086332b773662126c68dbe4a60dd90a77c970c8a398237afbcf06c660fdbea16a76 -LibCURL.v8.0.1+0.x86_64-apple-darwin.tar.gz/md5/10a19a4f428951adbca7cfee91406498 -LibCURL.v8.0.1+0.x86_64-apple-darwin.tar.gz/sha512/28ddbad4310ed886c65edf28ccf01a5aba77fe11784740600aaec2aaa5c10c5e5915e297a4d72dd85bbc5304bb2027f5d18b95f13868b4bb1353fafed7bce4e0 -LibCURL.v8.0.1+0.x86_64-linux-gnu.tar.gz/md5/a68df850605cc9ec24268887e4b4ea77 -LibCURL.v8.0.1+0.x86_64-linux-gnu.tar.gz/sha512/f532dfcc84dbb4b92229a79b5629b16198061158e1f12d2dd37948cd0ceccc095221b5fc9a8e2de30de19727c727ee500c8ea4508722c677c7938ddef1c40350 -LibCURL.v8.0.1+0.x86_64-linux-musl.tar.gz/md5/023a2d8271173de0a02bdca8d1d55bbe -LibCURL.v8.0.1+0.x86_64-linux-musl.tar.gz/sha512/e3195f917c250f31ce9669c304918b33664c5b03583f328929e73377f4feff525cedac42dc74adc9ba98a704630294a5697f07eb95ca520c6db4a67f0f83383f -LibCURL.v8.0.1+0.x86_64-unknown-freebsd.tar.gz/md5/ecd39a1cc45ee76751e1e3c5edf469d7 -LibCURL.v8.0.1+0.x86_64-unknown-freebsd.tar.gz/sha512/fa06afb1173bc23474f8f7992268ae9a0df52bc3c1af86d2b60da2cfff43371bb029b51debe638d81d8a1dd334a95dcd3c53dc12923220ad9b1336fcdad1ff8a -LibCURL.v8.0.1+0.x86_64-w64-mingw32.tar.gz/md5/d9a735335e3603635a56eb3b86e6ea87 -LibCURL.v8.0.1+0.x86_64-w64-mingw32.tar.gz/sha512/8fc6677b1be27a900d2a984cf9f9f4b3aa1555bfd732da2bd6553c28da98048c4c86216b57744d7156de94c522b013768e57f42e662845002e5bd9f730c818a8 +LibCURL.v8.0.1+1.aarch64-apple-darwin.tar.gz/md5/f697b4391608c2916ef159187e0d0b29 +LibCURL.v8.0.1+1.aarch64-apple-darwin.tar.gz/sha512/41da87eed77ffac391a60a4af7fdc707f117affebe54960eaf43e3077440ce17d95fbe0f47de41bb1456e222e7a126d687fa0beb26cf98713b3472e9b3ba9e57 +LibCURL.v8.0.1+1.aarch64-linux-gnu.tar.gz/md5/710e50aaf42370a38fa8f920b5d056f3 +LibCURL.v8.0.1+1.aarch64-linux-gnu.tar.gz/sha512/4e0db50a9022c4adacf37c60f6bf1312018bef2f6427064bfe90aca31e20e9e3242efaea7e488f5a2ffca1f123ae1de651c73257b2038ec786061b07dc30c2cc +LibCURL.v8.0.1+1.aarch64-linux-musl.tar.gz/md5/b2b5a812aecbfc5ba98f1a30d48f3fd1 +LibCURL.v8.0.1+1.aarch64-linux-musl.tar.gz/sha512/38cfe9e0bb7e6f5723fab27ed8f51d80c8a3919510ebd6eec65025e649b55a4efed7033aa82e962110c3c5d07b8367a7ba310b8afeb5b98268af6a1e197eb122 +LibCURL.v8.0.1+1.armv6l-linux-gnueabihf.tar.gz/md5/ccb09d04429ad300a2b3a83edb8becaf +LibCURL.v8.0.1+1.armv6l-linux-gnueabihf.tar.gz/sha512/cde5303869670866568cdbd53196f874ee754f030b76720ba334915d987b2cfb4a8ef0c5dabc43e7fd517be96ba5225f69e23129049501902bcdbc2333ecefd3 +LibCURL.v8.0.1+1.armv6l-linux-musleabihf.tar.gz/md5/a326606b34caebd8feb3bab402eac1ea +LibCURL.v8.0.1+1.armv6l-linux-musleabihf.tar.gz/sha512/94a7159ba74184eaf6c26bf3ec0fe11fc44923507bb4fae3e3bbb401099ed2f2b1016046005a43e5066402517dd98ad815c4fbf27e718289c42453a781b1ae90 +LibCURL.v8.0.1+1.armv7l-linux-gnueabihf.tar.gz/md5/bfba4cd2a3bf49e8c3ef2964e9c8a904 +LibCURL.v8.0.1+1.armv7l-linux-gnueabihf.tar.gz/sha512/b3277858e67cbfcfca02bb62493c169e4317a541289435d9f849ee58d54763251ff38d69f87f24da9f5b5cff7bce50e8fe539519fce65c0bf0b23f7fbe5d4921 +LibCURL.v8.0.1+1.armv7l-linux-musleabihf.tar.gz/md5/f229ffb2993da2c8d0e032a540966145 +LibCURL.v8.0.1+1.armv7l-linux-musleabihf.tar.gz/sha512/129f3e77a6155f5cbd38aa7196b641e5dfbe03babbb0b64e2677ce040710bf1586f1d7bc0e511b0172eeb17e79edcade094420bd19872688c2a0217f5133ee9e +LibCURL.v8.0.1+1.i686-linux-gnu.tar.gz/md5/c1000a39b9a7411b1fc32f9a5f44348a +LibCURL.v8.0.1+1.i686-linux-gnu.tar.gz/sha512/ed015c5a62eebee0191a6910d97446f6af9fc6871b7a4213fe05c33ef4694801082a84bfffc25e2c575d497934910ff50260540c7fa0df90c25dbe1e2241386f +LibCURL.v8.0.1+1.i686-linux-musl.tar.gz/md5/270bab5961328c8ed95d20e7a4578fbf +LibCURL.v8.0.1+1.i686-linux-musl.tar.gz/sha512/f24c0deae950479d176de47c27b0a73f6059319c9d66d3b868172558cc03e4e20ce31d86fc9ecaf07fb51640f37da4b8fe1c67e5f0c79ec97d604675d0ceac00 +LibCURL.v8.0.1+1.i686-w64-mingw32.tar.gz/md5/9d1cdb92455130345833c92f572e7877 +LibCURL.v8.0.1+1.i686-w64-mingw32.tar.gz/sha512/1d9d0eff49d85cbf3f6c0be478f3d01a828ea080b475e28154987ea3815c327bf13630e6805cee9cf9b0bf328d4d875bb8727ce6c119c3eeaa3c5375dffe6dc6 +LibCURL.v8.0.1+1.powerpc64le-linux-gnu.tar.gz/md5/8918b54901051222e07af43fb33b93cf +LibCURL.v8.0.1+1.powerpc64le-linux-gnu.tar.gz/sha512/f147c1c26f4fb6a8d04b3146fbe45efc2f13b425d432995b63d12995d3daa8d36d2107e490a6c62d7851fb31ee837f4beab52e61df6dc8fab1d22aa2f00fb1fb +LibCURL.v8.0.1+1.x86_64-apple-darwin.tar.gz/md5/10a19a4f428951adbca7cfee91406498 +LibCURL.v8.0.1+1.x86_64-apple-darwin.tar.gz/sha512/28ddbad4310ed886c65edf28ccf01a5aba77fe11784740600aaec2aaa5c10c5e5915e297a4d72dd85bbc5304bb2027f5d18b95f13868b4bb1353fafed7bce4e0 +LibCURL.v8.0.1+1.x86_64-linux-gnu.tar.gz/md5/0c2a633d3ab15df3369018b608488e8d +LibCURL.v8.0.1+1.x86_64-linux-gnu.tar.gz/sha512/59d13e33fbb2705996e567fa12fd5216d262b929003c2e59ab4c61a1d15641430e0e6173d1e14ed54811fc466c2a97826701c9356d16a6a8ce8e6f685193a904 +LibCURL.v8.0.1+1.x86_64-linux-musl.tar.gz/md5/2387b901f2a5bbb3b837d30a62838960 +LibCURL.v8.0.1+1.x86_64-linux-musl.tar.gz/sha512/93da418d402f8fb1d7074b9951c9378c6becb9c1f07bed18f700351fd2b5da9849da46b735bf7c6dd8380df5c3286ec90068866d1006d312f2181d710afec028 +LibCURL.v8.0.1+1.x86_64-unknown-freebsd.tar.gz/md5/90fec1618ec5bd774f241f6076faa896 +LibCURL.v8.0.1+1.x86_64-unknown-freebsd.tar.gz/sha512/fd83752fb0bf9200f44f3a3b4f01cf649d352abc0c750e5aef19bd9bfd128300df3977f4ad2f614222cd1cc8f4d39a0dc33376ed34543b55d74bd109db0f9071 +LibCURL.v8.0.1+1.x86_64-w64-mingw32.tar.gz/md5/db973bbb7961678a139087e911c37f3c +LibCURL.v8.0.1+1.x86_64-w64-mingw32.tar.gz/sha512/700cb1ad207a62ba0997fc625fdb3595eee859c6eb88242f3fd9269c2035d24aef36f3fff610fa37ecc783ecf88a5f65fd29a492338b54649bb930611672db5c curl-8.0.1.tar.bz2/md5/b2e694208b4891d7396d118712148ff3 curl-8.0.1.tar.bz2/sha512/24e84e922612ebf19341525c5f12f36e730cd21a5279cbea6421742d1ba61e5fa404f2add2e71d64e5692a1feabfa92c5a5d56501f161d1e157718fee467e0a5 diff --git a/deps/checksums/dsfmt b/deps/checksums/dsfmt index edadf5c01b1d7..63c7e26f0eb43 100644 --- a/deps/checksums/dsfmt +++ b/deps/checksums/dsfmt @@ -1,34 +1,34 @@ -dSFMT.v2.2.4+1.aarch64-apple-darwin.tar.gz/md5/0299af20dae6bed519635900687f4aeb -dSFMT.v2.2.4+1.aarch64-apple-darwin.tar.gz/sha512/5f20bd7602f09dcb23299d979372453db9a0e76a66129d69cc93c4b45a65ad377486f3cecb7093ff65307f515358420dc318b19eaf5945ff2fbfbe6886e95efa -dSFMT.v2.2.4+1.aarch64-linux-gnu.tar.gz/md5/78a0fa53ad3db17f2849c744246a6bc6 -dSFMT.v2.2.4+1.aarch64-linux-gnu.tar.gz/sha512/b855bf3349f1ee33978d2c35999fe24a91ee17c5af345881e26351099cea05477528da9df43773d82e20917b4b1dd8c5590eb5ebb99cb5c9c425d03e38192e32 -dSFMT.v2.2.4+1.aarch64-linux-musl.tar.gz/md5/45829fa624e98f806e184cfdbb918a7a -dSFMT.v2.2.4+1.aarch64-linux-musl.tar.gz/sha512/28823838bba7c1bb40f636835b1f7b15c49c5395a72a1261f3d5eb22c54b487b98bbcd7cd79f12297ffb37c62bfc3b69f0ce9b7036b5c2662d6305497d2e09dc -dSFMT.v2.2.4+1.armv6l-linux-gnueabihf.tar.gz/md5/fdf55ed8c59b6cc0409fc8154777d57e -dSFMT.v2.2.4+1.armv6l-linux-gnueabihf.tar.gz/sha512/8249e8a74ea958ebdd1e4e967d1020158c49643bc33855a5f0043b77026c250371d60b95e8370e0f67dbbaa380a7c02fc1c4eff7d49933a5f471393abc2a266f -dSFMT.v2.2.4+1.armv6l-linux-musleabihf.tar.gz/md5/4814dcf836033065745f3532ceabeb33 -dSFMT.v2.2.4+1.armv6l-linux-musleabihf.tar.gz/sha512/75b8df698762e421cbef208cf7fda556f812f7e9c0481f83ddf38e468459ffa6fbdde86b5942f28f47225c73901c9863246f77eed93abd73052b6d0918717444 -dSFMT.v2.2.4+1.armv7l-linux-gnueabihf.tar.gz/md5/bff0a088b3bdf557dcebc48c2b260bb5 -dSFMT.v2.2.4+1.armv7l-linux-gnueabihf.tar.gz/sha512/609b45b7330bbf6e093fe6277dd14c9e23fd8c8c5e4db6a7275d29c6436f7602cd5069a0912a6ae3fd02d492a25c56400166b25c02b7379eb152eba3aa019dcb -dSFMT.v2.2.4+1.armv7l-linux-musleabihf.tar.gz/md5/5193c1f1c2d056b3ffd265f4ef18965b -dSFMT.v2.2.4+1.armv7l-linux-musleabihf.tar.gz/sha512/3e1b0af492a83c076087923d317291fd473670626599d3d03ed86a4515362a24610f3a9b2bd4b71c15bf86b03e44a11fd973f9f16d8b01bfdabbf7ee1ea7f4bb -dSFMT.v2.2.4+1.i686-linux-gnu.tar.gz/md5/69b959d409030f86eefbe1a0d4196787 -dSFMT.v2.2.4+1.i686-linux-gnu.tar.gz/sha512/0ff871b96031c5f11e5c5fbb4fd35c8bf5e3b1fa5c43dcece275bc847a82b89f0f60db5b273bef2dd31572e89c98694fd1cbc2b442ee3a5fdf3b44e8707ef338 -dSFMT.v2.2.4+1.i686-linux-musl.tar.gz/md5/1fd3b4d5169be306b86cca9dfa6f014c -dSFMT.v2.2.4+1.i686-linux-musl.tar.gz/sha512/d5e129abf6ff8a1077bb9de27fdc17c131f26d9c3707c189c02649290b50699f26e39230ef875fd172b54b1e28b1b595cbf835c6a8c36e1101951444e174f02a -dSFMT.v2.2.4+1.i686-w64-mingw32.tar.gz/md5/2a6ea60fe134309ecafb0efd5364b186 -dSFMT.v2.2.4+1.i686-w64-mingw32.tar.gz/sha512/50ffad9c0071746acff16532b71d84d53c6f11039aa10167f49ac9293f4819a905f63f521c93a45daed5068df0fea1699a15a1a1d6c100dce0932cce4165442d -dSFMT.v2.2.4+1.powerpc64le-linux-gnu.tar.gz/md5/060a4ed22e6e36a661b08c804a7272bd -dSFMT.v2.2.4+1.powerpc64le-linux-gnu.tar.gz/sha512/f1367b910512b996c4e6bfcb4a99afc3640a4ad5ec8e6a2fc092d677c7eb68527800c4d248188a2cd7a2d427cab472a2fdb48978aeab39805a62f774dc58bb50 -dSFMT.v2.2.4+1.x86_64-apple-darwin.tar.gz/md5/d768332dd9902c4e3869a160fb002af3 -dSFMT.v2.2.4+1.x86_64-apple-darwin.tar.gz/sha512/db3e43ea9b884fb2ddc9585a224d85835ead169f5996ffb20930a8970893f9cbbd8b54832a4fc78745c7dcd7991f973e929965ffded32ae8289c0be68316e60d -dSFMT.v2.2.4+1.x86_64-linux-gnu.tar.gz/md5/671e5a06c68d23854051c78268bfb9ed -dSFMT.v2.2.4+1.x86_64-linux-gnu.tar.gz/sha512/0b8eb9e527cea444fdc33a3089684f9b85a8889370fe0b240718d32332523f1175e38a9b51fdabf4a38bad4a820e956baceac253001213b1fc3e7a5eabf8664a -dSFMT.v2.2.4+1.x86_64-linux-musl.tar.gz/md5/65929d7a40fea8e8783cdeb77205ee06 -dSFMT.v2.2.4+1.x86_64-linux-musl.tar.gz/sha512/ce1b49365b764cf67ef4757f91078ea11afc6e07c4a776258a09f58c9ff84ece440d80714a491c1a21da06ea6a67bd27d2933b862dbfecf3c357f3c32ebb4fc1 -dSFMT.v2.2.4+1.x86_64-unknown-freebsd.tar.gz/md5/e27869ac4f1ea6774ade7d3b53cd301b -dSFMT.v2.2.4+1.x86_64-unknown-freebsd.tar.gz/sha512/762571a5d5773c2d9780586603859272f48ed67d6c8b09cd95c92fd62dc9bb03c274b12c2c04e05f426c9a42edbbc8e33beba3c79865f2c49459eca2d588b14c -dSFMT.v2.2.4+1.x86_64-w64-mingw32.tar.gz/md5/74e5c27ba9eb654b4e998ce73719e724 -dSFMT.v2.2.4+1.x86_64-w64-mingw32.tar.gz/sha512/59badcef14b06f14f8f5bce1c72de6750c8310ae18581e24b5d663edefe1bed3d120b4cebb87b53dc664411b62d9802f75aefde4e5236ada1dec740e6ef2445d +dSFMT.v2.2.4+4.aarch64-apple-darwin.tar.gz/md5/43b52709b7794c92931286174854c886 +dSFMT.v2.2.4+4.aarch64-apple-darwin.tar.gz/sha512/018b67a06cdf42dda2a906025e8a12e026af9b39fe8281890dc90d66a422c3af2a8430d42677f79d123fd0ab0e8d5c37db2e0a00ef03731d35cbb65f9e59b108 +dSFMT.v2.2.4+4.aarch64-linux-gnu.tar.gz/md5/260e14855dbc7773a2ca906d58cc57f2 +dSFMT.v2.2.4+4.aarch64-linux-gnu.tar.gz/sha512/820ca4c6afde931e855b74015150f4ffbb513276c3fa7dbcc1ec8d34c02d4989fb7424a6e4f81f93d054811b5f54f8633d955b05acdb088387ee90f1c3b00915 +dSFMT.v2.2.4+4.aarch64-linux-musl.tar.gz/md5/7ddccbad6b5c9de4be187fe76637a0d8 +dSFMT.v2.2.4+4.aarch64-linux-musl.tar.gz/sha512/e3c225da00927096e3a6cd4abc681fba8f469cb74828e7054d4f5684d71dcb8e75c9a81f14fa10bfbb78f62f9567a31a92edcca8d797e5810a2a44a3fc17bc84 +dSFMT.v2.2.4+4.armv6l-linux-gnueabihf.tar.gz/md5/a70329e0a6c57009c6b6950fd34089f6 +dSFMT.v2.2.4+4.armv6l-linux-gnueabihf.tar.gz/sha512/4418c42165660adc050e872ef834f920c89ed6a0d2b816821672b1e862e947aad7efd023289da9bf05bb2eb9ec4b9d2561c403e2d5384d5314a4ba016b1f9cfc +dSFMT.v2.2.4+4.armv6l-linux-musleabihf.tar.gz/md5/6ffc798b8a0c847fa5cb93640bd66ab3 +dSFMT.v2.2.4+4.armv6l-linux-musleabihf.tar.gz/sha512/94e5ae07d0b1420abd7290519bce6f77deae634bbb4df31e3f02416bf509e555a9b1c9d19dd77ca76a308c2b86d5c9d4718b9ef83c13167b88a8181d8ca7e73a +dSFMT.v2.2.4+4.armv7l-linux-gnueabihf.tar.gz/md5/660d95aa08580ca1716a89c4d8b1eb24 +dSFMT.v2.2.4+4.armv7l-linux-gnueabihf.tar.gz/sha512/bc757a9f805047be5375f92c10a3f3eab69345a4ec5cc997f763e66be36144a74d414ff926df8e17b9d5a2394189269c3188c55e0b7c75a72495394d65510cef +dSFMT.v2.2.4+4.armv7l-linux-musleabihf.tar.gz/md5/78c487049092fe61949d506637c713bb +dSFMT.v2.2.4+4.armv7l-linux-musleabihf.tar.gz/sha512/03ddada4478f05eab7d2971b2deaf2cba91f084d7ce66fc8219bcb3cf5c308ea13959fed95568ca80f4ce11794e197092984919265716de8f2558e2cb30d94ce +dSFMT.v2.2.4+4.i686-linux-gnu.tar.gz/md5/b0f535336cca76f1dcdacca29c6f8410 +dSFMT.v2.2.4+4.i686-linux-gnu.tar.gz/sha512/cc03a246b32875037a41a45c1004834abc7c67f90bf17e1b41cc604ee9893147b1ca3978a2e103b94c94ac617380570473de1f66bff15de8e4ee05c5a3c21059 +dSFMT.v2.2.4+4.i686-linux-musl.tar.gz/md5/a61405f72c9a3bba5718f078c68e61a5 +dSFMT.v2.2.4+4.i686-linux-musl.tar.gz/sha512/726f130bbbfd0dece4185b89a25a73f3b5b950ebfb7f86aea6e9cbcf9ae932e591d20b854de0b4985103dbf8b4b7cb3560661c5070af971cd2c1f3ec3e1ea7d2 +dSFMT.v2.2.4+4.i686-w64-mingw32.tar.gz/md5/93670f43a98f7c6045427dc9ddd89a4a +dSFMT.v2.2.4+4.i686-w64-mingw32.tar.gz/sha512/b76c2be073312ffec8c778b83d3e37b5d0c5dba770ffcc95a6ebfba516a948beb08419428192fcd5dda83357a64e90c4e3a40144688f128133400284a7363b8e +dSFMT.v2.2.4+4.powerpc64le-linux-gnu.tar.gz/md5/fd8c73961ef7c82201e6d86e8bf4324c +dSFMT.v2.2.4+4.powerpc64le-linux-gnu.tar.gz/sha512/1bd0ebd019cfc6f25f7ba007547c5ee297854655b93c55e90d8ead420875de5a087e38956693d5e901ff2abf667c72aa66fb34f587b82adf4b91b3d5d666b5c7 +dSFMT.v2.2.4+4.x86_64-apple-darwin.tar.gz/md5/b57ec1491ffdd40c72860b9f1869160c +dSFMT.v2.2.4+4.x86_64-apple-darwin.tar.gz/sha512/c3a192dbcd3e768712d12d3ac851f46bfa1517eca16c9a187025553076c8fb886b925e4e3f5f20531180f72b73e7eaa5281f54d5b7d4e6a4d53f4542c4bb33b6 +dSFMT.v2.2.4+4.x86_64-linux-gnu.tar.gz/md5/fa671f4ca14b171d53c8866d03f9162a +dSFMT.v2.2.4+4.x86_64-linux-gnu.tar.gz/sha512/2e242a1448da0508ea88cc1a106f1e74f8d7e7562cd82b80d86abf9a8b454653ad7612e25c30ce00c23757e8a5b7b5736253b00a52f9473af6c5d4df768138f2 +dSFMT.v2.2.4+4.x86_64-linux-musl.tar.gz/md5/c648294163882ec539ab646542c74880 +dSFMT.v2.2.4+4.x86_64-linux-musl.tar.gz/sha512/9e96a47d660854b6517364f0db40a2f4e0e3b814499a0349f7cf550b1c8d04589fca5eb4a75bf34f36d1b5d1b2277b3e9a961c887092abedd08f438e025329e7 +dSFMT.v2.2.4+4.x86_64-unknown-freebsd.tar.gz/md5/b4497d34d72ce134ce110b6185a82393 +dSFMT.v2.2.4+4.x86_64-unknown-freebsd.tar.gz/sha512/23d0fb273edbb5a08920a3683398e11d6f4df137dabcfc5f395a9175ddf14ab8999eb961ae8f4b76715a5a2dd2b77757f752abce35c1f752b800201e93aae874 +dSFMT.v2.2.4+4.x86_64-w64-mingw32.tar.gz/md5/d380963292bc54d27d39a3f94adbd5ac +dSFMT.v2.2.4+4.x86_64-w64-mingw32.tar.gz/sha512/ef2f99b17b1a36e61fb4d149d8a8fccc9e804b3b727f2426fca917c265c2d7ada4e3abaa5383e25136dec8de262c1d11970a01d7cfb513a55f1d86a23534e864 dsfmt-2.2.4.tar.gz/md5/ed30e63552d62df48d709dde4f755660 dsfmt-2.2.4.tar.gz/sha512/fe84e986cbf198172340adfac0436b08f087643eca3f1ceccacde146cbfd8c41e3eb0dfbb062f7ca5f462db13c386abd7c269bc0cbefc9a0ecf97a8a8870a2e4 diff --git a/deps/checksums/gmp b/deps/checksums/gmp index 0c45aa6a00ca9..312f79dfc1d6a 100644 --- a/deps/checksums/gmp +++ b/deps/checksums/gmp @@ -1,60 +1,60 @@ -GMP.v6.2.1+2.aarch64-apple-darwin.tar.gz/md5/37a4c537149a1d6d7424833294e61dac -GMP.v6.2.1+2.aarch64-apple-darwin.tar.gz/sha512/33dd86279b5b3b08496180c92971c2e7ef84715e9ed3a80071a178ee94de6231ea3cf7b4dd4fa7e0dbd0b386a1a04c4f6b28446e86cb92c100ebb295b2f5ee3a -GMP.v6.2.1+2.aarch64-linux-gnu-cxx03.tar.gz/md5/44ef76b228cdc4cf54e5d4b40a29034d -GMP.v6.2.1+2.aarch64-linux-gnu-cxx03.tar.gz/sha512/255a680c75d3e8ca542dffc47050adfce038e25a12a4131c18dc719d36b364c1a6488ee5743d1c5de445b4bc5ccbb932399f7071083d86fe5bd2befc521cfbfd -GMP.v6.2.1+2.aarch64-linux-gnu-cxx11.tar.gz/md5/0289ffc3621b5d62dc2f9e1b36c41f9f -GMP.v6.2.1+2.aarch64-linux-gnu-cxx11.tar.gz/sha512/f27b82efb5aa1d7eaaed7574d3312969664eac38f45cf40c6de13ca20b256d45481546fc1a402e6c04bee416c842a092a4e57b8df702bbcdc52f742555d07aa7 -GMP.v6.2.1+2.aarch64-linux-musl-cxx03.tar.gz/md5/9ff4c76804f59056b49a9bf5b6a02099 -GMP.v6.2.1+2.aarch64-linux-musl-cxx03.tar.gz/sha512/d86afa10bdc4e20fa259a17ce7d0a5dca2524b42752bc7d5c33e4323973587d234d4c420900deef34670bfce8ab8c6725e7edb45bfd3896b2644a42ec187dfd7 -GMP.v6.2.1+2.aarch64-linux-musl-cxx11.tar.gz/md5/cc9857a965afcdcbc2b378a368360690 -GMP.v6.2.1+2.aarch64-linux-musl-cxx11.tar.gz/sha512/c46bff9fdcbecc71c12914dadb31ee9fd5b4293cb45bda782200daa18d7f7e8b588e0c0f68a39c2fec7cc3d026bcef3620dae35ae2dd3acf2505dcfc084d11bd -GMP.v6.2.1+2.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/5b3343367896e31b29571fe0d2b90390 -GMP.v6.2.1+2.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/65a501db63c386727aa336d6dbecdff0417628bc9ff7ac1b2161922246d94f8caa71b63fc3789ec6bb10aff03b96d5d0c22c37c82bd95d74e557df8de7e8a09c -GMP.v6.2.1+2.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/cc04dda18412fa11f228e66eb5a03aad -GMP.v6.2.1+2.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/49fdd452fe8f0129ee06795e04a0cc0238132f9d6f60a124dd2c7395fabbb71f005c16d95fdc00d87f8bf82b048cc54e07f162fbc38223c644854cc72c4d26b0 -GMP.v6.2.1+2.armv6l-linux-musleabihf-cxx03.tar.gz/md5/675599595f3dedb8ca11151168da7110 -GMP.v6.2.1+2.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/eedcdc2230fd81d613d54be356679a97b59491f5f9a17c518239b5504c3dd5da15721d553f57ae21f1c55d253e808e7afd1d1651b8c666379c55c7b48f71217e -GMP.v6.2.1+2.armv6l-linux-musleabihf-cxx11.tar.gz/md5/9a74abbc46439ae8268ca926f0045691 -GMP.v6.2.1+2.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/6329506f7a886d0dd907b051d6cbab1bd0cd21b2d5715f55402bf9ad6cb1ae33e058931bdf6cba17658b0e455f9e4fb7f9aad274755a159106cfe1c4d1ea328a -GMP.v6.2.1+2.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/8c20e0def927a202f2d23aed78aadb4a -GMP.v6.2.1+2.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/b7f42efae6fce864c9e07714056444ba74befb9cc9a766ffe14e676240f23f83d3241b1bf3a8f4a282acbdc197287fffb27dadedf3055505ad63bb0b9df573c6 -GMP.v6.2.1+2.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/423a625816b3c52efa6021e76f6009b7 -GMP.v6.2.1+2.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/21cbbfd647d4a7c884344dc66e0fd83d654d22c3338669539e8eab515bdc6bbd772b47f949d28280789e4343e9a8d6319a73dc9e11c23da381b8a452ef7fb098 -GMP.v6.2.1+2.armv7l-linux-musleabihf-cxx03.tar.gz/md5/7d67f981538d7a69ab1e458a54bf56f4 -GMP.v6.2.1+2.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/8aefbcddc326d4ef289dcdba8d3bd56a5f9656a7be30c83b4dbd9a0b8ee26a963c6a2f4294c94b8a8f2f712f1e1c9e17b8b9dcc9967d64294ca466e51656f7c7 -GMP.v6.2.1+2.armv7l-linux-musleabihf-cxx11.tar.gz/md5/ed8713b71636ea75fcc0c9fbc4a8618d -GMP.v6.2.1+2.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/d7f50d06a256fd9176d5fbf682ff599a5ffba62bb35fb37321ab41e88970921a9d9fa4531bd74e73e471c7e15fcae568d0536d3e32a2b2d7f81dc9cd1f0c039f -GMP.v6.2.1+2.i686-linux-gnu-cxx03.tar.gz/md5/875f0bc57172788cb80ca2b80ff3065f -GMP.v6.2.1+2.i686-linux-gnu-cxx03.tar.gz/sha512/808a3c2422b5168260dbf7a3875d5c8151e10b20a8ec87a66bf08f71ad7cf5de20fb7a4f3457c3ab2b4ffc9627764c743baa96f409629c70f2233ea7a5b628b9 -GMP.v6.2.1+2.i686-linux-gnu-cxx11.tar.gz/md5/09ae13f2a6a0dc317d2bca5700d2bf59 -GMP.v6.2.1+2.i686-linux-gnu-cxx11.tar.gz/sha512/9c986e2904247de937e30c05b29e0179986d7747b217468c59bc56af6d4c48d4575f24dace521dc8d66d84230eebd695fe0538972bfd744182ca940a23a9239c -GMP.v6.2.1+2.i686-linux-musl-cxx03.tar.gz/md5/45f53fd95dd69a6ee6b43463976b5aa6 -GMP.v6.2.1+2.i686-linux-musl-cxx03.tar.gz/sha512/4df57d6c88f0ff86e0ee78da8f6ad02decf7a38884ae8c785c114e0e38e791b733e0d046c90712327c08645dd40b7f0391fcb3258cb3bfb8b6a62c59c27d6e83 -GMP.v6.2.1+2.i686-linux-musl-cxx11.tar.gz/md5/8b15988bfb1ba0543eefab73b3ac3439 -GMP.v6.2.1+2.i686-linux-musl-cxx11.tar.gz/sha512/e32dec7ded9bf6fc26033df83521481dde851c68d7cc45efaabeded7603417cdc5016de45f78a956b69aaed00a55a91aa8b1cd5bbe5431b01074dafce2c47751 -GMP.v6.2.1+2.i686-w64-mingw32-cxx03.tar.gz/md5/4138d0b5185f722aef4e1f215f381275 -GMP.v6.2.1+2.i686-w64-mingw32-cxx03.tar.gz/sha512/255d4ecf178b9440b667c56e542baa4422d731f83a67accd41b76268274c2344fbbf94979fddbbd1f6b5751bac2d228a8ef49a93365de78c1772146edd1b4845 -GMP.v6.2.1+2.i686-w64-mingw32-cxx11.tar.gz/md5/606b4b453af25ded1323aee9e085c132 -GMP.v6.2.1+2.i686-w64-mingw32-cxx11.tar.gz/sha512/8605b764ff6e5d81767432fd8e70c25c5ad76f2cac7c2b3d6ed0596df692300973803487c970a896a0a316d46de3e3cae31b21d4e11fe2961e228cd389da13da -GMP.v6.2.1+2.powerpc64le-linux-gnu-cxx03.tar.gz/md5/3fbd157df4ae738da6820b26fb75e75e -GMP.v6.2.1+2.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/6e64c5c4e393c0001bd7085e627126134b5999c2d8df2fa9b72c9f9835d6b0f0ad440a2f58fe6537ec446a517f8df2667881871fce9b4d61c356d2b52080d641 -GMP.v6.2.1+2.powerpc64le-linux-gnu-cxx11.tar.gz/md5/35608e3166278d52a482d7e19313eca6 -GMP.v6.2.1+2.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/a9550fe2b94e0e111a487159c0cd8fb6f1a21b8941ada7bb281572079dbbece921f80b0275bcc8f88117ecc72e7f8e93219350f5444b67295620db1aa9ae947d -GMP.v6.2.1+2.x86_64-apple-darwin.tar.gz/md5/b5004a436660a2533b94b41c592b686c -GMP.v6.2.1+2.x86_64-apple-darwin.tar.gz/sha512/b7b4dc8025ce304c5b899084f42c8f5aad5bbe03509bada17dbe6be952f98306729180a22b5d0a095692f349406db0b98f99f5e3f2be5f2165825e6f7f7d1813 -GMP.v6.2.1+2.x86_64-linux-gnu-cxx03.tar.gz/md5/47ba899c9ac714a4594f999d845f45cf -GMP.v6.2.1+2.x86_64-linux-gnu-cxx03.tar.gz/sha512/99624ec71865d6285ab409ef54f4cf12ba246de6233de56a2fb9f70806574891539efed32e711202003570c157918fde8d53534c695fd5b8476e0d4e0ecd1bd4 -GMP.v6.2.1+2.x86_64-linux-gnu-cxx11.tar.gz/md5/3b0c1258ecafcaf96e549f9b979420ee -GMP.v6.2.1+2.x86_64-linux-gnu-cxx11.tar.gz/sha512/b94d8f25d23597f96cc0cf0aebd1708755a8714ec4a481108add852b77addc737d3d8feba566ec410db019698ca2de826583b1a6105f0d2188679e7f72331df0 -GMP.v6.2.1+2.x86_64-linux-musl-cxx03.tar.gz/md5/061cfe5f416c1365e98d6b1ed89abd63 -GMP.v6.2.1+2.x86_64-linux-musl-cxx03.tar.gz/sha512/b6847f7ff599fa811851788a6ec6ce69ba02dbb3672d0a64b03b7056b35215536b059287709b3d207bc977094e994a7d744061b7ecf95886510285489bb89578 -GMP.v6.2.1+2.x86_64-linux-musl-cxx11.tar.gz/md5/81911acbc0c3607338c6455b1798cab8 -GMP.v6.2.1+2.x86_64-linux-musl-cxx11.tar.gz/sha512/e007441194abc5c80d9521a17e2ab9e6fb54f319571f4045fec2f7464ffaa99652d3252416c15d110dbf9deaad2c1dc94f81c638e28ce620cf543f554eb7d1e0 -GMP.v6.2.1+2.x86_64-unknown-freebsd.tar.gz/md5/ef7173194848e8d00d73ef05fc520f0e -GMP.v6.2.1+2.x86_64-unknown-freebsd.tar.gz/sha512/512c3cf8fb951fe0ef7b1715b78202d0bdf5844fe33e16c4674a19e6335440fb5352d7bde71fce83e8e373efe43281d05b160b11657a582a9d3a0201ce97a189 -GMP.v6.2.1+2.x86_64-w64-mingw32-cxx03.tar.gz/md5/882c6749f217f5a691b744ef728ad089 -GMP.v6.2.1+2.x86_64-w64-mingw32-cxx03.tar.gz/sha512/53424ad8a9dcfb8e0e738d4521b2ab1c75aaf54668a54a76b8bcab2404308e69b531dc25b3dc18bc8eaa7ebd9e2914d6624c5d371e6c0ecb9e8d24aa575e99ab -GMP.v6.2.1+2.x86_64-w64-mingw32-cxx11.tar.gz/md5/bcdd7bcbc69161744397d249a9c82e45 -GMP.v6.2.1+2.x86_64-w64-mingw32-cxx11.tar.gz/sha512/b7f8fb4f5aaf5034d4d2f60e29cc7b5e06c13d4b677af30f30831e1fc95925a575275ebffda36efcc09e29ccd78ba56475c1be3ad0627e28862057764f1ef74e +GMP.v6.2.1+5.aarch64-apple-darwin.tar.gz/md5/56a01b4c21e4bc3ef3014f162c78e0a7 +GMP.v6.2.1+5.aarch64-apple-darwin.tar.gz/sha512/4c0e31f03965602b811be25847b94e227c63f66a152225477468303a44dd0f148970aaaf00e9cf800ba7df602b31b75f64c28e509362bf82b9c9f341b044a20d +GMP.v6.2.1+5.aarch64-linux-gnu-cxx03.tar.gz/md5/a1beafc662eaf934dfb3cec74ea8fe6b +GMP.v6.2.1+5.aarch64-linux-gnu-cxx03.tar.gz/sha512/370de52ddaa4e744bb6cc8eb61bc369e4e96dccdff6b1a65f21d30d4a19d0dbe41c068c8867c0fcd2bffee9aaf375c60050263dcf7c10b215b290253a7654c71 +GMP.v6.2.1+5.aarch64-linux-gnu-cxx11.tar.gz/md5/afaca916697bcdac17f4dba7444cd467 +GMP.v6.2.1+5.aarch64-linux-gnu-cxx11.tar.gz/sha512/cd7bf7c502e927a05ecde303733240c0245b239447ed4c8c3d13a52b42e47cde48264726321ff318ad6f8c08e8cf4e0c85ac875dade355720fbd7e8b33392092 +GMP.v6.2.1+5.aarch64-linux-musl-cxx03.tar.gz/md5/1d7b2be36a999f2b991abae4b9a350c9 +GMP.v6.2.1+5.aarch64-linux-musl-cxx03.tar.gz/sha512/6e4f04980a2d326a2ec2ba9b52cb4143fc227459c936706cac9f19c67607019927dc8d9f4822a73c885eb3ab2c37c6af806bff50e1e76d546274979d2589e140 +GMP.v6.2.1+5.aarch64-linux-musl-cxx11.tar.gz/md5/d114c9a351854c62b4f4724302a61677 +GMP.v6.2.1+5.aarch64-linux-musl-cxx11.tar.gz/sha512/1a0d4e3ef9fd4e2bf17cf0d90b262c1cd4f684e1ed31b6e040afe59cc13ec3dc3ce274f55c62c19217bffdd847850fe55a607f616422e2c31d92d7553100ee98 +GMP.v6.2.1+5.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/3e5989fb44bc6e2cb4054e885e931cc6 +GMP.v6.2.1+5.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/b42884d9a8d9a7a63f51f602c3cc1c2b80a6fd4aaaa47eebcf89a42443b25ba9691da844d2ac69a46b4099a5bdb34c8089f4efd8ca213d6d9866c2076d1fe061 +GMP.v6.2.1+5.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/c65ae9faa092285cc4082bfd585e7b03 +GMP.v6.2.1+5.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/74ab5afd05de93315d3e2b7f2ee6b86a2dbc165621e98cbc08b9c61146d595189b641f2bb8af4cd17d868325fa2a193b9f350e0ed457ca8bc9b96bdfb72c51e6 +GMP.v6.2.1+5.armv6l-linux-musleabihf-cxx03.tar.gz/md5/cc8e27fc3ec1c1f9e044c9d918d8cfb6 +GMP.v6.2.1+5.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/59ae96ed0571ce64a44798767c389f4822222d9519422b5050d22ada68d57371583d4de82c6d22d9636aa2e25cfd9528151364fbf207fdb391bc61d4ad3265e1 +GMP.v6.2.1+5.armv6l-linux-musleabihf-cxx11.tar.gz/md5/e5eb9e0084bf9b4b28c7d1060893159f +GMP.v6.2.1+5.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/3befcb4638d29e4d05ba1bc438e5f861a69385f5a3aa2a331194bed8f7f69331ebc61577dadec97a7c2c42e53a6dd240e30c19d4854af0670b98b02f11afc35d +GMP.v6.2.1+5.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/a3feda2d30469e8980f7c1d1694f2a65 +GMP.v6.2.1+5.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/d6787b7beca9c98e1e8771842052e5f332dc4d34a1d53968704cc54056477072a7cf0c87ae4c9a51ea35c4b4de14cad6f67579469bb802e50eb6d49d65bd0540 +GMP.v6.2.1+5.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/989a83feae172a0f01670d89065ac58c +GMP.v6.2.1+5.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/331a08346f8fd7d70a3cd40b1f9c6e7790751cadc9f3027bb1a815314c2e54bae5268a2ecca53a1a5086366641ef7389cb9574cd5f0431dee70ddedff7870b6c +GMP.v6.2.1+5.armv7l-linux-musleabihf-cxx03.tar.gz/md5/705e406788adacc5d73746306215e412 +GMP.v6.2.1+5.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/32fa29cb8abcb823cc1e170c4e1ea09b1f970207279c88ac78df352bb3969590e50fc9eb6446d9c5044f5fae2168878614b189cb1cc612ae8b8afe820b83778a +GMP.v6.2.1+5.armv7l-linux-musleabihf-cxx11.tar.gz/md5/2fff6e51075ce3b64c7684451d3a057c +GMP.v6.2.1+5.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/266036a380e3e58e799f1f03129321345a0c4d9db60b88d12166c7c6d817279239aa2e2cbf2442435e12bba8cef18c48fe9844d0b88f0026be67378e18f135c2 +GMP.v6.2.1+5.i686-linux-gnu-cxx03.tar.gz/md5/7f07924e4a691436727621e2fd1ff349 +GMP.v6.2.1+5.i686-linux-gnu-cxx03.tar.gz/sha512/3e33534fd8ba681c9e4dddd0dbb1c287b1fcb284a55ae13ac685b73d79036fb9de39443e4fbba9f7d3e804ad85c6128ce2e138f92e19df17cda51297089be300 +GMP.v6.2.1+5.i686-linux-gnu-cxx11.tar.gz/md5/5882ef18722ca8ea83fc64796ac9a6fc +GMP.v6.2.1+5.i686-linux-gnu-cxx11.tar.gz/sha512/45a25dc59060640accbb9d09574f769da05c448891a7e00b608ec3349c3d05b41710c49cd7d7fa4c5101adc9db1625ff19082715d1a9296e9da957520cca8e9e +GMP.v6.2.1+5.i686-linux-musl-cxx03.tar.gz/md5/dbf0e6f7b74e48ff63e136b4703a92df +GMP.v6.2.1+5.i686-linux-musl-cxx03.tar.gz/sha512/69321bd73da7271147f6cb073c9c8e853ab5b6b84d2cf196df197121a6fe0f6c1c64839bfd1106bba7e547b02f9dd32be9603d76be270e1e22854c600141e80f +GMP.v6.2.1+5.i686-linux-musl-cxx11.tar.gz/md5/94204c12eba64544f58a3dc0b8afc43e +GMP.v6.2.1+5.i686-linux-musl-cxx11.tar.gz/sha512/734b529a24b85eca85b3a95a3df9673a5aa51e2c61456557d273c122870018b574b09a678263c122bcef706c47dc69b142aeb688ccdcd39761eb8ca45e635a3f +GMP.v6.2.1+5.i686-w64-mingw32-cxx03.tar.gz/md5/327155a11581b319a58e780eb97628ad +GMP.v6.2.1+5.i686-w64-mingw32-cxx03.tar.gz/sha512/32c6eaaa3e2d6cc354d7c8cd8cd3b348d560d818f8af0fe8d738b8476e811d38c0d85d4dad9433ce9915322ce2c7634480340c0aace987eebeffd692f4a325d0 +GMP.v6.2.1+5.i686-w64-mingw32-cxx11.tar.gz/md5/d7ae966f2ffef8abfb731579c4ef5fb0 +GMP.v6.2.1+5.i686-w64-mingw32-cxx11.tar.gz/sha512/ebf234e3dd983d49f68ea2322d2658f9cad53de4ec94a0db33f47860331991ca765ec86a646242fdbbeb36051a182767de75ad47e7808bcbac32b196cbc538b3 +GMP.v6.2.1+5.powerpc64le-linux-gnu-cxx03.tar.gz/md5/96bab6f8a36d110065cbe06d8fa654ef +GMP.v6.2.1+5.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/d5472ea1a16ec2312e96b85cba9209eb543abca1b07c48fd7a31c42892fe4a9a2368edbb2f2410580a9ff3337a6b9dbb6cad377fc2ffa66746d4a25fb2da4d46 +GMP.v6.2.1+5.powerpc64le-linux-gnu-cxx11.tar.gz/md5/41704d02be36f94086f8e79124c15410 +GMP.v6.2.1+5.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/dc1800a7e796b4e5dea7c7136545a3120b619f25e28b3aa7e2478dc27d4224160bfc0e03875c4fdd6703c854a8851b27b0f23fd2f5470450230bfb33e337a420 +GMP.v6.2.1+5.x86_64-apple-darwin.tar.gz/md5/ec93617dd921d13eeccf946aeda3bdab +GMP.v6.2.1+5.x86_64-apple-darwin.tar.gz/sha512/a1c490e969d2d747d81016381bbabd6c07915ceca456e4fa77f0bb473193fa013dc185ae4b8bb8bd3451a25d9779f90039ac362d8c911fc307928af22e79a50c +GMP.v6.2.1+5.x86_64-linux-gnu-cxx03.tar.gz/md5/899dadfaaf4cd1d787ac6a905c108a02 +GMP.v6.2.1+5.x86_64-linux-gnu-cxx03.tar.gz/sha512/d304e85f17503a8e9472b69e908f04c6c3e8e3a88f3692f86c0e1e8d5576620b9b144e2224111a7e6f0eb5a58c6f1cb536803764fc8be13a8ef3147f3bbf779a +GMP.v6.2.1+5.x86_64-linux-gnu-cxx11.tar.gz/md5/ece1ecee696e47609ab06b6463f3ede2 +GMP.v6.2.1+5.x86_64-linux-gnu-cxx11.tar.gz/sha512/7fee1caf74f01d2ac9538642901f969f1715ce84199dccd17e016fdeab22fa5dc7a6865e1b5ebf7f54b287d51f7eb48eba4a0b7eb80b8fc4485e49198b914531 +GMP.v6.2.1+5.x86_64-linux-musl-cxx03.tar.gz/md5/aff0fb74a84d0867f2692bf61787bfd1 +GMP.v6.2.1+5.x86_64-linux-musl-cxx03.tar.gz/sha512/057d552a433f0f4e8d1f5cc1c3f1125f5096a7de72ce41ecb1ab2b7e378e0e39f323a4c50f8875c8ba1a5b66541b83e0841fe60f0ece168aeb3a9b63d3eac68f +GMP.v6.2.1+5.x86_64-linux-musl-cxx11.tar.gz/md5/89f6a22a065acbb2366076b271949141 +GMP.v6.2.1+5.x86_64-linux-musl-cxx11.tar.gz/sha512/93cdb3b1ccfbc7c0aca1f9497022d2ea69a023142d59144853300f02b5a25a8f6eacb5da68ff6dc6e969bc315d14386c75aedb828670e96fe84ccb83591bbde4 +GMP.v6.2.1+5.x86_64-unknown-freebsd.tar.gz/md5/285707b8dedcee127959bde79d6ad622 +GMP.v6.2.1+5.x86_64-unknown-freebsd.tar.gz/sha512/77d70f2b29d0bc1fd6c2d938db5b1883697b181d05491931c53eb6d23d84560743fb069ed3b8b9374fdf7d3c37b1f8f732d038e133e38fd3f42a8182ef50fc20 +GMP.v6.2.1+5.x86_64-w64-mingw32-cxx03.tar.gz/md5/fe8257f44266f6741eca3ff288048725 +GMP.v6.2.1+5.x86_64-w64-mingw32-cxx03.tar.gz/sha512/225bf51c55de35cf81e36d848e2fae2646722ceea2e72d66d6d476422df2f5960819db4f3d8a89428fe4d865a657ee4313398109f6fe688971d151cbcd69a279 +GMP.v6.2.1+5.x86_64-w64-mingw32-cxx11.tar.gz/md5/cfb3c9a7a015a271f50dd2a55b55297e +GMP.v6.2.1+5.x86_64-w64-mingw32-cxx11.tar.gz/sha512/a8b6587d9e6a8964d1ff914402b48a6f8ad52cbca96ba5bf732e4e232bf0c942d535926e755983c5e4cc4aa90b473edeac44742ef498963d1276f1ff3c49fa98 gmp-6.2.1.tar.bz2/md5/28971fc21cf028042d4897f02fd355ea gmp-6.2.1.tar.bz2/sha512/8904334a3bcc5c896ececabc75cda9dec642e401fb5397c4992c4fabea5e962c9ce8bd44e8e4233c34e55c8010cc28db0545f5f750cbdbb5f00af538dc763be9 diff --git a/deps/checksums/libgit2 b/deps/checksums/libgit2 index a70a404ae6843..1d410349045d7 100644 --- a/deps/checksums/libgit2 +++ b/deps/checksums/libgit2 @@ -1,34 +1,34 @@ -LibGit2.v1.6.1+0.aarch64-apple-darwin.tar.gz/md5/62bb842de0ede8a7c2b119cfa7402a61 -LibGit2.v1.6.1+0.aarch64-apple-darwin.tar.gz/sha512/e5117912419fd73138779322d5cb84454c641aad87d0df7d44b5074c96576fe1ee3822dba18c8207dacc9bae2b74cef87353d5c519fb7fba8ea89c858415f993 -LibGit2.v1.6.1+0.aarch64-linux-gnu.tar.gz/md5/3f42f283a9f550841b285216d681f3d0 -LibGit2.v1.6.1+0.aarch64-linux-gnu.tar.gz/sha512/0a793bb239976946941af5794cb45cfd7d1d99b9aa125800aee9337bf9d9c5152bcad258f75d987a7af9b547ea906ee2beebe7b8d2c8cea111e6878df0eb3ea9 -LibGit2.v1.6.1+0.aarch64-linux-musl.tar.gz/md5/0f20cee604380bfa789334b5544b1cab -LibGit2.v1.6.1+0.aarch64-linux-musl.tar.gz/sha512/86d7e6a64bf24f3e69dfa4383ed896c5d8a915e19f6f0351e8cf38361352347c827f79032fd8576ca9bfb94dc8db4704d35540ae67b46d671f44ab549c6ceb49 -LibGit2.v1.6.1+0.armv6l-linux-gnueabihf.tar.gz/md5/5c025b4c9065c0b481c7b0f6dd7666a0 -LibGit2.v1.6.1+0.armv6l-linux-gnueabihf.tar.gz/sha512/5b1d3472df47462b3e38c5a5b3400d90038b1637a7f479e9fe04ef046849c14d12301328498429a9f290ff82b6343ccd9ae7616c5ff1d5fd83f35559bedf8747 -LibGit2.v1.6.1+0.armv6l-linux-musleabihf.tar.gz/md5/8015b63706e6d5826779f870681ff865 -LibGit2.v1.6.1+0.armv6l-linux-musleabihf.tar.gz/sha512/e3c8c46d8da8df409b2dc7c476da638da2c79974270390b84473ebefb66f26cf60647445c2b141f7b6cf45655de12404deea30731b812952fd9156acbd7344a1 -LibGit2.v1.6.1+0.armv7l-linux-gnueabihf.tar.gz/md5/74672b31da80507609e59b19448ec415 -LibGit2.v1.6.1+0.armv7l-linux-gnueabihf.tar.gz/sha512/6c6365501abeffc7e796f3b67a139e93262dab1550ba5fe6ead179c0a9d32c62bab7b422b81524d7a367ca1032c7bfd2b3385155e364fc267f660dffa8eee39a -LibGit2.v1.6.1+0.armv7l-linux-musleabihf.tar.gz/md5/057c22b3fc988a98551fc319eb080c39 -LibGit2.v1.6.1+0.armv7l-linux-musleabihf.tar.gz/sha512/edfb8c57aad5499fae88f09a17e905b4c009e2a8781727566321a858f3ed8a4bcb75b990ae5ad4ac57bcb2b01bd2dfbe0375b01a41405c161106881c8859aa78 -LibGit2.v1.6.1+0.i686-linux-gnu.tar.gz/md5/ecde35f4ca6b4a03f8491d90480f33b3 -LibGit2.v1.6.1+0.i686-linux-gnu.tar.gz/sha512/ca77a1b3c381be2286be9134d7adfde51fb38c4bc9dcb3f56cf1840809c40c484c843cf4ed8d77c538889e06cbef2e5d1b4468739bf761cc91c676a0dc5a34ee -LibGit2.v1.6.1+0.i686-linux-musl.tar.gz/md5/1a56e7832761479fe911b8efd66b5b73 -LibGit2.v1.6.1+0.i686-linux-musl.tar.gz/sha512/e929261ba9564762d2b3c3191dde216caede5c436b84a00d08706a708436023430a9a762cbd94bf96e903a230c690ea28787ee08208d5b50e51d98e56587b30f -LibGit2.v1.6.1+0.i686-w64-mingw32.tar.gz/md5/671a1c045725877e1a4f55b42fbb15b9 -LibGit2.v1.6.1+0.i686-w64-mingw32.tar.gz/sha512/5b0e78b5f5f24b7ee8c88d704bf58043626174d9e8e28226b72873f62d0ff6a6f87d6200adfd613e35c27f6d127d967f49a1f7ef26ded8d1b08c89589b59ce85 -LibGit2.v1.6.1+0.powerpc64le-linux-gnu.tar.gz/md5/4ffc17733025ac94e525f8d9416713a4 -LibGit2.v1.6.1+0.powerpc64le-linux-gnu.tar.gz/sha512/a382f7f15484426d6e913c9cd54facd63573650449f1a2d7b180f1905b79dc75280fdb48ff9e47ffc1ef70c9941d43a6ca35e21bc9746172689886fbbc9d65a4 -LibGit2.v1.6.1+0.x86_64-apple-darwin.tar.gz/md5/af4192c866787ce226fb7a6d5229bfa2 -LibGit2.v1.6.1+0.x86_64-apple-darwin.tar.gz/sha512/18bac55bd7bcd9ea66002c98717ef358710aa689c9bff63be77de1cce4db2082f023ee577060f6ed11e3830c2e751bf2adae1a9b232570a090031c5246f29edf -LibGit2.v1.6.1+0.x86_64-linux-gnu.tar.gz/md5/d26008f39b244ab0caa804ae0365d69b -LibGit2.v1.6.1+0.x86_64-linux-gnu.tar.gz/sha512/3d6068d2165c012ce66317cc0993c374df43cdb2dcd584ec7966f602062428d4f5e18d157c7aa19572affa1e9dcb0346105a01c64f8e5ac01546aaf7b5d99439 -LibGit2.v1.6.1+0.x86_64-linux-musl.tar.gz/md5/fcbfc9f15ffe3c4b2ea055e198795e96 -LibGit2.v1.6.1+0.x86_64-linux-musl.tar.gz/sha512/16bb30defa9d23e6025e3729e313766940105e02f00168e61bff81ae38beae9ae050a5fbf2307083b3cd89d364aa70a7042b94062160fda2174aaf5018f3e2f3 -LibGit2.v1.6.1+0.x86_64-unknown-freebsd.tar.gz/md5/a4fe2ed51c1ac1aaaa4f46a00714d85a -LibGit2.v1.6.1+0.x86_64-unknown-freebsd.tar.gz/sha512/bba31901fcd8b2e69f43e9645c028be4c840b3d9afb4e92e64c9ea46c7fb44dfecf14f99cde586380ae0508fdb8402d3bbe93ec7b38219fe7806299b70576949 -LibGit2.v1.6.1+0.x86_64-w64-mingw32.tar.gz/md5/11ed8da2cb4c7ef924b50768cbb54678 -LibGit2.v1.6.1+0.x86_64-w64-mingw32.tar.gz/sha512/b39f12931d638809af27e446d7ac25b17bfd5c003cac89bcf83dc4c5331d14ec12b07ae410cfdc636546a3b1edf0f7d360bd194aa58c835261642b51edb4afd1 -libgit2-8a871d13b7f4e186b8ad943ae5a7fcf30be52e67.tar.gz/md5/831f4d09a6a22662dc0043063d0305cb -libgit2-8a871d13b7f4e186b8ad943ae5a7fcf30be52e67.tar.gz/sha512/17ad43e6f80e87e8115cef89919475a9d9ea11d679e107221e6d82623577fc8e4002876a33c7eb2a52a47e3d8142976777bc79f81e4c4cf2da6adb1553d17b00 +LibGit2.v1.6.4+0.aarch64-apple-darwin.tar.gz/md5/dd001ebe432b91c4043739a0aa14d3bf +LibGit2.v1.6.4+0.aarch64-apple-darwin.tar.gz/sha512/c921c9b7b4cba17c98a7f07e003cb9279ae40346e2977a0c2e257c6f6927726f09d0339e139e3a138ed84e169e00d459502a90724077cb253d52ec39a3766c28 +LibGit2.v1.6.4+0.aarch64-linux-gnu.tar.gz/md5/a044b38cc6396221c4687dc0723b33fd +LibGit2.v1.6.4+0.aarch64-linux-gnu.tar.gz/sha512/dd804c31645873f18f612920d1e4d4d7adfc828f8d96c8f03ce4e4c856608663ccd26ec9bfae30cd499cefd02b3b7ae648b8617b3d3de9364fbfea094777e7e4 +LibGit2.v1.6.4+0.aarch64-linux-musl.tar.gz/md5/8b15c173d188ef2d0bbe1cbd2fe25a0e +LibGit2.v1.6.4+0.aarch64-linux-musl.tar.gz/sha512/a1ddb011a92e8ab0ed6d005d354af23261c5c7949d43b610ba24867bb8065c73820326d14dba069a7d1497758e8c6e1a26a92c7e4c345c75cac2c6d9a7ddfbc0 +LibGit2.v1.6.4+0.armv6l-linux-gnueabihf.tar.gz/md5/8d49bb6c15477fa167519477ba43ccb4 +LibGit2.v1.6.4+0.armv6l-linux-gnueabihf.tar.gz/sha512/720a76aff31986084b4113734d4fc51b0225242fc53f103a2f1ec89c93a85f5c746df7ac0d98502e47b033d3777bd7e44b95b4bbadb2f27be538fb24fea03425 +LibGit2.v1.6.4+0.armv6l-linux-musleabihf.tar.gz/md5/a024f6a4ae55b38ca9c32b6183c75f57 +LibGit2.v1.6.4+0.armv6l-linux-musleabihf.tar.gz/sha512/f5a2d1426a6dafd9af0109782805cfe5b07c186947b83053390ce9930fefa2cdb2fd913c93213ff0cd5e4cd1ed43c1a17357cbfdbfe5428a07a95058bebabd85 +LibGit2.v1.6.4+0.armv7l-linux-gnueabihf.tar.gz/md5/9b33cb013b7126adce97a6f4d0957cd1 +LibGit2.v1.6.4+0.armv7l-linux-gnueabihf.tar.gz/sha512/ec5690027319bf11122b1a5abeb2dd3bc03dd9696b29faa10c543970288ec13f0c462c99d7c4cccff472f26af17525ef475bdd6ccda8de63ae233c7df3b8694d +LibGit2.v1.6.4+0.armv7l-linux-musleabihf.tar.gz/md5/81d1e5c46f1eee85b0ed0f069557ba0f +LibGit2.v1.6.4+0.armv7l-linux-musleabihf.tar.gz/sha512/635c55b08db5eea7e51b09be6236915edc6020831021e3e3fc43a9a7c6ea006a0b83958547898fd990954539b85a059550b60359305fa81ae9b8b514c4039b9e +LibGit2.v1.6.4+0.i686-linux-gnu.tar.gz/md5/7e8edfafd59cec5964ceef7b5a1ff564 +LibGit2.v1.6.4+0.i686-linux-gnu.tar.gz/sha512/7b358260ceac13bd58df8cba3ec11e57b07222c792173715191af15c6d567129c5d3a57f1005ad0f0589a692cf435ca2702e30d487e5d48a37d6d34e9d89c98d +LibGit2.v1.6.4+0.i686-linux-musl.tar.gz/md5/e9e3bcd77942e098147d7abdb8abe87a +LibGit2.v1.6.4+0.i686-linux-musl.tar.gz/sha512/f01e57fea3ba1b703350ebd499456e9d8da65abcfb42ad0fad5df1315de74def962045b52b5efa3d657aced1cdd7ef1c56a473febd3682678e9253fbda462f02 +LibGit2.v1.6.4+0.i686-w64-mingw32.tar.gz/md5/92e003bad6631bb28833a8d0b10a34de +LibGit2.v1.6.4+0.i686-w64-mingw32.tar.gz/sha512/64ba60cacf2fb63bc6e02558fcfbca2d793a8a92ba6ab7200d35368581a674cb64437f209adbbda5cad4921209622addf61485d3f370f9ce540b6487f7967d07 +LibGit2.v1.6.4+0.powerpc64le-linux-gnu.tar.gz/md5/a26f77b89c70edfe386ca75f8b945f65 +LibGit2.v1.6.4+0.powerpc64le-linux-gnu.tar.gz/sha512/7edff494558501245b575fb4d42e2279d98c4ad9ccbc625149db8bbbd379cbe5054b6369149dc1a66f5c91ba21a5609f3971a31cea5f0f7a16e67e991496f8cb +LibGit2.v1.6.4+0.x86_64-apple-darwin.tar.gz/md5/c0b79aad1765e0841d229d62dcf34105 +LibGit2.v1.6.4+0.x86_64-apple-darwin.tar.gz/sha512/1c3d0f696fe3fe5fa3269057c3d1863e84aff002a142f088129efc6e0e9f32df5db609732e4ad6c6ddf7a2c3f0b7ed53a06c9f4d49b518c0aa960ed04c71e6f2 +LibGit2.v1.6.4+0.x86_64-linux-gnu.tar.gz/md5/397c71f23f48eb8395c9e0a605bd3696 +LibGit2.v1.6.4+0.x86_64-linux-gnu.tar.gz/sha512/9b785ff277206988d60fbd105beaaeae49b4fa057e1d52f95f4b7a1eff5eceb4525a7a9015823bada6329d0a6b3be8e8ca94221c3b98b287d077b524aa4a517f +LibGit2.v1.6.4+0.x86_64-linux-musl.tar.gz/md5/e7404be38fa8c10740101c5ca1ed9bfd +LibGit2.v1.6.4+0.x86_64-linux-musl.tar.gz/sha512/a2902d50a17c8f61ec5d38d0d843443be2ce4f51292655961d685203860a8f2d098e4dffb10f46f885cc4df1e9f1a5237be2cb31950d9e4a073a78ca82e39989 +LibGit2.v1.6.4+0.x86_64-unknown-freebsd.tar.gz/md5/5f370e6f38b38e663dc47b59f295b3b1 +LibGit2.v1.6.4+0.x86_64-unknown-freebsd.tar.gz/sha512/2557e8b2dd8925602b2a04c60cf1c49b5b7c395b18ab0045d6bc5287a418463d065335e5e8c4478b70e48a88cae8f9314b348aca560ad7c03191e50eb8c8cf64 +LibGit2.v1.6.4+0.x86_64-w64-mingw32.tar.gz/md5/fdf688b0d3c14015775af60a2716d445 +LibGit2.v1.6.4+0.x86_64-w64-mingw32.tar.gz/sha512/05fc6d0dc15cf887d83ee4d7d9605171df9a74b532429fdd070ebe443eaf52b190deafb3fec8af5748dffaee05c979e2646dfd009998fcaaf6aeb6caa499bf7c +libgit2-e6325351ceee58cf56f58bdce61b38907805544f.tar.gz/md5/08777cc257825f218ceac1a24abafdc9 +libgit2-e6325351ceee58cf56f58bdce61b38907805544f.tar.gz/sha512/ebeaf3bb12ce7d58cd6d36e0123168de3af8f083f707dc20df9781537e38188a176667ac51daf8d9006d54f2beed13fbfff6c26fbb48e3228988578ef8fbc9b7 diff --git a/deps/checksums/libssh2 b/deps/checksums/libssh2 index f8c1fc5da8d37..697601a037132 100644 --- a/deps/checksums/libssh2 +++ b/deps/checksums/libssh2 @@ -1,34 +1,34 @@ -LibSSH2.v1.10.2+0.aarch64-apple-darwin.tar.gz/md5/b692a93b8f7e45edd5c5d397cd1d3725 -LibSSH2.v1.10.2+0.aarch64-apple-darwin.tar.gz/sha512/8863fb372e3bccb9d6ff7f33494754b1391f0081426d1a42a3f3da69ced9d1b6246b7aa84269b7ec2844c27991d5998a6c58561b277f86daa96b577dec57b514 -LibSSH2.v1.10.2+0.aarch64-linux-gnu.tar.gz/md5/ea2e202282947c4900d656c83ba30953 -LibSSH2.v1.10.2+0.aarch64-linux-gnu.tar.gz/sha512/1c3a035a2e711ad013acb460293e929d18b58d345f84f4a7cda93510dca5e46d466f08b2b96e5742c16c509dc6ed6b6e2b13399bbd1c48340326e3e6d73f9322 -LibSSH2.v1.10.2+0.aarch64-linux-musl.tar.gz/md5/9dd3b1813cd1cc6246b31c5bd2df538b -LibSSH2.v1.10.2+0.aarch64-linux-musl.tar.gz/sha512/075d681235961838e2bb14f2034daa65909a40972cf638b44646464f66973d139de9af9d653073c24510cd40e5068d3a41c09f6ff12835a8278259d8530a6720 -LibSSH2.v1.10.2+0.armv6l-linux-gnueabihf.tar.gz/md5/17a33524ad9e6dfcf239b076803e3c84 -LibSSH2.v1.10.2+0.armv6l-linux-gnueabihf.tar.gz/sha512/09ef31e3a6ee1e6055c6cf5c0f45fc2704701bdeb565b82a1896e8c83cc34c9dcf1b2e761d1c78b5d513291802a02ef3567a8a6d06d9d7ad946f4233e973c5c9 -LibSSH2.v1.10.2+0.armv6l-linux-musleabihf.tar.gz/md5/18db6a0698da98ec8247ab0f86e9a2e9 -LibSSH2.v1.10.2+0.armv6l-linux-musleabihf.tar.gz/sha512/11657f0b411ee81d84d3c02befd34d53d25da0485214f82e6ac9601fd065127e01ac74b592d328481a0ed7d04c231b37f4fec773e06d1c1f5186f6eb7eae57ce -LibSSH2.v1.10.2+0.armv7l-linux-gnueabihf.tar.gz/md5/0a49a14c15176f32867f49a6e487de77 -LibSSH2.v1.10.2+0.armv7l-linux-gnueabihf.tar.gz/sha512/aa81a8504529b90e6e212f1495e8732118f5d0eececd4a809cecdeb88b97f0ca4a1081e669660ea8513b15f71299854da9eb5f8352f099796df4fde33f89072d -LibSSH2.v1.10.2+0.armv7l-linux-musleabihf.tar.gz/md5/0bb9d7c5c40d88e19a2d9f3178c4de64 -LibSSH2.v1.10.2+0.armv7l-linux-musleabihf.tar.gz/sha512/cf361ac498daa4c3a0b044171165756e54402f70c75fd5d877e6a24db9b6930c678c3f45c16850b9138e8f97cab9f1cb4ba82262e48fad269a36fc556215899d -LibSSH2.v1.10.2+0.i686-linux-gnu.tar.gz/md5/651955e1c129d88d9dd0e9b048505db7 -LibSSH2.v1.10.2+0.i686-linux-gnu.tar.gz/sha512/b48d3e5eb36d4e0ef36bc512f1fe65a85e0ddf16dab8da8190f642d2460b6ab94677838f263ad280f37a8bd838c4c8283a3cc706247d4241d8760fde797fc163 -LibSSH2.v1.10.2+0.i686-linux-musl.tar.gz/md5/74b4741009fea8bb10ab3f6a44937fb1 -LibSSH2.v1.10.2+0.i686-linux-musl.tar.gz/sha512/13b64fd49d6a6b80dede0c049db871c5b22fec2f093adbe6699f2e467f7458684cd38093230c5d2fc837e500c8d1e86cc2966b9805a2ed7a705d50108a95803f -LibSSH2.v1.10.2+0.i686-w64-mingw32.tar.gz/md5/20c1c7d0825cba67a0bbfa822348a245 -LibSSH2.v1.10.2+0.i686-w64-mingw32.tar.gz/sha512/2ac02ff310911998c07861493b699837168e43e40172372c33fc7769ff6eae2f2f2c65b10319c2f10316d34c519ec2fc5308b327b62caeb415ac7c5c692fa81d -LibSSH2.v1.10.2+0.powerpc64le-linux-gnu.tar.gz/md5/6d180f087e415adbafa516c471315ce2 -LibSSH2.v1.10.2+0.powerpc64le-linux-gnu.tar.gz/sha512/23ea211b5d1219454c14316e59cb94195195abebd9a4e7a6812c4d824abcac7c5b896c460c2dae3511abaae7e0afb5ead40a5836e5d94ec0c3a2b8076dd29e3e -LibSSH2.v1.10.2+0.x86_64-apple-darwin.tar.gz/md5/dff956043faefa3396fc31bddbf83b1e -LibSSH2.v1.10.2+0.x86_64-apple-darwin.tar.gz/sha512/00aa279251a04684d968e413bd9f652c6740bf4a6e860ba9b999c8584561499f1f589ca2eb3f06a01c539a952fffb41787a37a6e514d689b97693a5a7bf4c18f -LibSSH2.v1.10.2+0.x86_64-linux-gnu.tar.gz/md5/a50d390c1a8ea77d7d78c07a759fa79e -LibSSH2.v1.10.2+0.x86_64-linux-gnu.tar.gz/sha512/c985018dbc79c9d41ca3df940fcda15d7f57f0a4e869268ab7c255b4fbc7aa9bd5088281258de22523c777bc9210ce3c9e1f0f76693c0575506ea840619c0306 -LibSSH2.v1.10.2+0.x86_64-linux-musl.tar.gz/md5/a8b647a12439a7ec9b2d5111a4fd605c -LibSSH2.v1.10.2+0.x86_64-linux-musl.tar.gz/sha512/7790bf3b88513a026f3b58090c5b39b0544d873f7bee4f4c06fb23f513954f580ff2d5d552f15f8b725fd3264585390c33283906f1844cf20ce6d2eee54495a7 -LibSSH2.v1.10.2+0.x86_64-unknown-freebsd.tar.gz/md5/c4f76951ed337bc87d21993d1997dac8 -LibSSH2.v1.10.2+0.x86_64-unknown-freebsd.tar.gz/sha512/3db3c44e2100d00a537c87590dcd5493dc9ec74913ce903ce7bca697ab590417bd55ec6475a0a790ab49e9444d79ece539733ac25b0b82eaab735c8c96c0e992 -LibSSH2.v1.10.2+0.x86_64-w64-mingw32.tar.gz/md5/b58d05eb572149dbfec7b53a75dc4d6f -LibSSH2.v1.10.2+0.x86_64-w64-mingw32.tar.gz/sha512/422fb36c6d7d3f7153b52547fb98d70268da1506a4957e2772184ba52bf06455f869f1c491d82852494459189830c68569219fbb2c795ddb49d7e8a8e95d6988 -libssh2-635caa90787220ac3773c1d5ba11f1236c22eae8.tar.gz/md5/d0b060310da22a245fc488a300288198 -libssh2-635caa90787220ac3773c1d5ba11f1236c22eae8.tar.gz/sha512/17770f8de4f081840e765d6f7842d562e20f46972fb53a15e3c9e10421f3654a559c5dd1dfbafd7b4a0e5205d800e848b9c9c26ec1d8fc0d229d5070b6d19463 +LibSSH2.v1.11.0+1.aarch64-apple-darwin.tar.gz/md5/462442a50f5dd719d251f65e7170dbf6 +LibSSH2.v1.11.0+1.aarch64-apple-darwin.tar.gz/sha512/8f0d9916c1e1abb8ba2d4baef0f850f9f5aa8d24f5eeefd7c7d30697b15d33180b32588f50328f4999e1d4136a2951c4e3319c5a5dca6f34a84fba30ac90518f +LibSSH2.v1.11.0+1.aarch64-linux-gnu.tar.gz/md5/63d8a681bcce23e76650719cf3c6999b +LibSSH2.v1.11.0+1.aarch64-linux-gnu.tar.gz/sha512/9dc722d866d27f378481e4787a5bb932facc0c7b828e75e812c9c875ac10e7194d090d94e01a46bb2b3c5624e18d013f0226c5f574269df96f1de0ed16897571 +LibSSH2.v1.11.0+1.aarch64-linux-musl.tar.gz/md5/e85cfee900145726857d3609b541f7b5 +LibSSH2.v1.11.0+1.aarch64-linux-musl.tar.gz/sha512/ad42ddf4674f6359e61fb23ef6fb5942e716c6f0cd50378e93b8c3af799b9b21cc9cefc471d27e19bc31686c7aa469a5ed81918ea9926d5d432c3c5f70e83fcb +LibSSH2.v1.11.0+1.armv6l-linux-gnueabihf.tar.gz/md5/acb3b46ec386e9d41dd73cb3c9b60d1e +LibSSH2.v1.11.0+1.armv6l-linux-gnueabihf.tar.gz/sha512/bddc50ab698c280256d819cd7ea1a39a33366f2eb6004df6b66f6a45ce4b5bdb1525f724aee35f3b9796809f9e68db4a6dab01ab035c8a88bec291b59fd55854 +LibSSH2.v1.11.0+1.armv6l-linux-musleabihf.tar.gz/md5/d4efa89a3b4e1d3be80f6790e183ad07 +LibSSH2.v1.11.0+1.armv6l-linux-musleabihf.tar.gz/sha512/8da36af6514189b7bf3422ccbbbf69d271208e7d9b0af469cbbd476ddd3d62f2f9a0d25f38f22123a603e448c285936f0692a31d91d6d79dfc66baacb8af4522 +LibSSH2.v1.11.0+1.armv7l-linux-gnueabihf.tar.gz/md5/d4eeaf06f64997a4f46737798c15ccb0 +LibSSH2.v1.11.0+1.armv7l-linux-gnueabihf.tar.gz/sha512/4cb24ec2b13c9f56220a6cd3bb0ea1dda687a7ebbf062caa8fad9d17c903a2982f12340b93e82b42567e29b4326acda373f81c0ebb4f4d968a12ff7807f5d066 +LibSSH2.v1.11.0+1.armv7l-linux-musleabihf.tar.gz/md5/319db985d453fc32a69eaad85bdbeac4 +LibSSH2.v1.11.0+1.armv7l-linux-musleabihf.tar.gz/sha512/5f7f35e3cb1362ecda3236c1686a211409937e90fdb29dd9e4032d541b8fe45c28f24067cd012edef879d668d7b1040e887ea594eac03ffe5412d5f2c49cc294 +LibSSH2.v1.11.0+1.i686-linux-gnu.tar.gz/md5/e7cb7d9d6db13b46250da30969f8504d +LibSSH2.v1.11.0+1.i686-linux-gnu.tar.gz/sha512/fe8983aa012787361cadb5a78df8eec6ac5640a514c3fe4b4ab23d584b018ba4fa7d3514f0951d2b687cf56bf9ee17e247049d99a4e9360aec4ecbb636d2a6f1 +LibSSH2.v1.11.0+1.i686-linux-musl.tar.gz/md5/d7c5d3e8ecd86e216d97d4912457a66c +LibSSH2.v1.11.0+1.i686-linux-musl.tar.gz/sha512/4d64996d837cfec15b42ca7f850cda32ee3b3a8f93001d24f95ff6f8c94b76517e5dfc7e525e8335fc8788ecf7e196bdb7cc64c8c53f536c592afb337d98ee82 +LibSSH2.v1.11.0+1.i686-w64-mingw32.tar.gz/md5/9562e41b5dda94c23150668559e9b123 +LibSSH2.v1.11.0+1.i686-w64-mingw32.tar.gz/sha512/d13d022ec9eb82f8afa3954c730bd1840a8d1bb16cdbd07a89fff6ce07b1c0c2ba6a9e934b2585abf7dddcb0522e1ba0f38df4385447c66986d5fcb6dddc2d15 +LibSSH2.v1.11.0+1.powerpc64le-linux-gnu.tar.gz/md5/4e2463eb11a5dde8c3e0d3fab6c58169 +LibSSH2.v1.11.0+1.powerpc64le-linux-gnu.tar.gz/sha512/d8794571d051cf206da87a4f7f0f71c8b41be061691b08333df7678c4e40fb9abbe63812a5ff5243fabca9eb2e599d81a69520cd854afbddbc16b44678fbe1b7 +LibSSH2.v1.11.0+1.x86_64-apple-darwin.tar.gz/md5/5729492b3a91e0d8e3fcc459de784157 +LibSSH2.v1.11.0+1.x86_64-apple-darwin.tar.gz/sha512/8e49b2ff1c9b5ae499f14be238776d7da2b64231592f1d46a6f769f200681342ff157d76102fa7c16b2972c7fe603919f7d2ce7c8a30b46c98ecaf2ef809fe3c +LibSSH2.v1.11.0+1.x86_64-linux-gnu.tar.gz/md5/0f7f2214d453f562107fe22af5004e8a +LibSSH2.v1.11.0+1.x86_64-linux-gnu.tar.gz/sha512/bd510f25dc26c05362ff204adcc356521bfdacd665411a99e07071ea0c4638274a2e78f009644cdf5e472a1d81c80e353f4673071d90411e6122b55160140f3e +LibSSH2.v1.11.0+1.x86_64-linux-musl.tar.gz/md5/ee98538d67b8b091c4ddcf632e72e7d1 +LibSSH2.v1.11.0+1.x86_64-linux-musl.tar.gz/sha512/38cbb59ffa420e4299db848b6ae95098e8e3e6e1334e05369089d17b04fcd0787ad22ba69465611f3e335a1efab228990db776916f40a937b21b18ca511a4484 +LibSSH2.v1.11.0+1.x86_64-unknown-freebsd.tar.gz/md5/0abe5a971abe63c3db4353e7e9b181e9 +LibSSH2.v1.11.0+1.x86_64-unknown-freebsd.tar.gz/sha512/8e8199bc0634a8ec51460cb8628c3b33d765b7060ca79aac3e80a0b29d55de5562cdbb36945b4a9feab5392f7f16d2dc48684e43d54c62a9fdb1f07f36b71810 +LibSSH2.v1.11.0+1.x86_64-w64-mingw32.tar.gz/md5/d30fc8e9b74388a1c642cb15ed33dba3 +LibSSH2.v1.11.0+1.x86_64-w64-mingw32.tar.gz/sha512/e278b87d081fbbe15f88bafa8870f0f294cea3ff8c8c1fc9a6c10228da91717aa3caa268cdb10f78c8e55651a90243962f85101eeb4433f85c1dfacc1461d96d +libssh2-1c3f1b7da588f2652260285529ec3c1f1125eb4e.tar.gz/md5/7b52de6ff70e16aa78cd699fee3e997a +libssh2-1c3f1b7da588f2652260285529ec3c1f1125eb4e.tar.gz/sha512/7c99d33e60862e2d89bbcc4a09ffff3fbfb921ed674e0d3166a255c72a8e0622a9c6be64f0eb2f8c12ddd80da0307b05d761615b876194bd854aa2c62e26f4ad diff --git a/deps/checksums/libtracyclient b/deps/checksums/libtracyclient index 19b7b26c5461e..a212c415f09e5 100644 --- a/deps/checksums/libtracyclient +++ b/deps/checksums/libtracyclient @@ -1,34 +1,34 @@ -LibTracyClient.v0.9.1+2.aarch64-apple-darwin.tar.gz/md5/08881ffc565e099903e2e972a7f7c002 -LibTracyClient.v0.9.1+2.aarch64-apple-darwin.tar.gz/sha512/a9dcc7f9ed7565a769dd1080513eec7439cd7b03d68d48f570ac3f396769ef0a7f9b07446045ce6536b7e67860096eb150670256c311c0a77ac1a271dc4b4422 -LibTracyClient.v0.9.1+2.aarch64-linux-gnu.tar.gz/md5/d6a8dbc7cf871f772f848a5e515e6502 -LibTracyClient.v0.9.1+2.aarch64-linux-gnu.tar.gz/sha512/cb9b3065f581a956d318d71a94216ca0e57599262a12a25bc2e6fa0234505fed5a9cad9c2eb7ad30d7ffe9c4ee3d26d9f645887d3f7180d69d3bf1d0745b4f22 -LibTracyClient.v0.9.1+2.aarch64-linux-musl.tar.gz/md5/0d74193e3571fbd80eb7d9e884b47e53 -LibTracyClient.v0.9.1+2.aarch64-linux-musl.tar.gz/sha512/18821911a96129486cb12726018b33fde1da345228623b7f326b92ccfcbbbb2349d79a35e6fa7cb4b6cf9283a860e8ac44c40d6b54a4dc1ea4373b869491b6d6 -LibTracyClient.v0.9.1+2.armv6l-linux-gnueabihf.tar.gz/md5/6111f3b3c696d9d07139e137c2ec1d08 -LibTracyClient.v0.9.1+2.armv6l-linux-gnueabihf.tar.gz/sha512/135139c221cb2d4d6000bd1a3771bd095e93487c7c649ebdf760ff5cb03f6ae003c33c2a36a52bbdf70e4c349195f78a97bc963336a36f33fcdeee33e4fc1eb7 -LibTracyClient.v0.9.1+2.armv6l-linux-musleabihf.tar.gz/md5/5b3154cc849b04bb3523f04fa4481b83 -LibTracyClient.v0.9.1+2.armv6l-linux-musleabihf.tar.gz/sha512/7f62a546c7cdbe3bb6a0a446980371ff340d5f530907a2434eba2a14bbfede8c740a763b0c68a252d7a3e357d9d933bcc6313919cd9bfa385715bc833be56cce -LibTracyClient.v0.9.1+2.armv7l-linux-gnueabihf.tar.gz/md5/f6952d495c5b699226260e065cf2703c -LibTracyClient.v0.9.1+2.armv7l-linux-gnueabihf.tar.gz/sha512/5fdad7f8ce3a03ce05adb3deb6bc8347aefcc8a7fe0a30e0f7684fe233eb8520aca138e0b8a6cc5555a1f2316a6e36bca32cb5de37f2aac5c5deddfaeb0f8570 -LibTracyClient.v0.9.1+2.armv7l-linux-musleabihf.tar.gz/md5/84924c2e32b39ed580b553a968e97360 -LibTracyClient.v0.9.1+2.armv7l-linux-musleabihf.tar.gz/sha512/2b81834b91472eb9897abefbe77e931782e8c14eaf7193f22fce82024610906b6e96122610edfab29a9c844581cc4ee9124e330af9eacd97fb8759c1de421472 -LibTracyClient.v0.9.1+2.i686-linux-gnu.tar.gz/md5/9f243a9d10cd928d45436f634d020c27 -LibTracyClient.v0.9.1+2.i686-linux-gnu.tar.gz/sha512/c9512030d83f32942c7fefd598bfa597ce758f39d11bc9551fbf565a418a3000d23f899f1e9411cddebb3642efef8cccfa3cf3f629bcc11fcf50585e1a80549e -LibTracyClient.v0.9.1+2.i686-linux-musl.tar.gz/md5/4aebc58f4c8101640d9e450338a4e12a -LibTracyClient.v0.9.1+2.i686-linux-musl.tar.gz/sha512/2085b7c0658bb39dce9a9b511c209a348916ed8e50ed0d51eb22f7eac167b890a87d357e433e12eaf7034c15842c8d2893a0c128443c4f25fa90fd5ca83e256d -LibTracyClient.v0.9.1+2.i686-w64-mingw32.tar.gz/md5/dc6f911f5cdd2789ef9f13a1a9882243 -LibTracyClient.v0.9.1+2.i686-w64-mingw32.tar.gz/sha512/57894c759db949dc669e23b7d5e015942630328a3dc754185a0f6bae95a66f0c3e65e365317bae95f3a216f4dcab681203e64dc8c9a0b5478cc9e27c9dab2e56 -LibTracyClient.v0.9.1+2.powerpc64le-linux-gnu.tar.gz/md5/a7429f900f7f0a14fa355186d99a24e1 -LibTracyClient.v0.9.1+2.powerpc64le-linux-gnu.tar.gz/sha512/e37ff8e8de9b74367b9f0d6fe49d983900529caf9c2c55d5ace305d5896c2de6589380247dc85017d959901864d4a163fe110e6d860340d949c6ea4dec50f47c -LibTracyClient.v0.9.1+2.x86_64-apple-darwin.tar.gz/md5/b037ea1027e6466d5dd9c0fb41f65ded -LibTracyClient.v0.9.1+2.x86_64-apple-darwin.tar.gz/sha512/81e2d00bd8eaa1cbcbd5c0ee4552028ccedffcc072beea3dc08ac3181677da93406e8dfc581a78434175fa5bb861df06848dd3012f8adbbb6dc72efcbb5094a0 -LibTracyClient.v0.9.1+2.x86_64-linux-gnu.tar.gz/md5/cfbe122083aeeea6bd7ddc4591b1cb53 -LibTracyClient.v0.9.1+2.x86_64-linux-gnu.tar.gz/sha512/e0418a0b50d64990d6f1b80dfe65e2360817211e1225c4d8d9fc9c871a95bbb62c2601c617adf1d55305518f5ba1dd05baee82f6934d0011269fab21b89336b9 -LibTracyClient.v0.9.1+2.x86_64-linux-musl.tar.gz/md5/f152ba78f2461fec711144ae66380c34 -LibTracyClient.v0.9.1+2.x86_64-linux-musl.tar.gz/sha512/f59f837d2beb4df4d3d65352a8c46261bb5a92ae88a62e2d1bfb7293184e02be982fbefe20736456719055e718a26003984224d0d74a0a6244dcc59e0d350556 -LibTracyClient.v0.9.1+2.x86_64-unknown-freebsd.tar.gz/md5/83c7b3d9438dd04d25573a386bc5c3df -LibTracyClient.v0.9.1+2.x86_64-unknown-freebsd.tar.gz/sha512/f22d0d4f4171067bd1f56bb63dba801e262d0ed4809538dae907296d1a12817954ad759cdc9e61f710fff5802fb7371d8283d6df52c9e8faf6b43c713c23e371 -LibTracyClient.v0.9.1+2.x86_64-w64-mingw32.tar.gz/md5/83f3db14b65b8e9942c754bcdb430060 -LibTracyClient.v0.9.1+2.x86_64-w64-mingw32.tar.gz/sha512/8acdd1d407ae927925f33eb75891684d6687e3577d5f8ac77e738daedc8145462b1f044e31edd9e2db4507673a0abebcea19e171833042cbbe5a135b0c0435cb +LibTracyClient.v0.9.1+5.aarch64-apple-darwin.tar.gz/md5/c6768380fef203f5310d2cb3ab6fe509 +LibTracyClient.v0.9.1+5.aarch64-apple-darwin.tar.gz/sha512/309216fbc5be52319241ccdd2360c8960ffecf50c963bf248ee6aab6a43a6cb4c3a703391c7d3e1b07cb077badce930673f85f28c0924975b75909a4654ca3a6 +LibTracyClient.v0.9.1+5.aarch64-linux-gnu.tar.gz/md5/20d6c3ef5032d458817f18aa7f92b44b +LibTracyClient.v0.9.1+5.aarch64-linux-gnu.tar.gz/sha512/d2e341ff18bd06b57094f2356fdb36a3f9dcf56f3340b83006dc02d41d6e5040f145a23a06f86ccd1c9800e93fc4461ddd7902b6eccb93b78b365c824e5d764c +LibTracyClient.v0.9.1+5.aarch64-linux-musl.tar.gz/md5/58cd88ab771a31326fb4e3448325a17f +LibTracyClient.v0.9.1+5.aarch64-linux-musl.tar.gz/sha512/dfa11ac4fa5261bad557a244458b2f67c20c761c5d49d31488a9b944345e32e55f1a40515097b4f5f4896fe5046e3bbc70faa40ff4dd504d4d97cfa42e46bc33 +LibTracyClient.v0.9.1+5.armv6l-linux-gnueabihf.tar.gz/md5/cce5ef56b53255494b334df157e285bd +LibTracyClient.v0.9.1+5.armv6l-linux-gnueabihf.tar.gz/sha512/1287f734669b7a7a6f43b6cf3b725de650e64edcd4284d51120e7371f91ca18c63d4981d58c28ce2da9355eefa5a02e0bc0b35303b096733a7842bc952da2df6 +LibTracyClient.v0.9.1+5.armv6l-linux-musleabihf.tar.gz/md5/60508f4f9c757678b8e52ed0342079eb +LibTracyClient.v0.9.1+5.armv6l-linux-musleabihf.tar.gz/sha512/92d2d8521a8b6c6901f36ad71f59fa1b2eb58d6dd06da02140cc26b6c44d2741ddd0cd3107bbd3e70ca1713a33fda48d5288bec59304264d0afc20d4e0167a50 +LibTracyClient.v0.9.1+5.armv7l-linux-gnueabihf.tar.gz/md5/64563cbf8fe18fe84a2ec9e9fda19e6b +LibTracyClient.v0.9.1+5.armv7l-linux-gnueabihf.tar.gz/sha512/b0158367834f32fd7449d45b983f37bcfed71727bcea3febf382a779265ce4b99845ae32f5c3969d83089bbf5e072680b11138a45b7b7030364ce341f285e220 +LibTracyClient.v0.9.1+5.armv7l-linux-musleabihf.tar.gz/md5/1d272a82701889fb695edde6bdde21bc +LibTracyClient.v0.9.1+5.armv7l-linux-musleabihf.tar.gz/sha512/1539f06593eb769ba35ef198f90b9fa6c11d7146124f21e35c8fee577d8fcff3d71f4e38e6d26d84dc8f66b06a26a130f4bc740a201cb27573ec8e6816d489e2 +LibTracyClient.v0.9.1+5.i686-linux-gnu.tar.gz/md5/4e14c36ea3b1e54a26897767d4a010d6 +LibTracyClient.v0.9.1+5.i686-linux-gnu.tar.gz/sha512/4c1d9cda642a4ea3084b73c0b536edd0f33a216aa02c59f914ab428e0e97120ba3f81e7eb2262a2242884f553fd319b80ea7b013344e87e173dc1ee9b3421ef0 +LibTracyClient.v0.9.1+5.i686-linux-musl.tar.gz/md5/75ced50efcc6ce1c17064a3447933fb1 +LibTracyClient.v0.9.1+5.i686-linux-musl.tar.gz/sha512/969c41de91d288e4e37a36f990341c2f71d6788d93bb34eb6708532ea60bfa1bae6760871de33b42cca50b61dbf8028f639538f34ab9bebef2312d449c259f4c +LibTracyClient.v0.9.1+5.i686-w64-mingw32.tar.gz/md5/0f8c6cd2e1aa738b340e10e1ce81732b +LibTracyClient.v0.9.1+5.i686-w64-mingw32.tar.gz/sha512/76824a28f16650e14b06051f49a5c42cd8692dbcf808c2d47ab21ac986cf49e17508062ce5e0e71f2a689112098897dd7fcd47b819cab6967080b7e23224bf1e +LibTracyClient.v0.9.1+5.powerpc64le-linux-gnu.tar.gz/md5/573e5c6aca49845b7e9e881c7bc8f755 +LibTracyClient.v0.9.1+5.powerpc64le-linux-gnu.tar.gz/sha512/7451731c6f0bf0ac08c966f925b0dd628f6f4c0ff7e2d65e8bd3d27231e3fbb2512169c917431baeca3fe8e66af4bbbea7ca4ba79dd7d3b9e1d43b08a580dc76 +LibTracyClient.v0.9.1+5.x86_64-apple-darwin.tar.gz/md5/b037ea1027e6466d5dd9c0fb41f65ded +LibTracyClient.v0.9.1+5.x86_64-apple-darwin.tar.gz/sha512/81e2d00bd8eaa1cbcbd5c0ee4552028ccedffcc072beea3dc08ac3181677da93406e8dfc581a78434175fa5bb861df06848dd3012f8adbbb6dc72efcbb5094a0 +LibTracyClient.v0.9.1+5.x86_64-linux-gnu.tar.gz/md5/886d5b76711252176eaf7e41dd2db0a5 +LibTracyClient.v0.9.1+5.x86_64-linux-gnu.tar.gz/sha512/783c6469c586520c7f1206f5c2eae6a909a2dac7c3f726f439da91b0f3dde970fc4f17c6e3b54aa8924ae537b1b6a14729cd1305e6488c458db68ffe973c2ced +LibTracyClient.v0.9.1+5.x86_64-linux-musl.tar.gz/md5/170a53b0c63e7e130bf3d71590e27193 +LibTracyClient.v0.9.1+5.x86_64-linux-musl.tar.gz/sha512/ccda22a897358d9eb55b500dbeb35c8d136f484a649c29066d5f2d0665d5b71526502237dbc374c2d018fa212896fa6a6c6903fc7c4833f814d1e60c3f12fa83 +LibTracyClient.v0.9.1+5.x86_64-unknown-freebsd.tar.gz/md5/58fdabdbbdaa7b4f53bc4249a7c57059 +LibTracyClient.v0.9.1+5.x86_64-unknown-freebsd.tar.gz/sha512/ad0d4b74c707da86fbcf7210cbcc9a3ebdef770ad0bf12f33e3476c2e455d48e389f021fc47e50b85d1c4741072396b71dc034cb95bfd38f775f4879d06b5998 +LibTracyClient.v0.9.1+5.x86_64-w64-mingw32.tar.gz/md5/cf5b40edd556a7b8ab23d28bf0eecb12 +LibTracyClient.v0.9.1+5.x86_64-w64-mingw32.tar.gz/sha512/8ece28dae598418c3435cfd323609e6e615ce8299370040fdd3a000007faecf87c5ffdfebcca80ea9b4180ad9bf13d3f3d65fed2fafe6f54d4a6068f9cae61ca libtracyclient-897aec5b062664d2485f4f9a213715d2e527e0ca.tar.gz/md5/51986311723ba88ac305ad2c1e3e86c6 libtracyclient-897aec5b062664d2485f4f9a213715d2e527e0ca.tar.gz/sha512/f92c5bd71fd3e933f03e3535c0668a9afddc7ea19531aaee11b22bde09c57cc8a555f7f17f489d4221645fb6d73ecf9299d5bb11949d7529987beec3e7d91763 diff --git a/deps/checksums/libuv b/deps/checksums/libuv index 709fba71f159b..6ad61210bc0cc 100644 --- a/deps/checksums/libuv +++ b/deps/checksums/libuv @@ -1,34 +1,34 @@ -LibUV.v2.0.1+13.aarch64-apple-darwin.tar.gz/md5/1a58ce9dc88984c3b5f7df97af6cbf83 -LibUV.v2.0.1+13.aarch64-apple-darwin.tar.gz/sha512/2bfd482ac759ac88d885371854affa8e358a10fea6c7756e0d1b366bc82ecbea56bdf24ca634525fb2a6fc2b3a5c77b07a4c6dec2923d8bffe2bc962bd3e7f84 -LibUV.v2.0.1+13.aarch64-linux-gnu.tar.gz/md5/7f270dd1e3046c8db432e350dd5cf114 -LibUV.v2.0.1+13.aarch64-linux-gnu.tar.gz/sha512/c0debcf17b54ba9f1588d4b267d610751f739d8ff96936c9d5fb6d8742039f8736c63fa70037322705569e221d73fb83c03b6ba9fb4454442fffd3a9f1a1a2da -LibUV.v2.0.1+13.aarch64-linux-musl.tar.gz/md5/07f56c32d5a2c12e6c351cf9f705631c -LibUV.v2.0.1+13.aarch64-linux-musl.tar.gz/sha512/8037d7aa0cb06850f055fd19cebdcfcf3146dde0d12768a9669bf05dcab91fdf3708798203258cb3f452158bdec7faae41e6afbb0e60b21403e683db3e23a1c9 -LibUV.v2.0.1+13.armv6l-linux-gnueabihf.tar.gz/md5/5558a7f68c7c375f40bc64da59fef0ad -LibUV.v2.0.1+13.armv6l-linux-gnueabihf.tar.gz/sha512/92ed6601cb5aa9a3ea2478a1485849543c9e847c8e85542e72f372a2d37c4c8b90f5ecb1bee1e462db31e1e8dba460f584b3cca9c833989c2b9ee404e355654e -LibUV.v2.0.1+13.armv6l-linux-musleabihf.tar.gz/md5/de6bfb7f0c0468b79e8895f166fb6340 -LibUV.v2.0.1+13.armv6l-linux-musleabihf.tar.gz/sha512/7948d007171bf57b827b489f3627ac74df447f4d696e8226e54e95ef0c8eed5a5ddbf758fbad841bc367f78cd61e6a5899eb478003dca3a79cb494b38cab830b -LibUV.v2.0.1+13.armv7l-linux-gnueabihf.tar.gz/md5/5be35de1d881f80981647c369b9b4ec8 -LibUV.v2.0.1+13.armv7l-linux-gnueabihf.tar.gz/sha512/458e5058ea4e794e0dc790da4c98569676056bac336df69762e8ccfec8f2955dcc55e8d090daa1b191c0ffa41392a04530c9bc28aa27cf411c1df2f1ba14bb97 -LibUV.v2.0.1+13.armv7l-linux-musleabihf.tar.gz/md5/8d034490da1ec2ef3dd3c69336177654 -LibUV.v2.0.1+13.armv7l-linux-musleabihf.tar.gz/sha512/7f595a8ab8b664d229cf6144e9ed1b5936ba8aaa70b92611ddb85bbe9046bb1b94d8417355a5abf058fb00023d4d56be0b2ddfd5dba896cd7b64e84e32dbfc5a -LibUV.v2.0.1+13.i686-linux-gnu.tar.gz/md5/ccb9aba78456c99b8473e8ddd328f90e -LibUV.v2.0.1+13.i686-linux-gnu.tar.gz/sha512/d382d90137db308933257a75e51d90988d6d07663b3b2915478547127d32f73ae6cdb4575d5ee20758f8850c7e85908fe4710c053cb361826621f22bc5b6502d -LibUV.v2.0.1+13.i686-linux-musl.tar.gz/md5/5ade48f16aa26bb68dc046d285c73043 -LibUV.v2.0.1+13.i686-linux-musl.tar.gz/sha512/f5728a5dc567268e59aa2697deb793ae427e11dcb6796c577e3da3ac24225ece5d4a6c4f903d4a7b184d3c3a3c8c1586c34b97e4a75de0a4e23ace720020fa8c -LibUV.v2.0.1+13.i686-w64-mingw32.tar.gz/md5/399d6fbe54dcfb2f997f276cd38fd185 -LibUV.v2.0.1+13.i686-w64-mingw32.tar.gz/sha512/55707e02a4b5bdf9c94683dbaaea1cac58f7735d5ae22009c219ea61ddfab1fe19b9bc6e830fc32207efc588c27f92770d2441b972f351a1bb3fdbbf5671a58b -LibUV.v2.0.1+13.powerpc64le-linux-gnu.tar.gz/md5/26656d4eaae8739099c55054bad54f57 -LibUV.v2.0.1+13.powerpc64le-linux-gnu.tar.gz/sha512/f85f8cfd91e7b1b02b073931ef9a3bb05620641d18ada039744a92b8c40e5a3de8d7c5efa7189b88baf1eb11fbcf9e6d16031b86e40f99f1b7cfebb0f5c5adf1 -LibUV.v2.0.1+13.x86_64-apple-darwin.tar.gz/md5/c7da6b91394a20c43acdf6f680cb62e2 -LibUV.v2.0.1+13.x86_64-apple-darwin.tar.gz/sha512/238d22bd299ae3b0dfd24a5b38d6d0d07b751fb301487a2d1d2f5313ae3596f33492388ea9fbff549293787505fc527e174ebcd4068f1bda43b40bc19e016d89 -LibUV.v2.0.1+13.x86_64-linux-gnu.tar.gz/md5/8c8913068263257cce5042b725918e0e -LibUV.v2.0.1+13.x86_64-linux-gnu.tar.gz/sha512/a848381012d5a20a0c881f5835e479cfff811928ce508cc57041d69668782f2135c14c7e5388e7dbf693ae57aa1825d911f6f450b9e909cce45487b03a581a23 -LibUV.v2.0.1+13.x86_64-linux-musl.tar.gz/md5/16747c066b6d7fe56850c77f66ea7478 -LibUV.v2.0.1+13.x86_64-linux-musl.tar.gz/sha512/833a02f9191edf3b56f1e02f5671f22de6cb27ec3c9f770530ec95d8da7ba0b9c05bcdf6b094224ea8e43ba70918e1599f3237bd98900763daef80c327d3d2de -LibUV.v2.0.1+13.x86_64-unknown-freebsd.tar.gz/md5/71f7d9d9234a0623c4b2ee3a44089b62 -LibUV.v2.0.1+13.x86_64-unknown-freebsd.tar.gz/sha512/e73911c3ec35a2201d42c035ecc86e8bd860604b950cb1b7784ff49e27ef5ac9b1da09b59d359ff25b093b87593a8305105bc43711c12eb9654972e280c26d3c -LibUV.v2.0.1+13.x86_64-w64-mingw32.tar.gz/md5/471d20fa2eac6bfd5d7cdb1b7f58c602 -LibUV.v2.0.1+13.x86_64-w64-mingw32.tar.gz/sha512/3f5ad55268184227378ddcfed0146bf0386c8cf468bc53a348d21195d818db4db768be61fd23e1ee2ecbb52f073815884a04a923d815b9b5992825d144c0633a +LibUV.v2.0.1+14.aarch64-apple-darwin.tar.gz/md5/1a58ce9dc88984c3b5f7df97af6cbf83 +LibUV.v2.0.1+14.aarch64-apple-darwin.tar.gz/sha512/2bfd482ac759ac88d885371854affa8e358a10fea6c7756e0d1b366bc82ecbea56bdf24ca634525fb2a6fc2b3a5c77b07a4c6dec2923d8bffe2bc962bd3e7f84 +LibUV.v2.0.1+14.aarch64-linux-gnu.tar.gz/md5/7f270dd1e3046c8db432e350dd5cf114 +LibUV.v2.0.1+14.aarch64-linux-gnu.tar.gz/sha512/c0debcf17b54ba9f1588d4b267d610751f739d8ff96936c9d5fb6d8742039f8736c63fa70037322705569e221d73fb83c03b6ba9fb4454442fffd3a9f1a1a2da +LibUV.v2.0.1+14.aarch64-linux-musl.tar.gz/md5/07f56c32d5a2c12e6c351cf9f705631c +LibUV.v2.0.1+14.aarch64-linux-musl.tar.gz/sha512/8037d7aa0cb06850f055fd19cebdcfcf3146dde0d12768a9669bf05dcab91fdf3708798203258cb3f452158bdec7faae41e6afbb0e60b21403e683db3e23a1c9 +LibUV.v2.0.1+14.armv6l-linux-gnueabihf.tar.gz/md5/5558a7f68c7c375f40bc64da59fef0ad +LibUV.v2.0.1+14.armv6l-linux-gnueabihf.tar.gz/sha512/92ed6601cb5aa9a3ea2478a1485849543c9e847c8e85542e72f372a2d37c4c8b90f5ecb1bee1e462db31e1e8dba460f584b3cca9c833989c2b9ee404e355654e +LibUV.v2.0.1+14.armv6l-linux-musleabihf.tar.gz/md5/de6bfb7f0c0468b79e8895f166fb6340 +LibUV.v2.0.1+14.armv6l-linux-musleabihf.tar.gz/sha512/7948d007171bf57b827b489f3627ac74df447f4d696e8226e54e95ef0c8eed5a5ddbf758fbad841bc367f78cd61e6a5899eb478003dca3a79cb494b38cab830b +LibUV.v2.0.1+14.armv7l-linux-gnueabihf.tar.gz/md5/5be35de1d881f80981647c369b9b4ec8 +LibUV.v2.0.1+14.armv7l-linux-gnueabihf.tar.gz/sha512/458e5058ea4e794e0dc790da4c98569676056bac336df69762e8ccfec8f2955dcc55e8d090daa1b191c0ffa41392a04530c9bc28aa27cf411c1df2f1ba14bb97 +LibUV.v2.0.1+14.armv7l-linux-musleabihf.tar.gz/md5/8d034490da1ec2ef3dd3c69336177654 +LibUV.v2.0.1+14.armv7l-linux-musleabihf.tar.gz/sha512/7f595a8ab8b664d229cf6144e9ed1b5936ba8aaa70b92611ddb85bbe9046bb1b94d8417355a5abf058fb00023d4d56be0b2ddfd5dba896cd7b64e84e32dbfc5a +LibUV.v2.0.1+14.i686-linux-gnu.tar.gz/md5/ccb9aba78456c99b8473e8ddd328f90e +LibUV.v2.0.1+14.i686-linux-gnu.tar.gz/sha512/d382d90137db308933257a75e51d90988d6d07663b3b2915478547127d32f73ae6cdb4575d5ee20758f8850c7e85908fe4710c053cb361826621f22bc5b6502d +LibUV.v2.0.1+14.i686-linux-musl.tar.gz/md5/5ade48f16aa26bb68dc046d285c73043 +LibUV.v2.0.1+14.i686-linux-musl.tar.gz/sha512/f5728a5dc567268e59aa2697deb793ae427e11dcb6796c577e3da3ac24225ece5d4a6c4f903d4a7b184d3c3a3c8c1586c34b97e4a75de0a4e23ace720020fa8c +LibUV.v2.0.1+14.i686-w64-mingw32.tar.gz/md5/541210fef837c2ef7cffa508d282f9bb +LibUV.v2.0.1+14.i686-w64-mingw32.tar.gz/sha512/4541a02c59b66f97099b5264dce0cad90fcdf9a4d7ccd8e950cc1f3a530616a0fb2aa43db21b5b1f52819efef22cd0b68595d419e2e5b05924e344b0333f8bf8 +LibUV.v2.0.1+14.powerpc64le-linux-gnu.tar.gz/md5/26656d4eaae8739099c55054bad54f57 +LibUV.v2.0.1+14.powerpc64le-linux-gnu.tar.gz/sha512/f85f8cfd91e7b1b02b073931ef9a3bb05620641d18ada039744a92b8c40e5a3de8d7c5efa7189b88baf1eb11fbcf9e6d16031b86e40f99f1b7cfebb0f5c5adf1 +LibUV.v2.0.1+14.x86_64-apple-darwin.tar.gz/md5/c7da6b91394a20c43acdf6f680cb62e2 +LibUV.v2.0.1+14.x86_64-apple-darwin.tar.gz/sha512/238d22bd299ae3b0dfd24a5b38d6d0d07b751fb301487a2d1d2f5313ae3596f33492388ea9fbff549293787505fc527e174ebcd4068f1bda43b40bc19e016d89 +LibUV.v2.0.1+14.x86_64-linux-gnu.tar.gz/md5/8c8913068263257cce5042b725918e0e +LibUV.v2.0.1+14.x86_64-linux-gnu.tar.gz/sha512/a848381012d5a20a0c881f5835e479cfff811928ce508cc57041d69668782f2135c14c7e5388e7dbf693ae57aa1825d911f6f450b9e909cce45487b03a581a23 +LibUV.v2.0.1+14.x86_64-linux-musl.tar.gz/md5/16747c066b6d7fe56850c77f66ea7478 +LibUV.v2.0.1+14.x86_64-linux-musl.tar.gz/sha512/833a02f9191edf3b56f1e02f5671f22de6cb27ec3c9f770530ec95d8da7ba0b9c05bcdf6b094224ea8e43ba70918e1599f3237bd98900763daef80c327d3d2de +LibUV.v2.0.1+14.x86_64-unknown-freebsd.tar.gz/md5/e828eb79728e75766a72d7b304c9f989 +LibUV.v2.0.1+14.x86_64-unknown-freebsd.tar.gz/sha512/37df5b966f70b3d1e0eae603d4a6b00c84dffdfc3632ca581669a99a0cd894a81aff4361de3beed53ec032273f62cf397cf52085c6c387d0bbb2c57b59ae84fe +LibUV.v2.0.1+14.x86_64-w64-mingw32.tar.gz/md5/bded9d94435a70fd0dfff3f0fc605736 +LibUV.v2.0.1+14.x86_64-w64-mingw32.tar.gz/sha512/48793a386f6231d12f01b4718d87aaab409f0b807b03a3577e2401f7493caef36a5072fdc33f3cd3ce9733ba50ab344cb2e2fa6a21ba5adb56d6cca642afad0c libuv-2723e256e952be0b015b3c0086f717c3d365d97e.tar.gz/md5/d2284d7f6fa75d6a35673d22e1be058b libuv-2723e256e952be0b015b3c0086f717c3d365d97e.tar.gz/sha512/68d6ab740945b9ce3475118ce3d186fb67d7e8125784cc0c827df23d63f50c40c0261ef37365d8c11ab9462a8dd4e2e6b19e91e3c84b64d8fb84fd3894afc4ac diff --git a/deps/checksums/lld b/deps/checksums/lld index 2459825b43df3..590e2f3cf878e 100644 --- a/deps/checksums/lld +++ b/deps/checksums/lld @@ -1,108 +1,108 @@ -LLD.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/0edc0983135da9e37b18fa3fe6d56237 -LLD.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/2adbb4eb76e72be28951c96140070b6d16c5144f689631d51b56365549a5d38535c1dbb5e351a6bdac4648ba52da02297591874193b1c16e7078060c99d23f04 -LLD.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/59b06fca083f1a5e9bf9517ae4f6a4d6 -LLD.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/7f1dc641df9288dfcd887239b86e7fe2871220b9d7f877b24b3197ab73d2176c4533decbea427b09e8f70ddc6c7570d31f5682eaed7215193e95f323769276a8 -LLD.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/c97e607a661b9ff571eba4238ec649dd -LLD.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/7c7add8a0fac379b580a19a02966adca4932bd4573ba0111262544c0d935fc121c5aadaeadc97f9564331202b08c7366ceb170bb2b318db3425c157772d283ea -LLD.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/d55ebbd25b97a4e4628fad1e04782056 -LLD.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/681729b4d10d8f66b0cdb89ca4500ee8a417561cc886608d06af0809d946bdf7cf5c6bda2b6d5d577bae3a15dc347568a3d7d7428568f86ca61327041026fbd2 -LLD.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/78b06e5a351e6eab372ae29d393ffdcf -LLD.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/37a8b5fa3491ec8ae74da88e81a0c229d38166acbb46ff3f5a819034c40fa59ca2ebf4c0ed58e615baf7bf7da789ba86114738252501cfbd842be95cc2104dd4 -LLD.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7ba5b76c83d746a3c62354bf753db697 -LLD.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1fa403c8923487e2d6a8e8c1d86c2ea955ed32bcde2328cb1167a315cdcf704af896505e9c44b750ffca9e3ae66e805f60831136eb79fe1c6d58eaf81a78b1a4 -LLD.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/f052208026a0fd5120ea838843b244ac -LLD.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/fd9ff2d5836300bcf76e4aeefb1e57860b3203fab0c32e668dce3e636dc362876d0fba1f2c23bf55a342ac17294c73e839a8eaf065d64d4397582dc212b8b9f4 -LLD.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/4d1077835df0f592a168c140ffe6299e -LLD.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/8dfd44113b817f607bc38ac1b4ffb192be340c826b9bc8f9d41e92e0f0333d8fc4227f93aaed16a4b9e94a5ec8b79628f2d3a73fb644684a595921f36ccfbeb8 -LLD.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/0f31939f4ff00c572eb392b6e70aab38 -LLD.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/581441087ad4869cfdba13808b2d6adaf929ea1b38ce96c357f276d77c3e63439f8edbb822c8f41770cb61fc08837d7eed2466d187683bc44f2cb3c553e2e60e -LLD.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/ca767173044b5a19a86c6a890dda3b05 -LLD.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/0577785079039b534fd736ea7a51d9b5176693d81e0bcda4fccd760d7c1218042999b6a38b973a903c0ef68e57dfb3b86e9e2f9e307dbaf603997a853f34eed3 -LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/89bb950f17a5b792a6e60ef98450a6b4 -LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/54bb68159743cd14ac0fce7f218a66ff6bf29e626df8dbdbd6e8581699d9b1d357a3c10d86c6822bde7299c14728bc55480f91cefd041d1de61cc179ed347b9a -LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/735e4dda5f8cc06934f6bda59eab21d6 -LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/a9b91beed959804b9e121fee786f28808a7670fc5d2728688cca1c7e0fe56e82e47d95712e38fdfc42e02030896843c4b3df9928eb34c2aca9ac02262427c76c -LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/30a95179bef252aaca41984daa54c680 -LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/0302db3c04396a30d1f6ab8d8d585bbe3a9e70342f068747ddb875b024c173bb9bb34518da7e76a10d3a325dfd741118f36f67fb83251bdb8a9901c4799ad79f -LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/4386c746c5d9b1408dbe7df04bc6a08d -LLD.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/d71c6ebf5d3eb42368ab336cf8520afcd05470308ea117fe95797171e5c573948412ce777f62cbd45ee99ffa59cc769c276a60393a22fecffbeaf8b77b50ea35 -LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/49287977de61b100979355e458c8970c -LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/85ed3b2c7d2478a307a393a2003e694fc3097cc6812143abb3cbdd73a7d36bcb6f06a7d341ea639b9849f714c2d8f418a8b96035ed1c19a3957b42d005c0427a -LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/80a97341c9537b8a58c7df23f86d5cf4 -LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/5774b246ae820de4230a1f4f65bd683145dad5cbc4d326fd75649e06e773c74c2cffd48108a79ee0cc93175786450b6d50f7ac532e6f68961c18fe6119ef94f5 -LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/6f84d6858aecdfd95726a37c9b6a0e0f -LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/2cdac9a810c777ec6d85093926292c75e4287f83b7224246f6fa248e3874a2078c46377cd5ccb0f36a5e25b139691f1111d705079e89ea4215c9bc8659414094 -LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/d40f0956cc36aa7846630755a672a91c -LLD.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/01368311a0ecfbe3f23514115f0bce7ce816c878815d937f3fa067b9daab07da0c02f520a96ad793212e5056bfb6294dd0129dae75f274dfeb48191e504c5322 -LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/689120b8091b9da8cc9528c96f5c5df2 -LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/ab78810af7d77116a4973b5825d5090133218cf08d5d77be14f83e028821e83493a112adf71094cc208f74cf4deabda63d7fff98866cc0304793aec9b27b7222 -LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/5627ccf1677c48b7ef8ac9e5faac1d20 -LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/454d2636cd72974c79c2d907e56e3c69c30c3fff78b199591c9ebe4f14d04c40c4bd7331f8dc2c957c37e214da8d28ef3a47ed8d3dd4ca9d480d52bab3429b39 -LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/8f50e5f684c41845308c123f8e45a0d5 -LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/21baf8a00fa65473ff6cf7ef2974ef88cd5b0eadd06ff85598de10d09425074297bcff3472ef001047a5440065a2de2fc6b1eefe3a32c7c1b3e3261165dc063c -LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/c2e0a5f58e38a9acf2c3914177ceb827 -LLD.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/2a1653d171a2ff08bde55c53973e62955fe9d9629388ae014a645d3199d8f4bcf0fb923d06812ccd62e224032b261c8ebed56ebebed750acbc87671203d7aee5 -LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/fa3959aa413a2b707d8831edd2bd7867 -LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/8b74fef916a72c2f4933c21d3344410c7e03e64265a44dd62cf2ef2ac0feeafeb2b443eafa5dad3d3d0028be96b9424ff67b16391f1b3a2185826de68921adab -LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/b0751bf7eba4f7f7a28dc22993eac9cc -LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/7510f7349b06365e9cd260229e7b8c84da26bac072c5fe9a4e59484d82a0753d4ecf1066ffe41343f881a682590dc9ee4ef4a49cd83dba45c21b8d76dfb80f67 -LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/5abfe9e960bab4c8a44f41aaccaf936b -LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/efda0e0a35e2774af2f2df53f89d61f146a5730086d40865d448b009c833934b23ea4b296c3dc3f2039527b72ef40493fdee6f7c630484f64cec2d1aebf4a4c1 -LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/bfe87378e965050b1b20e993c8b13a53 -LLD.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/ef2fd5e81f349673417bffd68c4122a87c09caed3f6f8f0235bc70b75deca7363cad68276aa708fb9ad8f7edd249d49f78d9f5fe7b226b62e8604c7bd3d4b9cc -LLD.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/4ee16f57d7dc060007250e17ffd55817 -LLD.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/27fd3a21bac676feb2c2c2363c027cf12988c70d889174e52c6bc1fcb4a93241f4bae85d5750ceba5fa971611700a9d15e3e02803cc14382cf6a1ab2918b719c -LLD.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/06699da5617371442b0539203152405d -LLD.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/83ba6300d5669b52c1913440598a2577106ea73e0b83549a5b3b0f081a94b6b8ca9fc05687d2be4b60c2d6a524bafd43b839082f0eee58b4685758061b229fde -LLD.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/a051688aa3a6383b4be4faa4f4aee985 -LLD.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/2059c6ac6579c4720e7167cd547b679a9c1a27a2c68174ed543be935ee23122234b3f2a4555de0abab3a982aba73d1751db336f3e28005ce8e4659d61f9269aa -LLD.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/600baa66310cf348ef3b4351ada014f4 -LLD.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/52b4718993d8abdca8ab701e86022367655d7927dabb8f3a8e41e43dbc90a9af78caf8abd37907a79b0f05017b6f0ef72314a187dab5bdac8ef7996e74c96e2d -LLD.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/e1e12162e5c63141dd95fca83cf1be64 -LLD.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/ce21d1cfa4af89fee1cb13587e15d355f179d38a4a9b4ffb9f357d46fe9b7fed4a5cad801ddf75d66b71d77170427609a51144450f83c8dd59af5c02fb0a9017 -LLD.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/932639f712fb881f621e5bb369921132 -LLD.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/86426de75c4fd1e1d56e1bee08bb6447be0c7417f8492639158f436caa5794862dd3b2981f26f1828852f35806dd2177fbdaacbee67ea849e8de597948b276b9 -LLD.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/2ff9f42465eb6e845ed6b7567b9d14d8 -LLD.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/a19b985b28a642b9a40ef25d02d4e94608b7e5c9925db5202e9d34ca8258e0b02d758de5bbeed63f958602f7fb59b70c4f32434a59008af3f0dd1b757a20e2bf -LLD.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/6de812afa415af04eb9d806adbd4b2ed -LLD.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/c6799fb148f8b019d0b05fa707d58ac7f449347290fc3f47458cb84e0bef704fd179e6d29d2efdeb0c35e4ee799284f5850b1ec5c04ccfad45b38e058e449554 -LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/331d844c447f564171345009764321a1 -LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/978349a74fc5498408a5318c87ec6d25c01268b9d21fb85e6bb601243ad0d33be8501b181d1f9ab7663433a740912f5bcb7160caf1011b1a2c84fdd51e0fce78 -LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/8595a49c49e851973fffae7c4062911d -LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/f707e514843a206b53f380c7bd8d4d8203cc62219344c1234416462dc1cb3d3f8a7452ddfd0f07178d43dfb193b4402a018cc465dc76b43b687fd20fa1ea5222 -LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/5b4463e81c156dabe3d182c42eb647e1 -LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/995db577d4a78d62cfcfca3f1fafb333ff26548b41d8aa8d763e4705dcdfe8005e2f68873faba4040599a6d15821a523261d0451d75fdf6e1c5224e8e777a71e -LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/d2f9f08cc952c0639f7ef1073c8630d6 -LLD.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b1cab7b813fe0f7c26c55261e8561295cbdf1e812db3844b87605fb527d09855f2bef4a40ddb0a7cd354c7cbb626293d4d4012f33acc242f9af4abe1dbbbeeb7 -LLD.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/e82e3b67a073cfa6b019bf5604eabf2a -LLD.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/9bb18adf78afa9dfa0054e6511f5750a9e2fa9138aeb1bd83f7a51d37d031e2f3c151463ea8f682dc7130cb98fafae0b84c60d3befe27f9d0d3dc3334ef82420 -LLD.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/56da3cbe81ddff089ccf6b6392a9396c -LLD.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/2af483a1761022dcad414fa7cec7fb5c6fd54be28185e49539f4824cb0b6acdc1cfa5c78de31268dbdc444201936c5a6d2e04f39ef6f0b9fb184985ba4e3daa2 -LLD.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/15cbf5eaf89c7b834ee19629387515a5 -LLD.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/75ce7c398bdfd57af2c09dfc946b024d5a72e90575ed92f28e015e620ca89e421dfc9a391f4a78277c3e06c38dd696d572c5601a2b1866e521dbc2fc5a60da56 -LLD.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/b895da29b6082cdff6f0324179352fdf -LLD.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/e89a97dfd6c345158e3e12cdf97d33c22f849e5438401cf5a3670c0d1cf0252ca03e4c52475a42c3e6c2b2d689c2f53fc5cb7c925a23167ac51fa1a5e01e3d7f -LLD.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/7edda2d8c2eaadec2d262ded2456934a -LLD.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/0b1d60840d638c0b0269b901a3f5198e18e244da338aef2fb49b474b3601d44a2b4dec13e258909985e363ef8a8749838b01dd195e05a266ca36e6d9f274ef17 -LLD.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/e26138e3491a053ea9a998dd00ad728b -LLD.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1215861fa52b1ee21196bbce0e99912b25f887f5734e0c2628ac78c1af5fdf57c4d7cf099cddcd7031a26c60cf141aeea66a0147428008cb485c207e90801835 -LLD.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/a1e786ac775517b8b483bbe3f6571d37 -LLD.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/3937f156fc2fb8eecb13444c71f380753c16b08f29124228808c91ea4258ee2195219c4a9b601d4468cc24bd584403c16175518a620bd94a7dadff868b3771d7 -LLD.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/976d840de14ef6ee2c0a538197fe8f10 -LLD.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/7f58f975dc3d69f502537aca79509bbc3c4f5da2ff8ddb1c7e27180a6bb2123713eb42da61cfabd7a48a31fc464fd74554b34935dfdb3ec095d14ff443f514f3 -LLD.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/ab0295ba327cfa6b9a252b0e7a4b50a5 -LLD.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/7c750916d4157ba0a37cd1277a0f8faf32123dfc626ea76f848a7c567fd889a7801f8402a307c190ab34fc21b156f2a23967abc9972fc103e5847a200ffc7305 -LLD.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/6827f38ed653f33953ff7ae510a517d5 -LLD.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/f01c655f6433ec6808b62872b8fb4c5a2d8e187643c11f0b4f5c06e2302e462353b516f431c1e26ee60b579c0f8c8c6385f018db3011c619745a39f9ef263436 -LLD.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/d444e6188476c8b7bb6026aac6ea0a1f -LLD.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/69510929896bcfdc4377b180ed206617f96e1fa13fe9f8ccb18d78958c3f9f951a2ff8ada9d1217a02407819caed5308d91bf8fd72434ba347f548c9ba000a5e -LLD.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/728e79f334e5151fe5595711763baca7 -LLD.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/2501a5cae4e61302e44f06fb7d38d15a776d750c6e99c30f89e1464e836a29c735d40972d48d19f1b38aac3f487cfb532d71ce9db2df8bfddd03d1fea5f3750a -LLD.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/12329ff896ea6018df464e0d97154f74 -LLD.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/f44e3e2c8b27b8c3a8f5c90d58a286e29b5ba6d05fabcd891749fee57b441c3ea846103116fe02e2d7f754e77e8ebd97198a180bd855fc8009e9e285a28435ba -LLD.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/0771c767ba9babc3961102d8dbb0087b -LLD.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/6ddf5174189f06a7cfa0be0e14f73e593786e02be51ed1e5576dfdf2f66149e68e0162a9fc23bafd5f1c2b445861734799cb0316a6762acc2c303bff417df3f5 -LLD.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/bbb2c448fef481ce9ee96d311323bf7e -LLD.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/9f6fde5aa099e2eef3aabdb6a67f5664f0c3bcfd5b3bcb955565d26334f49acf1b976458b44867ce2d7aa0238370bdb9e98cfef30311177c059036b1c51d6109 -LLD.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/e1b7c87717936fe073638b22892fd380 -LLD.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/96bf89bd3edf2225a704ba54675af2c172a469adda9f2700a091af63168b46da7bf13499fccd7a4bede8ec6f9c6da14c42f69df9c1f2ff3b3a9b1ec9801f2eff +LLD.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/0edc0983135da9e37b18fa3fe6d56237 +LLD.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/2adbb4eb76e72be28951c96140070b6d16c5144f689631d51b56365549a5d38535c1dbb5e351a6bdac4648ba52da02297591874193b1c16e7078060c99d23f04 +LLD.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/59b06fca083f1a5e9bf9517ae4f6a4d6 +LLD.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/7f1dc641df9288dfcd887239b86e7fe2871220b9d7f877b24b3197ab73d2176c4533decbea427b09e8f70ddc6c7570d31f5682eaed7215193e95f323769276a8 +LLD.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/c97e607a661b9ff571eba4238ec649dd +LLD.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/7c7add8a0fac379b580a19a02966adca4932bd4573ba0111262544c0d935fc121c5aadaeadc97f9564331202b08c7366ceb170bb2b318db3425c157772d283ea +LLD.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/d55ebbd25b97a4e4628fad1e04782056 +LLD.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/681729b4d10d8f66b0cdb89ca4500ee8a417561cc886608d06af0809d946bdf7cf5c6bda2b6d5d577bae3a15dc347568a3d7d7428568f86ca61327041026fbd2 +LLD.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/78b06e5a351e6eab372ae29d393ffdcf +LLD.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/37a8b5fa3491ec8ae74da88e81a0c229d38166acbb46ff3f5a819034c40fa59ca2ebf4c0ed58e615baf7bf7da789ba86114738252501cfbd842be95cc2104dd4 +LLD.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7ba5b76c83d746a3c62354bf753db697 +LLD.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1fa403c8923487e2d6a8e8c1d86c2ea955ed32bcde2328cb1167a315cdcf704af896505e9c44b750ffca9e3ae66e805f60831136eb79fe1c6d58eaf81a78b1a4 +LLD.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/f052208026a0fd5120ea838843b244ac +LLD.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/fd9ff2d5836300bcf76e4aeefb1e57860b3203fab0c32e668dce3e636dc362876d0fba1f2c23bf55a342ac17294c73e839a8eaf065d64d4397582dc212b8b9f4 +LLD.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/4d1077835df0f592a168c140ffe6299e +LLD.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/8dfd44113b817f607bc38ac1b4ffb192be340c826b9bc8f9d41e92e0f0333d8fc4227f93aaed16a4b9e94a5ec8b79628f2d3a73fb644684a595921f36ccfbeb8 +LLD.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/0f31939f4ff00c572eb392b6e70aab38 +LLD.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/581441087ad4869cfdba13808b2d6adaf929ea1b38ce96c357f276d77c3e63439f8edbb822c8f41770cb61fc08837d7eed2466d187683bc44f2cb3c553e2e60e +LLD.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/ca767173044b5a19a86c6a890dda3b05 +LLD.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/0577785079039b534fd736ea7a51d9b5176693d81e0bcda4fccd760d7c1218042999b6a38b973a903c0ef68e57dfb3b86e9e2f9e307dbaf603997a853f34eed3 +LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/89bb950f17a5b792a6e60ef98450a6b4 +LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/54bb68159743cd14ac0fce7f218a66ff6bf29e626df8dbdbd6e8581699d9b1d357a3c10d86c6822bde7299c14728bc55480f91cefd041d1de61cc179ed347b9a +LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/735e4dda5f8cc06934f6bda59eab21d6 +LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/a9b91beed959804b9e121fee786f28808a7670fc5d2728688cca1c7e0fe56e82e47d95712e38fdfc42e02030896843c4b3df9928eb34c2aca9ac02262427c76c +LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/30a95179bef252aaca41984daa54c680 +LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/0302db3c04396a30d1f6ab8d8d585bbe3a9e70342f068747ddb875b024c173bb9bb34518da7e76a10d3a325dfd741118f36f67fb83251bdb8a9901c4799ad79f +LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/4386c746c5d9b1408dbe7df04bc6a08d +LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/d71c6ebf5d3eb42368ab336cf8520afcd05470308ea117fe95797171e5c573948412ce777f62cbd45ee99ffa59cc769c276a60393a22fecffbeaf8b77b50ea35 +LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/49287977de61b100979355e458c8970c +LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/85ed3b2c7d2478a307a393a2003e694fc3097cc6812143abb3cbdd73a7d36bcb6f06a7d341ea639b9849f714c2d8f418a8b96035ed1c19a3957b42d005c0427a +LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/80a97341c9537b8a58c7df23f86d5cf4 +LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/5774b246ae820de4230a1f4f65bd683145dad5cbc4d326fd75649e06e773c74c2cffd48108a79ee0cc93175786450b6d50f7ac532e6f68961c18fe6119ef94f5 +LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/6f84d6858aecdfd95726a37c9b6a0e0f +LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/2cdac9a810c777ec6d85093926292c75e4287f83b7224246f6fa248e3874a2078c46377cd5ccb0f36a5e25b139691f1111d705079e89ea4215c9bc8659414094 +LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/d40f0956cc36aa7846630755a672a91c +LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/01368311a0ecfbe3f23514115f0bce7ce816c878815d937f3fa067b9daab07da0c02f520a96ad793212e5056bfb6294dd0129dae75f274dfeb48191e504c5322 +LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/689120b8091b9da8cc9528c96f5c5df2 +LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/ab78810af7d77116a4973b5825d5090133218cf08d5d77be14f83e028821e83493a112adf71094cc208f74cf4deabda63d7fff98866cc0304793aec9b27b7222 +LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/5627ccf1677c48b7ef8ac9e5faac1d20 +LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/454d2636cd72974c79c2d907e56e3c69c30c3fff78b199591c9ebe4f14d04c40c4bd7331f8dc2c957c37e214da8d28ef3a47ed8d3dd4ca9d480d52bab3429b39 +LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/8f50e5f684c41845308c123f8e45a0d5 +LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/21baf8a00fa65473ff6cf7ef2974ef88cd5b0eadd06ff85598de10d09425074297bcff3472ef001047a5440065a2de2fc6b1eefe3a32c7c1b3e3261165dc063c +LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/c2e0a5f58e38a9acf2c3914177ceb827 +LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/2a1653d171a2ff08bde55c53973e62955fe9d9629388ae014a645d3199d8f4bcf0fb923d06812ccd62e224032b261c8ebed56ebebed750acbc87671203d7aee5 +LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/fa3959aa413a2b707d8831edd2bd7867 +LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/8b74fef916a72c2f4933c21d3344410c7e03e64265a44dd62cf2ef2ac0feeafeb2b443eafa5dad3d3d0028be96b9424ff67b16391f1b3a2185826de68921adab +LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/b0751bf7eba4f7f7a28dc22993eac9cc +LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/7510f7349b06365e9cd260229e7b8c84da26bac072c5fe9a4e59484d82a0753d4ecf1066ffe41343f881a682590dc9ee4ef4a49cd83dba45c21b8d76dfb80f67 +LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/5abfe9e960bab4c8a44f41aaccaf936b +LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/efda0e0a35e2774af2f2df53f89d61f146a5730086d40865d448b009c833934b23ea4b296c3dc3f2039527b72ef40493fdee6f7c630484f64cec2d1aebf4a4c1 +LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/bfe87378e965050b1b20e993c8b13a53 +LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/ef2fd5e81f349673417bffd68c4122a87c09caed3f6f8f0235bc70b75deca7363cad68276aa708fb9ad8f7edd249d49f78d9f5fe7b226b62e8604c7bd3d4b9cc +LLD.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/4ee16f57d7dc060007250e17ffd55817 +LLD.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/27fd3a21bac676feb2c2c2363c027cf12988c70d889174e52c6bc1fcb4a93241f4bae85d5750ceba5fa971611700a9d15e3e02803cc14382cf6a1ab2918b719c +LLD.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/06699da5617371442b0539203152405d +LLD.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/83ba6300d5669b52c1913440598a2577106ea73e0b83549a5b3b0f081a94b6b8ca9fc05687d2be4b60c2d6a524bafd43b839082f0eee58b4685758061b229fde +LLD.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/a051688aa3a6383b4be4faa4f4aee985 +LLD.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/2059c6ac6579c4720e7167cd547b679a9c1a27a2c68174ed543be935ee23122234b3f2a4555de0abab3a982aba73d1751db336f3e28005ce8e4659d61f9269aa +LLD.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/600baa66310cf348ef3b4351ada014f4 +LLD.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/52b4718993d8abdca8ab701e86022367655d7927dabb8f3a8e41e43dbc90a9af78caf8abd37907a79b0f05017b6f0ef72314a187dab5bdac8ef7996e74c96e2d +LLD.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/e1e12162e5c63141dd95fca83cf1be64 +LLD.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/ce21d1cfa4af89fee1cb13587e15d355f179d38a4a9b4ffb9f357d46fe9b7fed4a5cad801ddf75d66b71d77170427609a51144450f83c8dd59af5c02fb0a9017 +LLD.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/932639f712fb881f621e5bb369921132 +LLD.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/86426de75c4fd1e1d56e1bee08bb6447be0c7417f8492639158f436caa5794862dd3b2981f26f1828852f35806dd2177fbdaacbee67ea849e8de597948b276b9 +LLD.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/2ff9f42465eb6e845ed6b7567b9d14d8 +LLD.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/a19b985b28a642b9a40ef25d02d4e94608b7e5c9925db5202e9d34ca8258e0b02d758de5bbeed63f958602f7fb59b70c4f32434a59008af3f0dd1b757a20e2bf +LLD.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/6de812afa415af04eb9d806adbd4b2ed +LLD.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/c6799fb148f8b019d0b05fa707d58ac7f449347290fc3f47458cb84e0bef704fd179e6d29d2efdeb0c35e4ee799284f5850b1ec5c04ccfad45b38e058e449554 +LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/331d844c447f564171345009764321a1 +LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/978349a74fc5498408a5318c87ec6d25c01268b9d21fb85e6bb601243ad0d33be8501b181d1f9ab7663433a740912f5bcb7160caf1011b1a2c84fdd51e0fce78 +LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/8595a49c49e851973fffae7c4062911d +LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/f707e514843a206b53f380c7bd8d4d8203cc62219344c1234416462dc1cb3d3f8a7452ddfd0f07178d43dfb193b4402a018cc465dc76b43b687fd20fa1ea5222 +LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/5b4463e81c156dabe3d182c42eb647e1 +LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/995db577d4a78d62cfcfca3f1fafb333ff26548b41d8aa8d763e4705dcdfe8005e2f68873faba4040599a6d15821a523261d0451d75fdf6e1c5224e8e777a71e +LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/d2f9f08cc952c0639f7ef1073c8630d6 +LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b1cab7b813fe0f7c26c55261e8561295cbdf1e812db3844b87605fb527d09855f2bef4a40ddb0a7cd354c7cbb626293d4d4012f33acc242f9af4abe1dbbbeeb7 +LLD.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/e82e3b67a073cfa6b019bf5604eabf2a +LLD.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/9bb18adf78afa9dfa0054e6511f5750a9e2fa9138aeb1bd83f7a51d37d031e2f3c151463ea8f682dc7130cb98fafae0b84c60d3befe27f9d0d3dc3334ef82420 +LLD.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/56da3cbe81ddff089ccf6b6392a9396c +LLD.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/2af483a1761022dcad414fa7cec7fb5c6fd54be28185e49539f4824cb0b6acdc1cfa5c78de31268dbdc444201936c5a6d2e04f39ef6f0b9fb184985ba4e3daa2 +LLD.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/15cbf5eaf89c7b834ee19629387515a5 +LLD.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/75ce7c398bdfd57af2c09dfc946b024d5a72e90575ed92f28e015e620ca89e421dfc9a391f4a78277c3e06c38dd696d572c5601a2b1866e521dbc2fc5a60da56 +LLD.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/b895da29b6082cdff6f0324179352fdf +LLD.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/e89a97dfd6c345158e3e12cdf97d33c22f849e5438401cf5a3670c0d1cf0252ca03e4c52475a42c3e6c2b2d689c2f53fc5cb7c925a23167ac51fa1a5e01e3d7f +LLD.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/7edda2d8c2eaadec2d262ded2456934a +LLD.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/0b1d60840d638c0b0269b901a3f5198e18e244da338aef2fb49b474b3601d44a2b4dec13e258909985e363ef8a8749838b01dd195e05a266ca36e6d9f274ef17 +LLD.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/e26138e3491a053ea9a998dd00ad728b +LLD.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1215861fa52b1ee21196bbce0e99912b25f887f5734e0c2628ac78c1af5fdf57c4d7cf099cddcd7031a26c60cf141aeea66a0147428008cb485c207e90801835 +LLD.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/a1e786ac775517b8b483bbe3f6571d37 +LLD.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/3937f156fc2fb8eecb13444c71f380753c16b08f29124228808c91ea4258ee2195219c4a9b601d4468cc24bd584403c16175518a620bd94a7dadff868b3771d7 +LLD.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/976d840de14ef6ee2c0a538197fe8f10 +LLD.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/7f58f975dc3d69f502537aca79509bbc3c4f5da2ff8ddb1c7e27180a6bb2123713eb42da61cfabd7a48a31fc464fd74554b34935dfdb3ec095d14ff443f514f3 +LLD.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/ab0295ba327cfa6b9a252b0e7a4b50a5 +LLD.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/7c750916d4157ba0a37cd1277a0f8faf32123dfc626ea76f848a7c567fd889a7801f8402a307c190ab34fc21b156f2a23967abc9972fc103e5847a200ffc7305 +LLD.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/6827f38ed653f33953ff7ae510a517d5 +LLD.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/f01c655f6433ec6808b62872b8fb4c5a2d8e187643c11f0b4f5c06e2302e462353b516f431c1e26ee60b579c0f8c8c6385f018db3011c619745a39f9ef263436 +LLD.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/d444e6188476c8b7bb6026aac6ea0a1f +LLD.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/69510929896bcfdc4377b180ed206617f96e1fa13fe9f8ccb18d78958c3f9f951a2ff8ada9d1217a02407819caed5308d91bf8fd72434ba347f548c9ba000a5e +LLD.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/728e79f334e5151fe5595711763baca7 +LLD.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/2501a5cae4e61302e44f06fb7d38d15a776d750c6e99c30f89e1464e836a29c735d40972d48d19f1b38aac3f487cfb532d71ce9db2df8bfddd03d1fea5f3750a +LLD.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/2b64bfd4bb5f6be4783144c53eaba27f +LLD.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/237d512962f0a3f8b98352a645141e788c1722adc761d63a4f0754dc79871912a2302a66bfdfbe80683ff3c6783dee0b4cf31beb50c5f76b6d97c978197b5a3d +LLD.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/c23d2716a9ab651f64908da8fdaf7780 +LLD.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/78d6b3ebd845910dba5f147132378931f7e844a31dbc09a64222eca2c2f610b4e0134d9be184b9c80aef3aa2f4ac4d83de6bca7d1ec08fc775b066b67bc2a0f3 +LLD.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/adb8cf2411501b6faaec1a9a4204bd7e +LLD.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/af9f3cd4f585b2c82dce53429b08d270c2be5114098bff8363a1777f82bfb15c40f59d4fdccb8ac06327d8114669a3beaa16ba8653027a911e654a9425c8963c +LLD.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/1839c9ccde51b3d0830a365ede764dd6 +LLD.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/63b34855470c6838412e158334cbaad9214db8f4b7bdfcd6508c19fb891249adc7e89b0fc50ab52bcec17fb2603a68570a839700fd5ad9d1dd9b1b929bf08f12 diff --git a/deps/checksums/llvm b/deps/checksums/llvm index 02de35bbaa43a..f9bc921b4a8ee 100644 --- a/deps/checksums/llvm +++ b/deps/checksums/llvm @@ -1,111 +1,111 @@ -LLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/8b23ac6a55ad8a8a911af1cd2be84f7c -LLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/60df009ecef6b7d435fc198dd477e9198e1f96d89b3c583b06af5b6b938b9f4d545f75f09d0daee93f94448f6fef36ca2e0b541e1179280e6d918b02c619291f -LLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/649c61e6bb2ddc619d2f967d923a62d6 -LLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/864910013f659f473def2a5df78adf5c13f6f84f400d3b87c5660ef51a97c86520a73cc6072db2ed739f3e7e3e2d326f34634bc9ab432edbab59baaf2085f4bf -LLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/2bae4d31c56385e73f3cf667e5cb5582 -LLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/27f8479a639434329fc5e67326df2c22aacee61237cb1eb1bf9938a58b1dcf883ea0476a066dd284047388a42a3b676c37b2c800f97feab694edf091aa10a8b7 -LLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/040485a871ce0036fb19f3e9ab9ed1f6 -LLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/0472ab3fb75efe1b67ba8c34cd9b36377ef9206506f741ea9a6289d3dad4ba4d0560578661bf9e433b51c03c77a9de5ed23df37e160a9225bcb50c27e5431e76 -LLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/12f54c1888f00373ea1e8fcafffbc313 -LLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/fc246d39c1711cc041b014a77e8b0c9fbbdf86c92a1c027e35a152d18bf6cc72d8b059c65457851ce240a5c745ebd39934ed6ce6f553d408ec8ad4078135c746 -LLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7065ccae75d0e16876aec6d96de41409 -LLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1c0bdce88797baca3188be7927d7694861bc491b4ad7970e485332ecf36b28e121a57e3a4ffbe83f6919f00da66d04d7809c589b8f9bf4b9940b15cc5c1590e0 -LLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/708f78fb147a1a5455b1f0e27e0a8946 -LLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/f7aa0dab1f2b0a7dc5324ef1ed9969e31334245938f2954425eaea2c034072d844a3c9eed8b522bf1794a22d822117d6beff6c23872c875dcbcdd7cc719a6d61 -LLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/eaf4c42566b3ffbd6c3fa3fdab126d0a -LLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/7d60771a1795fe328c8f5fb534580d34016f6dcd85c268e94d6ed8af7e68fc74e3bb25ed8262bef4100b9341dea180a2961d1705e453d37dc5d6a01ff9b00ae8 -LLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/f4ed6360b1e46be18392900cf5e6e413 -LLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/0dbc3f7954ef085bff00cf1a7d18bf338bd76f67ab98d972a486942ade7f11a6c9761a4605ae653402d867c543a065d6c238bd6a375852544e89eb9f9cc6c335 -LLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/b8cfc0edd85f79fe0ee22b84b9271d62 -LLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/8f8b5111223d433bbbb7ec48df5436ee5a4c21c4cd57fab1b6a4121d72230251998035c9d62993d442af279e3d393afa2df1c161af2762420ec149ee16f01833 -LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/5cff8a24ca2d1da58ea709d34c33decd -LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/2c20fef573744dacafc6333687be408b474c9773c558fe08ff1702d1957aac3bc99dd9998866651bf9af7473214d1be236273725501cf9f5c38d1807f1605456 -LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/2721d242b457748e3f8301b085282c3c -LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/8a73828ebd84e683f9a043007bba955ca85deec608d9602fe29ef18fc999b4959bc8e87c865bcd060adb8b4c15f8cb04113027b37c3b4e075cc8c7946831a52d -LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/8c8171ed600e466b022a96956fb93e69 -LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/48798715ab9866528d55b0c75a9aa6a87e03b771c3a29b0f3d88bc8d89845ee8f39ddeb6232a0337eb1491092322fb7617e5ebef1e55c0bc4c46f05ed115a0f8 -LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/8343d87440928bdc76f0209eb905fac6 -LLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/e20a0fb7e3cff62832ba840782b84c12ce8ac38cbcd0eff82dbc6a6ab5cd58c59cb760f5b85e4e60dec63aa274e8e43035c5e1fa5e77639d607971690487b3a4 -LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/f6a415de133867e9045c5821ae2bb286 -LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/acd4c6a31f998f506c747f3d8d4ddae393f6a58a282a928913d4eab850147e485e99fc953d4847d00555a1bde295255eed530e4dcf1dbd46e62d2c0a4df9c4c3 -LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/4164c3a46ea05eeda4c471b290b9c782 -LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/c19df17b57f67d2dd281f1939462250aca5b6cfd99598b0dd45eb76ba46f4b02c4e3ccc8e09ca57843c12de822a94df88d5593a34b401050f148452986094ec2 -LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/1d3bd6f4770fba34a9f1b14a3871665c -LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/686a8be7a96e37b91d70bd06259a8a61b6e8d2fbb3b28d9252b987b7ed58ae476a4cb1b773b143d41dc6de23a7b969cedf35c9b8070052a7b9882503379d4f6f -LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/3783a3c99a4c8c27ae367e5bb717cf3a -LLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/34bc40f96d054487022879477eb826ce769b507c90de9c481107f582a1c995a9af9172d1d017eb30e6a9875f68877c26b76fd3ec48a4338c9e5608d970d012f5 -LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/b6d3fd4b5460fb336ccf71ed4f27112c -LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/9558ed5556c8c0ef5f3882f76bf4f4f5ba8bb642eecd3a6f9f7d4ad82c0d9a15038e8fda0e613eb614b747ef045e3bdb1cc3cad6a674627e9f54e56abac67daf -LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/37ef614a98b59a8100ead9a5a0b3a369 -LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/02f99b72dd23aeaeb5326c555e26f2090c311c8b111e3b203235ac503faa3d8499afda2e3541d0744dbbd8b6451c50d377b09ff7dfe37d3934b931e31b643640 -LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/f0b6cfc6d392e597e305a77985949bbe -LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/9e2487984369a573e000b92899888ec845cb76dc20aaf200eaa1f52dbaedc8311c4161f3c9febce47b077be86aa8780c6d9c550f508c6b4949d76d236ecefcea -LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/a369c3db68953d38d71d2e342ebb72d4 -LLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/e0a4f18dd056578b690903dddc971aa91f91b194758a4ec69422f4834dd1c85224bdfd2b95d6f801cd4d23aa26c09a104452266ba8d61b5f1a429b57b2f597b4 -LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/ab49be8073da48f3a353346fd6d9a833 -LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/3f0a76b3940a918bf8206529a15d538db59e4c419cdeb4af0f338d343912d5708bf89ff89435a95b7ea42d3d36a83616a2f45bd21e1e8e4a067df5be22898ba8 -LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/493df42ef5cae32a099ca7ee2c2dfb1d -LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/ac27639cd6273f6dd38bad0db9bba82f1dd299d9260c6877cc4b876d4f82fd518c758aeeea58b389e790eb7e212d0976fd1af1741e7854e8c287c4a381c5f0dd -LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/529256ff2095f50c1c57356819122ed5 -LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/3922fb3a3419ee319392c68124550824e6644e7a638d39ac2831b6595c1e1fdce6934eaadb74415dc81f6ab349714e5443f746a61c0d8927c78b51987dc95a32 -LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/82216b18dcc9148c3cdc00bdaed163f2 -LLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/c212134793544ba37247842c733b540055bb987b0854194d038f90dabbdf9ab5df6ca1e64c7e85d8071263d0b8f1d2feb99ac9d842b731551aa58ee2be2618ea -LLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/465288c493241318c5947f756319d2ae -LLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/4ef949ced9cf6c9f30c56388a8e53eb67c528e0635bb3c00d1dd204c8b8f74e72a6bc2104745dcfecf7c653ce1499d86c3a7acac98b565546b3826230710b92d -LLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/0437433a85900470209cde06ee185e9f -LLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/efa646ae330dcb5d4dc40a8e91a51248b55811d090111deddd415e22d8d7f26009dd4a124756dcdb9df4d83804f11576b786758692a5e82ceaefc88de3b9b00d -LLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/895eedc69041096b1643f66976f2a51b -LLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/dab5fcbd7e48e60c7d16031930e954a83a87e705ac72cba3f660bd569fa8b6a05d7ddf2551eb8e5f163d385c31ce197ca519e47e6ccf85982c6ae7072c6a301d -LLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/083c0b15d8747cedfd617a9127792ca6 -LLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/427d8caba92e5bc3f88b9f33ca951fdb01dd6ce94bd852af61cd94f3476c35e82f9c387989c5847af8ae65d5e9ddfb6efc4afdcb57320bac1115b3ef23e9563b -LLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/d66a108fbedcb078aa8c81b70688d5b8 -LLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/521d7008bee38328649657c4235c82f431639aac21f68aec9edcc4859958ea608c9f8dea537d63df3f41c9160f4eae18f2943518f6a71e83e3fb41ce0ec94c26 -LLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/3ca9fa624a36b101a1147890359c0920 -LLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/7cf691b77e252e11aa56b2d568ad5b2dcb131b1f2e685a6e77bd3a5b9a51c30aa2e654b8d4ef732f5c8bd5f9e4379846d4a002377760f3eda49264c958df9ddf -LLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/a946f58fbf446c1605758b92b85b8798 -LLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/23b7e5b42611d7bce50bdc36326557807bd343e50a7cc8ddd7517a8b7807793bbdab2de0042e7dc413cdb7ee2ef565692844547cbd281341398265c8232fd61a -LLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/daa0bc251d8f712d09544cd60ab5690b -LLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/d86b55eb775a5f0e1eddb412e2ac4afe818b1ba0a40b96e764ab3c7f3324a31b45a0f23051903fe84a5020f3ce1bdb42130c21dffd1f6277e6c2f5db840cc50d -LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/ff278e2aa1a91a9bd6dc0d240ce23e3b -LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/5903a1cb350391f7e15ad81ed9c0690b43e267c5b061e011c61badbf324be544287869fbb4c2d68415c4621ecc37cc798762cbde34ccb64194547d63cb3a980b -LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/a02b1dea41d86fd28411798b535f7674 -LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/7b6c94d8e60985206a7e6faefaca1dfab04a1a1378e8b52cd981726f6b6558caba23b716d44824fdb9fb54c16ec478e8de4296db9b2ef0be67680784ed26831c -LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/1d1f3db1b9a23c5948a5b982b46e5de6 -LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/d741dcb76c3a143fe3b000999a627ba4a3abd36d738028e739e96c861be661cd1de12f5c7ee7e03826b1109aea11e80371d18865fb5332d1834f4dcf0ceca245 -LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/3ed7af8b8e34820a83a8459edeb3843d -LLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/eaab7e410cb433f2b83e6b38671a6e7489556865cc7007ce1588c8fcb0421c64dda480be231f96b30ce6fa75c2d9e99fbdb2a6293fa108ed9bc0599d2ca2ca63 -LLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/88003e4d20bce7d175d8e4db003e0eeb -LLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/aed46b6b3aacf7ef373f9812da24edaf71ff1a382299e5f15eaffec605bb308fb3732846b9dde6d3afdeaa010de61773ba0e725d41e3b160fab37d2d0cf389cd -LLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/ef75e04e4946bb58091eb1a57b08ace2 -LLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/7e6ff0a8d511f19eb868d61fa50ff8c0014da4ea50ad960603f0851a6c09a693a66baea4563af6cdcf2f2fcd018bf2456a9e9479b9278c656ef64f0a08aa11ae -LLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/95a8b1fe9135120ee5fba2441ad16f2c -LLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/167dcff24d6144a4e211ee473b389d5fb4daa51d4ddbd98655456d3bee6c00554b91580a627ca5355e5c2d38a9a326f13c13454de64c0cc32a1f214a52b21400 -LLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/ba2fd64dcb09926f754fdde94ec5cde1 -LLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/fac4e6ab8875aa94cf6cf2065d718403b733954c18b0f5dee11148b70ecafabd92ff23155224ba5628c743fe963ee82a376ba9025f8ec8ca199a66412855ecd2 -LLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/f80738de98ca42cfc8c4ef141ec7cf0c -LLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/ddf7670f555db3916933ea202672c7ffb51d254422af801ae928fa3618b3b7db1f7513710576dabd52f219cb2791e19803b5a4f3470f7ea05f71b0b04b03aaf4 -LLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/a502a8057b19bebe8aac1c42d9cda20f -LLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/6e20328737c46fae6204cca68b16fa72e55c4b00fbaf8470b4847a869741fc0e2cef0da2ed9507fc4980678500dffbd42ccfe9f173321dee633bb0cf5adbe57e -LLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/3b06471de330c6f4a53012711c7c9d72 -LLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/c19a9a2d8e4d3bca25a1568b0fdc01653b0b467dadc68967c4ab88512b4b78cab2e829fcfcd3d1e7139ad5bc3fab62dfdfd50be57f0d0099de383d820dafd306 -LLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/06a632eb722009eb4bbd49689b49a8a8 -LLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/67969cd09ab313b395cdf9f614dffeeda1ab72b2fa9e68057bc8dae9bad36d39443569b91ad88bbab9a6309a8084e09d40dff76d5d4bd261a1553afd5c3dd6c8 -LLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/bc000f09920a305fea5b32cf2d1bebd4 -LLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/580a3b12d7620d4c3148f988125d081b3fc76defb0e78702286806e08dcecf2b9c41ad8071334ff1e4e9ee4155d8949d07c57e8470109c01acecd2b37a07083b -LLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/6cd4cf2922f69efe968637d240bcfd62 -LLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/7a23f48faf2c4e85247c684bc43239a21ea0732c980b4d46b50df27857f143cdfc081bca867a5692b086d32ff9031a230d496c0231d3ccb5fe3f48beb6ad480e -LLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/e7c54d9144ba36f697cd9be10e8e59cd -LLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/bd96434dd2a79b335bd7169222bf5bd78fdc00eeb7ef2f364bb5ec71071d68846a0ba6b51d5b182522e6ff577d8e3d7ca3c014962cbc04ef5a04a7157887cd6d -LLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/22005a7066939bef459f0fa7ad8508a4 -LLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/2742a12f8a9054d6aa70fa823d2cae8126fc7a591849259e92b87b2e6b90ad7d21ffd855d34e08999600a5e2b591492502788d2ebd0a2564325ecc1860607b50 -LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/76c1ef843acb9d29acf6c804ae9cbe1c -LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/7b25d5e6df47850c2c959b4e0d29db67582c3e0bbf102eaaad848f42787f421839cba1ed66a35ac99e106384a49e0474cdc7d7298569f95ff11df5f422554bf3 -LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/d5358364b37f1bba07d2b22e16e76e71 -LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/e2115a60b5fa74093b4d62a7397d7905d3cc89afc1051a3bee035925c6d5c06e2b4d16f7d86bdd2cc7519a506630697c6ad329841e7f8ced2992e7e969855fc1 -LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/37702697b8cfbe73ce7f355d0eec9ef9 -LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/bae316dae5e3bc2428c8b316155a8e02f9558580e65c1a8ca975bd10bda7170d1fe8584d0917e4af2f698362e18084cea8e0cbbe46707af3d3f07d0bf9a799de -LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/b0ba5f21e0724c66ab4e0afd40ffc630 -LLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/d25fd0015b67072fe2e57813a2250848ec8b86ba71443e294dc11e42e1b15148eed3c388cb242fa154c10ecb2bf6fb6b48272484a45e3337064fce4fad685b54 +LLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/8b23ac6a55ad8a8a911af1cd2be84f7c +LLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/60df009ecef6b7d435fc198dd477e9198e1f96d89b3c583b06af5b6b938b9f4d545f75f09d0daee93f94448f6fef36ca2e0b541e1179280e6d918b02c619291f +LLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/649c61e6bb2ddc619d2f967d923a62d6 +LLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/864910013f659f473def2a5df78adf5c13f6f84f400d3b87c5660ef51a97c86520a73cc6072db2ed739f3e7e3e2d326f34634bc9ab432edbab59baaf2085f4bf +LLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/2bae4d31c56385e73f3cf667e5cb5582 +LLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/27f8479a639434329fc5e67326df2c22aacee61237cb1eb1bf9938a58b1dcf883ea0476a066dd284047388a42a3b676c37b2c800f97feab694edf091aa10a8b7 +LLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/040485a871ce0036fb19f3e9ab9ed1f6 +LLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/0472ab3fb75efe1b67ba8c34cd9b36377ef9206506f741ea9a6289d3dad4ba4d0560578661bf9e433b51c03c77a9de5ed23df37e160a9225bcb50c27e5431e76 +LLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/12f54c1888f00373ea1e8fcafffbc313 +LLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/fc246d39c1711cc041b014a77e8b0c9fbbdf86c92a1c027e35a152d18bf6cc72d8b059c65457851ce240a5c745ebd39934ed6ce6f553d408ec8ad4078135c746 +LLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7065ccae75d0e16876aec6d96de41409 +LLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1c0bdce88797baca3188be7927d7694861bc491b4ad7970e485332ecf36b28e121a57e3a4ffbe83f6919f00da66d04d7809c589b8f9bf4b9940b15cc5c1590e0 +LLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/708f78fb147a1a5455b1f0e27e0a8946 +LLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/f7aa0dab1f2b0a7dc5324ef1ed9969e31334245938f2954425eaea2c034072d844a3c9eed8b522bf1794a22d822117d6beff6c23872c875dcbcdd7cc719a6d61 +LLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/eaf4c42566b3ffbd6c3fa3fdab126d0a +LLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/7d60771a1795fe328c8f5fb534580d34016f6dcd85c268e94d6ed8af7e68fc74e3bb25ed8262bef4100b9341dea180a2961d1705e453d37dc5d6a01ff9b00ae8 +LLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/f4ed6360b1e46be18392900cf5e6e413 +LLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/0dbc3f7954ef085bff00cf1a7d18bf338bd76f67ab98d972a486942ade7f11a6c9761a4605ae653402d867c543a065d6c238bd6a375852544e89eb9f9cc6c335 +LLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/b8cfc0edd85f79fe0ee22b84b9271d62 +LLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/8f8b5111223d433bbbb7ec48df5436ee5a4c21c4cd57fab1b6a4121d72230251998035c9d62993d442af279e3d393afa2df1c161af2762420ec149ee16f01833 +LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/5cff8a24ca2d1da58ea709d34c33decd +LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/2c20fef573744dacafc6333687be408b474c9773c558fe08ff1702d1957aac3bc99dd9998866651bf9af7473214d1be236273725501cf9f5c38d1807f1605456 +LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/2721d242b457748e3f8301b085282c3c +LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/8a73828ebd84e683f9a043007bba955ca85deec608d9602fe29ef18fc999b4959bc8e87c865bcd060adb8b4c15f8cb04113027b37c3b4e075cc8c7946831a52d +LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/8c8171ed600e466b022a96956fb93e69 +LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/48798715ab9866528d55b0c75a9aa6a87e03b771c3a29b0f3d88bc8d89845ee8f39ddeb6232a0337eb1491092322fb7617e5ebef1e55c0bc4c46f05ed115a0f8 +LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/8343d87440928bdc76f0209eb905fac6 +LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/e20a0fb7e3cff62832ba840782b84c12ce8ac38cbcd0eff82dbc6a6ab5cd58c59cb760f5b85e4e60dec63aa274e8e43035c5e1fa5e77639d607971690487b3a4 +LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/f6a415de133867e9045c5821ae2bb286 +LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/acd4c6a31f998f506c747f3d8d4ddae393f6a58a282a928913d4eab850147e485e99fc953d4847d00555a1bde295255eed530e4dcf1dbd46e62d2c0a4df9c4c3 +LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/4164c3a46ea05eeda4c471b290b9c782 +LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/c19df17b57f67d2dd281f1939462250aca5b6cfd99598b0dd45eb76ba46f4b02c4e3ccc8e09ca57843c12de822a94df88d5593a34b401050f148452986094ec2 +LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/1d3bd6f4770fba34a9f1b14a3871665c +LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/686a8be7a96e37b91d70bd06259a8a61b6e8d2fbb3b28d9252b987b7ed58ae476a4cb1b773b143d41dc6de23a7b969cedf35c9b8070052a7b9882503379d4f6f +LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/3783a3c99a4c8c27ae367e5bb717cf3a +LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/34bc40f96d054487022879477eb826ce769b507c90de9c481107f582a1c995a9af9172d1d017eb30e6a9875f68877c26b76fd3ec48a4338c9e5608d970d012f5 +LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/b6d3fd4b5460fb336ccf71ed4f27112c +LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/9558ed5556c8c0ef5f3882f76bf4f4f5ba8bb642eecd3a6f9f7d4ad82c0d9a15038e8fda0e613eb614b747ef045e3bdb1cc3cad6a674627e9f54e56abac67daf +LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/37ef614a98b59a8100ead9a5a0b3a369 +LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/02f99b72dd23aeaeb5326c555e26f2090c311c8b111e3b203235ac503faa3d8499afda2e3541d0744dbbd8b6451c50d377b09ff7dfe37d3934b931e31b643640 +LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/f0b6cfc6d392e597e305a77985949bbe +LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/9e2487984369a573e000b92899888ec845cb76dc20aaf200eaa1f52dbaedc8311c4161f3c9febce47b077be86aa8780c6d9c550f508c6b4949d76d236ecefcea +LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/a369c3db68953d38d71d2e342ebb72d4 +LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/e0a4f18dd056578b690903dddc971aa91f91b194758a4ec69422f4834dd1c85224bdfd2b95d6f801cd4d23aa26c09a104452266ba8d61b5f1a429b57b2f597b4 +LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/ab49be8073da48f3a353346fd6d9a833 +LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/3f0a76b3940a918bf8206529a15d538db59e4c419cdeb4af0f338d343912d5708bf89ff89435a95b7ea42d3d36a83616a2f45bd21e1e8e4a067df5be22898ba8 +LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/493df42ef5cae32a099ca7ee2c2dfb1d +LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/ac27639cd6273f6dd38bad0db9bba82f1dd299d9260c6877cc4b876d4f82fd518c758aeeea58b389e790eb7e212d0976fd1af1741e7854e8c287c4a381c5f0dd +LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/529256ff2095f50c1c57356819122ed5 +LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/3922fb3a3419ee319392c68124550824e6644e7a638d39ac2831b6595c1e1fdce6934eaadb74415dc81f6ab349714e5443f746a61c0d8927c78b51987dc95a32 +LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/82216b18dcc9148c3cdc00bdaed163f2 +LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/c212134793544ba37247842c733b540055bb987b0854194d038f90dabbdf9ab5df6ca1e64c7e85d8071263d0b8f1d2feb99ac9d842b731551aa58ee2be2618ea +LLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/465288c493241318c5947f756319d2ae +LLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/4ef949ced9cf6c9f30c56388a8e53eb67c528e0635bb3c00d1dd204c8b8f74e72a6bc2104745dcfecf7c653ce1499d86c3a7acac98b565546b3826230710b92d +LLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/0437433a85900470209cde06ee185e9f +LLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/efa646ae330dcb5d4dc40a8e91a51248b55811d090111deddd415e22d8d7f26009dd4a124756dcdb9df4d83804f11576b786758692a5e82ceaefc88de3b9b00d +LLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/895eedc69041096b1643f66976f2a51b +LLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/dab5fcbd7e48e60c7d16031930e954a83a87e705ac72cba3f660bd569fa8b6a05d7ddf2551eb8e5f163d385c31ce197ca519e47e6ccf85982c6ae7072c6a301d +LLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/083c0b15d8747cedfd617a9127792ca6 +LLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/427d8caba92e5bc3f88b9f33ca951fdb01dd6ce94bd852af61cd94f3476c35e82f9c387989c5847af8ae65d5e9ddfb6efc4afdcb57320bac1115b3ef23e9563b +LLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/0e0a82a95205bc58a31ac24a7d479d84 +LLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/4472eb1cf1386d6754ee9fe2aed514b656ce34c0fcf478e3dd0532e3010e2fbd82b905060382eb661e7daa48d1e44e4606b1bf3625f539bcadff3f13497ac5c1 +LLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/91639f25324ac04119751f1c4b09c0ec +LLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/a07270a19a7d8ba5dfdf8ddfb089ea19101ef9386b3d418353c9fb7d2812b3b6bb68dd3e170fccc0f2ae7a7c7cb5a0bbead36580249726346a04f028ff4f94d6 +LLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/6eee5cd139347f0dc6c0100a1fe34e78 +LLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/2e8e4a14e0822b5078ee1dd5580a136f2e75f9e58a065b83cb857f7f2e17a5f462c6ef8a41b383c3c9ddc54e31876709472a53787b5b285332802babe9a41744 +LLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/b4df578f69f7ff1a43c73b92f8b2fc08 +LLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/c965c4b42b6b22650f329d1187a27523e2e1ea6032de11f1cdb6a54b79871aaa260716e84e38ea5c8692930e1aa6927f5f82617a096bcfa10e3666e37cda50ce +LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/ff278e2aa1a91a9bd6dc0d240ce23e3b +LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/5903a1cb350391f7e15ad81ed9c0690b43e267c5b061e011c61badbf324be544287869fbb4c2d68415c4621ecc37cc798762cbde34ccb64194547d63cb3a980b +LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/a02b1dea41d86fd28411798b535f7674 +LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/7b6c94d8e60985206a7e6faefaca1dfab04a1a1378e8b52cd981726f6b6558caba23b716d44824fdb9fb54c16ec478e8de4296db9b2ef0be67680784ed26831c +LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/1d1f3db1b9a23c5948a5b982b46e5de6 +LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/d741dcb76c3a143fe3b000999a627ba4a3abd36d738028e739e96c861be661cd1de12f5c7ee7e03826b1109aea11e80371d18865fb5332d1834f4dcf0ceca245 +LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/3ed7af8b8e34820a83a8459edeb3843d +LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/eaab7e410cb433f2b83e6b38671a6e7489556865cc7007ce1588c8fcb0421c64dda480be231f96b30ce6fa75c2d9e99fbdb2a6293fa108ed9bc0599d2ca2ca63 +LLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/88003e4d20bce7d175d8e4db003e0eeb +LLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/aed46b6b3aacf7ef373f9812da24edaf71ff1a382299e5f15eaffec605bb308fb3732846b9dde6d3afdeaa010de61773ba0e725d41e3b160fab37d2d0cf389cd +LLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/ef75e04e4946bb58091eb1a57b08ace2 +LLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/7e6ff0a8d511f19eb868d61fa50ff8c0014da4ea50ad960603f0851a6c09a693a66baea4563af6cdcf2f2fcd018bf2456a9e9479b9278c656ef64f0a08aa11ae +LLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/95a8b1fe9135120ee5fba2441ad16f2c +LLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/167dcff24d6144a4e211ee473b389d5fb4daa51d4ddbd98655456d3bee6c00554b91580a627ca5355e5c2d38a9a326f13c13454de64c0cc32a1f214a52b21400 +LLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/ba2fd64dcb09926f754fdde94ec5cde1 +LLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/fac4e6ab8875aa94cf6cf2065d718403b733954c18b0f5dee11148b70ecafabd92ff23155224ba5628c743fe963ee82a376ba9025f8ec8ca199a66412855ecd2 +LLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/f80738de98ca42cfc8c4ef141ec7cf0c +LLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/ddf7670f555db3916933ea202672c7ffb51d254422af801ae928fa3618b3b7db1f7513710576dabd52f219cb2791e19803b5a4f3470f7ea05f71b0b04b03aaf4 +LLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/a502a8057b19bebe8aac1c42d9cda20f +LLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/6e20328737c46fae6204cca68b16fa72e55c4b00fbaf8470b4847a869741fc0e2cef0da2ed9507fc4980678500dffbd42ccfe9f173321dee633bb0cf5adbe57e +LLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/3b06471de330c6f4a53012711c7c9d72 +LLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/c19a9a2d8e4d3bca25a1568b0fdc01653b0b467dadc68967c4ab88512b4b78cab2e829fcfcd3d1e7139ad5bc3fab62dfdfd50be57f0d0099de383d820dafd306 +LLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/06a632eb722009eb4bbd49689b49a8a8 +LLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/67969cd09ab313b395cdf9f614dffeeda1ab72b2fa9e68057bc8dae9bad36d39443569b91ad88bbab9a6309a8084e09d40dff76d5d4bd261a1553afd5c3dd6c8 +LLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/bc000f09920a305fea5b32cf2d1bebd4 +LLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/580a3b12d7620d4c3148f988125d081b3fc76defb0e78702286806e08dcecf2b9c41ad8071334ff1e4e9ee4155d8949d07c57e8470109c01acecd2b37a07083b +LLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/6cd4cf2922f69efe968637d240bcfd62 +LLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/7a23f48faf2c4e85247c684bc43239a21ea0732c980b4d46b50df27857f143cdfc081bca867a5692b086d32ff9031a230d496c0231d3ccb5fe3f48beb6ad480e +LLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/e7c54d9144ba36f697cd9be10e8e59cd +LLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/bd96434dd2a79b335bd7169222bf5bd78fdc00eeb7ef2f364bb5ec71071d68846a0ba6b51d5b182522e6ff577d8e3d7ca3c014962cbc04ef5a04a7157887cd6d +LLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/22005a7066939bef459f0fa7ad8508a4 +LLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/2742a12f8a9054d6aa70fa823d2cae8126fc7a591849259e92b87b2e6b90ad7d21ffd855d34e08999600a5e2b591492502788d2ebd0a2564325ecc1860607b50 +LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/bdc275515045127ff9883802963b3baf +LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/0fbed47ab0a14116a4b1f2b866ae65b5c81cc08007150750964eee8ac09a2a90afb0ba35d5d6447a33c75dd68755990a85e8874588faf84e7c1174b0c4f61c18 +LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/657059eb6dc68b3fdc56ea167ebede2d +LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/ebdd42af6d04bd98d9bb50dbdb36b9f5087d9d303d5671e96395ee6dad248402bceab5b4765f0fea7a8381ad3fcc17aae7379206903c8e4624a4dadd5eec3faf +LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/e6e68533173f74000ee4c1c84c579a28 +LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/8599d6ae2f84272ee4e8b176ae517ab3d2d25b7617c0520ee70cc33fdce9030a76205d3d9abc3f21c83e33258c78d52a31e0bab50a85f2050c4f3660eee378e1 +LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/8add628662e5b234c20a7dc986749dbc +LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/047ce72373190ac36654d6c931d00a0b766d0fc5bbc8e9dc787ab9c97e7691908c61d9edb13ee1608b38b10662dd8a584a019bde36c339c5164b1bb8e23837d8 LLVMLibUnwind.v12.0.1+0.aarch64-apple-darwin.tar.gz/md5/b95ad4844e649bf46db43683b55b9f4f LLVMLibUnwind.v12.0.1+0.aarch64-apple-darwin.tar.gz/sha512/15e0996aebe6db91fe58121001aa7ea4b23685ead3c26b5d89afae34b535e34b4e801a971f4854d8e1a1fbc805cece06272470622eef863e225358113a127913 LLVMLibUnwind.v12.0.1+0.aarch64-linux-gnu.tar.gz/md5/6d8783dc9b86c9884e0877f0d8ac4167 @@ -138,114 +138,114 @@ LLVMLibUnwind.v12.0.1+0.x86_64-unknown-freebsd.tar.gz/md5/54ac594b4c8e7f261034a8 LLVMLibUnwind.v12.0.1+0.x86_64-unknown-freebsd.tar.gz/sha512/a43756afd92081e6dd7244d162862fc318b41ca110a5e8be6e4ee2d8fdfd8fb0f79961ae55e48913e055779791bd1c0ecd34fd59281fb66b3c4f24a1f44128f0 LLVMLibUnwind.v12.0.1+0.x86_64-w64-mingw32.tar.gz/md5/83cf8fc2a085a73b8af4245a82b7d32f LLVMLibUnwind.v12.0.1+0.x86_64-w64-mingw32.tar.gz/sha512/297a5c7b33bd3f57878871eccb3b9879ea5549639523a1b9db356b710cafb232906a74d668315340d60ba0c5087d3400f14ab92c3704e32e062e6b546abf7df6 -libLLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/6f46148833fa386b55dd92e946561c85 -libLLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/ea1912f9a75c07374bc9c22c7b8b4321a0700f4ea196d29169e14a648a30d164897215ef4c4c6478810e5c5cdc76b1f2937fec4e6b0bb3e4f579bae06a219d0e -libLLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/0f2558df8ed485a93837e790bc646018 -libLLVM.v15.0.7+7.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/e7f962c4dd9675b6abec6129e7fa460ba3ba4bbe9eead4f9327a1db5fc9c64651d7424f9439ef396f0546f8e232bdc34eb625df0fa36bdfaed0e6b7af4dd0070 -libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/3317b67ebfb01c8d3dcb17c04d0f5ee5 -libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/383ec73210e00b02b3fe3f247bfe81a8c81668d3faf59c0ba9b0f032c41603807cb65808f28fc8a91dcf7cf72f3f5fa3bc68277bcb17cd35ec758ba3dd8ec857 -libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/f49e5ae9b0eb96cddeb3d68bec320d7b -libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/e2cf6ef242479bc781f6ea70d7123b087370bad917c8f398757ba32d9446ef3b8c3d3b813be2c1ad3a8945dce1464551b57d3bc40a2e063199dfe555ad697dc8 -libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/e8eb2e0bc1b0693fbdf01c9dbe0e0170 -libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/245a157bd6b49ece87075d6250315f419506262c43ad6c5c76340d60ca1eedb00dab77c6588b91bb5cd8033e7ed1d97c21d801f8359486c9c350ded3bfae7642 -libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/60dea992b59646da2d719185f32f4a7e -libLLVM.v15.0.7+7.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/7fcd64e51c87de8683923460d4596e406c5775d2ec6b7f4111bcb0689692dee09584622ecfae17ce91d1632f03a37cc9d43696190a5b92e916f4b8d4d0a50003 -libLLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/86385feda64011d17952300a29a28a46 -libLLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/2cf9f4934932b39a4a0195eab39f28c718c7cb5b830a425bddeb2f0a643fe6a74c7754483324f57e876ca8b92b5cfa1aaca802a44dc9ebcde86d8875c0493952 -libLLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/72cd1154871445247a6af96536ae1b51 -libLLVM.v15.0.7+7.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/b35740ff38e77c2b718f151e3ef55831bb4145d164c9c74bb78b7cce94693a6accb39cc747c67171cc43c72fff6cc72b3a19ba73e4dc8cf127ffe61f640ceac0 -libLLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/8dd9a908e0d94695352762d87bb5cfd4 -libLLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/3d9fbede7af089548bca9348c5ad13f146386ee4e2391223b4f9d299f9a52f7062dc758ab098805e481f434a5057ed37cb031d48de7fc3eb3137699f5540587e -libLLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/f55864a3ee48940270502c637412dd58 -libLLVM.v15.0.7+7.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/c52bca8cb48cee54ad86bb86696f489d6a6d471238e49affb9af70b0e88ec6a4af57391a72f88fbea31f7c597a066d57978b1d3ea63a29cfae559457c66f6e06 -libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/20d1d88a807f96b469032e5c932c0696 -libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/d6cdc9746c81c504faa968638ea9d7fd9ded72ad0abdcf6c5adb8bcd127126d35506c2b6b3bedb977736a76318edb5c899ba555ff1d05df21f797a8f9a4e5122 -libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/b4d7d4ebce4c7bbe3ac11cca0017a67a -libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/bb388db416d805ef5fbdbf4d2210d4b2188d6eae2c864692cfb1da7ba89de772423667e4648889db7cf43d9127aa13f77981d0b99ef321ff3f09faf7fd4b8bb9 -libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/b9382496b307f7e72fb12d394eef4e39 -libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/122a5f8daf1240c5d7b4f1926292311a3d287c4461516ee3321d1657ff3c9ca5caff54a1298f0d2a2b4c19627a57d626a4fb4455921862d87fe5897d672bdfae -libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/bd564398619c3338e509e2f9ef7d7ba0 -libLLVM.v15.0.7+7.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/a54812732e95604031ef1fb420057ed40b909e211a68d5a533be617556c7c41e4022dea35fc6b8c81d8cb1227e4086d46b345cfcb6022dad9efc456ed85d7825 -libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/39daf88d35f518325138f8562dec70dd -libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/2b2fd30a04cbdcffa57d12ea2785e3016456fbf1dfe99b74a1628ce213bdc28d65f8c6937175c700c0df4f5f8f1c257ef71f27d1d5cca2c5efe5598c893d5011 -libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/af88ec70f786750081d2948b6b9fd0ba -libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/f2a6bf3d74ddd06115d4791bd7ed833fc9ff1c24c0a317d7756d181f7cc59d21da73e085abb7ab0b46a12b0cbe4656df0e9e509b057cdf7d3d0cae2304f6b39c -libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/5dfdae75a373ef890d7e6c004cb16b2d -libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/3993609a2199c78cc12f430f76c2c3b58b0d6f208271bc474e3869d9f505fadfa61e1c2c5774ca5190c7886cad68507fff9a0f6d11641106507fc4b5e3bc8a41 -libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/e426a70337cf4e38ba22f64c9adbabd0 -libLLVM.v15.0.7+7.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/c5ac86c22d016adf70e77970ae976a5081a85ebe1943a46fcb93be53f85f82e4aaa724e41b450306d0cf50dc4eb64367059737b6c828eab554f6166774201310 -libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/523077c1c0fedd6d5e62536e933b2c8a -libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/246df1e0d1a038ea2cb77a9678ed0e13f568ca35bc2c751547b9e871163c0dd7e18ea321c88eb6c9b2ccce9ec4347c29c69e5cbc41dbbd43d23d7a658ca5fc15 -libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/23aa72bc1511ff8f4c09a2bdf70085a7 -libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/4d1d46652e98e75925478a86bc3b2e613ce54d3e99cbd75fecc637dab70a72187c36a979e2124592cb764d867c39555c013497fc3438103aa320fb7e45247254 -libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/ba162cc558297ef830f94323e351aae0 -libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/f98f1c74f5fb3a1e8936692c0b9c57fb8da1ae8fcbe187e019d61ff6691cbcdb03e7f53b5254bd219856bc3dc4408cb29926744f6086a13c3a32e66c1a79f422 -libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/9b364f0c1f2bf550d5908407120ab68a -libLLVM.v15.0.7+7.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/c7bb0a90cb24352926c6a0d3599490db75f84e907697f48d1ac099767f4d3480e94a6e19995bd16d2c26c7cac1309bb579f71208899ce83aa617ec06cea2847f -libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/06ff2d8850863f47c6d7391d9bdc4cd9 -libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/6d03c53673b072ba1936124b681219ca474f7d269dbeb3c0278ea88aeba5949a5af5388f3776f9bf5c1f05fef81922c9720d16fbb57737bd9b83925206f46cf1 -libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/7d37c75e75b9fa3e5db8cc2422a65b90 -libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/ffdb947940a033a01d0568f25018c125a743f3c71ce46565965ddbad52bd88596092190070c827aa6f7e70e22338e5d5162dfcb008deb80734f59d35437b41ed -libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/c31df5def85016f499c1a7daedf006ef -libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/d1b7220c0037450ec6efc4a2119c4dc4b9c48a20281c60b923f33bd80a9d146a69270983fe15cd8623ccfbac6c4bc4f4df3b44ad36cbcf86da8086f932e4da4d -libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/a178f55baca2221e71a0badc79b49bd2 -libLLVM.v15.0.7+7.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/d613e2744c59b845b8893eba4a4579750d9dd4bf4375837aadd963f051475dcbf074d254dc8eacec2f4b2f77a9c1cca68f88b7948df8065910b1b0752dd2004b -libLLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/2c5cd46b8a66d959807f4b285f5a221c -libLLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/43061164687d44c1aa92f11198e218af19e96b1fc6519a2f41a2626302b3089beda58d24040e3220424e718366c761c41a064479411c8c923eea1708b4bb4c77 -libLLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/1a0850a7e8c88088a6c26a50cd746396 -libLLVM.v15.0.7+7.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/57bb6a55f7b84488d72195e1420826e94f082541fdaa0f981da1abcd8b1fb4f0a12f1398d786abd51943c6920513914e9476a05c7477b2e003e30a068304f0ae -libLLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/538b7f590bfe5145c39c06aed74c845f -libLLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/98e59c9a2354f4881b61bc23ebc34c2f70e6394a54cbc6735a56f59688e248db85b8a674e1e4a2a60bb8802f23213767c17985c44eb530743132d3366b0ed2ce -libLLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/854ce5a05f524762390216637048a2c5 -libLLVM.v15.0.7+7.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/028714472e5e5ae01b667f1058dc704b051030c8c95ef4816aae1118aea6442f44d824e48c13cf4111f81ea151a7dd951aad40e4c05208730da4a4f9f4e52c3f -libLLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/dc6aabdb3fff4b33a9eb75ace7e6615e -libLLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/457a1f6d28b287033f501247499c4a9871be7db7880b65f34ab615846c06759fcbb9b4643a6692f670d56bb2346311806475fc7bb82a699755ea6410dd999d37 -libLLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/0578542bbde3db752171f9420ce30d74 -libLLVM.v15.0.7+7.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/93a8310e3b5bf85bcc7d1b20ee836805eb087a318bde258d5117babb877689e05d5a0d66e8c00946544b6e07a322c2af5bfd1499927cc325a98fb5b6aefdbed3 -libLLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/c2b7dec7d566c3f110f84a69e781866b -libLLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/44652389f9aeea2a8ba4e49bf78fa7d11ef3579205f178af844567e8e999917d737e233fe74a31cb3bf9a49847e364824109634e6683b75096b3f45a9fb4150d -libLLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/1c13dbb8577ad9e7020059a474560286 -libLLVM.v15.0.7+7.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/1d3e4a06f3d6ae3afa976713ad8937a51c4e9fd0b544c1e9f8c74ae8579dba29fd8e77eb8acec0873dec8ec58fa91bfa6738212a504769807a758caa1f203b2e -libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/ba4c9eceaa281a177f1f8b878bde35e6 -libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/c0f8fecd3f6e1b342a075630ef0fbcd76d964e9bac08ac5e8a48ab0686c0ab91d327c263e045056a66b93f44346a0624af1687ea36d7f3c41c94d23d33c0d2ef -libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/396cd763186100f920279ea551db8d09 -libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/c79d60d522b4c186b51b7ea50fa8916ec63f64941225d535f8cceb25e3732458291260186684d098776091f8ba235c7c890fc635e8f39ac3c603aeb7c84f0782 -libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/8288ec83ada261b340994f5ea62c2efb -libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/c612e99e655dec48f0c1b2b28d5aa999c3ba8e83f7796a1f2807074ceccdb08a8b6a5e3554eacfc3ba7a99aeeb8c6b28217cdc957937e344a94636920cf288e0 -libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/039c44655a46ee04f7de2b184bba432a -libLLVM.v15.0.7+7.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/a47b840e221933001b9366aa90b5862f25eced86bead68164b98ac3b095a1a948a9d89a6d2f9e7db2fabf40df4de211b5ff5d7d10fc3572c24470764d14a559e -libLLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/036be0a300369212fe943134678ba985 -libLLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/7dc49931b9775372385a61cd9de441dae567df791c83adcdacd45602e8cb64848895b26e8c53476fe53d86d21a06a00c21623eba4ef71ca97a545bc4fc2c5b18 -libLLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/747b5946945160209c2e5705a0ab0bcd -libLLVM.v15.0.7+7.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/da1b2b543c648e322a1d87d2294a0cf87f4ae4c1c5b5708a3de6bfd29ffd589f970fa8f01182017db1743bc53d6726f9118438efef07484c7388ff0b0918c99b -libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/b5eebac2361874017e0908dd2b655953 -libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/b3e1b05afb00e44d1b6b1ce9adc6934e2f2caf1d8bc8d112a7aee5526a39cf77d52b256b888bdc54ac848a98aa2714c6a8beca5603fff62e974595f2c2ce1b25 -libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/16864fadbf7366031ec0f5aa69a295ac -libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/2099f8f4167f7a96ad2e9145e2c4e26d201aececd8a34d21c1e21b3865e8c63192cfef6e012863a6920b55d7865143527aba17805412b122f1fa0e2ff304b515 -libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/3146935cca2cf625311fda3df6860aef -libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/745310983881e2839797b3da1f56e4adc115f34ac932215546ee1bbc869baecea1be077b546c9a68dd0fddb89551dea19ff181c691892e572f86ada885da3bfc -libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7c3ba44af8f1fecd3c370614fda602dd -libLLVM.v15.0.7+7.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/ddf418ea2dbfbb61ce4c977e0b0ae29137e378458fab37b5fc18db8a7d196663d7012e28161efbaaa75824ad0bd0c16841625349d89c8e3f7738d973e760cd27 -libLLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/b7985ca8dc4eb2b89239ce6e0083db89 -libLLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/babb426085a330434ffca6e55d1b237b780754845e4699621ef581b2cdbd803c0e0a0b3f91693f76848ba2cf1f177b6c342ebbd459d9926d6a4e0b7f4184de18 -libLLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/cc912aceddbfdd5278f302dff233aacc -libLLVM.v15.0.7+7.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/fbdd72353b76cab6c82af9e19e7f2abc7b5e19c634abb66d25cda0276c79e4c75f14eeaa8de6f03197a3b69cab130f0693bc3b17f144bed476a2e14268f2a5cb -libLLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/e9bc3f99cf16ad7e37b6f8692610c0c5 -libLLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/b7e0b1b1804d3641e8763eb35d08e1f9c9c2bdbcf9d129d1fae5835067d5b6ccda1acf0888b686c5e8a268b14fa455f52451e3cb6909446c9d053d3d1d261fb2 -libLLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/ba454f84baa9f746de63e22714c740f2 -libLLVM.v15.0.7+7.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/2b61a1a6693c7899fd9af8630c9eb45b54b6c84519e50828d80a6f7eb88dfb3df6ee4d473f8e30ca11a0e1db2c096711164dc08cc61707277f7beb1902930f43 -libLLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/1ebc12781d75fa94145bb6c7a2ba235e -libLLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/43898f026a1f43ef035999654555afe4410425f2b6f56341100115e2a66825843fe93777c10ba052d60562a64a1150095fca4181a1c09f0820baa83736611627 -libLLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/7259f7a15909745b0176c7bec2d5bb8e -libLLVM.v15.0.7+7.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/fcf10dcc6bc0bfd4389859db1ab6a827fcc15368cbd42f1f50a2b7a3e752c4cd2676e65fcd69bf0eb42579293d303d770e06c6d10150ff17d7fdd6fc71d0155f -libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/15ce58ac469ed16d371c103718d12957 -libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/e671652b802a31311bc36a443b616b3826bbf9a5045cdf2593e055b224401bacc50b1439d13ae6eb7f55376c73c40ea5c972ee4a518777b85d4774a76bd15b10 -libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/44e02ae3f143c0cca893332f73962050 -libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/a2b832da758f2d9911db535747d244b4f29b9f7730eca43eceac1fdbde4e262c14d6622f9c0ae38f2429221c5a113d8d59c0bedc243af6810ef1b75063fadb8b -libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/b30e6e6fdc1ade7a4148724facd5c934 -libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/51d7faebdb7863e6f2c8d97e0a5d119c2115aada5a6189b3b8b2928fdf8b3350f7b6eda67ce4ebe087821fda86ad2cfd0042ef3dc4a37c678e21267e04389541 -libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/596a32ac2f4a2e4aedcef09cea7541a6 -libLLVM.v15.0.7+7.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/2ad659ebede4fbd2b09d487bd4efdf050988da7267797c4b884387f35c5e02cc0dbf93f56e51316dbdca3e8ffd6a7d9120c2cf10387fd1fead4a05d81366d83e +libLLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/6f46148833fa386b55dd92e946561c85 +libLLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/ea1912f9a75c07374bc9c22c7b8b4321a0700f4ea196d29169e14a648a30d164897215ef4c4c6478810e5c5cdc76b1f2937fec4e6b0bb3e4f579bae06a219d0e +libLLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/0f2558df8ed485a93837e790bc646018 +libLLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/e7f962c4dd9675b6abec6129e7fa460ba3ba4bbe9eead4f9327a1db5fc9c64651d7424f9439ef396f0546f8e232bdc34eb625df0fa36bdfaed0e6b7af4dd0070 +libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/3317b67ebfb01c8d3dcb17c04d0f5ee5 +libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/383ec73210e00b02b3fe3f247bfe81a8c81668d3faf59c0ba9b0f032c41603807cb65808f28fc8a91dcf7cf72f3f5fa3bc68277bcb17cd35ec758ba3dd8ec857 +libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/f49e5ae9b0eb96cddeb3d68bec320d7b +libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/e2cf6ef242479bc781f6ea70d7123b087370bad917c8f398757ba32d9446ef3b8c3d3b813be2c1ad3a8945dce1464551b57d3bc40a2e063199dfe555ad697dc8 +libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/e8eb2e0bc1b0693fbdf01c9dbe0e0170 +libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/245a157bd6b49ece87075d6250315f419506262c43ad6c5c76340d60ca1eedb00dab77c6588b91bb5cd8033e7ed1d97c21d801f8359486c9c350ded3bfae7642 +libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/60dea992b59646da2d719185f32f4a7e +libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/7fcd64e51c87de8683923460d4596e406c5775d2ec6b7f4111bcb0689692dee09584622ecfae17ce91d1632f03a37cc9d43696190a5b92e916f4b8d4d0a50003 +libLLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/86385feda64011d17952300a29a28a46 +libLLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/2cf9f4934932b39a4a0195eab39f28c718c7cb5b830a425bddeb2f0a643fe6a74c7754483324f57e876ca8b92b5cfa1aaca802a44dc9ebcde86d8875c0493952 +libLLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/72cd1154871445247a6af96536ae1b51 +libLLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/b35740ff38e77c2b718f151e3ef55831bb4145d164c9c74bb78b7cce94693a6accb39cc747c67171cc43c72fff6cc72b3a19ba73e4dc8cf127ffe61f640ceac0 +libLLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/8dd9a908e0d94695352762d87bb5cfd4 +libLLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/3d9fbede7af089548bca9348c5ad13f146386ee4e2391223b4f9d299f9a52f7062dc758ab098805e481f434a5057ed37cb031d48de7fc3eb3137699f5540587e +libLLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/f55864a3ee48940270502c637412dd58 +libLLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/c52bca8cb48cee54ad86bb86696f489d6a6d471238e49affb9af70b0e88ec6a4af57391a72f88fbea31f7c597a066d57978b1d3ea63a29cfae559457c66f6e06 +libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/20d1d88a807f96b469032e5c932c0696 +libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/d6cdc9746c81c504faa968638ea9d7fd9ded72ad0abdcf6c5adb8bcd127126d35506c2b6b3bedb977736a76318edb5c899ba555ff1d05df21f797a8f9a4e5122 +libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/b4d7d4ebce4c7bbe3ac11cca0017a67a +libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/bb388db416d805ef5fbdbf4d2210d4b2188d6eae2c864692cfb1da7ba89de772423667e4648889db7cf43d9127aa13f77981d0b99ef321ff3f09faf7fd4b8bb9 +libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/b9382496b307f7e72fb12d394eef4e39 +libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/122a5f8daf1240c5d7b4f1926292311a3d287c4461516ee3321d1657ff3c9ca5caff54a1298f0d2a2b4c19627a57d626a4fb4455921862d87fe5897d672bdfae +libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/bd564398619c3338e509e2f9ef7d7ba0 +libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/a54812732e95604031ef1fb420057ed40b909e211a68d5a533be617556c7c41e4022dea35fc6b8c81d8cb1227e4086d46b345cfcb6022dad9efc456ed85d7825 +libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/39daf88d35f518325138f8562dec70dd +libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/2b2fd30a04cbdcffa57d12ea2785e3016456fbf1dfe99b74a1628ce213bdc28d65f8c6937175c700c0df4f5f8f1c257ef71f27d1d5cca2c5efe5598c893d5011 +libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/af88ec70f786750081d2948b6b9fd0ba +libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/f2a6bf3d74ddd06115d4791bd7ed833fc9ff1c24c0a317d7756d181f7cc59d21da73e085abb7ab0b46a12b0cbe4656df0e9e509b057cdf7d3d0cae2304f6b39c +libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/5dfdae75a373ef890d7e6c004cb16b2d +libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/3993609a2199c78cc12f430f76c2c3b58b0d6f208271bc474e3869d9f505fadfa61e1c2c5774ca5190c7886cad68507fff9a0f6d11641106507fc4b5e3bc8a41 +libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/e426a70337cf4e38ba22f64c9adbabd0 +libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/c5ac86c22d016adf70e77970ae976a5081a85ebe1943a46fcb93be53f85f82e4aaa724e41b450306d0cf50dc4eb64367059737b6c828eab554f6166774201310 +libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/523077c1c0fedd6d5e62536e933b2c8a +libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/246df1e0d1a038ea2cb77a9678ed0e13f568ca35bc2c751547b9e871163c0dd7e18ea321c88eb6c9b2ccce9ec4347c29c69e5cbc41dbbd43d23d7a658ca5fc15 +libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/23aa72bc1511ff8f4c09a2bdf70085a7 +libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/4d1d46652e98e75925478a86bc3b2e613ce54d3e99cbd75fecc637dab70a72187c36a979e2124592cb764d867c39555c013497fc3438103aa320fb7e45247254 +libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/ba162cc558297ef830f94323e351aae0 +libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/f98f1c74f5fb3a1e8936692c0b9c57fb8da1ae8fcbe187e019d61ff6691cbcdb03e7f53b5254bd219856bc3dc4408cb29926744f6086a13c3a32e66c1a79f422 +libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/9b364f0c1f2bf550d5908407120ab68a +libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/c7bb0a90cb24352926c6a0d3599490db75f84e907697f48d1ac099767f4d3480e94a6e19995bd16d2c26c7cac1309bb579f71208899ce83aa617ec06cea2847f +libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/06ff2d8850863f47c6d7391d9bdc4cd9 +libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/6d03c53673b072ba1936124b681219ca474f7d269dbeb3c0278ea88aeba5949a5af5388f3776f9bf5c1f05fef81922c9720d16fbb57737bd9b83925206f46cf1 +libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/7d37c75e75b9fa3e5db8cc2422a65b90 +libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/ffdb947940a033a01d0568f25018c125a743f3c71ce46565965ddbad52bd88596092190070c827aa6f7e70e22338e5d5162dfcb008deb80734f59d35437b41ed +libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/c31df5def85016f499c1a7daedf006ef +libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/d1b7220c0037450ec6efc4a2119c4dc4b9c48a20281c60b923f33bd80a9d146a69270983fe15cd8623ccfbac6c4bc4f4df3b44ad36cbcf86da8086f932e4da4d +libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/a178f55baca2221e71a0badc79b49bd2 +libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/d613e2744c59b845b8893eba4a4579750d9dd4bf4375837aadd963f051475dcbf074d254dc8eacec2f4b2f77a9c1cca68f88b7948df8065910b1b0752dd2004b +libLLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/2c5cd46b8a66d959807f4b285f5a221c +libLLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/43061164687d44c1aa92f11198e218af19e96b1fc6519a2f41a2626302b3089beda58d24040e3220424e718366c761c41a064479411c8c923eea1708b4bb4c77 +libLLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/1a0850a7e8c88088a6c26a50cd746396 +libLLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/57bb6a55f7b84488d72195e1420826e94f082541fdaa0f981da1abcd8b1fb4f0a12f1398d786abd51943c6920513914e9476a05c7477b2e003e30a068304f0ae +libLLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/538b7f590bfe5145c39c06aed74c845f +libLLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/98e59c9a2354f4881b61bc23ebc34c2f70e6394a54cbc6735a56f59688e248db85b8a674e1e4a2a60bb8802f23213767c17985c44eb530743132d3366b0ed2ce +libLLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/854ce5a05f524762390216637048a2c5 +libLLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/028714472e5e5ae01b667f1058dc704b051030c8c95ef4816aae1118aea6442f44d824e48c13cf4111f81ea151a7dd951aad40e4c05208730da4a4f9f4e52c3f +libLLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/dc6aabdb3fff4b33a9eb75ace7e6615e +libLLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/457a1f6d28b287033f501247499c4a9871be7db7880b65f34ab615846c06759fcbb9b4643a6692f670d56bb2346311806475fc7bb82a699755ea6410dd999d37 +libLLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/0578542bbde3db752171f9420ce30d74 +libLLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/93a8310e3b5bf85bcc7d1b20ee836805eb087a318bde258d5117babb877689e05d5a0d66e8c00946544b6e07a322c2af5bfd1499927cc325a98fb5b6aefdbed3 +libLLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/c2b7dec7d566c3f110f84a69e781866b +libLLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/44652389f9aeea2a8ba4e49bf78fa7d11ef3579205f178af844567e8e999917d737e233fe74a31cb3bf9a49847e364824109634e6683b75096b3f45a9fb4150d +libLLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/1c13dbb8577ad9e7020059a474560286 +libLLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/1d3e4a06f3d6ae3afa976713ad8937a51c4e9fd0b544c1e9f8c74ae8579dba29fd8e77eb8acec0873dec8ec58fa91bfa6738212a504769807a758caa1f203b2e +libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/ba4c9eceaa281a177f1f8b878bde35e6 +libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/c0f8fecd3f6e1b342a075630ef0fbcd76d964e9bac08ac5e8a48ab0686c0ab91d327c263e045056a66b93f44346a0624af1687ea36d7f3c41c94d23d33c0d2ef +libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/396cd763186100f920279ea551db8d09 +libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/c79d60d522b4c186b51b7ea50fa8916ec63f64941225d535f8cceb25e3732458291260186684d098776091f8ba235c7c890fc635e8f39ac3c603aeb7c84f0782 +libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/8288ec83ada261b340994f5ea62c2efb +libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/c612e99e655dec48f0c1b2b28d5aa999c3ba8e83f7796a1f2807074ceccdb08a8b6a5e3554eacfc3ba7a99aeeb8c6b28217cdc957937e344a94636920cf288e0 +libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/039c44655a46ee04f7de2b184bba432a +libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/a47b840e221933001b9366aa90b5862f25eced86bead68164b98ac3b095a1a948a9d89a6d2f9e7db2fabf40df4de211b5ff5d7d10fc3572c24470764d14a559e +libLLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/036be0a300369212fe943134678ba985 +libLLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/7dc49931b9775372385a61cd9de441dae567df791c83adcdacd45602e8cb64848895b26e8c53476fe53d86d21a06a00c21623eba4ef71ca97a545bc4fc2c5b18 +libLLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/747b5946945160209c2e5705a0ab0bcd +libLLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/da1b2b543c648e322a1d87d2294a0cf87f4ae4c1c5b5708a3de6bfd29ffd589f970fa8f01182017db1743bc53d6726f9118438efef07484c7388ff0b0918c99b +libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/b5eebac2361874017e0908dd2b655953 +libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/b3e1b05afb00e44d1b6b1ce9adc6934e2f2caf1d8bc8d112a7aee5526a39cf77d52b256b888bdc54ac848a98aa2714c6a8beca5603fff62e974595f2c2ce1b25 +libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/16864fadbf7366031ec0f5aa69a295ac +libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/2099f8f4167f7a96ad2e9145e2c4e26d201aececd8a34d21c1e21b3865e8c63192cfef6e012863a6920b55d7865143527aba17805412b122f1fa0e2ff304b515 +libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/3146935cca2cf625311fda3df6860aef +libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/745310983881e2839797b3da1f56e4adc115f34ac932215546ee1bbc869baecea1be077b546c9a68dd0fddb89551dea19ff181c691892e572f86ada885da3bfc +libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7c3ba44af8f1fecd3c370614fda602dd +libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/ddf418ea2dbfbb61ce4c977e0b0ae29137e378458fab37b5fc18db8a7d196663d7012e28161efbaaa75824ad0bd0c16841625349d89c8e3f7738d973e760cd27 +libLLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/b7985ca8dc4eb2b89239ce6e0083db89 +libLLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/babb426085a330434ffca6e55d1b237b780754845e4699621ef581b2cdbd803c0e0a0b3f91693f76848ba2cf1f177b6c342ebbd459d9926d6a4e0b7f4184de18 +libLLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/cc912aceddbfdd5278f302dff233aacc +libLLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/fbdd72353b76cab6c82af9e19e7f2abc7b5e19c634abb66d25cda0276c79e4c75f14eeaa8de6f03197a3b69cab130f0693bc3b17f144bed476a2e14268f2a5cb +libLLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/e9bc3f99cf16ad7e37b6f8692610c0c5 +libLLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/b7e0b1b1804d3641e8763eb35d08e1f9c9c2bdbcf9d129d1fae5835067d5b6ccda1acf0888b686c5e8a268b14fa455f52451e3cb6909446c9d053d3d1d261fb2 +libLLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/ba454f84baa9f746de63e22714c740f2 +libLLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/2b61a1a6693c7899fd9af8630c9eb45b54b6c84519e50828d80a6f7eb88dfb3df6ee4d473f8e30ca11a0e1db2c096711164dc08cc61707277f7beb1902930f43 +libLLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/1ebc12781d75fa94145bb6c7a2ba235e +libLLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/43898f026a1f43ef035999654555afe4410425f2b6f56341100115e2a66825843fe93777c10ba052d60562a64a1150095fca4181a1c09f0820baa83736611627 +libLLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/7259f7a15909745b0176c7bec2d5bb8e +libLLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/fcf10dcc6bc0bfd4389859db1ab6a827fcc15368cbd42f1f50a2b7a3e752c4cd2676e65fcd69bf0eb42579293d303d770e06c6d10150ff17d7fdd6fc71d0155f +libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/9ebab83ab97a6cfef7d745e799ce39bd +libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/8892e553f08507b07b62e4c7859f3499a47e3eed5fe773e61c9c2831150fd49a06fc25e164b7053873c97830755d478c5527d23598ce674eb2e13246a64d00a8 +libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/11915b49d288c71d78bab5c114bbd5dc +libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/0b38cca2f9492dabbd49a411660fea39e70c53ba105db7f8eb6a616d108ab8dee4b015b79a2cb34e75b91af5941d5f9acb2630f233ef9edd4f99118302a68537 +libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/e2de9f36a69100387209f59f99bd54a8 +libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/641aa82ab684656ae82f12b19bf3d090080d62d3c933525f23607a85da0ed1f1dbdf02c30120994e52a447abf86552fb2a3e0ab70f718c4baafc9bc8b01fb17f +libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/596a32ac2f4a2e4aedcef09cea7541a6 +libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/2ad659ebede4fbd2b09d487bd4efdf050988da7267797c4b884387f35c5e02cc0dbf93f56e51316dbdca3e8ffd6a7d9120c2cf10387fd1fead4a05d81366d83e llvm-julia-15.0.7-7.tar.gz/md5/20678ba77ec517e16df67b6683fe1fd6 llvm-julia-15.0.7-7.tar.gz/sha512/dd18b1d1817d7bff23bbd9598eb691e2d65ef679666e7219e4137223e739b62d5f4ef11d8c42474438b954026e0c3f0c5e350d3df23d8b4b294765d8d7788802 llvmunwind-12.0.1.tar.xz/md5/4ec327cee517fdb1f6a20e83748e2c7b diff --git a/deps/checksums/mbedtls b/deps/checksums/mbedtls index d0b43ad80ea70..11ee2786abb98 100644 --- a/deps/checksums/mbedtls +++ b/deps/checksums/mbedtls @@ -1,34 +1,34 @@ -MbedTLS.v2.28.2+0.aarch64-apple-darwin.tar.gz/md5/ef83fb4706100ee678cd8af3f7a5c762 -MbedTLS.v2.28.2+0.aarch64-apple-darwin.tar.gz/sha512/03dda8cc9afa3d79c3c733e45c77891e75d939dc2bcca5ba8eb7aa3bd01fb52011ea9323df9cf7294fe6dcf87eb86c1b1c4b2f3b8af6116929b3371698559fe4 -MbedTLS.v2.28.2+0.aarch64-linux-gnu.tar.gz/md5/ac46c3840d2d0cc7c573f31c2f3d0d61 -MbedTLS.v2.28.2+0.aarch64-linux-gnu.tar.gz/sha512/bb458f1dc9b8684a38f603136ee4ba1c51b47f5047c5a5cfe2c552be266e79dfcd8243b216b0831abf24390eeb6f4524bc7e43b2642eb2ad0227399222cd0d8a -MbedTLS.v2.28.2+0.aarch64-linux-musl.tar.gz/md5/d74732e0bbcd03666243605e60bb345a -MbedTLS.v2.28.2+0.aarch64-linux-musl.tar.gz/sha512/90b0699477b697b94c0ab1ba0607fb3e1cd40d66a80a51cb1e0f3b927de03ba201e7e280d453db672e6265db5b07d0145846e53ddbcb4b550afcabef1716470b -MbedTLS.v2.28.2+0.armv6l-linux-gnueabihf.tar.gz/md5/65ce7c51884b50dcb8343a945644b862 -MbedTLS.v2.28.2+0.armv6l-linux-gnueabihf.tar.gz/sha512/e9df753e9f3a08fd645b15422be7cc0ec3aeac3f8d5f76e0c4c5ec24c54e1b653db320ed0c6799411802a05801241a5363bb449a8765fda7856413c7e3297721 -MbedTLS.v2.28.2+0.armv6l-linux-musleabihf.tar.gz/md5/7b7fc8eafc95416d75e3f1bfb2640e09 -MbedTLS.v2.28.2+0.armv6l-linux-musleabihf.tar.gz/sha512/68362114808fb4f986dea673ef1c7f104caad8233bed1c7f6a365d5d69bb7f7c92b234d6b1bfa5b014e7096411841c115a5cfe9932ae9ce642293cab962f8d38 -MbedTLS.v2.28.2+0.armv7l-linux-gnueabihf.tar.gz/md5/4a477379b15fafbf0c05435f5ab370ac -MbedTLS.v2.28.2+0.armv7l-linux-gnueabihf.tar.gz/sha512/fd34b475bf94b411e3155f5a5166d1ad081fef3622d7b99f4915b592d4235f63a0b910e0559ba2a0c3d596df9ccc2d7ecb61984091debb20bd4b995942857132 -MbedTLS.v2.28.2+0.armv7l-linux-musleabihf.tar.gz/md5/fc6551ef5f189010a84230dd48f6bdfe -MbedTLS.v2.28.2+0.armv7l-linux-musleabihf.tar.gz/sha512/d3a7199f3e1ffb1c289c5f0a4384f3b5d1af6e868eb1081d66d6cbfc60e6415e68a7e22afb497f2e7c7900678a19bf1ba2a4c888efa1019c03bce376af62154c -MbedTLS.v2.28.2+0.i686-linux-gnu.tar.gz/md5/335c3ac146bbe8cd862e4737bc362037 -MbedTLS.v2.28.2+0.i686-linux-gnu.tar.gz/sha512/f12ef67a92af27f4021f73171cdf2ef5558f734fcb185e4417fd7e16752dafe3f75be4291854b5ce346abda674252d58064d9186122eb4f9b15ff89156d221ce -MbedTLS.v2.28.2+0.i686-linux-musl.tar.gz/md5/435b864b02d1d2c96e5d8dc32b433ae1 -MbedTLS.v2.28.2+0.i686-linux-musl.tar.gz/sha512/52e3a79a70b3ff4617c93cafdeb702105c13b34687fc0fa31eebc91aa5cacea356d5b6a6bdbbfd81417d77debe256ea8f0f2a43c8d140154099bde097740dce7 -MbedTLS.v2.28.2+0.i686-w64-mingw32.tar.gz/md5/a238801f7e0d14f4b693aa4b74645263 -MbedTLS.v2.28.2+0.i686-w64-mingw32.tar.gz/sha512/431db4c388d3c52b08795d6fee6e6696cf383506a603816d6a63dc3571dbdc2b673837a1df1d9003c5009f8f8dc6eaaef3f80aaea396dc2fdf54b7e6a3c6aad6 -MbedTLS.v2.28.2+0.powerpc64le-linux-gnu.tar.gz/md5/26c8f09aa65e5b70be528311519d4376 -MbedTLS.v2.28.2+0.powerpc64le-linux-gnu.tar.gz/sha512/2d47567388b8554ce7714f4ded013fcbffbf94726dbc6a1b7287dc17b27d1fa35baba55cf7dac17c555892a5f4c74119afdf552b42b0e8f80f26621adaa4dbca -MbedTLS.v2.28.2+0.x86_64-apple-darwin.tar.gz/md5/dfc263208b1a8d4c29b4ec3b6f10e5ce -MbedTLS.v2.28.2+0.x86_64-apple-darwin.tar.gz/sha512/3b2941c4b151206a56a9a795f0f30519676ea4bc0c93f66b419b15568edc91bb976954f584116accb7f9bd067580712e61b3c580a249332640e27e6346ca51ff -MbedTLS.v2.28.2+0.x86_64-linux-gnu.tar.gz/md5/94b908036eecbe59372722b41f0b1985 -MbedTLS.v2.28.2+0.x86_64-linux-gnu.tar.gz/sha512/c37a4c34eb450bd716c076c4105bd6022892731c470d64a854ac0fca6653dcf5a70b23982050e7d82cdfd67d02902d9efe4c94d2cf5e0d29d497c3c5ac03f8e8 -MbedTLS.v2.28.2+0.x86_64-linux-musl.tar.gz/md5/217866be499144eeb2e0944b0b60cc09 -MbedTLS.v2.28.2+0.x86_64-linux-musl.tar.gz/sha512/144180e1968da627c92173277a130283aea711157a04a2655786658234232e397985f63d5407166377fc5f38a7447c19797c51b66a9c4b1773601d9e7e01d0e0 -MbedTLS.v2.28.2+0.x86_64-unknown-freebsd.tar.gz/md5/74316c624c8106faf7c04e05149b5c38 -MbedTLS.v2.28.2+0.x86_64-unknown-freebsd.tar.gz/sha512/9eca254c9b663b2f5799705c2e0aebb5529a7ff7759b0f3b67516e622dd4561169fface1d08340666453e779133498eacb8ef2dae1ef6332ceb4d8052d3614d3 -MbedTLS.v2.28.2+0.x86_64-w64-mingw32.tar.gz/md5/cdd28912607781f5e6ea6cad73c7dba2 -MbedTLS.v2.28.2+0.x86_64-w64-mingw32.tar.gz/sha512/e5793778d57b725a0cab48dd7e8f45022699b654bb8e890620efa73628140e453c80601e43647a700d6090a4b66d3c30b11634c4224c016c11c7bfde6b8a1b2a +MbedTLS.v2.28.2+1.aarch64-apple-darwin.tar.gz/md5/ef83fb4706100ee678cd8af3f7a5c762 +MbedTLS.v2.28.2+1.aarch64-apple-darwin.tar.gz/sha512/03dda8cc9afa3d79c3c733e45c77891e75d939dc2bcca5ba8eb7aa3bd01fb52011ea9323df9cf7294fe6dcf87eb86c1b1c4b2f3b8af6116929b3371698559fe4 +MbedTLS.v2.28.2+1.aarch64-linux-gnu.tar.gz/md5/ac46c3840d2d0cc7c573f31c2f3d0d61 +MbedTLS.v2.28.2+1.aarch64-linux-gnu.tar.gz/sha512/bb458f1dc9b8684a38f603136ee4ba1c51b47f5047c5a5cfe2c552be266e79dfcd8243b216b0831abf24390eeb6f4524bc7e43b2642eb2ad0227399222cd0d8a +MbedTLS.v2.28.2+1.aarch64-linux-musl.tar.gz/md5/d74732e0bbcd03666243605e60bb345a +MbedTLS.v2.28.2+1.aarch64-linux-musl.tar.gz/sha512/90b0699477b697b94c0ab1ba0607fb3e1cd40d66a80a51cb1e0f3b927de03ba201e7e280d453db672e6265db5b07d0145846e53ddbcb4b550afcabef1716470b +MbedTLS.v2.28.2+1.armv6l-linux-gnueabihf.tar.gz/md5/65ce7c51884b50dcb8343a945644b862 +MbedTLS.v2.28.2+1.armv6l-linux-gnueabihf.tar.gz/sha512/e9df753e9f3a08fd645b15422be7cc0ec3aeac3f8d5f76e0c4c5ec24c54e1b653db320ed0c6799411802a05801241a5363bb449a8765fda7856413c7e3297721 +MbedTLS.v2.28.2+1.armv6l-linux-musleabihf.tar.gz/md5/7b7fc8eafc95416d75e3f1bfb2640e09 +MbedTLS.v2.28.2+1.armv6l-linux-musleabihf.tar.gz/sha512/68362114808fb4f986dea673ef1c7f104caad8233bed1c7f6a365d5d69bb7f7c92b234d6b1bfa5b014e7096411841c115a5cfe9932ae9ce642293cab962f8d38 +MbedTLS.v2.28.2+1.armv7l-linux-gnueabihf.tar.gz/md5/4a477379b15fafbf0c05435f5ab370ac +MbedTLS.v2.28.2+1.armv7l-linux-gnueabihf.tar.gz/sha512/fd34b475bf94b411e3155f5a5166d1ad081fef3622d7b99f4915b592d4235f63a0b910e0559ba2a0c3d596df9ccc2d7ecb61984091debb20bd4b995942857132 +MbedTLS.v2.28.2+1.armv7l-linux-musleabihf.tar.gz/md5/fc6551ef5f189010a84230dd48f6bdfe +MbedTLS.v2.28.2+1.armv7l-linux-musleabihf.tar.gz/sha512/d3a7199f3e1ffb1c289c5f0a4384f3b5d1af6e868eb1081d66d6cbfc60e6415e68a7e22afb497f2e7c7900678a19bf1ba2a4c888efa1019c03bce376af62154c +MbedTLS.v2.28.2+1.i686-linux-gnu.tar.gz/md5/5f06aeeacb93e8419da5dcc6dbadff67 +MbedTLS.v2.28.2+1.i686-linux-gnu.tar.gz/sha512/48dd5de23dd1513dd496b7ae9c88bc5a4f206442c3916ffdd602232b6f5fdc621adf0a3a014821d70092e1c3c90d96e462bc0e7608a984b0ff428c4bdbe42ecf +MbedTLS.v2.28.2+1.i686-linux-musl.tar.gz/md5/435b864b02d1d2c96e5d8dc32b433ae1 +MbedTLS.v2.28.2+1.i686-linux-musl.tar.gz/sha512/52e3a79a70b3ff4617c93cafdeb702105c13b34687fc0fa31eebc91aa5cacea356d5b6a6bdbbfd81417d77debe256ea8f0f2a43c8d140154099bde097740dce7 +MbedTLS.v2.28.2+1.i686-w64-mingw32.tar.gz/md5/09c0450a373e30ddef1ae31e06b288d4 +MbedTLS.v2.28.2+1.i686-w64-mingw32.tar.gz/sha512/59a3529e7826a2f2266c1482d5dbdae2fb578416b3b6ee3b0c8507df21c1395dcd681be65ad953e8306971c549efad342ee4e0725391a88b202475f56aebc062 +MbedTLS.v2.28.2+1.powerpc64le-linux-gnu.tar.gz/md5/26c8f09aa65e5b70be528311519d4376 +MbedTLS.v2.28.2+1.powerpc64le-linux-gnu.tar.gz/sha512/2d47567388b8554ce7714f4ded013fcbffbf94726dbc6a1b7287dc17b27d1fa35baba55cf7dac17c555892a5f4c74119afdf552b42b0e8f80f26621adaa4dbca +MbedTLS.v2.28.2+1.x86_64-apple-darwin.tar.gz/md5/dfc263208b1a8d4c29b4ec3b6f10e5ce +MbedTLS.v2.28.2+1.x86_64-apple-darwin.tar.gz/sha512/3b2941c4b151206a56a9a795f0f30519676ea4bc0c93f66b419b15568edc91bb976954f584116accb7f9bd067580712e61b3c580a249332640e27e6346ca51ff +MbedTLS.v2.28.2+1.x86_64-linux-gnu.tar.gz/md5/94b908036eecbe59372722b41f0b1985 +MbedTLS.v2.28.2+1.x86_64-linux-gnu.tar.gz/sha512/c37a4c34eb450bd716c076c4105bd6022892731c470d64a854ac0fca6653dcf5a70b23982050e7d82cdfd67d02902d9efe4c94d2cf5e0d29d497c3c5ac03f8e8 +MbedTLS.v2.28.2+1.x86_64-linux-musl.tar.gz/md5/217866be499144eeb2e0944b0b60cc09 +MbedTLS.v2.28.2+1.x86_64-linux-musl.tar.gz/sha512/144180e1968da627c92173277a130283aea711157a04a2655786658234232e397985f63d5407166377fc5f38a7447c19797c51b66a9c4b1773601d9e7e01d0e0 +MbedTLS.v2.28.2+1.x86_64-unknown-freebsd.tar.gz/md5/5a1ec1b183f30cb7998550e5ce15c62d +MbedTLS.v2.28.2+1.x86_64-unknown-freebsd.tar.gz/sha512/3d07fc1a54a832515a1340eaa5de03707fc52fe8770a75ac80106942f5d23e1d52297c6068d28ab07f55fd2b3f1c683b1e25e82bf4c34b4f14af58287a5b662f +MbedTLS.v2.28.2+1.x86_64-w64-mingw32.tar.gz/md5/edb5477223f9a35054160585fdb07f7e +MbedTLS.v2.28.2+1.x86_64-w64-mingw32.tar.gz/sha512/617779d6944ea153c63e6d9ce66d9bb33520e1539324a449151594937e648ef7ccb30364d3e7aa3eed3b68b02366e5724e14787565db565f0686334ab4df3701 mbedtls-2.28.2.tar.gz/md5/421c47c18ef46095e3ad38ffc0543e11 mbedtls-2.28.2.tar.gz/sha512/93cdb44f764b200131b8dbefb9363e5fa38760eaf01473a512f93673cc55db3515830e16b813e03b39cb819323ad78cee4cb7f3fa85861ec5e72e0f89541c7fc diff --git a/deps/checksums/mpfr b/deps/checksums/mpfr index 2b4281659b13a..1bb4eca6bf4ad 100644 --- a/deps/checksums/mpfr +++ b/deps/checksums/mpfr @@ -1,34 +1,34 @@ -MPFR.v4.2.0+0.aarch64-apple-darwin.tar.gz/md5/f9393a636497b19c846343b456b2dd7e -MPFR.v4.2.0+0.aarch64-apple-darwin.tar.gz/sha512/a77a0387e84f572ef5558977096e70da8eb7b3674a8198cc6ae35462971f76d684145ffae7c2ddca32e2bd1c8b2ccb33e4447eb8606d5d5cd5958298472b3ea9 -MPFR.v4.2.0+0.aarch64-linux-gnu.tar.gz/md5/ade253017d195de694780c32f9161dcf -MPFR.v4.2.0+0.aarch64-linux-gnu.tar.gz/sha512/1b68de5f8e557b7434c8c1bc016227b58683b56c0977b763422ea85a673bec446fcfee3a4f69e1d4689abb9bb6bf47f2a50fbb56ecac6a9d40096e66bd0f2080 -MPFR.v4.2.0+0.aarch64-linux-musl.tar.gz/md5/7dbd121c7192ccaf7191de5ab8d91afb -MPFR.v4.2.0+0.aarch64-linux-musl.tar.gz/sha512/8614e3cb28491b24a0ec5060b44abaf264b61c91ddd29d70105ff583bd3112cff1b9bd5ed45e39f186265333982d5eeb8bf35fedc3b51b2a009cc7a51046b50b -MPFR.v4.2.0+0.armv6l-linux-gnueabihf.tar.gz/md5/adb2b7fdf111c8b19df1516cfb278bb1 -MPFR.v4.2.0+0.armv6l-linux-gnueabihf.tar.gz/sha512/0c47aeffd05a194802f6c4e0e2779d56fb46007e6c3e145ee6992854a21a317a9d51512c59a0ce4ddcd314c387945225c6557d6c2ab6961ae4848875e8983de8 -MPFR.v4.2.0+0.armv6l-linux-musleabihf.tar.gz/md5/c30358bdeffcff65ba9be906cd35889b -MPFR.v4.2.0+0.armv6l-linux-musleabihf.tar.gz/sha512/2857ec27ae2d53a451d62dd241ce9b43f7ee182bee180ecd9ad92c907c66d0b0ab2d1ea3b20fe61cc176ae44ecbe6041305cc8a9343b396c9cb54dd77a1e2868 -MPFR.v4.2.0+0.armv7l-linux-gnueabihf.tar.gz/md5/a1e30436bade2150c9dc924177f0c321 -MPFR.v4.2.0+0.armv7l-linux-gnueabihf.tar.gz/sha512/d2f4662c494fefda66847e7a085edda3ce396383aafb4e17fc2e176191b0f530541726c261cac3467f13136e8ec728c8a7cf0e352f3e9ebf960d153cbfe766b8 -MPFR.v4.2.0+0.armv7l-linux-musleabihf.tar.gz/md5/857e3c82804e7c853d21603f18caa715 -MPFR.v4.2.0+0.armv7l-linux-musleabihf.tar.gz/sha512/86cf3e940fd66820b5269e9aa2a49c3fc3077857bec037a08e0d301b0bf3cc5c79ac331cc6370d852e20f4acf8f601c49d5dbe24e96652e4411b3f33a11e3f45 -MPFR.v4.2.0+0.i686-linux-gnu.tar.gz/md5/5a432be79a112e67e970980f4bde13a0 -MPFR.v4.2.0+0.i686-linux-gnu.tar.gz/sha512/94198b23ac94dcb9dca95938a46b9899c3ef329bafbb13b32076cd3415b89f11908632c7c07e90549c01bd9ed7fc9a002dae07a645f85b8509234c49be729621 -MPFR.v4.2.0+0.i686-linux-musl.tar.gz/md5/4ce71dc250c2469f844a02c6ee6571a1 -MPFR.v4.2.0+0.i686-linux-musl.tar.gz/sha512/134b67b23de75ab172594cd0fac55b5c265730bfea195978698e3e6fbc47d65617652bd72d90ba092ed1bac4c29d5b2c109df5d8dc60b5d8f91159fd58575b67 -MPFR.v4.2.0+0.i686-w64-mingw32.tar.gz/md5/df41bde61d33b56fd48bdb0f9ec0c624 -MPFR.v4.2.0+0.i686-w64-mingw32.tar.gz/sha512/145bc14f22eb077992cd993a20d3205eeeee1d2bb99ff4f48277173b0b39c848e2cd3044d2141003607aa4ea3665546a87b9ffea87bf570ab1b152117ef4045c -MPFR.v4.2.0+0.powerpc64le-linux-gnu.tar.gz/md5/d818894054b38232ba02ee0e129f6fe0 -MPFR.v4.2.0+0.powerpc64le-linux-gnu.tar.gz/sha512/0e73ca926f3e06466d1899f0b3e9ae4abe15102804dce6716ce23154344a571773c40d276f0038a0ae4e626799867ee715428e1d961334a01ad3091745367e8e -MPFR.v4.2.0+0.x86_64-apple-darwin.tar.gz/md5/9652148df4e771be39713c4f43d3ff61 -MPFR.v4.2.0+0.x86_64-apple-darwin.tar.gz/sha512/91a0219fd1880dfa90d196fa403f4e1df0347ced58a4772492196b94476f346d80696885a4f3520424494bc09679cca0c0ccf2f6e9247d60b52ebdf564485e72 -MPFR.v4.2.0+0.x86_64-linux-gnu.tar.gz/md5/4de39327a792be708119ac7b43957628 -MPFR.v4.2.0+0.x86_64-linux-gnu.tar.gz/sha512/447b59d5589a8517061627668e8baed4366408cacc9d8e063528b9b795de6d27e4005844578310185f03f568f4948bc4a794624235875fb61b6187264b6f483b -MPFR.v4.2.0+0.x86_64-linux-musl.tar.gz/md5/f9b8c3c094b339341b19828cc5e1d47c -MPFR.v4.2.0+0.x86_64-linux-musl.tar.gz/sha512/c661e7c5bded3bdf11b2bd5e5ef4ad8e446934d9b82dfe26f0be1b83cea98d7e56e0903bfc1075f91c8d23401cc6b3b722f2d60f46d73cab884e81fe518aba27 -MPFR.v4.2.0+0.x86_64-unknown-freebsd.tar.gz/md5/83700aaebc7344d84d70f0bd0f9c7890 -MPFR.v4.2.0+0.x86_64-unknown-freebsd.tar.gz/sha512/039cb18a142a90fadc7951f05324fe9c033da9502a61da77fdcd5d9557075ad1ca8500b9b9b39ce57a44b9cb28d41dfc6cbde10cfdbdb40077ebada24a2bab9a -MPFR.v4.2.0+0.x86_64-w64-mingw32.tar.gz/md5/9cdaa3fc0d13a8835d165c745937c385 -MPFR.v4.2.0+0.x86_64-w64-mingw32.tar.gz/sha512/21464bf836362ecc50da82859a4ba2de3d32d76ff57de9719ac850e73918814e1002130e0d6797fbb914b822f13bea383be3a29b2a1c9c8415cb2e3c5d321669 +MPFR.v4.2.0+1.aarch64-apple-darwin.tar.gz/md5/f9393a636497b19c846343b456b2dd7e +MPFR.v4.2.0+1.aarch64-apple-darwin.tar.gz/sha512/a77a0387e84f572ef5558977096e70da8eb7b3674a8198cc6ae35462971f76d684145ffae7c2ddca32e2bd1c8b2ccb33e4447eb8606d5d5cd5958298472b3ea9 +MPFR.v4.2.0+1.aarch64-linux-gnu.tar.gz/md5/ade253017d195de694780c32f9161dcf +MPFR.v4.2.0+1.aarch64-linux-gnu.tar.gz/sha512/1b68de5f8e557b7434c8c1bc016227b58683b56c0977b763422ea85a673bec446fcfee3a4f69e1d4689abb9bb6bf47f2a50fbb56ecac6a9d40096e66bd0f2080 +MPFR.v4.2.0+1.aarch64-linux-musl.tar.gz/md5/7dbd121c7192ccaf7191de5ab8d91afb +MPFR.v4.2.0+1.aarch64-linux-musl.tar.gz/sha512/8614e3cb28491b24a0ec5060b44abaf264b61c91ddd29d70105ff583bd3112cff1b9bd5ed45e39f186265333982d5eeb8bf35fedc3b51b2a009cc7a51046b50b +MPFR.v4.2.0+1.armv6l-linux-gnueabihf.tar.gz/md5/adb2b7fdf111c8b19df1516cfb278bb1 +MPFR.v4.2.0+1.armv6l-linux-gnueabihf.tar.gz/sha512/0c47aeffd05a194802f6c4e0e2779d56fb46007e6c3e145ee6992854a21a317a9d51512c59a0ce4ddcd314c387945225c6557d6c2ab6961ae4848875e8983de8 +MPFR.v4.2.0+1.armv6l-linux-musleabihf.tar.gz/md5/c30358bdeffcff65ba9be906cd35889b +MPFR.v4.2.0+1.armv6l-linux-musleabihf.tar.gz/sha512/2857ec27ae2d53a451d62dd241ce9b43f7ee182bee180ecd9ad92c907c66d0b0ab2d1ea3b20fe61cc176ae44ecbe6041305cc8a9343b396c9cb54dd77a1e2868 +MPFR.v4.2.0+1.armv7l-linux-gnueabihf.tar.gz/md5/a1e30436bade2150c9dc924177f0c321 +MPFR.v4.2.0+1.armv7l-linux-gnueabihf.tar.gz/sha512/d2f4662c494fefda66847e7a085edda3ce396383aafb4e17fc2e176191b0f530541726c261cac3467f13136e8ec728c8a7cf0e352f3e9ebf960d153cbfe766b8 +MPFR.v4.2.0+1.armv7l-linux-musleabihf.tar.gz/md5/857e3c82804e7c853d21603f18caa715 +MPFR.v4.2.0+1.armv7l-linux-musleabihf.tar.gz/sha512/86cf3e940fd66820b5269e9aa2a49c3fc3077857bec037a08e0d301b0bf3cc5c79ac331cc6370d852e20f4acf8f601c49d5dbe24e96652e4411b3f33a11e3f45 +MPFR.v4.2.0+1.i686-linux-gnu.tar.gz/md5/5a432be79a112e67e970980f4bde13a0 +MPFR.v4.2.0+1.i686-linux-gnu.tar.gz/sha512/94198b23ac94dcb9dca95938a46b9899c3ef329bafbb13b32076cd3415b89f11908632c7c07e90549c01bd9ed7fc9a002dae07a645f85b8509234c49be729621 +MPFR.v4.2.0+1.i686-linux-musl.tar.gz/md5/4ce71dc250c2469f844a02c6ee6571a1 +MPFR.v4.2.0+1.i686-linux-musl.tar.gz/sha512/134b67b23de75ab172594cd0fac55b5c265730bfea195978698e3e6fbc47d65617652bd72d90ba092ed1bac4c29d5b2c109df5d8dc60b5d8f91159fd58575b67 +MPFR.v4.2.0+1.i686-w64-mingw32.tar.gz/md5/be7239432e8a26c59e2d418d310bd6e3 +MPFR.v4.2.0+1.i686-w64-mingw32.tar.gz/sha512/3144d84d41996fc19bfc9ed4f36755838470e17dce79895b37d93e32ae1cb1da428f2136948f939b19548d7dd62830ae43c434f88efbe192ed3184bae2df5970 +MPFR.v4.2.0+1.powerpc64le-linux-gnu.tar.gz/md5/d818894054b38232ba02ee0e129f6fe0 +MPFR.v4.2.0+1.powerpc64le-linux-gnu.tar.gz/sha512/0e73ca926f3e06466d1899f0b3e9ae4abe15102804dce6716ce23154344a571773c40d276f0038a0ae4e626799867ee715428e1d961334a01ad3091745367e8e +MPFR.v4.2.0+1.x86_64-apple-darwin.tar.gz/md5/9652148df4e771be39713c4f43d3ff61 +MPFR.v4.2.0+1.x86_64-apple-darwin.tar.gz/sha512/91a0219fd1880dfa90d196fa403f4e1df0347ced58a4772492196b94476f346d80696885a4f3520424494bc09679cca0c0ccf2f6e9247d60b52ebdf564485e72 +MPFR.v4.2.0+1.x86_64-linux-gnu.tar.gz/md5/4de39327a792be708119ac7b43957628 +MPFR.v4.2.0+1.x86_64-linux-gnu.tar.gz/sha512/447b59d5589a8517061627668e8baed4366408cacc9d8e063528b9b795de6d27e4005844578310185f03f568f4948bc4a794624235875fb61b6187264b6f483b +MPFR.v4.2.0+1.x86_64-linux-musl.tar.gz/md5/f9b8c3c094b339341b19828cc5e1d47c +MPFR.v4.2.0+1.x86_64-linux-musl.tar.gz/sha512/c661e7c5bded3bdf11b2bd5e5ef4ad8e446934d9b82dfe26f0be1b83cea98d7e56e0903bfc1075f91c8d23401cc6b3b722f2d60f46d73cab884e81fe518aba27 +MPFR.v4.2.0+1.x86_64-unknown-freebsd.tar.gz/md5/e402dceae753abbdd8b11f3c8d96e0dd +MPFR.v4.2.0+1.x86_64-unknown-freebsd.tar.gz/sha512/235f001f3b0101a6bafaeb45fb49d2992549b6c2f42a4e7ba38e1fa8c59246fe7463598e7cfda5ead50c9805dda0b82a23b5ae2af4ec993bb771611163e58907 +MPFR.v4.2.0+1.x86_64-w64-mingw32.tar.gz/md5/c5bbd2217060491e2773bdd84b055e5c +MPFR.v4.2.0+1.x86_64-w64-mingw32.tar.gz/sha512/74b059b22990ab79f243284687f571f47447457ac2c1cb4c4548ea1f3d8ea01b7466281f48429cb39e2d11394fb86650bfada7acab639c6537a143a95bd6e7ca mpfr-4.2.0.tar.bz2/md5/f8c66d737283fd35f9fe433fb419b05f mpfr-4.2.0.tar.bz2/sha512/cb2a9314b94e34a4ea49ce2619802e9420c982e55258a4bc423f802740632646a3d420e7fcf373b19618385b8b2b412abfa127e8f473053863424cac233893c0 diff --git a/deps/checksums/nghttp2 b/deps/checksums/nghttp2 index 6113b23d68c14..66ae3cbf34c0e 100644 --- a/deps/checksums/nghttp2 +++ b/deps/checksums/nghttp2 @@ -1,34 +1,34 @@ nghttp2-1.52.0.tar.bz2/md5/bde5874bd8e7e8be3512a621de27b9d5 nghttp2-1.52.0.tar.bz2/sha512/019ec7a904d1baf8755ffcea0b38acf45ea9c6829d989a530ab35807338ba78d3328b86eebb3106b8372b7a8c51b466974d423e0cd786b6d6d020f0840c160bf -nghttp2.v1.52.0+0.aarch64-apple-darwin.tar.gz/md5/e3d9e07029e184cc55b7e0c4d2e27c7f -nghttp2.v1.52.0+0.aarch64-apple-darwin.tar.gz/sha512/cd098db984f751b00d2cc99d7f7eba0fa830ba178dd85a9dfa679a591e62d57364dcfd74e6a55ef513a0436a8e520b1a5474d4bfa9a8bdcd70e398482b7c9985 -nghttp2.v1.52.0+0.aarch64-linux-gnu.tar.gz/md5/73fe75f3cfa2bd3e804ea39a4eb884a9 -nghttp2.v1.52.0+0.aarch64-linux-gnu.tar.gz/sha512/71f4b2a23ba148b66432797b0db954dbd98fc900045d4572f488b43779aae125f71929e5bba6bbadd30c7998a133c5e5beb70888968bf3b01bb5fe9c9ea0e451 -nghttp2.v1.52.0+0.aarch64-linux-musl.tar.gz/md5/736a24a7eee567851a965558e31489fb -nghttp2.v1.52.0+0.aarch64-linux-musl.tar.gz/sha512/ab36182b04a590b092fae9e3a912a87467e8b01ad40a628a1d2e52910ee513ab327d5d2836df598d5aa8203f60a605d19d0b9636eb35d12a84a1c9d87124604b -nghttp2.v1.52.0+0.armv6l-linux-gnueabihf.tar.gz/md5/56fd32e8d77d4c9d9e2355565f4db19b -nghttp2.v1.52.0+0.armv6l-linux-gnueabihf.tar.gz/sha512/85718e0e5cee35d91a8684ea33d8f965bb30d62dbd6b74a574a2fbc4c1027b1ef23ef68f1dec3f037fa6c5739287329567df9591a69f8f23b23fab2516a0b644 -nghttp2.v1.52.0+0.armv6l-linux-musleabihf.tar.gz/md5/283273d3bf4d53b56d12ef6af2e72f20 -nghttp2.v1.52.0+0.armv6l-linux-musleabihf.tar.gz/sha512/5c1d92cbf5f2f4e1ceb4ee13634c0bceb6ca28abaf9d87cc673f264d274bb96aa095648295e9aa76f86eb0890a426f47c0b942e72610daf722ed8e86b5f0df69 -nghttp2.v1.52.0+0.armv7l-linux-gnueabihf.tar.gz/md5/d7ae84e5365759a42d0fe0360f679b61 -nghttp2.v1.52.0+0.armv7l-linux-gnueabihf.tar.gz/sha512/63212e3ad94d2bc54ca9ebd452d8de8e67aa53c03a3b3033d36da765303e714d8d5c24156ea4fb985acc72fe52e2977e8e8a658cdd9409bd41ecf401c08c1aee -nghttp2.v1.52.0+0.armv7l-linux-musleabihf.tar.gz/md5/a6ad0f25f43b7f1832faeaaadf683ed4 -nghttp2.v1.52.0+0.armv7l-linux-musleabihf.tar.gz/sha512/64b9075c0d819288345d53c5ce88b360d2ca4d24c3d2e81fb53c55f86054b1a3e95d7831b363a4100965cdbf479268a5993d66ef59089a219a97b4151d8fef60 -nghttp2.v1.52.0+0.i686-linux-gnu.tar.gz/md5/9781f6eeb4d24a291d6737e59e74edc1 -nghttp2.v1.52.0+0.i686-linux-gnu.tar.gz/sha512/2b542cb67e78993ef881694dc50c980b57db3761c5f4e11c381afb1b31d1fb8ab0a8b20e1279303a602c07912f21e8ef9d732366b76ab3f356a74b444a5dc78c -nghttp2.v1.52.0+0.i686-linux-musl.tar.gz/md5/08603b9364179ab4cbe0637b9b1b63b5 -nghttp2.v1.52.0+0.i686-linux-musl.tar.gz/sha512/0a5b79709482548c6a713843b670695b4b13d2b219b592d029719da0b4187fe884798fb44e2c511c300f02bab03f2b0b289d49d6256e3ce0b9602a66ea2382bd -nghttp2.v1.52.0+0.i686-w64-mingw32.tar.gz/md5/1abdf0cad466ed0ca0da137809999d8e -nghttp2.v1.52.0+0.i686-w64-mingw32.tar.gz/sha512/04680895ead989fda56b284d8963e7ca31680492c8f77f4c6bd7ca03b9a66ee7529b78cf35e07b2e106f43c9aa543dffd4081b034339803ba95021293d3df997 -nghttp2.v1.52.0+0.powerpc64le-linux-gnu.tar.gz/md5/ae411e40e24cb3f3b07fe8de211b58c6 -nghttp2.v1.52.0+0.powerpc64le-linux-gnu.tar.gz/sha512/7433502d76646e5761ea2707fa65ea5a412c513c70908a4d9ceb504f08121b1f39bcff984543370c221814785b7064f85dedc777a22df5e30a64a64e510e0978 -nghttp2.v1.52.0+0.x86_64-apple-darwin.tar.gz/md5/59f0de0affaa17898e837b5074de68fc -nghttp2.v1.52.0+0.x86_64-apple-darwin.tar.gz/sha512/e639c813373b17d95220640ec2a568e9731cfc32df826610357ec9ff8e9d7e7abe10291140eaeb9342ae69215798bf3f999db7647c23efb4f815b54f4da9cfe4 -nghttp2.v1.52.0+0.x86_64-linux-gnu.tar.gz/md5/6bc8501392d47b349c7463e984dc5909 -nghttp2.v1.52.0+0.x86_64-linux-gnu.tar.gz/sha512/522cc2a8464ee5770c01b83a6b4ecbbcce322efffbd738f7c907643fe85342e785bbc805028d41c2b7404d6241168d1ab37a9db15018623c265b53905bcf060f -nghttp2.v1.52.0+0.x86_64-linux-musl.tar.gz/md5/725a6adc23880b28303017597b974535 -nghttp2.v1.52.0+0.x86_64-linux-musl.tar.gz/sha512/ede5a34b7f71310e4c3cd99b9b61b2453db5dc8117675de12adb1e68c9283cdf821614f49f4d04bdd3b0f17d51a52972ec1e226d0dbdc5462b1a4a1fcc9f39e7 -nghttp2.v1.52.0+0.x86_64-unknown-freebsd.tar.gz/md5/a2b89913c1057ff67e7be6086619a65f -nghttp2.v1.52.0+0.x86_64-unknown-freebsd.tar.gz/sha512/6b4efd2a0807f19cecf1f1e97b23ade11ed39f651e29586bb21185e17d0c50dcb63e26233ff994bfa934b383468e29f680b1ebe0cc2a2dd09768b14dead399a4 -nghttp2.v1.52.0+0.x86_64-w64-mingw32.tar.gz/md5/e1c8ec6ec2d69b2ac64b114ebf09f8b4 -nghttp2.v1.52.0+0.x86_64-w64-mingw32.tar.gz/sha512/cb43cb138f14717501e852ed388a44d41012e2bb70b6887584b37b4e0f42827d74f17ea85ba4aa0bc09d623dedeef73eee80815c1db2b6858b31251feb0b5580 +nghttp2.v1.52.0+1.aarch64-apple-darwin.tar.gz/md5/e3d9e07029e184cc55b7e0c4d2e27c7f +nghttp2.v1.52.0+1.aarch64-apple-darwin.tar.gz/sha512/cd098db984f751b00d2cc99d7f7eba0fa830ba178dd85a9dfa679a591e62d57364dcfd74e6a55ef513a0436a8e520b1a5474d4bfa9a8bdcd70e398482b7c9985 +nghttp2.v1.52.0+1.aarch64-linux-gnu.tar.gz/md5/73fe75f3cfa2bd3e804ea39a4eb884a9 +nghttp2.v1.52.0+1.aarch64-linux-gnu.tar.gz/sha512/71f4b2a23ba148b66432797b0db954dbd98fc900045d4572f488b43779aae125f71929e5bba6bbadd30c7998a133c5e5beb70888968bf3b01bb5fe9c9ea0e451 +nghttp2.v1.52.0+1.aarch64-linux-musl.tar.gz/md5/736a24a7eee567851a965558e31489fb +nghttp2.v1.52.0+1.aarch64-linux-musl.tar.gz/sha512/ab36182b04a590b092fae9e3a912a87467e8b01ad40a628a1d2e52910ee513ab327d5d2836df598d5aa8203f60a605d19d0b9636eb35d12a84a1c9d87124604b +nghttp2.v1.52.0+1.armv6l-linux-gnueabihf.tar.gz/md5/56fd32e8d77d4c9d9e2355565f4db19b +nghttp2.v1.52.0+1.armv6l-linux-gnueabihf.tar.gz/sha512/85718e0e5cee35d91a8684ea33d8f965bb30d62dbd6b74a574a2fbc4c1027b1ef23ef68f1dec3f037fa6c5739287329567df9591a69f8f23b23fab2516a0b644 +nghttp2.v1.52.0+1.armv6l-linux-musleabihf.tar.gz/md5/283273d3bf4d53b56d12ef6af2e72f20 +nghttp2.v1.52.0+1.armv6l-linux-musleabihf.tar.gz/sha512/5c1d92cbf5f2f4e1ceb4ee13634c0bceb6ca28abaf9d87cc673f264d274bb96aa095648295e9aa76f86eb0890a426f47c0b942e72610daf722ed8e86b5f0df69 +nghttp2.v1.52.0+1.armv7l-linux-gnueabihf.tar.gz/md5/d7ae84e5365759a42d0fe0360f679b61 +nghttp2.v1.52.0+1.armv7l-linux-gnueabihf.tar.gz/sha512/63212e3ad94d2bc54ca9ebd452d8de8e67aa53c03a3b3033d36da765303e714d8d5c24156ea4fb985acc72fe52e2977e8e8a658cdd9409bd41ecf401c08c1aee +nghttp2.v1.52.0+1.armv7l-linux-musleabihf.tar.gz/md5/a6ad0f25f43b7f1832faeaaadf683ed4 +nghttp2.v1.52.0+1.armv7l-linux-musleabihf.tar.gz/sha512/64b9075c0d819288345d53c5ce88b360d2ca4d24c3d2e81fb53c55f86054b1a3e95d7831b363a4100965cdbf479268a5993d66ef59089a219a97b4151d8fef60 +nghttp2.v1.52.0+1.i686-linux-gnu.tar.gz/md5/9781f6eeb4d24a291d6737e59e74edc1 +nghttp2.v1.52.0+1.i686-linux-gnu.tar.gz/sha512/2b542cb67e78993ef881694dc50c980b57db3761c5f4e11c381afb1b31d1fb8ab0a8b20e1279303a602c07912f21e8ef9d732366b76ab3f356a74b444a5dc78c +nghttp2.v1.52.0+1.i686-linux-musl.tar.gz/md5/08603b9364179ab4cbe0637b9b1b63b5 +nghttp2.v1.52.0+1.i686-linux-musl.tar.gz/sha512/0a5b79709482548c6a713843b670695b4b13d2b219b592d029719da0b4187fe884798fb44e2c511c300f02bab03f2b0b289d49d6256e3ce0b9602a66ea2382bd +nghttp2.v1.52.0+1.i686-w64-mingw32.tar.gz/md5/1abdf0cad466ed0ca0da137809999d8e +nghttp2.v1.52.0+1.i686-w64-mingw32.tar.gz/sha512/04680895ead989fda56b284d8963e7ca31680492c8f77f4c6bd7ca03b9a66ee7529b78cf35e07b2e106f43c9aa543dffd4081b034339803ba95021293d3df997 +nghttp2.v1.52.0+1.powerpc64le-linux-gnu.tar.gz/md5/ae411e40e24cb3f3b07fe8de211b58c6 +nghttp2.v1.52.0+1.powerpc64le-linux-gnu.tar.gz/sha512/7433502d76646e5761ea2707fa65ea5a412c513c70908a4d9ceb504f08121b1f39bcff984543370c221814785b7064f85dedc777a22df5e30a64a64e510e0978 +nghttp2.v1.52.0+1.x86_64-apple-darwin.tar.gz/md5/59f0de0affaa17898e837b5074de68fc +nghttp2.v1.52.0+1.x86_64-apple-darwin.tar.gz/sha512/e639c813373b17d95220640ec2a568e9731cfc32df826610357ec9ff8e9d7e7abe10291140eaeb9342ae69215798bf3f999db7647c23efb4f815b54f4da9cfe4 +nghttp2.v1.52.0+1.x86_64-linux-gnu.tar.gz/md5/6bc8501392d47b349c7463e984dc5909 +nghttp2.v1.52.0+1.x86_64-linux-gnu.tar.gz/sha512/522cc2a8464ee5770c01b83a6b4ecbbcce322efffbd738f7c907643fe85342e785bbc805028d41c2b7404d6241168d1ab37a9db15018623c265b53905bcf060f +nghttp2.v1.52.0+1.x86_64-linux-musl.tar.gz/md5/725a6adc23880b28303017597b974535 +nghttp2.v1.52.0+1.x86_64-linux-musl.tar.gz/sha512/ede5a34b7f71310e4c3cd99b9b61b2453db5dc8117675de12adb1e68c9283cdf821614f49f4d04bdd3b0f17d51a52972ec1e226d0dbdc5462b1a4a1fcc9f39e7 +nghttp2.v1.52.0+1.x86_64-unknown-freebsd.tar.gz/md5/02e68f367dd5f2ceac3a619da402cbb4 +nghttp2.v1.52.0+1.x86_64-unknown-freebsd.tar.gz/sha512/d0522c4f40471cdfc0768863f9b0e97b453b2e0c850417811d4f264fd167622493141beea66a8668b15dc6b9b4ae42a38017b9f31ed59c9205701188df3d84b9 +nghttp2.v1.52.0+1.x86_64-w64-mingw32.tar.gz/md5/e1c8ec6ec2d69b2ac64b114ebf09f8b4 +nghttp2.v1.52.0+1.x86_64-w64-mingw32.tar.gz/sha512/cb43cb138f14717501e852ed388a44d41012e2bb70b6887584b37b4e0f42827d74f17ea85ba4aa0bc09d623dedeef73eee80815c1db2b6858b31251feb0b5580 diff --git a/deps/checksums/objconv b/deps/checksums/objconv index f3dfb0de2ffab..ce20ae4acf76b 100644 --- a/deps/checksums/objconv +++ b/deps/checksums/objconv @@ -1,32 +1,32 @@ -Objconv.v2.49.1+0.aarch64-apple-darwin.tar.gz/md5/bdf95a776cfe782d30f48a41575e1414 -Objconv.v2.49.1+0.aarch64-apple-darwin.tar.gz/sha512/188b5e25d238a5e2f704c3ba8d2d57d6fe452f9d5c0e26b710ff225086581f906b8de6388c6240bbaa9d395cb58c0a73a67e65cbb8df6be7b98473101db467e0 -Objconv.v2.49.1+0.aarch64-linux-gnu.tar.gz/md5/2c2b88856921c38294a30671d4794dac -Objconv.v2.49.1+0.aarch64-linux-gnu.tar.gz/sha512/2c0e6cf6da02e25386e89c51f5f2d39833b49653b20537c73f7938a4045805d07b0f520661d07332aa1372231d34a3a979ad490bf5eb91fc00fcc20da3e7a9bf -Objconv.v2.49.1+0.aarch64-linux-musl.tar.gz/md5/11f6c06ee0d98b553781367d5404c76e -Objconv.v2.49.1+0.aarch64-linux-musl.tar.gz/sha512/d93a742a08f873f9336f57a28af8a1eeff624d5d9dbcbceba0d58c17a2ee3791b363661af293d08997d701fc22177192e5b5154b827974163c189ad6511ea13a -Objconv.v2.49.1+0.armv6l-linux-gnueabihf.tar.gz/md5/0151be530a0d54376590065cef28666a -Objconv.v2.49.1+0.armv6l-linux-gnueabihf.tar.gz/sha512/cb7cf5b00f211be4194b5b6acf11cc491b5f140d990fd8babc6590649e9864cf07a421e8a87ccdbe0b8720bc6473166837e384202bcbac6cedb2a9bd9c46711b -Objconv.v2.49.1+0.armv6l-linux-musleabihf.tar.gz/md5/390251e8245a3d8d110a1786336663cc -Objconv.v2.49.1+0.armv6l-linux-musleabihf.tar.gz/sha512/b7eb9e4a983e69ca970ce86bf306b7df11bfa8aefdd26cc02841c563ad0b5dddcb47f106fe7a0a420b20ae1d4890e6a8011c0db5a26e3493c80e63eeaadf86b0 -Objconv.v2.49.1+0.armv7l-linux-gnueabihf.tar.gz/md5/5f924d5bc16bac6447e9f2deb943e60f -Objconv.v2.49.1+0.armv7l-linux-gnueabihf.tar.gz/sha512/edaf3881754bc949ef3c60b058cc0cfff7e828d6486ca968940d216852baed5b06544dd48619cf045f3ef87df5ea00389ac3b298a1d4e9489995351e1e1ca952 -Objconv.v2.49.1+0.armv7l-linux-musleabihf.tar.gz/md5/c967a9ed1764d9692e905d879a03f45f -Objconv.v2.49.1+0.armv7l-linux-musleabihf.tar.gz/sha512/08e9397bbd34734c3e9137f64a94a86ec11bc70eaf54811301e7bf782b581ffdcfa041936e29aa0a8ee46203591f8213d6170a7c6ea141a0ab625ac1156dcfbc -Objconv.v2.49.1+0.i686-linux-gnu.tar.gz/md5/a59fd92a1ed62048edb1a1297d615aa7 -Objconv.v2.49.1+0.i686-linux-gnu.tar.gz/sha512/581fa0f5ea37e1802c9845bbc9df0b826fdad5900e712eed8767922e155026011570b4a4b8714430c038fb3c0d47965168a4c33b21bd28cd9080cb036fc9f033 -Objconv.v2.49.1+0.i686-linux-musl.tar.gz/md5/05524b26d550ad8fd045976f395cdf6a -Objconv.v2.49.1+0.i686-linux-musl.tar.gz/sha512/5e6d3b27b80f96a4f1c278f2f8fe0ff1f9bdc2f1df223a7c4d1c235c18dd8eac0b8b74d37defda656142fb2882c1b590bb3e730cfed77e316012eb69b9580b53 -Objconv.v2.49.1+0.i686-w64-mingw32.tar.gz/md5/10e82481a5396b00f568eac690c47e0a -Objconv.v2.49.1+0.i686-w64-mingw32.tar.gz/sha512/27d606acad2cf6789c9888c72887bb6a277c07f7b528fd8fe333f9738caae73e293df76ba9a0af5dceb00b8289bbc523ce235cb0eff0f0031bcf20300b4168cb -Objconv.v2.49.1+0.powerpc64le-linux-gnu.tar.gz/md5/8755aecaacc983e2a9a948eff5c485d9 -Objconv.v2.49.1+0.powerpc64le-linux-gnu.tar.gz/sha512/8b2bf010ff7da164b59df7147cb4904ae6f2913a3095c649e20f4263f77fb92cf8513d9130a345576da2cca4caa30828cc43b9c8ae1870268e3140e0016ad557 -Objconv.v2.49.1+0.x86_64-apple-darwin.tar.gz/md5/0657a0ef9f278718c741da4d72c0952c -Objconv.v2.49.1+0.x86_64-apple-darwin.tar.gz/sha512/ffd9247b02f72830d3b12e075124239ca472503701eef005b7457e21cd10103aaa13520206787818f11e9dcf35a156979e01cf5839dd554bab935ce757f032e0 -Objconv.v2.49.1+0.x86_64-linux-gnu.tar.gz/md5/0e029960584d00dbf8673ec4fcd9eb83 -Objconv.v2.49.1+0.x86_64-linux-gnu.tar.gz/sha512/ae747a84edccbc804239499c10d863c62bd5846b4ab87abab42c832c9fd446065024034d76ddc167d358821f90f8d2241c341232d9dd86cf31601e951e050a6e -Objconv.v2.49.1+0.x86_64-linux-musl.tar.gz/md5/39fc1ec3602dcb6eb2f80448269588fa -Objconv.v2.49.1+0.x86_64-linux-musl.tar.gz/sha512/e86114bf0b0da7297721c56b1cf246f52b9331083e4e73b53a30a1ff031f260a5d6bd97b455669c38af915689a363b99a30ea7ed743ebf49271b95e34bcfd85e -Objconv.v2.49.1+0.x86_64-unknown-freebsd.tar.gz/md5/9d331f32792c394c0d11dc4e6c24ffb0 -Objconv.v2.49.1+0.x86_64-unknown-freebsd.tar.gz/sha512/0c9b7c2f58110b3c8df52d83cbadd5349fb81732acae6786617e72a3150aa9ae8da7afa1e9eb08639f4dd4e7e69f29b882f98e99a8a4404b569c545c904f5523 -Objconv.v2.49.1+0.x86_64-w64-mingw32.tar.gz/md5/c8ef7dd7742e2c9bf2d05d2b0310bb50 -Objconv.v2.49.1+0.x86_64-w64-mingw32.tar.gz/sha512/b47ac1f3a10ee4f958dcda72ac45f35b94fd436498d008642ce53b93ff517c0d4158a72cbb849336dc9d4a16e26021af13e7b6976f83610380cd78cce6a7deb1 +Objconv.v2.53.0+0.aarch64-apple-darwin.tar.gz/md5/ff9f237208e8bb48daa5eb4d18526f24 +Objconv.v2.53.0+0.aarch64-apple-darwin.tar.gz/sha512/5960cc291fd551dc288cba4cfbe9c2448ebb67da72487a52d364419199e91541a427c70d73c610e054b7fe6617c9ca715ee5d3e6e694d49f16331a067bb7df73 +Objconv.v2.53.0+0.aarch64-linux-gnu.tar.gz/md5/e9ead2b4711ff50a9c88272fc5b4f0a5 +Objconv.v2.53.0+0.aarch64-linux-gnu.tar.gz/sha512/9eeab07437e61af46d884d4d3bfa6bf7538c9bd996a8b217748ed70a2d53df25c20235af78d8767106603a3c92955a1f1870533d018d35e55ba8088b14e685cc +Objconv.v2.53.0+0.aarch64-linux-musl.tar.gz/md5/c506fb9e5701a416c2204dd42a0e84b1 +Objconv.v2.53.0+0.aarch64-linux-musl.tar.gz/sha512/b6e2d91cddfe6d8c42d233e9aca1f322a4f4e12480ed2a0d148a327955b4dfcf049cb05e2151bc7a64d46ca3e3507eaae8e77416eb895bac16f394217f3e83ca +Objconv.v2.53.0+0.armv6l-linux-gnueabihf.tar.gz/md5/2f353785310504e7cbed6bc8bad2cc64 +Objconv.v2.53.0+0.armv6l-linux-gnueabihf.tar.gz/sha512/153e595c0385395d90cafd57d08ab1ab0cae9f0376c13f139c9dc6132763cfd19c64e74e8d50f33aa50e74173f3f57f11a11ad0afeef20c2f38c00badd339068 +Objconv.v2.53.0+0.armv6l-linux-musleabihf.tar.gz/md5/a5413f1376abb962de5665cebea77c39 +Objconv.v2.53.0+0.armv6l-linux-musleabihf.tar.gz/sha512/78e6778bdc4d31905a585ecdf87c499f7befad4ee4c46a2d26e6b1e9330d9175d3def536291a4bea004dd65cf95b8b751557afc40a1513a786502000c5a3769e +Objconv.v2.53.0+0.armv7l-linux-gnueabihf.tar.gz/md5/9008ac2cbe75388fcd34cbaf523512f3 +Objconv.v2.53.0+0.armv7l-linux-gnueabihf.tar.gz/sha512/ba877ea596965ab1ec419cc46e59d9010a96c52fba8036374e9df78157812926a34ceb3d29e997a5a27d38143d404343cbcf15c1e1b136835235b9a3c8543c77 +Objconv.v2.53.0+0.armv7l-linux-musleabihf.tar.gz/md5/86d14f65fb4f3c0dc0848a9d683f0fa9 +Objconv.v2.53.0+0.armv7l-linux-musleabihf.tar.gz/sha512/bd3a29982a16437936481b7244d237d9ec8d0cc7d78e50cc8f30c7c3f58475ba7a35e1fc0f1d1540d780b2573cfc2de2e59c8dd8d1f90de7b7fbb81a74f526a6 +Objconv.v2.53.0+0.i686-linux-gnu.tar.gz/md5/d22c35a1b47c64a291903f0ca5acc297 +Objconv.v2.53.0+0.i686-linux-gnu.tar.gz/sha512/b431d44839a628b75c189c5188f15462eeaf666a868e33c56e1c5f41041f1903e6daa3c4538b95a96a26c5842501a0055c7f2f12585e4f341ee2c8fb452855de +Objconv.v2.53.0+0.i686-linux-musl.tar.gz/md5/dd583694f915309c8e7868cebe27f20d +Objconv.v2.53.0+0.i686-linux-musl.tar.gz/sha512/279f36b7d1bda71ac37a1cd9c9e7776808499066fde94b456b000c187afa173fe7858894bcb4666831af2948c4363a15955740da77c01d63f6007627b61c1c0b +Objconv.v2.53.0+0.i686-w64-mingw32.tar.gz/md5/42c7264dac94b87556dfb2d469c5c60a +Objconv.v2.53.0+0.i686-w64-mingw32.tar.gz/sha512/a7eda3e7c5b3b19321d49264c6a7c35c526955ea7fc6b0201062f7e136eea6799a4d9269d78bd84770146d79fa3e49c1251a4568b5ffd1675c952e9544566553 +Objconv.v2.53.0+0.powerpc64le-linux-gnu.tar.gz/md5/33cbf415f36c0be59f34bc2e9b4c1226 +Objconv.v2.53.0+0.powerpc64le-linux-gnu.tar.gz/sha512/71cb373ade619cd431d64a8e097ff18e4979b39cff8b6be71b6ce77dc2dc4f663b25b1ddcd74e8d60834574cc3a5ed512618e6205df757d1f9752d78e35a0ac8 +Objconv.v2.53.0+0.x86_64-apple-darwin.tar.gz/md5/036603ce6fe365ccb838aebb6479ac58 +Objconv.v2.53.0+0.x86_64-apple-darwin.tar.gz/sha512/86f2f3e551bdc0595dd096925115671558970b4750c13d1ceec28fa47a3f61459cb1c4c57a5f930670035136f8cbd6073b1aced0dcc245f3a7815c26f14ad6c0 +Objconv.v2.53.0+0.x86_64-linux-gnu.tar.gz/md5/6a3ed48d4c8181934c02de60902b9f4f +Objconv.v2.53.0+0.x86_64-linux-gnu.tar.gz/sha512/94f306e8053ac94d9c679a403fcecd0a5d3bbc7f62409886cdf45342fba3fff7c22a30679aec0bd9d76262a3ae753b8a68c243b32e5966f83557bde5d988d80c +Objconv.v2.53.0+0.x86_64-linux-musl.tar.gz/md5/093aa158739b90fd5f5583868b5c898e +Objconv.v2.53.0+0.x86_64-linux-musl.tar.gz/sha512/715ea896c0cfbd2505d1ae39f2d8c6950d56f0b262c108a0e378163a209e4a1581e2d7d1f3a7677d489baa21dea9e46695415edf7615ec66078c1a7978cc578e +Objconv.v2.53.0+0.x86_64-unknown-freebsd.tar.gz/md5/a56c36c004cfb70f7feb7be0b681af19 +Objconv.v2.53.0+0.x86_64-unknown-freebsd.tar.gz/sha512/ea40c235145b00b730ea81e946a0be247a10950a564a3ac33a493c0fbcaa866f039ccc47b852d436b13fe3c52b7436f4903621a8c91e48d947cddfda42e6a482 +Objconv.v2.53.0+0.x86_64-w64-mingw32.tar.gz/md5/291a044f511f9529e9e2425aef8a7c16 +Objconv.v2.53.0+0.x86_64-w64-mingw32.tar.gz/sha512/4c43ed6842f53ab6c081bff2392e65b5295acffc7940caaa8d36a2f845368d37aa40259d0825f0ff08fad2ba58d5accd78dd96d51c8992396571fb96c81b1555 diff --git a/deps/checksums/openlibm b/deps/checksums/openlibm index 4c8ad913fc58d..452abb133c671 100644 --- a/deps/checksums/openlibm +++ b/deps/checksums/openlibm @@ -1,34 +1,34 @@ -OpenLibm.v0.8.1+0.aarch64-apple-darwin.tar.gz/md5/cbb86fb881fce48d837e40017272f7f5 -OpenLibm.v0.8.1+0.aarch64-apple-darwin.tar.gz/sha512/3fc7753ce12e0012b42e469084351ec97e20c1761b50add48af4b4d92ba61b9db4a015243f31f7ec9bf322a9a4e098cffad31cd4501424568bb49fe973b63a35 -OpenLibm.v0.8.1+0.aarch64-linux-gnu.tar.gz/md5/416b30b38b91a76d1613753ec85ac4a9 -OpenLibm.v0.8.1+0.aarch64-linux-gnu.tar.gz/sha512/9ee5821ee83cd5e29c4f338e0076fe3e3705925e8556abe95f0356151ae93f23be0bbcde42cbf6b382e8c29a201959cb31be349ef3d1447e2d19a414a476fc55 -OpenLibm.v0.8.1+0.aarch64-linux-musl.tar.gz/md5/b170fc0058803377d7c4d7d0c9e4b954 -OpenLibm.v0.8.1+0.aarch64-linux-musl.tar.gz/sha512/be311888953887745a2d64eb3d1d5755e2f37e9f46558c6f6722520c503ee23d3470e97d7bf28f0a03915a398c31080e789d6e1287a2b743b6fd3f37b3a2911a -OpenLibm.v0.8.1+0.armv6l-linux-gnueabihf.tar.gz/md5/63f60d2f13acc6fd2ba3854a8ecf2b0b -OpenLibm.v0.8.1+0.armv6l-linux-gnueabihf.tar.gz/sha512/1853a8346f460cf7e26efefb27c36440976e40f000aefc22a81bb69bb25d07675a19f4b64c4dea8fedaaae76925467739cee8cd5743689ae55512e57dab54286 -OpenLibm.v0.8.1+0.armv6l-linux-musleabihf.tar.gz/md5/5b410e9611b188f34fcc5314c45d2297 -OpenLibm.v0.8.1+0.armv6l-linux-musleabihf.tar.gz/sha512/ecb2fd14728c40c7e3d2cf7c4f1dc06568f1dacc60677218ec59011cd913cab173c33db1c402a8b27b8f0556ca66667ebc033130222617cb4f5d9d8cfe7431ed -OpenLibm.v0.8.1+0.armv7l-linux-gnueabihf.tar.gz/md5/0fc3732640b6bfd52759e74be75e2290 -OpenLibm.v0.8.1+0.armv7l-linux-gnueabihf.tar.gz/sha512/81214ec825d33e37c9e889bea054f3aa72466e5fa585356247ef0ec4653b548f7836219092a8c7f0bc3c694e97582012cd026325e0b1c1a6fc113c461dfe49f7 -OpenLibm.v0.8.1+0.armv7l-linux-musleabihf.tar.gz/md5/7ba7a7f9461b43b8ac622b9fa9c0489a -OpenLibm.v0.8.1+0.armv7l-linux-musleabihf.tar.gz/sha512/e088f806f9fad70b2e6ea28a39ffeb083b4c1c215b1cac73e848a06cb19efcf3ff100e4d401ec2a0ed225ecba6dad115f5d245a612a39c90334a753bc79947e6 -OpenLibm.v0.8.1+0.i686-linux-gnu.tar.gz/md5/4a2eb776682551a25bf1d27e9d8b645e -OpenLibm.v0.8.1+0.i686-linux-gnu.tar.gz/sha512/716808c4a2a8c06439072a39db1f4b93a171a2f42e9677cb7f3eba04f204bc181f96c915ad8c74141952eb783cd82ecf3804ea60d830e3f5d9b88bfb4924223d -OpenLibm.v0.8.1+0.i686-linux-musl.tar.gz/md5/1acd5b790b7b8d1c40c6b094b99fcdb6 -OpenLibm.v0.8.1+0.i686-linux-musl.tar.gz/sha512/22c28a5c5e9542ddfb23297523b56e0a964bc322d252d5681e763c28d4c876dd683d3456297e385f560ab4cf378e5848047aec6cc934850fd0a4df0ea6967b44 -OpenLibm.v0.8.1+0.i686-w64-mingw32.tar.gz/md5/8e974b3bafa9dfe1cdba1d31049d7e85 -OpenLibm.v0.8.1+0.i686-w64-mingw32.tar.gz/sha512/df9e5250dea575341ec1a40d94e3485701690542bc7dfede0504c04fdb7f3fd272d88debdd6546d8644563fb244373b5f4e214da1d0b0133db5b66cdafbf441f -OpenLibm.v0.8.1+0.powerpc64le-linux-gnu.tar.gz/md5/83f68736e911b7c700bf7a8c79cc48a8 -OpenLibm.v0.8.1+0.powerpc64le-linux-gnu.tar.gz/sha512/b879f81d0c02f457310efc08269a7012fe6ed479d33bf79830e48dafce03976425566c5a210ed4833e106848eda038ae531f0c956971b3139c60002a5b1c1325 -OpenLibm.v0.8.1+0.x86_64-apple-darwin.tar.gz/md5/2cd7845dc3d5558cf77e8b6faac4a659 -OpenLibm.v0.8.1+0.x86_64-apple-darwin.tar.gz/sha512/f894c5b7541ebd4f652cb0028b2d367db6af13258d5a42722f19e0ac3a6bc438453e5c2bd17d8b491288c93796ba638c4a3a247f9d33abbac392a6db9169cbcb -OpenLibm.v0.8.1+0.x86_64-linux-gnu.tar.gz/md5/eda96ecab33dfb9a015375813c41d14a -OpenLibm.v0.8.1+0.x86_64-linux-gnu.tar.gz/sha512/641d35dfde15b0868c4ede7d2210ac136e4ca7bf7a969623cbecd792eb09e60824601a6178dbc2c8e4d49523aa105956b5f63566b789003ec736164a8fe5df4b -OpenLibm.v0.8.1+0.x86_64-linux-musl.tar.gz/md5/8d8e6ffa1ad9574bd8ead8b99754e122 -OpenLibm.v0.8.1+0.x86_64-linux-musl.tar.gz/sha512/a66102e69688fdda1c1a51ab07697db0e183b6def21dfed411cd6a92e6c23b22eacd6cccab16e43b86e318d967f81d43dc26bc778746186965bc68c65c7e87a0 -OpenLibm.v0.8.1+0.x86_64-unknown-freebsd.tar.gz/md5/7634eb65eea08ab48a9224295071f058 -OpenLibm.v0.8.1+0.x86_64-unknown-freebsd.tar.gz/sha512/f2c0a6d5113de911aeb516308b1d0ea71a1d61f2ce54c367670a6567444e0030babd66546489e288891678aa6613f40fd0182261de3244f1aed1085c2a32e81c -OpenLibm.v0.8.1+0.x86_64-w64-mingw32.tar.gz/md5/9de4a420caab2cb53ddf86eb0241885a -OpenLibm.v0.8.1+0.x86_64-w64-mingw32.tar.gz/sha512/928675df75d6c6f1e1acc46a2bb554ef120d74671d23e8682adbe05732f668401eaebd98d534e54f7f34e1657d2e1b1d19e18b3822faa891cdf06afd0c3ee56b +OpenLibm.v0.8.1+2.aarch64-apple-darwin.tar.gz/md5/9ce53048e8944f6edff44f75b731229c +OpenLibm.v0.8.1+2.aarch64-apple-darwin.tar.gz/sha512/3a14e28db0656b47a473e19ca0afae1f8b72dd01e108d6b6cb52dc24fc03e4a43db867616b375369e82177bb274fbcfeb8f24b488ee68871e8da8463e9090adf +OpenLibm.v0.8.1+2.aarch64-linux-gnu.tar.gz/md5/8b284fe2905c3e5315291f5e5f27ca8b +OpenLibm.v0.8.1+2.aarch64-linux-gnu.tar.gz/sha512/d326181349ee7f74b73611cd71f933e93c38c11d6db9a1cd4fee49d1ac06c7f244f4cfc6ab373dd52909064117405b3d4fa39e5c626464c066ab53f1cd26dc4a +OpenLibm.v0.8.1+2.aarch64-linux-musl.tar.gz/md5/dc40ad1f2e53a3b914dcca364b6ead77 +OpenLibm.v0.8.1+2.aarch64-linux-musl.tar.gz/sha512/3779d8cd23c5987a15666e2160e40f5a6fc5e7d350c9e3c86d8af8c99515a8cb1f3b5e8438dae0f3cf0b5e1cb2c0cb74c5dd5a06c65e0c2a2382d86dacfaf9fb +OpenLibm.v0.8.1+2.armv6l-linux-gnueabihf.tar.gz/md5/7c9e56f6124b85e7dee74601f8c16abd +OpenLibm.v0.8.1+2.armv6l-linux-gnueabihf.tar.gz/sha512/a78e15177992025462d334a9d5b10b9c7f6710d77ac36056fe7a1cc3bc3fada87f16696366578cfa5f325d5f746639c41c5d80b4885814014d29556d63bd4c7c +OpenLibm.v0.8.1+2.armv6l-linux-musleabihf.tar.gz/md5/78d9e3178fdf93a35f7d2b0b00753dc6 +OpenLibm.v0.8.1+2.armv6l-linux-musleabihf.tar.gz/sha512/ff7b78786f7035eaa08770ddf7d4eb2984595a318c3ac4dfbe4091ca398e00638df2e77bc2ab5fd159defd0927d4fe46b7e824cf055fbae4860bfa12347e8c5b +OpenLibm.v0.8.1+2.armv7l-linux-gnueabihf.tar.gz/md5/7c9e56f6124b85e7dee74601f8c16abd +OpenLibm.v0.8.1+2.armv7l-linux-gnueabihf.tar.gz/sha512/a78e15177992025462d334a9d5b10b9c7f6710d77ac36056fe7a1cc3bc3fada87f16696366578cfa5f325d5f746639c41c5d80b4885814014d29556d63bd4c7c +OpenLibm.v0.8.1+2.armv7l-linux-musleabihf.tar.gz/md5/78d9e3178fdf93a35f7d2b0b00753dc6 +OpenLibm.v0.8.1+2.armv7l-linux-musleabihf.tar.gz/sha512/ff7b78786f7035eaa08770ddf7d4eb2984595a318c3ac4dfbe4091ca398e00638df2e77bc2ab5fd159defd0927d4fe46b7e824cf055fbae4860bfa12347e8c5b +OpenLibm.v0.8.1+2.i686-linux-gnu.tar.gz/md5/e9942dca99f024ae27876ea5ab1592a9 +OpenLibm.v0.8.1+2.i686-linux-gnu.tar.gz/sha512/406e39894a643bf99c493585fa631800bbbcd6c36aaa9e677de772f7ceaed93b462fdf797235174e22baf2f34c26527f400e282061954b34f05b389acaba1e29 +OpenLibm.v0.8.1+2.i686-linux-musl.tar.gz/md5/0037f2e2113282d49967eba72f215c4b +OpenLibm.v0.8.1+2.i686-linux-musl.tar.gz/sha512/96666332a814232084340791384505acf964064dba4f7b62db51a7ae4416237decb40318dc07b9a041547fd4ff77f204f42bc5c7f029e590af1ee1dd6196d843 +OpenLibm.v0.8.1+2.i686-w64-mingw32.tar.gz/md5/73193f2e5149d07008902adfbf1b74b2 +OpenLibm.v0.8.1+2.i686-w64-mingw32.tar.gz/sha512/e8202b59b8f922bcc908b8b8e6687a674faa701689f5c6175d83fea0bcc5d73f74bed37660e60406f37873dab1d8489e0fd1506294791adfa61a069555eababf +OpenLibm.v0.8.1+2.powerpc64le-linux-gnu.tar.gz/md5/01997fb48464f94f59f4708bd26eabc3 +OpenLibm.v0.8.1+2.powerpc64le-linux-gnu.tar.gz/sha512/1e1d8901fd3aab0948be5c387b8d5bd0db12766fe00bf800ee3100aa0d5973c7aa03ef9c9b4e34942e5e2b46b64035d7f8d7b070113db031d4611f2a7dd02ca3 +OpenLibm.v0.8.1+2.x86_64-apple-darwin.tar.gz/md5/6cb5a472d6c1446acfca11bb8f7283d6 +OpenLibm.v0.8.1+2.x86_64-apple-darwin.tar.gz/sha512/e52f399002544d94536c3bda742d3cc5b0995929d656eeb0e808954fb800fd8e5cfc0ab57279fbccab44fc33a1207ab345d78e685d519ff7f02cca8f554b9c06 +OpenLibm.v0.8.1+2.x86_64-linux-gnu.tar.gz/md5/e1c7dc61e98d5b8aa68de3462a2620a4 +OpenLibm.v0.8.1+2.x86_64-linux-gnu.tar.gz/sha512/fe6d74a2522d75374b87ac9746d444d75a768e069f24f3fbfc6a140aa9d073fa54e8899861f839e647b9261e660c5f2b5555f52fab39ef84a74685b632e89df9 +OpenLibm.v0.8.1+2.x86_64-linux-musl.tar.gz/md5/5fe8eb59d21732a80f432720419324b3 +OpenLibm.v0.8.1+2.x86_64-linux-musl.tar.gz/sha512/0d1b22ca01eda89caa1832b63b1d7ddafe0fedf5906680e817100e2176cbbae95f576409706a9ea1834bc692b72009f4fd244586df30228d18e626bf25fc040a +OpenLibm.v0.8.1+2.x86_64-unknown-freebsd.tar.gz/md5/2bcdf32fdef91433763e32be029814d9 +OpenLibm.v0.8.1+2.x86_64-unknown-freebsd.tar.gz/sha512/97854736fc8c797abd5a5c331e5795dfa9124ac108a76fc2bcac518f5750a08884717d611bb98222b13387bcd27e1c3f4ec841547859e87fafbbe8c7dcd7381a +OpenLibm.v0.8.1+2.x86_64-w64-mingw32.tar.gz/md5/e22079c6e610c9543cca0fb88495d989 +OpenLibm.v0.8.1+2.x86_64-w64-mingw32.tar.gz/sha512/67081bcf360a62eee3928bd1b9d5302ed29b4a176245721723692d5ef938a828379617847308f26a2c7bc0cb2d0dce129d4b8c65c0446c611126894c0aaa5ea8 openlibm-ae2d91698508701c83cab83714d42a1146dccf85.tar.gz/md5/19408d70bf042a109e1c267a53740089 openlibm-ae2d91698508701c83cab83714d42a1146dccf85.tar.gz/sha512/9597fdcbc4af8369e6eecc3f8e86f251661cc64d236578f3ee8a6b39e77a47951446e1a0fe1151513da153e7ed17bf39aa5a36c32153d0d0400232bed2839e22 diff --git a/deps/checksums/p7zip b/deps/checksums/p7zip index b3c24a811a043..3a3986977e3cf 100644 --- a/deps/checksums/p7zip +++ b/deps/checksums/p7zip @@ -1,34 +1,34 @@ -p7zip.v17.4.0+0.aarch64-apple-darwin.tar.gz/md5/af8134ed9c24b99d69e4edb4d5226ca5 -p7zip.v17.4.0+0.aarch64-apple-darwin.tar.gz/sha512/b8bb6aee60a54cca37568af8b2d9baedd892ba0d4918b93bcb29d74189524af7115901f4fabafb1ca58ed17e97c59846fcdfbd460abc81059806802b0a7be840 -p7zip.v17.4.0+0.aarch64-linux-gnu.tar.gz/md5/20abac5ebb99f31742878013c02f96a3 -p7zip.v17.4.0+0.aarch64-linux-gnu.tar.gz/sha512/6d8ebf895b969b1f707d0c23a19db4cd0dee47957d076e6e389395e09404d55bfcb78bb14bb67bb35b93b6a0072f2b4f097d839503d1ccab62b4ce28939dc71d -p7zip.v17.4.0+0.aarch64-linux-musl.tar.gz/md5/185c979c7419b7ded3832c0f5cfd3b77 -p7zip.v17.4.0+0.aarch64-linux-musl.tar.gz/sha512/722e880c9f111738cb4cde84bf62c36892dbefdba625ae2b9e0fae76a7b1eabfa481a9838fbf9667223f19f62b6f09fcfd42b50c2bff7a65af0fae3616250fc7 -p7zip.v17.4.0+0.armv6l-linux-gnueabihf.tar.gz/md5/dceb37181763f86bf12f8ca473cf3403 -p7zip.v17.4.0+0.armv6l-linux-gnueabihf.tar.gz/sha512/51e409bbcd3c54838cb3219b2476c8b45c8340e0a2fd26cced0d8484ae7f51711723e06e9023fce9ae9a1b51b5fb94aba536428ce2a5c5902b38498a0b3c2b50 -p7zip.v17.4.0+0.armv6l-linux-musleabihf.tar.gz/md5/193ecd888787ea03a500d102a7e33afa -p7zip.v17.4.0+0.armv6l-linux-musleabihf.tar.gz/sha512/d525aad33f5ed27dc993f31c6db2996b830716bfac9bc7c49cb462ea3f0b412d0d3267765b9952c85e9c9be31d36d095d55ba89c0fa2c92823d9490372389c95 -p7zip.v17.4.0+0.armv7l-linux-gnueabihf.tar.gz/md5/096f11a7f1af5ff730bb8cfef22e335e -p7zip.v17.4.0+0.armv7l-linux-gnueabihf.tar.gz/sha512/1866ffd0169e0795594aaa70f1af8102ebbd79b3cafaadfb9c6a537dac0cdbb6eb7c31ad5165a975508c1b850744f94b60d9c530d658cdcc5536a474203cff21 -p7zip.v17.4.0+0.armv7l-linux-musleabihf.tar.gz/md5/fef1576982f45d1922582f6f7a7d6665 -p7zip.v17.4.0+0.armv7l-linux-musleabihf.tar.gz/sha512/71061585b32fa1a8e0a403a60c07e9f90586291a9799d7e2d6f7e6ec9f7b0ebf4b45ed080efd87cad82c45f71ec9a14cbcf9134a73bad4f5e3329f23bc6df01a -p7zip.v17.4.0+0.i686-linux-gnu.tar.gz/md5/8818389b3bf00f10c6a39fe0c4a331b4 -p7zip.v17.4.0+0.i686-linux-gnu.tar.gz/sha512/bec2051a258f7e8a762b7cd4324e7b8f00fe5d99d48f05fb3557c41604e8b08af9ab66ab830f4a48086656be41aaf011b2aae0fb530e0ffefec38689f85a3bb5 -p7zip.v17.4.0+0.i686-linux-musl.tar.gz/md5/4ed9c16a65ed1d656aa214013e46eb28 -p7zip.v17.4.0+0.i686-linux-musl.tar.gz/sha512/7a5b3e15d0038bea0de7fc28ce058d7f93b8e04f271e30953a6b52d2b5d71f59d10177033e888a50cf8dfeb4f44bcf3271c9b9d1b28d0122ab2b239decdad446 -p7zip.v17.4.0+0.i686-w64-mingw32.tar.gz/md5/d06cff2ec0b7c8415700587f931ce1ac -p7zip.v17.4.0+0.i686-w64-mingw32.tar.gz/sha512/ed72440f5306a57465a70b00bff33185a83c3e223844a79aa0b0d1fbe30dbd35da75e6188725aa621f5c4574a09527daf1e4893c7c6979ab91b2c09b4979dbcb -p7zip.v17.4.0+0.powerpc64le-linux-gnu.tar.gz/md5/949ca7d111e497b82c9c762e5ac63a6b -p7zip.v17.4.0+0.powerpc64le-linux-gnu.tar.gz/sha512/4842e0d44bf6380100723209596f526181fefe8a81d59c28658d03ea16600e71d010d5c7898b4c943efdd9caaa2301c3fdb0dccb343d631d1734acda1c559f65 -p7zip.v17.4.0+0.x86_64-apple-darwin.tar.gz/md5/2322c7a08f62592ca394a716949008bc -p7zip.v17.4.0+0.x86_64-apple-darwin.tar.gz/sha512/9549f3e1052730ce13414636b32f0d1a9a1ac944a2b622380eac0da144b11fd65d437afe877ba6797d651da9c4ec77f0ebd3e515146caceaa2524829419eda48 -p7zip.v17.4.0+0.x86_64-linux-gnu.tar.gz/md5/a21b12946a62ef3688d5fc965974e8f7 -p7zip.v17.4.0+0.x86_64-linux-gnu.tar.gz/sha512/d32faeac23acf8a023f65350ba1d62bb3d9f904e32570ae03b8fb0a5375758784dd95be8caeecd007cbde40e103854a077e2c817f62afa72491f3b8966deb738 -p7zip.v17.4.0+0.x86_64-linux-musl.tar.gz/md5/c448e872d4ad66beb2d46d9134952f2f -p7zip.v17.4.0+0.x86_64-linux-musl.tar.gz/sha512/92588f4817e145ef655c718dec049e7f43dd93644f43f19cd320643fac5f5b2312837c7a6c3e782e97fd08747311c58ed4657484f8bc778942fc5206ff8ea4e5 -p7zip.v17.4.0+0.x86_64-unknown-freebsd.tar.gz/md5/2cca6259a2eb1b0fea777d566267bf05 -p7zip.v17.4.0+0.x86_64-unknown-freebsd.tar.gz/sha512/92f90e2be4a8b8fcd80a4ceacac8bbab750913526b85f9279f8ee9ed91b77248b5de2d35d0c6241d0ad51fda185f4cb1ead1dcc9d23e2bef35e0b61efe3c3170 -p7zip.v17.4.0+0.x86_64-w64-mingw32.tar.gz/md5/5d272c78d7ffb40da0f333463f3cc098 -p7zip.v17.4.0+0.x86_64-w64-mingw32.tar.gz/sha512/2d999c6df4786cec1bba396b3a651a63740f4b799e9fc11754afd24438076e898daae74b4d3c7072450428e89881991e8884711cd4c349879a00c7aeeb4e1d3e p7zip-17.04.tar.gz/md5/00acfd6be87848231722d2d53f89e4a5 p7zip-17.04.tar.gz/sha512/ad176db5b657b1c39584f6792c47978d94f2f1ccb1cf5bdb0f52ab31a7356b3822f4a922152c4253f4aa7e79166ba052b6592530b7a38f548cd555fe9c008be3 +p7zip.v17.4.0+2.aarch64-apple-darwin.tar.gz/md5/b418adbae6512a13e04407c120ba78e0 +p7zip.v17.4.0+2.aarch64-apple-darwin.tar.gz/sha512/818f7afb0d3ffbff8079f5f4b8e9745a847148ac9cb5a261b6ca2f2f3a1dd722fa93f798645129bc9bc4a48f756bf2e55605791abb394a32635dfaef31f21e70 +p7zip.v17.4.0+2.aarch64-linux-gnu.tar.gz/md5/3f976d6514e6327a9aee4a3f21a25a64 +p7zip.v17.4.0+2.aarch64-linux-gnu.tar.gz/sha512/a4dd8be97c53b864e81aae40e248759f97249fbd6d8c5b91f0ac115a84126cbfc4825ffa3876f5e8b66652b014a78ba04e3ffc1ba1d9c96786b914b1279682c0 +p7zip.v17.4.0+2.aarch64-linux-musl.tar.gz/md5/b31699d7ea671c689fa9194913fbe7ee +p7zip.v17.4.0+2.aarch64-linux-musl.tar.gz/sha512/5c8d95df66055ab8027b047b23534743ac929befd37dc8a8e591deece22006209f94524f7951de580a5ded9530ead2ce7ec3370c482865554830b53d09f41bf1 +p7zip.v17.4.0+2.armv6l-linux-gnueabihf.tar.gz/md5/fbe2ebeeaa6e5b33dcb71662fb7040f1 +p7zip.v17.4.0+2.armv6l-linux-gnueabihf.tar.gz/sha512/6ca1d7eb1d3f6a7c4dc9860ac3d5a835abce92cddcda015a93086ecde44ed1b3d9f83a3c1e1eddc510af429ec269716dde6bc5fae4aa6bbbc3dcfc9a51326786 +p7zip.v17.4.0+2.armv6l-linux-musleabihf.tar.gz/md5/dae4b1e6060bf4431d3ead53e6b3e167 +p7zip.v17.4.0+2.armv6l-linux-musleabihf.tar.gz/sha512/856c2283c63728d8c542ce5a3d58e38c985f190774c407fc421dd30f05e0ae3467e2844cb7d535aa8a6b8fb24b21b29af75b736fbd9af67c24340609ad6b5841 +p7zip.v17.4.0+2.armv7l-linux-gnueabihf.tar.gz/md5/42b6b9b19158303c4399d651ee5b14cf +p7zip.v17.4.0+2.armv7l-linux-gnueabihf.tar.gz/sha512/4f8792639db8599af026f592496a8c594c0fd6a62dc949965add55b1b85a95d4edc2f99960cf5b21e7beeb8e1bca1d9c1a1a34600103df04dc20d0509410c486 +p7zip.v17.4.0+2.armv7l-linux-musleabihf.tar.gz/md5/e34f5585a50c0cfce29c79e9ece60cf4 +p7zip.v17.4.0+2.armv7l-linux-musleabihf.tar.gz/sha512/87f72568f5a877008d3a8a032a85f69c29d3af4293d7b42d70419bb4c9ca7e99dc13c6b22621ca83886d07f765118451ee9f2a3aee63979d8070910887bf7cdd +p7zip.v17.4.0+2.i686-linux-gnu.tar.gz/md5/d917247133b1c62663334b6a908e30e9 +p7zip.v17.4.0+2.i686-linux-gnu.tar.gz/sha512/4839bec129b7fbd68c61d35fd3b3af9863c757d9fec0220926d45f1f58174d88d0bbb4a472d259d1d77775b906e9c58ba707fc20e2a4a060ca9030722609182d +p7zip.v17.4.0+2.i686-linux-musl.tar.gz/md5/951614fc7597de8c12e0109cbd81bfa9 +p7zip.v17.4.0+2.i686-linux-musl.tar.gz/sha512/f0420ddd6df82d2b3e1ece9cc5cf537cb0803d291d274a495bb9a575bb253a4241cdae38a88e43ddafaab7f6911b310a30c1b874b0a0a9bc447f8c42c5a24652 +p7zip.v17.4.0+2.i686-w64-mingw32.tar.gz/md5/cc81daf0e40990c48db178cb53a95d08 +p7zip.v17.4.0+2.i686-w64-mingw32.tar.gz/sha512/ae5bcbcf32dad20db95319c3c2f874fdbb0cd41054d6c192f2ab106e0aece1b4b0b591055b37c2c909b07b303204a75dec5c4b3c224243c2041da811f99cd7e5 +p7zip.v17.4.0+2.powerpc64le-linux-gnu.tar.gz/md5/e97d74ac4dacfaa215c3119e055a2df0 +p7zip.v17.4.0+2.powerpc64le-linux-gnu.tar.gz/sha512/8b0596ebd84fa9947e8f15f63c426339980e08c81eb4c1474b4a66af6329f0a2fe1bd31eef964d147bf9cf0213e85bdc143fab1a4f1dbfa09da5ebd9e73a3d8d +p7zip.v17.4.0+2.x86_64-apple-darwin.tar.gz/md5/4d9a26dbfc0a02a812c8f7de20ea5440 +p7zip.v17.4.0+2.x86_64-apple-darwin.tar.gz/sha512/3cba51ba9742b616afec13a14e8e3bd3c73c835256af8f6a49d4abf32f5ddf3f86ac8ae08ffd9bc331caa8a711dd1b63f4cd082443a7863e3d512f6ca2152bcd +p7zip.v17.4.0+2.x86_64-linux-gnu.tar.gz/md5/37b7570712ecb8677059f4280a346201 +p7zip.v17.4.0+2.x86_64-linux-gnu.tar.gz/sha512/9445add6a475bdfc2924dc52c07917c2746b07a41a2dbfdab8ad4b4e5b87b0192c13f4da5da64e5d3544bbf9c79fda3c633664eecb372e8475031789770c41ee +p7zip.v17.4.0+2.x86_64-linux-musl.tar.gz/md5/04d6ae950d05c81c6b165721de2ba7e7 +p7zip.v17.4.0+2.x86_64-linux-musl.tar.gz/sha512/524d8ed80a1af903b572d5e32710b384702175cacc83ce2305d7f7a35d45aae7d08e2afc14a9e40c934ba4eb578787afa9bece4f820e96e4b624869cb2bcec26 +p7zip.v17.4.0+2.x86_64-unknown-freebsd.tar.gz/md5/e2a3361e91258e39db541c9dec5a73fe +p7zip.v17.4.0+2.x86_64-unknown-freebsd.tar.gz/sha512/ecc1db9a1823ebdac290548f6e001688b5d111caede4cbfab4e2ef492dbb31844690e9b69360ed9c6ebb2affded7f352d57c0e5cfe67be951876d1fc5e87d92d +p7zip.v17.4.0+2.x86_64-w64-mingw32.tar.gz/md5/2b5f77bb31526c469e0fd48399d0cf9a +p7zip.v17.4.0+2.x86_64-w64-mingw32.tar.gz/sha512/a3a17af4db98b82b71c8d4d09e5315dc4fa77b38cc19f0593654b63744bc7489383d40032e48c2141d6b55e330d1538c527819378a2575a245de436bc6daf532 diff --git a/deps/checksums/pcre b/deps/checksums/pcre index cab79abe745bf..9b9717b61688b 100644 --- a/deps/checksums/pcre +++ b/deps/checksums/pcre @@ -1,34 +1,34 @@ -PCRE2.v10.42.0+0.aarch64-apple-darwin.tar.gz/md5/667a570d341396c3213749ee1e5b5fda -PCRE2.v10.42.0+0.aarch64-apple-darwin.tar.gz/sha512/c1bb99e8928efded9b0ea3f294ceb41daea7254204ca30c0ff88686110ccd58138d8ea8b20b9a9d6d16a6d8d3f34e27e74e7b57d3c8fe6b051c9d8fa6f86431a -PCRE2.v10.42.0+0.aarch64-linux-gnu.tar.gz/md5/1a758f275ff3306fbad7698df7b9b7be -PCRE2.v10.42.0+0.aarch64-linux-gnu.tar.gz/sha512/d09508c0b255366d01f1b4d1ae6748a8e47f18c451498d30715f5f968784990949dab7540cd086396abd912f61b5f7c44c8c72a27efaba0a7fc08b71a167c057 -PCRE2.v10.42.0+0.aarch64-linux-musl.tar.gz/md5/e61147579fdc9b57a61b814bdf9c84bb -PCRE2.v10.42.0+0.aarch64-linux-musl.tar.gz/sha512/eecaf4c1937fc04210b910ac65318524c02d690e8c4894c38e74eaba36d26c87a1fd9e1cc36f4307a11ff3552a79f081fa8f05085435eb34872dc2fdecce2d18 -PCRE2.v10.42.0+0.armv6l-linux-gnueabihf.tar.gz/md5/b4c484a3b87923c0e2e4d9cc5f140eb7 -PCRE2.v10.42.0+0.armv6l-linux-gnueabihf.tar.gz/sha512/5931cf13d340971356a9b87f62c9efdb3656ba649e7b25f1722127a3fd70973d94c815a37b43cecab8eb0ed8d1ae02ef1a0c0a12051852c1b9242c3eaa01c496 -PCRE2.v10.42.0+0.armv6l-linux-musleabihf.tar.gz/md5/bc7b5bb1c5b0b99c121bad5a89299ca7 -PCRE2.v10.42.0+0.armv6l-linux-musleabihf.tar.gz/sha512/86b5ad4fa6f4b5bd1a76ad68ddff4b39916d0ed0acc03a3fee8eab5256aaed53abc0ff4ce9d9d9f8b9203c087211684da92fe6aa06ff5bc331ba1b3da2cba57e -PCRE2.v10.42.0+0.armv7l-linux-gnueabihf.tar.gz/md5/3541eb26fa5a4d13e2c7d063dbd900d8 -PCRE2.v10.42.0+0.armv7l-linux-gnueabihf.tar.gz/sha512/872181f931662edaf653351486c5e2a700e94cfa0966ca90eca893fdc75dd46eb40d9d45737c198aa4b9ad8ebab33fd78697ef35906985e4e1c9748ddf58d363 -PCRE2.v10.42.0+0.armv7l-linux-musleabihf.tar.gz/md5/fe059feb18fcc9312f1033362070fe34 -PCRE2.v10.42.0+0.armv7l-linux-musleabihf.tar.gz/sha512/5a96acf3908c964ccb4f296c449499388ed447d9a094c2760c979e02ef656fa710ede3926b9626e89fb5b0545c111e6eedff21e48416e923c17fc9ff129d0519 -PCRE2.v10.42.0+0.i686-linux-gnu.tar.gz/md5/67f49cb139017109c422c51c0120823a -PCRE2.v10.42.0+0.i686-linux-gnu.tar.gz/sha512/8873d9995bdf5701fc5a24163f93eada12af76d09781a679a4ed61b66f117cf322505d291931d1c58b3b3eb560f6487a1100b0735c14abe6cb38677750b481c7 -PCRE2.v10.42.0+0.i686-linux-musl.tar.gz/md5/092af10d8182cb4240cdd975efce4d7c -PCRE2.v10.42.0+0.i686-linux-musl.tar.gz/sha512/79a48f4fd50ffdf49c8d57581e01ace38c1b3d7edd86d44db44b8efd93074d16faf035131a0d60c6631b8bf22f0fd8296acedba45908da56e8096c296122f047 -PCRE2.v10.42.0+0.i686-w64-mingw32.tar.gz/md5/2bb13db8b5d6d1a5632de3db874c2614 -PCRE2.v10.42.0+0.i686-w64-mingw32.tar.gz/sha512/7d1324696087c32d1bbbb64f5e4b8c8a220ef216d025886b3c3e6d685c3f701428c6696d7ae0bcc771d3295381ba2bdd5db040f788f8a9a58f80ad4d790dd141 -PCRE2.v10.42.0+0.powerpc64le-linux-gnu.tar.gz/md5/0de1215b2a1e9c0efd131355e9fbf2c1 -PCRE2.v10.42.0+0.powerpc64le-linux-gnu.tar.gz/sha512/69dae12627685ae665db8c91264a79aba7c60ae97eccdc79ef889f2a5f69b465fa333aba298fc90bbb95710cfc324e3630bc427a97577855e8fb6c8fe227cfec -PCRE2.v10.42.0+0.x86_64-apple-darwin.tar.gz/md5/c5c52b399921c5ab81a5f598b350d2ca -PCRE2.v10.42.0+0.x86_64-apple-darwin.tar.gz/sha512/e6c8ba3aa3fbf54b37079301ab317104c6852812b23835f52ca40f31f0831678172d32e077fbaa712a8a2cb16d62bb97d475827004353e7807922a2d6e049b28 -PCRE2.v10.42.0+0.x86_64-linux-gnu.tar.gz/md5/b074dd1f85e24e723349e566350e2c78 -PCRE2.v10.42.0+0.x86_64-linux-gnu.tar.gz/sha512/236017e02c9f32b913b772dbf22897c8460e5791f196c86f8a073e329ad8925f6859afe48f3bf18ca057c265f08fedbde255360d8f859e2303c6569ab1b0e1bb -PCRE2.v10.42.0+0.x86_64-linux-musl.tar.gz/md5/9f32ca77e79843fc9c4b5fc8ed336d11 -PCRE2.v10.42.0+0.x86_64-linux-musl.tar.gz/sha512/334a31724e9d69c6517568d922717ce76d85cf87dbc863b7262b25ab43c79734b457833cd42674eb6a004864e5c74da3ae1d0a45794b4cd459eea24d9669fac5 -PCRE2.v10.42.0+0.x86_64-unknown-freebsd.tar.gz/md5/037bf13e9a53eb90846b6643610a17df -PCRE2.v10.42.0+0.x86_64-unknown-freebsd.tar.gz/sha512/64bc9acda3d158621f442aa2e766730cc425df3795965f461b530d8152934ffaf93d75b86ebc483345b78b203b0502857683c183ec65a01da1834b55405c7f77 -PCRE2.v10.42.0+0.x86_64-w64-mingw32.tar.gz/md5/6b04c3778bf02947cb1b7e70a41f3292 -PCRE2.v10.42.0+0.x86_64-w64-mingw32.tar.gz/sha512/9b808832cc48703ed525eca06d1dd0162dae3f94a9ad72d044876edcb86a90e8443c8b169e60ccf3507d5960156c447d8f3f30e586ac2a22b6d43dbe807009d0 +PCRE2.v10.42.0+1.aarch64-apple-darwin.tar.gz/md5/667a570d341396c3213749ee1e5b5fda +PCRE2.v10.42.0+1.aarch64-apple-darwin.tar.gz/sha512/c1bb99e8928efded9b0ea3f294ceb41daea7254204ca30c0ff88686110ccd58138d8ea8b20b9a9d6d16a6d8d3f34e27e74e7b57d3c8fe6b051c9d8fa6f86431a +PCRE2.v10.42.0+1.aarch64-linux-gnu.tar.gz/md5/1a758f275ff3306fbad7698df7b9b7be +PCRE2.v10.42.0+1.aarch64-linux-gnu.tar.gz/sha512/d09508c0b255366d01f1b4d1ae6748a8e47f18c451498d30715f5f968784990949dab7540cd086396abd912f61b5f7c44c8c72a27efaba0a7fc08b71a167c057 +PCRE2.v10.42.0+1.aarch64-linux-musl.tar.gz/md5/e61147579fdc9b57a61b814bdf9c84bb +PCRE2.v10.42.0+1.aarch64-linux-musl.tar.gz/sha512/eecaf4c1937fc04210b910ac65318524c02d690e8c4894c38e74eaba36d26c87a1fd9e1cc36f4307a11ff3552a79f081fa8f05085435eb34872dc2fdecce2d18 +PCRE2.v10.42.0+1.armv6l-linux-gnueabihf.tar.gz/md5/b4c484a3b87923c0e2e4d9cc5f140eb7 +PCRE2.v10.42.0+1.armv6l-linux-gnueabihf.tar.gz/sha512/5931cf13d340971356a9b87f62c9efdb3656ba649e7b25f1722127a3fd70973d94c815a37b43cecab8eb0ed8d1ae02ef1a0c0a12051852c1b9242c3eaa01c496 +PCRE2.v10.42.0+1.armv6l-linux-musleabihf.tar.gz/md5/bc7b5bb1c5b0b99c121bad5a89299ca7 +PCRE2.v10.42.0+1.armv6l-linux-musleabihf.tar.gz/sha512/86b5ad4fa6f4b5bd1a76ad68ddff4b39916d0ed0acc03a3fee8eab5256aaed53abc0ff4ce9d9d9f8b9203c087211684da92fe6aa06ff5bc331ba1b3da2cba57e +PCRE2.v10.42.0+1.armv7l-linux-gnueabihf.tar.gz/md5/3541eb26fa5a4d13e2c7d063dbd900d8 +PCRE2.v10.42.0+1.armv7l-linux-gnueabihf.tar.gz/sha512/872181f931662edaf653351486c5e2a700e94cfa0966ca90eca893fdc75dd46eb40d9d45737c198aa4b9ad8ebab33fd78697ef35906985e4e1c9748ddf58d363 +PCRE2.v10.42.0+1.armv7l-linux-musleabihf.tar.gz/md5/fe059feb18fcc9312f1033362070fe34 +PCRE2.v10.42.0+1.armv7l-linux-musleabihf.tar.gz/sha512/5a96acf3908c964ccb4f296c449499388ed447d9a094c2760c979e02ef656fa710ede3926b9626e89fb5b0545c111e6eedff21e48416e923c17fc9ff129d0519 +PCRE2.v10.42.0+1.i686-linux-gnu.tar.gz/md5/d6c804ae6cc661d039ee3edd2f1dbcb6 +PCRE2.v10.42.0+1.i686-linux-gnu.tar.gz/sha512/256ca677b169854686ca34cf30af5a6709758b41b65f2c66d497c552858770a69a49834fd16daa2f7d481964b21a2e3ec68ff1b1fbd08f4e2257ec46b85c0063 +PCRE2.v10.42.0+1.i686-linux-musl.tar.gz/md5/092af10d8182cb4240cdd975efce4d7c +PCRE2.v10.42.0+1.i686-linux-musl.tar.gz/sha512/79a48f4fd50ffdf49c8d57581e01ace38c1b3d7edd86d44db44b8efd93074d16faf035131a0d60c6631b8bf22f0fd8296acedba45908da56e8096c296122f047 +PCRE2.v10.42.0+1.i686-w64-mingw32.tar.gz/md5/bafc5fc1621d0f4fb2b7b271e2f66db1 +PCRE2.v10.42.0+1.i686-w64-mingw32.tar.gz/sha512/a5ac2b788fb2e4baf129fb339f28da04e9a5c9b7dbba0a1f43da2a7193917d361d961ba48abd0aeec30d2352ebaa401d667c8eec81c5f40859ef8adf8487edca +PCRE2.v10.42.0+1.powerpc64le-linux-gnu.tar.gz/md5/0de1215b2a1e9c0efd131355e9fbf2c1 +PCRE2.v10.42.0+1.powerpc64le-linux-gnu.tar.gz/sha512/69dae12627685ae665db8c91264a79aba7c60ae97eccdc79ef889f2a5f69b465fa333aba298fc90bbb95710cfc324e3630bc427a97577855e8fb6c8fe227cfec +PCRE2.v10.42.0+1.x86_64-apple-darwin.tar.gz/md5/c5c52b399921c5ab81a5f598b350d2ca +PCRE2.v10.42.0+1.x86_64-apple-darwin.tar.gz/sha512/e6c8ba3aa3fbf54b37079301ab317104c6852812b23835f52ca40f31f0831678172d32e077fbaa712a8a2cb16d62bb97d475827004353e7807922a2d6e049b28 +PCRE2.v10.42.0+1.x86_64-linux-gnu.tar.gz/md5/b074dd1f85e24e723349e566350e2c78 +PCRE2.v10.42.0+1.x86_64-linux-gnu.tar.gz/sha512/236017e02c9f32b913b772dbf22897c8460e5791f196c86f8a073e329ad8925f6859afe48f3bf18ca057c265f08fedbde255360d8f859e2303c6569ab1b0e1bb +PCRE2.v10.42.0+1.x86_64-linux-musl.tar.gz/md5/9f32ca77e79843fc9c4b5fc8ed336d11 +PCRE2.v10.42.0+1.x86_64-linux-musl.tar.gz/sha512/334a31724e9d69c6517568d922717ce76d85cf87dbc863b7262b25ab43c79734b457833cd42674eb6a004864e5c74da3ae1d0a45794b4cd459eea24d9669fac5 +PCRE2.v10.42.0+1.x86_64-unknown-freebsd.tar.gz/md5/76cde3c509ed39ca67a18fe58e728821 +PCRE2.v10.42.0+1.x86_64-unknown-freebsd.tar.gz/sha512/219c82067a242554c523be5be2b5561cd955609eac1addc336004df64a2a12e815ea40ff94d3f610970f7d0215b410f098d4baaa2c722f5cf21dab175b288b7e +PCRE2.v10.42.0+1.x86_64-w64-mingw32.tar.gz/md5/b0771d5b0132b554776e7cee0e1374e6 +PCRE2.v10.42.0+1.x86_64-w64-mingw32.tar.gz/sha512/d4435ff703e51c88df7764a732d6b67b1ee4d3b09b915ac822af05a33347642691837818d4c389226ef1d70cd69dbac792ebe1e7de1d8900443fe162051916ae pcre2-10.42.tar.bz2/md5/a8e9ab2935d428a4807461f183034abe pcre2-10.42.tar.bz2/sha512/72fbde87fecec3aa4b47225dd919ea1d55e97f2cbcf02aba26e5a0d3b1ffb58c25a80a9ef069eb99f9cf4e41ba9604ad06a7ec159870e1e875d86820e12256d3 diff --git a/deps/checksums/suitesparse b/deps/checksums/suitesparse index 05f25450114a5..ad571d8be1f28 100644 --- a/deps/checksums/suitesparse +++ b/deps/checksums/suitesparse @@ -2,35 +2,35 @@ SuiteSparse-7.2.0.tar.gz/md5/a751b1161f03eb6bd8bd7b9c9be74b67 SuiteSparse-7.2.0.tar.gz/sha512/62fc796a77f2a8c95cd688a4fa0e39c19d7ccfafde7a6623d62ca6928cee68ac9863a0f721959a1d5a07e62888ab621a4b1cb4f63371f4ac10f4ffe513241340 SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/md5/46541001073d1c3c85e18d910f8308f3 SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/sha512/f7470a447b934ca9315e216a07b97e363f11bc93186f9aa057b20b2d05092c58ae4f1b733de362de4a0730861c00be4ca5588d0b3ba65f018c1798b9122b9672 -SuiteSparse.v7.2.0+0.aarch64-apple-darwin.tar.gz/md5/1a10261e5bed293a66849c7a50605a1c -SuiteSparse.v7.2.0+0.aarch64-apple-darwin.tar.gz/sha512/11ecce872aac1f30a3d4ce870920ebb03c7828d0fd740c3789d3f65c3f91ed3682372e9807b0593e2850ae9024450306451ee2e03866afee16b4169e4b5de1c6 -SuiteSparse.v7.2.0+0.aarch64-linux-gnu.tar.gz/md5/65e2e7ae54e94e00b306d17a1d08ed34 -SuiteSparse.v7.2.0+0.aarch64-linux-gnu.tar.gz/sha512/7714598448c6f98a7d931822f9ddb661a903342d4c8384648c1b7457511794ff95ad64266c9377a4a5856dcb1fb8864cb05eab1c7787fca58802473270313570 -SuiteSparse.v7.2.0+0.aarch64-linux-musl.tar.gz/md5/95eb68e02c04d075d6ecc974c3b44457 -SuiteSparse.v7.2.0+0.aarch64-linux-musl.tar.gz/sha512/1d7835106cd5baef701a3b670778a757d97ab9933f7da909e1e5521150f7e44bee30cf4dc7c1e9f57731366db0fca1b91d1cdfddbc53b7cc7457ca11534be6d7 -SuiteSparse.v7.2.0+0.armv6l-linux-gnueabihf.tar.gz/md5/5f627cc9c9d4d70e2f0d749e09926b1a -SuiteSparse.v7.2.0+0.armv6l-linux-gnueabihf.tar.gz/sha512/5ae4b79b418b45d954bfb578ac384afd6fff10a602d16d8b503997ba15251a7db0e12da66061ffd27c23b7459ff56b4a5d200c7c8aaa4a33c608a88752535c15 -SuiteSparse.v7.2.0+0.armv6l-linux-musleabihf.tar.gz/md5/61b5ee7e2b50665caf15e7c4f7353048 -SuiteSparse.v7.2.0+0.armv6l-linux-musleabihf.tar.gz/sha512/854c0165bceeb8202aeeaa16e6ba1f643e8cb9bf0561816cf2c44d1c7334ba7c376ee9e9085316439ca7e27dd4e37814f4916382096a5889c6bb656d22a7fb8d -SuiteSparse.v7.2.0+0.armv7l-linux-gnueabihf.tar.gz/md5/618b9687ce30e630a52f72a8f34cfb9f -SuiteSparse.v7.2.0+0.armv7l-linux-gnueabihf.tar.gz/sha512/add77a8842faf6515d94dc1d000784247d13f0211a9bb3f98edbc65b5f8994c0101940875fa050ca7a4605aaf33ec14daeaaf6b837673b3b4c600d4c5c0f4876 -SuiteSparse.v7.2.0+0.armv7l-linux-musleabihf.tar.gz/md5/b84d7f98b953772517689478d6bfc121 -SuiteSparse.v7.2.0+0.armv7l-linux-musleabihf.tar.gz/sha512/2c461eb23194bf61d3166abd8eb308dc643d865ff07466a88a580aa5a040f3c4fbfeadf7c78e1a3ce737fe0602909ff2b25be439741d36a780a260ccfdc6ed83 -SuiteSparse.v7.2.0+0.i686-linux-gnu.tar.gz/md5/3a38deddb5c1952584782378892d9579 -SuiteSparse.v7.2.0+0.i686-linux-gnu.tar.gz/sha512/5d6a9090c1c275c2bdcdc8d510c6372913109c1a775819354922c0d0afc2bc13a27950ed0e8cb8e05bc94d245220e322d93879054e5082814b7796b305981987 -SuiteSparse.v7.2.0+0.i686-linux-musl.tar.gz/md5/8076c50a73ab08ce0b9374956c2dbf29 -SuiteSparse.v7.2.0+0.i686-linux-musl.tar.gz/sha512/e54bcfe7eb9b266514a35a3c48676b7a792b59830e44bfcd5dfcf35be790f534cc31bd2e63ce4da1a22fcb3b0afb0ebebcc94f0e596806d6e832c3f68195cc5b -SuiteSparse.v7.2.0+0.i686-w64-mingw32.tar.gz/md5/361385833314fa6fbcd1f446ef6430e6 -SuiteSparse.v7.2.0+0.i686-w64-mingw32.tar.gz/sha512/576ef6a4242c6b999a143007aa073ba9e4d74246c297f60504052321c2bae202640cffe08fbcf69df1b093b12443382c9d11390f97b9d8754f10dcd32dd3e9c4 -SuiteSparse.v7.2.0+0.powerpc64le-linux-gnu.tar.gz/md5/64845ee8bb2f3f44a0837297e47e412d -SuiteSparse.v7.2.0+0.powerpc64le-linux-gnu.tar.gz/sha512/5f935e497db4ebbcdfb96603a7ee9c6c520d7f4df04f65952305ceff4271ab637079e9144b98044c5f159b4bed0963df8c95ed1578d2828f1a2356e6d34d7042 -SuiteSparse.v7.2.0+0.x86_64-apple-darwin.tar.gz/md5/fb8b00d4ca63004fe8ab8c159128e01f -SuiteSparse.v7.2.0+0.x86_64-apple-darwin.tar.gz/sha512/bcfb18c11be4b1147ff857e2ad0c881c9fc4ae16db8e88fb6e7e0448418c1fc4bff9ea8f1e6aa7202c277273c44c1afb3cc6c2bfcaa0735c7c09052f033248c7 -SuiteSparse.v7.2.0+0.x86_64-linux-gnu.tar.gz/md5/043594ee1cb90fd47b36acfa829fffb8 -SuiteSparse.v7.2.0+0.x86_64-linux-gnu.tar.gz/sha512/6a5bb3c85bb7e97b915f7dd40e8be1ed1bbbd5c756ef510deaecc8505b95bd42f3662f82e25c80055947060e0429e2ce427d4ff67b434acbe28d46b88279c65f -SuiteSparse.v7.2.0+0.x86_64-linux-musl.tar.gz/md5/67c6d3a7fd8635a43bd86b2b1e986978 -SuiteSparse.v7.2.0+0.x86_64-linux-musl.tar.gz/sha512/d46be3f60102fc69707c3e7cc3d693c7ecb4d4307c636afde61e5fab3c46fcf32564716a11d2cfe47b4e541422d5b6e13fbcc3e8749764527b4f4132e8ce17fc -SuiteSparse.v7.2.0+0.x86_64-unknown-freebsd.tar.gz/md5/124057f8455c9710fd1e6b4b4b469fb0 -SuiteSparse.v7.2.0+0.x86_64-unknown-freebsd.tar.gz/sha512/da0e56a8b1cf3967275cb64aea0b939d8982392f9ca1c3b268607e37c0b9bebbd456172c507c6dc2293989a0fe8df04ba1fea67442a4bb738cc8d894bea457a5 -SuiteSparse.v7.2.0+0.x86_64-w64-mingw32.tar.gz/md5/0f99c67d25c0fdd0f3c3e11f18925c43 -SuiteSparse.v7.2.0+0.x86_64-w64-mingw32.tar.gz/sha512/32fcd894cb4197970aa311f7bd12ccb91df7bbe27e389e793a2d3565c9c5c36c751f6dfa37e155cd2c2245be52f0a872dba032b78dc45c45d3fd7d7f2eeb773e +SuiteSparse.v7.2.0+1.aarch64-apple-darwin.tar.gz/md5/1a10261e5bed293a66849c7a50605a1c +SuiteSparse.v7.2.0+1.aarch64-apple-darwin.tar.gz/sha512/11ecce872aac1f30a3d4ce870920ebb03c7828d0fd740c3789d3f65c3f91ed3682372e9807b0593e2850ae9024450306451ee2e03866afee16b4169e4b5de1c6 +SuiteSparse.v7.2.0+1.aarch64-linux-gnu.tar.gz/md5/65e2e7ae54e94e00b306d17a1d08ed34 +SuiteSparse.v7.2.0+1.aarch64-linux-gnu.tar.gz/sha512/7714598448c6f98a7d931822f9ddb661a903342d4c8384648c1b7457511794ff95ad64266c9377a4a5856dcb1fb8864cb05eab1c7787fca58802473270313570 +SuiteSparse.v7.2.0+1.aarch64-linux-musl.tar.gz/md5/95eb68e02c04d075d6ecc974c3b44457 +SuiteSparse.v7.2.0+1.aarch64-linux-musl.tar.gz/sha512/1d7835106cd5baef701a3b670778a757d97ab9933f7da909e1e5521150f7e44bee30cf4dc7c1e9f57731366db0fca1b91d1cdfddbc53b7cc7457ca11534be6d7 +SuiteSparse.v7.2.0+1.armv6l-linux-gnueabihf.tar.gz/md5/5f627cc9c9d4d70e2f0d749e09926b1a +SuiteSparse.v7.2.0+1.armv6l-linux-gnueabihf.tar.gz/sha512/5ae4b79b418b45d954bfb578ac384afd6fff10a602d16d8b503997ba15251a7db0e12da66061ffd27c23b7459ff56b4a5d200c7c8aaa4a33c608a88752535c15 +SuiteSparse.v7.2.0+1.armv6l-linux-musleabihf.tar.gz/md5/61b5ee7e2b50665caf15e7c4f7353048 +SuiteSparse.v7.2.0+1.armv6l-linux-musleabihf.tar.gz/sha512/854c0165bceeb8202aeeaa16e6ba1f643e8cb9bf0561816cf2c44d1c7334ba7c376ee9e9085316439ca7e27dd4e37814f4916382096a5889c6bb656d22a7fb8d +SuiteSparse.v7.2.0+1.armv7l-linux-gnueabihf.tar.gz/md5/618b9687ce30e630a52f72a8f34cfb9f +SuiteSparse.v7.2.0+1.armv7l-linux-gnueabihf.tar.gz/sha512/add77a8842faf6515d94dc1d000784247d13f0211a9bb3f98edbc65b5f8994c0101940875fa050ca7a4605aaf33ec14daeaaf6b837673b3b4c600d4c5c0f4876 +SuiteSparse.v7.2.0+1.armv7l-linux-musleabihf.tar.gz/md5/b84d7f98b953772517689478d6bfc121 +SuiteSparse.v7.2.0+1.armv7l-linux-musleabihf.tar.gz/sha512/2c461eb23194bf61d3166abd8eb308dc643d865ff07466a88a580aa5a040f3c4fbfeadf7c78e1a3ce737fe0602909ff2b25be439741d36a780a260ccfdc6ed83 +SuiteSparse.v7.2.0+1.i686-linux-gnu.tar.gz/md5/3a38deddb5c1952584782378892d9579 +SuiteSparse.v7.2.0+1.i686-linux-gnu.tar.gz/sha512/5d6a9090c1c275c2bdcdc8d510c6372913109c1a775819354922c0d0afc2bc13a27950ed0e8cb8e05bc94d245220e322d93879054e5082814b7796b305981987 +SuiteSparse.v7.2.0+1.i686-linux-musl.tar.gz/md5/8076c50a73ab08ce0b9374956c2dbf29 +SuiteSparse.v7.2.0+1.i686-linux-musl.tar.gz/sha512/e54bcfe7eb9b266514a35a3c48676b7a792b59830e44bfcd5dfcf35be790f534cc31bd2e63ce4da1a22fcb3b0afb0ebebcc94f0e596806d6e832c3f68195cc5b +SuiteSparse.v7.2.0+1.i686-w64-mingw32.tar.gz/md5/45ac2448ac7a1a9c67114ea58e8ceacf +SuiteSparse.v7.2.0+1.i686-w64-mingw32.tar.gz/sha512/ed65a4071144c0096dfa768f26fd6216d4554c606a981658675d42f201865032972d9ce252dca5dc8a4a7ab0e33411c77bba9287e8013bdb0907ed6cb63d576f +SuiteSparse.v7.2.0+1.powerpc64le-linux-gnu.tar.gz/md5/64845ee8bb2f3f44a0837297e47e412d +SuiteSparse.v7.2.0+1.powerpc64le-linux-gnu.tar.gz/sha512/5f935e497db4ebbcdfb96603a7ee9c6c520d7f4df04f65952305ceff4271ab637079e9144b98044c5f159b4bed0963df8c95ed1578d2828f1a2356e6d34d7042 +SuiteSparse.v7.2.0+1.x86_64-apple-darwin.tar.gz/md5/fb8b00d4ca63004fe8ab8c159128e01f +SuiteSparse.v7.2.0+1.x86_64-apple-darwin.tar.gz/sha512/bcfb18c11be4b1147ff857e2ad0c881c9fc4ae16db8e88fb6e7e0448418c1fc4bff9ea8f1e6aa7202c277273c44c1afb3cc6c2bfcaa0735c7c09052f033248c7 +SuiteSparse.v7.2.0+1.x86_64-linux-gnu.tar.gz/md5/043594ee1cb90fd47b36acfa829fffb8 +SuiteSparse.v7.2.0+1.x86_64-linux-gnu.tar.gz/sha512/6a5bb3c85bb7e97b915f7dd40e8be1ed1bbbd5c756ef510deaecc8505b95bd42f3662f82e25c80055947060e0429e2ce427d4ff67b434acbe28d46b88279c65f +SuiteSparse.v7.2.0+1.x86_64-linux-musl.tar.gz/md5/67c6d3a7fd8635a43bd86b2b1e986978 +SuiteSparse.v7.2.0+1.x86_64-linux-musl.tar.gz/sha512/d46be3f60102fc69707c3e7cc3d693c7ecb4d4307c636afde61e5fab3c46fcf32564716a11d2cfe47b4e541422d5b6e13fbcc3e8749764527b4f4132e8ce17fc +SuiteSparse.v7.2.0+1.x86_64-unknown-freebsd.tar.gz/md5/124057f8455c9710fd1e6b4b4b469fb0 +SuiteSparse.v7.2.0+1.x86_64-unknown-freebsd.tar.gz/sha512/da0e56a8b1cf3967275cb64aea0b939d8982392f9ca1c3b268607e37c0b9bebbd456172c507c6dc2293989a0fe8df04ba1fea67442a4bb738cc8d894bea457a5 +SuiteSparse.v7.2.0+1.x86_64-w64-mingw32.tar.gz/md5/0f99c67d25c0fdd0f3c3e11f18925c43 +SuiteSparse.v7.2.0+1.x86_64-w64-mingw32.tar.gz/sha512/32fcd894cb4197970aa311f7bd12ccb91df7bbe27e389e793a2d3565c9c5c36c751f6dfa37e155cd2c2245be52f0a872dba032b78dc45c45d3fd7d7f2eeb773e diff --git a/deps/checksums/unwind b/deps/checksums/unwind index 7a3141d79368c..a3f80c50b3be1 100644 --- a/deps/checksums/unwind +++ b/deps/checksums/unwind @@ -1,26 +1,26 @@ -LibUnwind.v1.5.0+4.aarch64-linux-gnu.tar.gz/md5/b40fee1e2995d3fa2c823c45b231d9f0 -LibUnwind.v1.5.0+4.aarch64-linux-gnu.tar.gz/sha512/d5865dabb541c3e1a5b6bc20547adc0788dde0f74731006e44e2cd128742c1ce61638a31340f8f4bfcd8b052706c3d57c24a202d048cb8d0496a909ff51fe9f7 -LibUnwind.v1.5.0+4.aarch64-linux-musl.tar.gz/md5/580b46908f43309c3f88c9ec4177d296 -LibUnwind.v1.5.0+4.aarch64-linux-musl.tar.gz/sha512/c12caa005586bea53932054d2742d6b55c40fd1a284daeb73924f3b761115929e022f3cf377b590d818e2c69726d42f12d4c87be2daf6d43caeaef54e226afdb -LibUnwind.v1.5.0+4.armv6l-linux-gnueabihf.tar.gz/md5/5af8f16e7eb32718cde68ee840c373c2 -LibUnwind.v1.5.0+4.armv6l-linux-gnueabihf.tar.gz/sha512/71e6f64477bc356c42bf1604e61a2596dfdb90f5fc3005e6656f2aa5ba0576867e6b482501d3d3c68da623cf4d6c572e4fb9708a71988671b1bbe76d6c2e4754 -LibUnwind.v1.5.0+4.armv6l-linux-musleabihf.tar.gz/md5/446f9021d1903410ed9b2e400e2533af -LibUnwind.v1.5.0+4.armv6l-linux-musleabihf.tar.gz/sha512/bf39ac9faea323c394e627647aaafacccdcd9545ac970b771dc4736376c56f0e1cfe58fead45625b7c491d91ae4f1dd41c3303d04536ef514c3a3657c06fd261 -LibUnwind.v1.5.0+4.armv7l-linux-gnueabihf.tar.gz/md5/ab594ba2df5cdc08dcf74ee2d0af9742 -LibUnwind.v1.5.0+4.armv7l-linux-gnueabihf.tar.gz/sha512/80f3b0c922b27d98fec1ba58f227af3c9d3e9691f34ed088152619289fa09b03a5b891162cd8ba497432867d60c2cd97a3466178c0891d848ded167e64f720ef -LibUnwind.v1.5.0+4.armv7l-linux-musleabihf.tar.gz/md5/84cdf938ab0880447f242d86ad9e6d1d -LibUnwind.v1.5.0+4.armv7l-linux-musleabihf.tar.gz/sha512/a985e9fc4e75cb292e7cb80ae0446110221a7f785818f53ac26c03dc2e142c959a6f380ffbceb43039dc95659e0da608b436d5faa5133f7d49308dd6198652f3 -LibUnwind.v1.5.0+4.i686-linux-gnu.tar.gz/md5/29a8d300b5edc3b25fc0c38d415ec4a7 -LibUnwind.v1.5.0+4.i686-linux-gnu.tar.gz/sha512/c96b954ee5736ad69a47e1214aac483ed2697a013749a696de823e2064bd5869590ae17c19268bf06227c9065b10bb36b197fb73987a74706fd37e0eefc17254 -LibUnwind.v1.5.0+4.i686-linux-musl.tar.gz/md5/fe8822d87cbad1abc4173a0c5c3f082f -LibUnwind.v1.5.0+4.i686-linux-musl.tar.gz/sha512/ff09cdbb4046413c260df0058a2fb3c2daa56e656a038c1ff4c47b251254e08066ae3b8b144a02483e1ca7d92192d8e3c1b005adcf2dad26343219eab4c26d95 -LibUnwind.v1.5.0+4.powerpc64le-linux-gnu.tar.gz/md5/15eea5ef1f4ad04cc8fb8f701571233f -LibUnwind.v1.5.0+4.powerpc64le-linux-gnu.tar.gz/sha512/875d50cea141397783c4d3062a08a1951fb14c96e9c99489ddeb91f94f403c48e8d358c181b6649198318586463efedd1b5f991acc792d8412a6ad2c810c568e -LibUnwind.v1.5.0+4.x86_64-linux-gnu.tar.gz/md5/2b7b2264763d10f39c548b3f23ea1a95 -LibUnwind.v1.5.0+4.x86_64-linux-gnu.tar.gz/sha512/7e76ae26ce7f6f60020af0908c7197e28204a8b290022af7dd92b17d64b01d68338d347e3f78a5946fef2faec3cd3f1c274bc55de1472a6245867b8e5219dd0a -LibUnwind.v1.5.0+4.x86_64-linux-musl.tar.gz/md5/84789e4ee681fbe4697e02431ab1004b -LibUnwind.v1.5.0+4.x86_64-linux-musl.tar.gz/sha512/e8166e2efbb70a3b492551556c72181c505b8cdb2e5d528caa69b32727c59f3e065e4455fdd9749878bb6d1ab5962ca7dfe2ebc9efa6dbdb0bebd210bd16c6a7 -LibUnwind.v1.5.0+4.x86_64-unknown-freebsd.tar.gz/md5/f35f256dd24183f72a932946c07073b0 -LibUnwind.v1.5.0+4.x86_64-unknown-freebsd.tar.gz/sha512/de80153025ba3e4192c8faf3f7c5f5a0044d4580f8cb56f4c0206f7030cbeeb406cdd064f87b4568392c06e96b9e32fc07c55b68b92e8cc5d596fb79040ecb78 +LibUnwind.v1.5.0+5.aarch64-linux-gnu.tar.gz/md5/10395299ac6a2b102e5ff83f92216c24 +LibUnwind.v1.5.0+5.aarch64-linux-gnu.tar.gz/sha512/9a42751de3766c91173c3a35adc48920ddce3fb80e79d76a8b6e51be368b3fa307a5911a5a577bcb44bf4c8d84a2a61af2bb4717918be50173de64f86e8eab04 +LibUnwind.v1.5.0+5.aarch64-linux-musl.tar.gz/md5/5d188ea86a5e52c4e14e54b801bc27e8 +LibUnwind.v1.5.0+5.aarch64-linux-musl.tar.gz/sha512/d89eb00f8d2f307235d0e794ff0b8e8a2cb016742210ba66938ecf3f6e158a0feada2e4ea167d9159ae65a298721e9678374062e24822c66d2c20d5c22b14d90 +LibUnwind.v1.5.0+5.armv6l-linux-gnueabihf.tar.gz/md5/924948e2f8562f167b3ccd10eae4bed3 +LibUnwind.v1.5.0+5.armv6l-linux-gnueabihf.tar.gz/sha512/24b8307e02e4168f3683d18f343680053ea7645e4135e6db9ed52a8991d60ccaa6b78dd66e1aa9e3505c3825a19d7c4fd007362ff1191cf86302c9e2c6171d8d +LibUnwind.v1.5.0+5.armv6l-linux-musleabihf.tar.gz/md5/64769f744a1d645026becf67f504350e +LibUnwind.v1.5.0+5.armv6l-linux-musleabihf.tar.gz/sha512/242c76f349743c6be387c13faae15f588c8a0f656a505df8801c51c5d8744983a324ea5ddb32de146ad6289a42356fabff945074e4bc2c79e0665f641d4db745 +LibUnwind.v1.5.0+5.armv7l-linux-gnueabihf.tar.gz/md5/aeeafd36bcc42624218a6975a2ae2317 +LibUnwind.v1.5.0+5.armv7l-linux-gnueabihf.tar.gz/sha512/41b7cf03467ac36d8987f41123399255bf26cb44187c2eea7deeb3a7235f29eacd97077b279fb546c97b17708d9d60bc26489ec299b4d9b14d0f78b49b5853b5 +LibUnwind.v1.5.0+5.armv7l-linux-musleabihf.tar.gz/md5/cfb1ad3a96b0d8c3769affc2a0e57569 +LibUnwind.v1.5.0+5.armv7l-linux-musleabihf.tar.gz/sha512/1686d4240d18493a5c9beeb2947702e6f347888d2c9767a25e5e02fac025801503d45b99476d3d3c9e0d79b078402e64c1497d7447a74a4c58513adfe383ec55 +LibUnwind.v1.5.0+5.i686-linux-gnu.tar.gz/md5/99fc0e135bdb78da987727f05a838bde +LibUnwind.v1.5.0+5.i686-linux-gnu.tar.gz/sha512/793aa4f7a6ecd070a28ba0893de41b8ddf83751c9346b767053ec81da76320c56ea170954727cbdfedbb031dfa208edfbbee695798429b23fb142039957a58c2 +LibUnwind.v1.5.0+5.i686-linux-musl.tar.gz/md5/1bbe1b8467a0c818e764a0944fe90cda +LibUnwind.v1.5.0+5.i686-linux-musl.tar.gz/sha512/3e3053ad7f482e9426480090d0b5ee2f341060dfddb923dbafc346635ba1e8568154ca35afc5f6dc8cf7a71ba18246b2a28b6ef0a7e50f3c2ddc197843de8c4b +LibUnwind.v1.5.0+5.powerpc64le-linux-gnu.tar.gz/md5/b321964dcd3d709dac481160f7511eeb +LibUnwind.v1.5.0+5.powerpc64le-linux-gnu.tar.gz/sha512/63705322de56256bb89d2d6d12525d139cd3a58b4124ce9744c5ebac1b98fe88c690c7e17c6c7df6b86c7f8b9c76e21e398a6b42ee75796bce80a32604933033 +LibUnwind.v1.5.0+5.x86_64-linux-gnu.tar.gz/md5/2fae0ae259306bbfe38a8022311aa12c +LibUnwind.v1.5.0+5.x86_64-linux-gnu.tar.gz/sha512/fe8b713dbf7d6a48793023b44ad6d79b49f5dbb538b4e585aa20bf1100634e02319b7396624ac67bd4f95f8252540fee5249698da5e8ca4a71502edef7784024 +LibUnwind.v1.5.0+5.x86_64-linux-musl.tar.gz/md5/b33f43f6626aa29d2d84180dc1512c00 +LibUnwind.v1.5.0+5.x86_64-linux-musl.tar.gz/sha512/e1d8f2c5ad4e66f230833b09ab275a091274794d633172be4bffd464dc5c5d65c37371bf5095b0b0454c7abe940e78f1f64f2598f4bf74e2607e5bbdd9a014c4 +LibUnwind.v1.5.0+5.x86_64-unknown-freebsd.tar.gz/md5/071a13b18fea587f70d19d2af3760e67 +LibUnwind.v1.5.0+5.x86_64-unknown-freebsd.tar.gz/sha512/dc38292ae835aac91b44c3fce66b08c6732285a98d8e675ad3fa53a5d86a0b780f005d2a1bd9ee67672350c2e3c5eedcc61b97fd6188839a36787507022420d1 libunwind-1.5.0.tar.gz/md5/c6923dda0675f6a4ef21426164dc8b6a libunwind-1.5.0.tar.gz/sha512/1df20ca7a8cee2f2e61294fa9b677e88fec52e9d5a329f88d05c2671c69fa462f6c18808c97ca9ff664ef57292537a844f00b18d142b1938c9da701ca95a4bab diff --git a/deps/checksums/zlib b/deps/checksums/zlib index 15e2cffa5b485..72fd884183e47 100644 --- a/deps/checksums/zlib +++ b/deps/checksums/zlib @@ -1,34 +1,34 @@ -Zlib.v1.2.13+0.aarch64-apple-darwin.tar.gz/md5/64403a5962d70d7e4b6bf7c225526144 -Zlib.v1.2.13+0.aarch64-apple-darwin.tar.gz/sha512/a7e6bb32c324943e5df3fa8501ee9d744d132db6f27033fe8ce789c1f19f26c15dc456ee8d6fc8095b427054e750ffe268500f5f69edecaa1af230b4b23535c4 -Zlib.v1.2.13+0.aarch64-linux-gnu.tar.gz/md5/a2d3265543017db03bc47b9d9778d99d -Zlib.v1.2.13+0.aarch64-linux-gnu.tar.gz/sha512/c8143445222e151d7f522a98ee8f2742571542f4e71d515e88086c9d7f27b952662ced93f40c795e0de42e3a07c0cb5e1d9d8e792347f3c068cb07ccc144a640 -Zlib.v1.2.13+0.aarch64-linux-musl.tar.gz/md5/c1f2a1c562f72c7aa4b228f57c2346d4 -Zlib.v1.2.13+0.aarch64-linux-musl.tar.gz/sha512/7ed89bc7696690c03617c7413f5456ff5a1caa0dd600880ae67132f6c9190672ae451a06d23956a1969be00bf5c8f29bfa4f5bc4ab646b3b375c350f67c993e5 -Zlib.v1.2.13+0.armv6l-linux-gnueabihf.tar.gz/md5/7dff966f7bc5dd2902fa9ce20444235b -Zlib.v1.2.13+0.armv6l-linux-gnueabihf.tar.gz/sha512/49e7b4a7c84996b697cf944b11ce06ce6064983a6a911c4539587385afa1e0119e3b1dbf816703a2c132acc90f7f114ec10631647638b59b14954382c1a82014 -Zlib.v1.2.13+0.armv6l-linux-musleabihf.tar.gz/md5/6982f19d2446559c0fd369afe84ebe4a -Zlib.v1.2.13+0.armv6l-linux-musleabihf.tar.gz/sha512/8f69dfb7fb91cd6f7c934e1acddd83f77c2ebcc1732553f41ae1adcb7805a3304d16062133ce5094a8aea18ff5eca5f7a2df5724ae5a5cb9137caee732c1bf36 -Zlib.v1.2.13+0.armv7l-linux-gnueabihf.tar.gz/md5/30579a91f8f1c96752fe9a82bc053523 -Zlib.v1.2.13+0.armv7l-linux-gnueabihf.tar.gz/sha512/64f6a0e66ee13b086609e0d070c8742de20052e1ef43da201be0007e478c65b2f0a28a3c19ca5be6537b7c8bbeb6a4b2886c15a1e47bb2bd1cfe9d5e1590a620 -Zlib.v1.2.13+0.armv7l-linux-musleabihf.tar.gz/md5/b052ad151dbc3bad78762bc06164d667 -Zlib.v1.2.13+0.armv7l-linux-musleabihf.tar.gz/sha512/b5d2de09a4d65d898cf9ba0db34327c712f42a78cd1fd0f1d77fd8798910502049be63ccfed23de5fe3b499d9e0fe3d4cbb07c72765fd54db275e92f8f1e4dc4 -Zlib.v1.2.13+0.i686-linux-gnu.tar.gz/md5/3074702010889f586b43aa3dbbda4ceb -Zlib.v1.2.13+0.i686-linux-gnu.tar.gz/sha512/92aa87c5aa3831155305276c2f0da091b5be4e8a396772e1a28650c2837ceb116dd2207329732b653a97c011abd7dd6ac1fc9574ac64cb3049ccd36fa6700748 -Zlib.v1.2.13+0.i686-linux-musl.tar.gz/md5/eff02476825ea7a53ab26b346d58f96e -Zlib.v1.2.13+0.i686-linux-musl.tar.gz/sha512/14b72607d524948198e999e3919ee01046c049b3ec441bc581c77642cf37c3d28cc3c5500a3c073d62e9b8dc1efc9661b23bb925ed9c80b5e69abaddbcb59115 -Zlib.v1.2.13+0.i686-w64-mingw32.tar.gz/md5/279d2699458b1dfec80da17dd6f32f02 -Zlib.v1.2.13+0.i686-w64-mingw32.tar.gz/sha512/fb14d27b4f4ed5eb75bf4d4377074a206610558301be89ed692cf61d1266e425edb0489511fbbec100dafc71cff2cac863a4ea4ec70cfaa94e8175b9b7add25c -Zlib.v1.2.13+0.powerpc64le-linux-gnu.tar.gz/md5/bc69de101d9159b22b7a334e2700faa6 -Zlib.v1.2.13+0.powerpc64le-linux-gnu.tar.gz/sha512/174eb4f154594d268d970d23eb6144dd2f6be41ddcfb9bc756b2ff48f0781ad0ed6571e2ead64dab0967da91517a02cd8db2b0e33a0bde9400103b5204f78e85 -Zlib.v1.2.13+0.x86_64-apple-darwin.tar.gz/md5/9a53075fc5595e638bacd25341f7ff42 -Zlib.v1.2.13+0.x86_64-apple-darwin.tar.gz/sha512/8124f677c036a288575712e201a809f44532b300fa56f8c12be9a1d7094fd644cb198c47b63d9f9f16d5509e27e7b3c59f080d4748ae489a4977fdfeae79e762 -Zlib.v1.2.13+0.x86_64-linux-gnu.tar.gz/md5/b192d547d56124262e2ae744f385efd6 -Zlib.v1.2.13+0.x86_64-linux-gnu.tar.gz/sha512/c6dca3c0a713ef2e2296bc9e9afa75e103a4cc4f00b5c905ebc5cff688904d6a454f83ab5ef3b6c66bdf425daa2fcd25825e50a3534c0ff109b13affbb686179 -Zlib.v1.2.13+0.x86_64-linux-musl.tar.gz/md5/f2a466b38b2ff1c895f630982147a950 -Zlib.v1.2.13+0.x86_64-linux-musl.tar.gz/sha512/191261d37fc501591005bf680d76bf518da261252456c4fef1c12bc572f9200a855fbd1b125bb8ad10d803eedbc53d4c9d7a2861e9a35d629fb40f87e5306f5f -Zlib.v1.2.13+0.x86_64-unknown-freebsd.tar.gz/md5/00cb91c5edede46f72fae113b3115799 -Zlib.v1.2.13+0.x86_64-unknown-freebsd.tar.gz/sha512/8894e4a89dbf10e60ed020993484dcad91a52a8d310f3dfcc53808643c8401b1e445db46a815c19d55c0e5fd1a386945d1253c16af94b00ff27ccda44941f69b -Zlib.v1.2.13+0.x86_64-w64-mingw32.tar.gz/md5/f98c68e19d9cfd24c7cec0b79d374e05 -Zlib.v1.2.13+0.x86_64-w64-mingw32.tar.gz/sha512/8e68edbdfe4e2ec6de70a724e30bc2df439901291639eca9e5aace75e31c7c6d3f47021213b8b7473b1f6ad4986f6b8695da4e24e2ea3025681e5d07dcfc067d +Zlib.v1.2.13+1.aarch64-apple-darwin.tar.gz/md5/bc44b2016065fb20cbd639b3cd5dbb88 +Zlib.v1.2.13+1.aarch64-apple-darwin.tar.gz/sha512/9cfecc16a29b0a13282846ed7d4c17c420b3f62379777d3fac61a8c9c4eeaf4214b826cd9f7479f480e951617b22c96e6ca2976a709345e16fbe7f81e9bdd83f +Zlib.v1.2.13+1.aarch64-linux-gnu.tar.gz/md5/a2d3265543017db03bc47b9d9778d99d +Zlib.v1.2.13+1.aarch64-linux-gnu.tar.gz/sha512/c8143445222e151d7f522a98ee8f2742571542f4e71d515e88086c9d7f27b952662ced93f40c795e0de42e3a07c0cb5e1d9d8e792347f3c068cb07ccc144a640 +Zlib.v1.2.13+1.aarch64-linux-musl.tar.gz/md5/c1f2a1c562f72c7aa4b228f57c2346d4 +Zlib.v1.2.13+1.aarch64-linux-musl.tar.gz/sha512/7ed89bc7696690c03617c7413f5456ff5a1caa0dd600880ae67132f6c9190672ae451a06d23956a1969be00bf5c8f29bfa4f5bc4ab646b3b375c350f67c993e5 +Zlib.v1.2.13+1.armv6l-linux-gnueabihf.tar.gz/md5/7dff966f7bc5dd2902fa9ce20444235b +Zlib.v1.2.13+1.armv6l-linux-gnueabihf.tar.gz/sha512/49e7b4a7c84996b697cf944b11ce06ce6064983a6a911c4539587385afa1e0119e3b1dbf816703a2c132acc90f7f114ec10631647638b59b14954382c1a82014 +Zlib.v1.2.13+1.armv6l-linux-musleabihf.tar.gz/md5/6982f19d2446559c0fd369afe84ebe4a +Zlib.v1.2.13+1.armv6l-linux-musleabihf.tar.gz/sha512/8f69dfb7fb91cd6f7c934e1acddd83f77c2ebcc1732553f41ae1adcb7805a3304d16062133ce5094a8aea18ff5eca5f7a2df5724ae5a5cb9137caee732c1bf36 +Zlib.v1.2.13+1.armv7l-linux-gnueabihf.tar.gz/md5/30579a91f8f1c96752fe9a82bc053523 +Zlib.v1.2.13+1.armv7l-linux-gnueabihf.tar.gz/sha512/64f6a0e66ee13b086609e0d070c8742de20052e1ef43da201be0007e478c65b2f0a28a3c19ca5be6537b7c8bbeb6a4b2886c15a1e47bb2bd1cfe9d5e1590a620 +Zlib.v1.2.13+1.armv7l-linux-musleabihf.tar.gz/md5/b052ad151dbc3bad78762bc06164d667 +Zlib.v1.2.13+1.armv7l-linux-musleabihf.tar.gz/sha512/b5d2de09a4d65d898cf9ba0db34327c712f42a78cd1fd0f1d77fd8798910502049be63ccfed23de5fe3b499d9e0fe3d4cbb07c72765fd54db275e92f8f1e4dc4 +Zlib.v1.2.13+1.i686-linux-gnu.tar.gz/md5/3074702010889f586b43aa3dbbda4ceb +Zlib.v1.2.13+1.i686-linux-gnu.tar.gz/sha512/92aa87c5aa3831155305276c2f0da091b5be4e8a396772e1a28650c2837ceb116dd2207329732b653a97c011abd7dd6ac1fc9574ac64cb3049ccd36fa6700748 +Zlib.v1.2.13+1.i686-linux-musl.tar.gz/md5/eff02476825ea7a53ab26b346d58f96e +Zlib.v1.2.13+1.i686-linux-musl.tar.gz/sha512/14b72607d524948198e999e3919ee01046c049b3ec441bc581c77642cf37c3d28cc3c5500a3c073d62e9b8dc1efc9661b23bb925ed9c80b5e69abaddbcb59115 +Zlib.v1.2.13+1.i686-w64-mingw32.tar.gz/md5/138cb27334b8f6f9e818131ac394bf43 +Zlib.v1.2.13+1.i686-w64-mingw32.tar.gz/sha512/07fbf4a21f6cb5a6120be253e5769b8bbdf60658f9f3705222307fbe203d8710de59fd3dab7a35714ebe1a7385600d4e1b01eae0b1addca47f9d8d862173e667 +Zlib.v1.2.13+1.powerpc64le-linux-gnu.tar.gz/md5/bc69de101d9159b22b7a334e2700faa6 +Zlib.v1.2.13+1.powerpc64le-linux-gnu.tar.gz/sha512/174eb4f154594d268d970d23eb6144dd2f6be41ddcfb9bc756b2ff48f0781ad0ed6571e2ead64dab0967da91517a02cd8db2b0e33a0bde9400103b5204f78e85 +Zlib.v1.2.13+1.x86_64-apple-darwin.tar.gz/md5/60279d648bce4801cd0e311ea95a6481 +Zlib.v1.2.13+1.x86_64-apple-darwin.tar.gz/sha512/921fc557317f87012d76f5d2cb0a7bbed29cdfdb2274ed6d37577f8e99dda2afb2a8dd4725d720eb8fb0a93c0d3afe68dd54fdd3a6e7cb07c15607a8aed72f82 +Zlib.v1.2.13+1.x86_64-linux-gnu.tar.gz/md5/b192d547d56124262e2ae744f385efd6 +Zlib.v1.2.13+1.x86_64-linux-gnu.tar.gz/sha512/c6dca3c0a713ef2e2296bc9e9afa75e103a4cc4f00b5c905ebc5cff688904d6a454f83ab5ef3b6c66bdf425daa2fcd25825e50a3534c0ff109b13affbb686179 +Zlib.v1.2.13+1.x86_64-linux-musl.tar.gz/md5/f2a466b38b2ff1c895f630982147a950 +Zlib.v1.2.13+1.x86_64-linux-musl.tar.gz/sha512/191261d37fc501591005bf680d76bf518da261252456c4fef1c12bc572f9200a855fbd1b125bb8ad10d803eedbc53d4c9d7a2861e9a35d629fb40f87e5306f5f +Zlib.v1.2.13+1.x86_64-unknown-freebsd.tar.gz/md5/36e53efdafdb8b8e1fb18817ea40c9ab +Zlib.v1.2.13+1.x86_64-unknown-freebsd.tar.gz/sha512/3067eace2a46b45c071dd1d2c046ab21e3f4a34b87346905bf4c00ef4ea57f41c4c30e32cbd5d4b60a560fa45aeeba7b0ce95566c0889f06f00f7a25de771cb1 +Zlib.v1.2.13+1.x86_64-w64-mingw32.tar.gz/md5/4c14730c6e89a3b05dcf352007f9c1e5 +Zlib.v1.2.13+1.x86_64-w64-mingw32.tar.gz/sha512/b6fbfe93d0c4fc6ebb740dbe0aebaa31aa5ecf352589452f6baac3ee28514531a1d0de9795634f97774ebb492dd23dee9f7865c2b8ba3f70c7f03cdc5430e85a zlib-04f42ceca40f73e2978b50e93806c2a18c1281fc.tar.gz/md5/60a49c89b9409dd91c1b039266f7bd0c zlib-04f42ceca40f73e2978b50e93806c2a18c1281fc.tar.gz/sha512/83122539da9399ce5f51c2ecbc38a627405334a9a6d53a024341353c1263a1e3aef7498f30ee281a49b3022be70e992eae475691e33da7a9c6a59b83207bd688 diff --git a/deps/clang.version b/deps/clang.version index c33134b5cb0f0..4c5f1ecc02062 100644 --- a/deps/clang.version +++ b/deps/clang.version @@ -1,4 +1,4 @@ ## jll artifact # Clang (paired with LLVM, only here as a JLL download) CLANG_JLL_NAME := Clang -CLANG_JLL_VER := 15.0.7+7 +CLANG_JLL_VER := 15.0.7+8 diff --git a/deps/libgit2.mk b/deps/libgit2.mk index 014fdc0108f7c..d68a7a80d6d5b 100644 --- a/deps/libgit2.mk +++ b/deps/libgit2.mk @@ -29,7 +29,7 @@ endif ifeq ($(BUILD_OS),WINNT) LIBGIT2_OPTS += -G"MSYS Makefiles" else -LIBGIT2_OPTS += -DBUILD_CLAR=OFF -DDLLTOOL=`which $(CROSS_COMPILE)dlltool` +LIBGIT2_OPTS += -DBUILD_TESTS=OFF -DDLLTOOL=`which $(CROSS_COMPILE)dlltool` LIBGIT2_OPTS += -DCMAKE_FIND_ROOT_PATH=/usr/$(XC_HOST) -DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY endif endif diff --git a/deps/libgit2.version b/deps/libgit2.version index b8cefc3c5c6f3..5233b67754dad 100644 --- a/deps/libgit2.version +++ b/deps/libgit2.version @@ -3,8 +3,8 @@ LIBGIT2_JLL_NAME := LibGit2 ## source build -LIBGIT2_BRANCH=v1.6.1 -LIBGIT2_SHA1=8a871d13b7f4e186b8ad943ae5a7fcf30be52e67 +LIBGIT2_BRANCH=v1.6.4 +LIBGIT2_SHA1=e6325351ceee58cf56f58bdce61b38907805544f ## Other deps # Specify the version of the Mozilla CA Certificate Store to obtain. diff --git a/deps/libssh2.version b/deps/libssh2.version index 3d5b2bb98d7eb..7fff90885f6a3 100644 --- a/deps/libssh2.version +++ b/deps/libssh2.version @@ -2,6 +2,6 @@ LIBSSH2_JLL_NAME := LibSSH2 ## source build -LIBSSH2_VER := 1.10.2 -LIBSSH2_BRANCH=libssh2-1.10.0 -LIBSSH2_SHA1=635caa90787220ac3773c1d5ba11f1236c22eae8 +LIBSSH2_VER := 1.11.0 +LIBSSH2_BRANCH=libssh2-1.11.0 +LIBSSH2_SHA1=1c3f1b7da588f2652260285529ec3c1f1125eb4e diff --git a/deps/libtracyclient.version b/deps/libtracyclient.version index 0baf8504261f1..60b5a3e8ce630 100644 --- a/deps/libtracyclient.version +++ b/deps/libtracyclient.version @@ -1,6 +1,6 @@ ## jll artifact LIBTRACYCLIENT_JLL_NAME := LibTracyClient -LIBTRACYCLIENT_JLL_VER := 0.9.1+2 +LIBTRACYCLIENT_JLL_VER := 0.9.1+5 ## source build LIBTRACYCLIENT_VER := 0.9.1 diff --git a/deps/lld.version b/deps/lld.version index 9dc25700fd088..64e8aca55fe84 100644 --- a/deps/lld.version +++ b/deps/lld.version @@ -1,3 +1,3 @@ ## jll artifact LLD_JLL_NAME := LLD -LLD_JLL_VER := 15.0.7+7 +LLD_JLL_VER := 15.0.7+8 diff --git a/deps/llvm-tools.version b/deps/llvm-tools.version index 6166718149c66..da7a4ec18bdcc 100644 --- a/deps/llvm-tools.version +++ b/deps/llvm-tools.version @@ -1,5 +1,5 @@ ## jll artifact # LLVM_tools (downloads LLVM_jll to get things like `lit` and `opt`) LLVM_TOOLS_JLL_NAME := LLVM -LLVM_TOOLS_JLL_VER := 15.0.7+7 -LLVM_TOOLS_ASSERT_JLL_VER := 15.0.7+7 +LLVM_TOOLS_JLL_VER := 15.0.7+8 +LLVM_TOOLS_ASSERT_JLL_VER := 15.0.7+8 diff --git a/deps/llvm.version b/deps/llvm.version index 06473a9ed2960..52a3a11e1c145 100644 --- a/deps/llvm.version +++ b/deps/llvm.version @@ -2,7 +2,7 @@ ## jll artifact LLVM_JLL_NAME := libLLVM -LLVM_ASSERT_JLL_VER := 15.0.7+7 +LLVM_ASSERT_JLL_VER := 15.0.7+8 ## source build # Version number of LLVM LLVM_VER := 15.0.7 diff --git a/deps/objconv.version b/deps/objconv.version index 322c8fa828a17..185354e23b9e1 100644 --- a/deps/objconv.version +++ b/deps/objconv.version @@ -1,7 +1,7 @@ ## jll artifact # Objconv (we don't ship this, so no need for a fake JLL; therefore we specify the JLL_VER here instead of in a `stdlib/Objconv_jll/Project.toml` file) OBJCONV_JLL_NAME := Objconv -OBJCONV_JLL_VER := 2.49.1+0 +OBJCONV_JLL_VER := 2.53.0+0 ## source build -OBJCONV_VER := 2.49.1 +OBJCONV_VER := 2.53.0 diff --git a/stdlib/CompilerSupportLibraries_jll/Project.toml b/stdlib/CompilerSupportLibraries_jll/Project.toml index 4c7aa35a99730..6256c69d9bc10 100644 --- a/stdlib/CompilerSupportLibraries_jll/Project.toml +++ b/stdlib/CompilerSupportLibraries_jll/Project.toml @@ -4,7 +4,7 @@ uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" # NOTE: When updating this, also make sure to update the value # `CSL_NEXT_GLIBCXX_VERSION` in `deps/csl.mk`, to properly disable # automatic usage of BB-built CSLs on extremely up-to-date systems! -version = "1.0.5+0" +version = "1.0.5+1" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/GMP_jll/Project.toml b/stdlib/GMP_jll/Project.toml index 510b6f6a49c60..e4af2a8674a51 100644 --- a/stdlib/GMP_jll/Project.toml +++ b/stdlib/GMP_jll/Project.toml @@ -1,6 +1,6 @@ name = "GMP_jll" uuid = "781609d7-10c4-51f6-84f2-b8444358ff6d" -version = "6.2.1+2" +version = "6.2.1+5" [deps] Artifacts = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" diff --git a/stdlib/LLD_jll/Project.toml b/stdlib/LLD_jll/Project.toml index 38b89e449e399..0a0cd4aa6924f 100644 --- a/stdlib/LLD_jll/Project.toml +++ b/stdlib/LLD_jll/Project.toml @@ -1,6 +1,6 @@ name = "LLD_jll" uuid = "d55e3150-da41-5e91-b323-ecfd1eec6109" -version = "15.0.7+7" +version = "15.0.7+8" [deps] Zlib_jll = "83775a58-1f1d-513f-b197-d71354ab007a" diff --git a/stdlib/LibCURL_jll/Project.toml b/stdlib/LibCURL_jll/Project.toml index 0ef46598b3118..b4f979b4815ca 100644 --- a/stdlib/LibCURL_jll/Project.toml +++ b/stdlib/LibCURL_jll/Project.toml @@ -1,6 +1,6 @@ name = "LibCURL_jll" uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.0.1+0" +version = "8.0.1+1" [deps] LibSSH2_jll = "29816b5a-b9ab-546f-933c-edad1886dfa8" diff --git a/stdlib/LibGit2_jll/Project.toml b/stdlib/LibGit2_jll/Project.toml index 4c16c1fb72e42..b917061847fb8 100644 --- a/stdlib/LibGit2_jll/Project.toml +++ b/stdlib/LibGit2_jll/Project.toml @@ -1,6 +1,6 @@ name = "LibGit2_jll" uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" -version = "1.6.1+0" +version = "1.6.4+0" [deps] MbedTLS_jll = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" diff --git a/stdlib/LibGit2_jll/test/runtests.jl b/stdlib/LibGit2_jll/test/runtests.jl index 32ada173f01a0..7deb3b5291f28 100644 --- a/stdlib/LibGit2_jll/test/runtests.jl +++ b/stdlib/LibGit2_jll/test/runtests.jl @@ -7,5 +7,5 @@ using Test, Libdl, LibGit2_jll minor = Ref{Cint}(0) patch = Ref{Cint}(0) @test ccall((:git_libgit2_version, libgit2), Cint, (Ref{Cint}, Ref{Cint}, Ref{Cint}), major, minor, patch) == 0 - @test VersionNumber(major[], minor[], patch[]) == v"1.6.1" + @test VersionNumber(major[], minor[], patch[]) == v"1.6.4" end diff --git a/stdlib/LibSSH2_jll/Project.toml b/stdlib/LibSSH2_jll/Project.toml index 8334a86d1c23a..def4fb02e399c 100644 --- a/stdlib/LibSSH2_jll/Project.toml +++ b/stdlib/LibSSH2_jll/Project.toml @@ -1,6 +1,6 @@ name = "LibSSH2_jll" uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" -version = "1.10.2+0" +version = "1.11.0+1" [deps] MbedTLS_jll = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" diff --git a/stdlib/LibUV_jll/Project.toml b/stdlib/LibUV_jll/Project.toml index 2954809921440..605c1115b3d34 100644 --- a/stdlib/LibUV_jll/Project.toml +++ b/stdlib/LibUV_jll/Project.toml @@ -1,6 +1,6 @@ name = "LibUV_jll" uuid = "183b4373-6708-53ba-ad28-60e28bb38547" -version = "2.0.1+13" +version = "2.0.1+14" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/LibUnwind_jll/Project.toml b/stdlib/LibUnwind_jll/Project.toml index 1f5f695a26ba4..3b0bb28817e13 100644 --- a/stdlib/LibUnwind_jll/Project.toml +++ b/stdlib/LibUnwind_jll/Project.toml @@ -1,6 +1,6 @@ name = "LibUnwind_jll" uuid = "745a5e78-f969-53e9-954f-d19f2f74f4e3" -version = "1.5.0+4" +version = "1.5.0+5" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/MPFR_jll/Project.toml b/stdlib/MPFR_jll/Project.toml index 39f99815832eb..e4b24d070db55 100644 --- a/stdlib/MPFR_jll/Project.toml +++ b/stdlib/MPFR_jll/Project.toml @@ -1,6 +1,6 @@ name = "MPFR_jll" uuid = "3a97d323-0669-5f0c-9066-3539efd106a3" -version = "4.2.0+0" +version = "4.2.0+1" [deps] GMP_jll = "781609d7-10c4-51f6-84f2-b8444358ff6d" diff --git a/stdlib/MbedTLS_jll/Project.toml b/stdlib/MbedTLS_jll/Project.toml index 2e8d0d384f88a..27d4884d099ad 100644 --- a/stdlib/MbedTLS_jll/Project.toml +++ b/stdlib/MbedTLS_jll/Project.toml @@ -1,6 +1,6 @@ name = "MbedTLS_jll" uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" -version = "2.28.2+0" +version = "2.28.2+1" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/OpenLibm_jll/Project.toml b/stdlib/OpenLibm_jll/Project.toml index 7f02fbc81ce1b..f6162f402bfcf 100644 --- a/stdlib/OpenLibm_jll/Project.toml +++ b/stdlib/OpenLibm_jll/Project.toml @@ -1,6 +1,6 @@ name = "OpenLibm_jll" uuid = "05823500-19ac-5b8b-9628-191a04bc5112" -version = "0.8.1+0" +version = "0.8.1+2" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/PCRE2_jll/Project.toml b/stdlib/PCRE2_jll/Project.toml index d630c04383bfb..788d6b733234f 100644 --- a/stdlib/PCRE2_jll/Project.toml +++ b/stdlib/PCRE2_jll/Project.toml @@ -1,6 +1,6 @@ name = "PCRE2_jll" uuid = "efcefdf7-47ab-520b-bdef-62a2eaa19f15" -version = "10.42.0+0" +version = "10.42.0+1" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/SuiteSparse_jll/Project.toml b/stdlib/SuiteSparse_jll/Project.toml index dd88fc967079b..6c23952e5c6b6 100644 --- a/stdlib/SuiteSparse_jll/Project.toml +++ b/stdlib/SuiteSparse_jll/Project.toml @@ -1,6 +1,6 @@ name = "SuiteSparse_jll" uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.2.0+0" +version = "7.2.0+1" [deps] libblastrampoline_jll = "8e850b90-86db-534c-a0d3-1478176c7d93" diff --git a/stdlib/Zlib_jll/Project.toml b/stdlib/Zlib_jll/Project.toml index 575863062d8bb..b1fa9576af3ec 100644 --- a/stdlib/Zlib_jll/Project.toml +++ b/stdlib/Zlib_jll/Project.toml @@ -1,6 +1,6 @@ name = "Zlib_jll" uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.13+0" +version = "1.2.13+1" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/dSFMT_jll/Project.toml b/stdlib/dSFMT_jll/Project.toml index 4e3e80f918f0b..a83775f625987 100644 --- a/stdlib/dSFMT_jll/Project.toml +++ b/stdlib/dSFMT_jll/Project.toml @@ -1,6 +1,6 @@ name = "dSFMT_jll" uuid = "05ff407c-b0c1-5878-9df8-858cc2e60c36" -version = "2.2.4+1" +version = "2.2.4+4" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/libLLVM_jll/Project.toml b/stdlib/libLLVM_jll/Project.toml index 804fd0f320d5e..b0bd480fc99fc 100644 --- a/stdlib/libLLVM_jll/Project.toml +++ b/stdlib/libLLVM_jll/Project.toml @@ -1,6 +1,6 @@ name = "libLLVM_jll" uuid = "8f36deef-c2a5-5394-99ed-8e07531fb29a" -version = "15.0.7+7" +version = "15.0.7+8" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/libblastrampoline_jll/Project.toml b/stdlib/libblastrampoline_jll/Project.toml index 4699baa7dad23..6ee704bc7e1c4 100644 --- a/stdlib/libblastrampoline_jll/Project.toml +++ b/stdlib/libblastrampoline_jll/Project.toml @@ -1,6 +1,6 @@ name = "libblastrampoline_jll" uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.8.0+0" +version = "5.8.0+1" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/nghttp2_jll/Project.toml b/stdlib/nghttp2_jll/Project.toml index b8a9394c50e37..d75e0780bd01a 100644 --- a/stdlib/nghttp2_jll/Project.toml +++ b/stdlib/nghttp2_jll/Project.toml @@ -1,6 +1,6 @@ name = "nghttp2_jll" uuid = "8e850ede-7688-5339-a07c-302acd2aaf8d" -version = "1.52.0+0" +version = "1.52.0+1" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/p7zip_jll/Project.toml b/stdlib/p7zip_jll/Project.toml index 4c9bf62ad7ec1..b1bd4bc9e0a1a 100644 --- a/stdlib/p7zip_jll/Project.toml +++ b/stdlib/p7zip_jll/Project.toml @@ -1,6 +1,6 @@ name = "p7zip_jll" uuid = "3f19e933-33d8-53b3-aaab-bd5110c3b7a0" -version = "17.4.0+0" +version = "17.4.0+2" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" From e22d308e17e607a1190ae1ce47e2e8a2333dc75c Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Wed, 9 Aug 2023 16:45:28 -0400 Subject: [PATCH 067/413] fix #50438, use default pool for at-threads (#50845) (cherry picked from commit 744aa79c2c2655de526f02dcd1987ae1d7db6f6d) --- base/threadingconstructs.jl | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/base/threadingconstructs.jl b/base/threadingconstructs.jl index e4f14e26ac5a9..7a70132a9dccc 100644 --- a/base/threadingconstructs.jl +++ b/base/threadingconstructs.jl @@ -146,7 +146,13 @@ function threading_run(fun, static) for i = 1:n t = Task(() -> fun(i)) # pass in tid t.sticky = static - static && ccall(:jl_set_task_tid, Cint, (Any, Cint), t, tid_offset + i-1) + if static + ccall(:jl_set_task_tid, Cint, (Any, Cint), t, tid_offset + i-1) + else + # TODO: this should be the current pool (except interactive) if there + # are ever more than two pools. + ccall(:jl_set_task_threadpoolid, Cint, (Any, Int8), t, _sym_to_tpid(:default)) + end tasks[i] = t schedule(t) end From c33aad8fba070f6b4043fad7ded917831090c0d0 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Mon, 24 Jul 2023 21:33:22 +0530 Subject: [PATCH 068/413] `Array(::AbstractRange)` should return an `Array` (#50568) Currently, `Array(r::AbstractRange)` falls back to `vcat(r)`, but certain ranges may choose to specialize `vcat(r::AbstractRange)` to not return an `Array`. This PR ensures that `Array(r)` always returns an `Array`. At present, there's some code overlap with `vcat` (just above the `Array` method added in this PR). Perhaps some of these may be replaced by `unsafe_copyto!`, but the tests for ranges include some special cases that don't support `getindex`, which complicates things a bit. I've not done this for now. In any case, the common bit of code is pretty simple, so perhaps the duplication is harmless. (cherry picked from commit 3cc05908a61aec885f3a4fc3fc9cb13cf3524108) --- base/range.jl | 17 +++++++++++++++-- test/ranges.jl | 25 ++++++++++++++++++------- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/base/range.jl b/base/range.jl index bac5c389bd9da..356ae8ab49e57 100644 --- a/base/range.jl +++ b/base/range.jl @@ -1376,8 +1376,21 @@ function vcat(rs::AbstractRange{T}...) where T return a end -Array{T,1}(r::AbstractRange{T}) where {T} = vcat(r) -collect(r::AbstractRange) = vcat(r) +# This method differs from that for AbstractArrays as it +# use iteration instead of indexing. This works even if certain +# non-standard ranges don't support indexing. +# See https://github.com/JuliaLang/julia/pull/27302 +# Similarly, collect(r::AbstractRange) uses iteration +function Array{T,1}(r::AbstractRange{T}) where {T} + a = Vector{T}(undef, length(r)) + i = 1 + for x in r + @inbounds a[i] = x + i += 1 + end + return a +end +collect(r::AbstractRange) = Array(r) _reverse(r::OrdinalRange, ::Colon) = (:)(last(r), negate(step(r)), first(r)) function _reverse(r::StepRangeLen, ::Colon) diff --git a/test/ranges.jl b/test/ranges.jl index c9cf9228f091b..94548a76326d8 100644 --- a/test/ranges.jl +++ b/test/ranges.jl @@ -1802,6 +1802,7 @@ Base.div(x::Displacement, y::Displacement) = Displacement(div(x.val, y.val)) # required for collect (summing lengths); alternatively, should length return Int by default? Base.promote_rule(::Type{Displacement}, ::Type{Int}) = Int Base.convert(::Type{Int}, x::Displacement) = x.val +Base.Int(x::Displacement) = x.val # Unsigned complement, for testing checked_length struct UPosition <: Unsigned @@ -2491,11 +2492,21 @@ end @test Core.Compiler.is_foldable(Base.infer_effects(check_ranges, (UnitRange{Int},UnitRange{Int}))) # TODO JET.@test_opt check_ranges(1:2, 3:4) -@testset "isassigned" begin - for (r, val) in ((1:3, 3), (1:big(2)^65, big(2)^65)) - @test isassigned(r, lastindex(r)) - # test that the indexing actually succeeds - @test r[end] == val - @test_throws ArgumentError isassigned(r, true) - end +@testset "collect with specialized vcat" begin + struct OneToThree <: AbstractUnitRange{Int} end + Base.size(r::OneToThree) = (3,) + Base.first(r::OneToThree) = 1 + Base.length(r::OneToThree) = 3 + Base.last(r::OneToThree) = 3 + function Base.getindex(r::OneToThree, i::Int) + checkbounds(r, i) + i + end + Base.vcat(r::OneToThree) = r + r = OneToThree() + a = Array(r) + @test a isa Vector{Int} + @test a == r + @test collect(r) isa Vector{Int} + @test collect(r) == r end From 3e133c9517e1740c1fe59bf32628c6bf619261b3 Mon Sep 17 00:00:00 2001 From: Oscar Smith Date: Wed, 26 Jul 2023 06:21:19 -0400 Subject: [PATCH 069/413] fix hashing regression. (#50655) This fixes 2 bugs introduced by #49996 and #50041. Closes #50628. (cherry picked from commit c777c714ff03c76ebbda07992639e8bced0983e2) --- base/float.jl | 16 +++++++++------- base/rational.jl | 3 ++- test/hashing.jl | 15 +++++++++++++++ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/base/float.jl b/base/float.jl index d5280ef74fbce..fc4cef09b48ad 100644 --- a/base/float.jl +++ b/base/float.jl @@ -688,22 +688,24 @@ function hash(x::Real, h::UInt) den_z = trailing_zeros(den) den >>= den_z pow += num_z - den_z - - # handle values representable as Int64, UInt64, Float64 + # If the real can be represented as an Int64, UInt64, or Float64, hash as those types. + # To be an Integer the denominator must be 1 and the power must be non-negative. if den == 1 + # left = ceil(log2(num*2^pow)) left = top_set_bit(abs(num)) + pow - right = pow + den_z - if -1074 <= right - if 0 <= right + # 2^-1074 is the minimum Float64 so if the power is smaller, not a Float64 + if -1074 <= pow + if 0 <= pow # if pow is non-negative, it is an integer left <= 63 && return hash(Int64(num) << Int(pow), h) left <= 64 && !signbit(num) && return hash(UInt64(num) << Int(pow), h) end # typemin(Int64) handled by Float64 case - left <= 1024 && left - right <= 53 && return hash(ldexp(Float64(num), pow), h) + # 2^1024 is the maximum Float64 so if the power is greater, not a Float64 + # Float64s only have 53 mantisa bits (including implicit bit) + left <= 1024 && left - pow <= 53 && return hash(ldexp(Float64(num), pow), h) end else h = hash_integer(den, h) end - # handle generic rational values h = hash_integer(pow, h) h = hash_integer(num, h) diff --git a/base/rational.jl b/base/rational.jl index baca2397c42ff..5b9ff99ea7a6c 100644 --- a/base/rational.jl +++ b/base/rational.jl @@ -549,9 +549,10 @@ function hash(x::Rational{<:BitInteger64}, h::UInt) num, den = Base.numerator(x), Base.denominator(x) den == 1 && return hash(num, h) den == 0 && return hash(ifelse(num > 0, Inf, -Inf), h) - if isodd(den) + if isodd(den) # since den != 1, this rational can't be a Float64 pow = trailing_zeros(num) num >>= pow + h = hash_integer(den, h) else pow = trailing_zeros(den) den >>= pow diff --git a/test/hashing.jl b/test/hashing.jl index 1c7c37d00f93b..8146edafea130 100644 --- a/test/hashing.jl +++ b/test/hashing.jl @@ -310,3 +310,18 @@ struct AUnionParam{T<:Union{Nothing,Float32,Float64}} end @test Type{AUnionParam{<:Union{Nothing,Float32,Float64}}} === Type{AUnionParam} @test Type{AUnionParam.body}.hash == 0 @test Type{Base.Broadcast.Broadcasted}.hash != 0 + + +@testset "issue 50628" begin + # test hashing of rationals that equal floats are equal to the float hash + @test hash(5//2) == hash(big(5)//2) == hash(2.5) + # test hashing of rational that are integers hash to the integer + @test hash(Int64(5)^25) == hash(big(5)^25) == hash(Int64(5)^25//1) == hash(big(5)^25//1) + # test integer/rational that don't fit in Float64 don't hash as Float64 + @test hash(Int64(5)^25) != hash(5.0^25) + @test hash((Int64(5)//2)^25) == hash(big(5//2)^25) + # test integer/rational that don't fit in Float64 don't hash as Float64 + @test hash((Int64(5)//2)^25) != hash(2.5^25) + # test hashing of rational with odd denominator + @test hash(5//3) == hash(big(5)//3) +end From 27bc777b6d16550d125eb37532a0924d9b02d2de Mon Sep 17 00:00:00 2001 From: Sam Buercklin Date: Thu, 10 Aug 2023 04:55:45 -0400 Subject: [PATCH 070/413] Add `Base.get_extension` to docs/API (#50860) The documentation of `Pkg.jl` is instructing developers to rely on the existence of this function, and there doesn't seem to be any alternative which is a part of the API that developers can use instead on to guarantee forward compatibility for the same behavior. `Base.get_extension` is [referred to explicitly](https://pkgdocs.julialang.org/v1.9/creating-packages/#Backwards-compatibility) in the `Pkg.jl` docs to conditionally use package extensions vs `Requires.jl`. The `Pkg.jl` docs suggest ```julia if !isdefined(Base, :get_extension) include("../ext/PlottingContourExt.jl") end ``` to transition from "normal dependency to extension," which will break and automatically load the extension in future versions should `Base.get_extension` go away. `Base.get_extension` is the only way (that I know of) to directly access the module associated with a package extension, which can be a useful utility as well. (cherry picked from commit d1759bcde8e662e6bb7aaff94466b3ca1f3cf43b) --- doc/src/base/base.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/base/base.md b/doc/src/base/base.md index bb72b94293c6b..5851439408775 100644 --- a/doc/src/base/base.md +++ b/doc/src/base/base.md @@ -464,6 +464,7 @@ Base.locate_package Base.require Base.compilecache Base.isprecompiled +Base.get_extension ``` ## Internals From 185dd81f7d5f2262a8286e54b22c395cf3838c4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Guedes?= Date: Thu, 10 Aug 2023 08:07:57 -0300 Subject: [PATCH 071/413] Makes IntrusiveLinkedListSynchronized mutable to avoid allocation on poptask (#50802) Currently `poptask` is allocating every time it calls into `jl_task_get_next` due to `StickyWorkqueue` (`IntrusiveLinkedListSynchronized`) being immutable and requiring an allocation to be used as `Any` on the `ccall`. The allocations can be seen in the following snippet: ``` function work() done = 0.0 l = Threads.SpinLock() Threads.@sync for _ in 1:(Threads.nthreads() / 2) Threads.@spawn begin v = 1.0 for i in 1:(1<<33) v *= 1.0001 if i % (1 << 13) == 0 yield() end end Base.@lock_nofail l done += v end end return done end julia> @time work() 15.758794 seconds (5.03 M allocations: 153.523 MiB, 0.35% gc time) ``` Which after the change becomes: ``` julia> @time work() 15.907513 seconds (67 allocations: 4.719 KiB) ``` (cherry picked from commit 2f03072436e2a40549e35b56a84c40b71abbdf5a) --- base/task.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/task.jl b/base/task.jl index 5a1b37d4252a8..db2f7e22bce67 100644 --- a/base/task.jl +++ b/base/task.jl @@ -691,7 +691,7 @@ end ## scheduler and work queue -struct IntrusiveLinkedListSynchronized{T} +mutable struct IntrusiveLinkedListSynchronized{T} queue::IntrusiveLinkedList{T} lock::Threads.SpinLock IntrusiveLinkedListSynchronized{T}() where {T} = new(IntrusiveLinkedList{T}(), Threads.SpinLock()) From 8ad72d3144c505a082575e8c50c7e52654e56ff0 Mon Sep 17 00:00:00 2001 From: pchintalapudi <34727397+pchintalapudi@users.noreply.github.com> Date: Wed, 26 Jul 2023 13:34:54 +0000 Subject: [PATCH 072/413] Reuse incremental JIT compilation for --image-codegen (#50649) We don't need to merge all of the workqueue modules when performing compilation with `--image-codegen` set, we just need the global variable initializers to be defined before they're used in one of the modules. Therefore we can do this by compiling all of the global variable initializers upfront, so that later references will link them properly. (cherry picked from commit ff14eafd803558f4c1f9ecdeecc44d3a4caa7343) --- src/jitlayers.cpp | 79 +++++++++++++++++++++----------- test/llvmpasses/image-codegen.jl | 3 +- 2 files changed, 54 insertions(+), 28 deletions(-) diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index ae4a2ed02fb7e..6b729ea088335 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -141,11 +141,12 @@ void jl_link_global(GlobalVariable *GV, void *addr) JL_NOTSAFEPOINT ++LinkedGlobals; Constant *P = literal_static_pointer_val(addr, GV->getValueType()); GV->setInitializer(P); + GV->setDSOLocal(true); if (jl_options.image_codegen) { // If we are forcing imaging mode codegen for debugging, // emit external non-const symbol to avoid LLVM optimizing the code // similar to non-imaging mode. - GV->setLinkage(GlobalValue::ExternalLinkage); + assert(GV->hasExternalLinkage()); } else { GV->setConstant(true); @@ -162,6 +163,23 @@ void jl_jit_globals(std::map &globals) JL_NOTSAFEPOINT } } +// used for image_codegen, where we keep all the gvs external +// so we can't jit them directly into each module +static orc::ThreadSafeModule jl_get_globals_module(orc::ThreadSafeContext &ctx, bool imaging_mode, const DataLayout &DL, const Triple &T, std::map &globals) JL_NOTSAFEPOINT +{ + auto lock = ctx.getLock(); + auto GTSM = jl_create_ts_module("globals", ctx, imaging_mode, DL, T); + auto GM = GTSM.getModuleUnlocked(); + for (auto &global : globals) { + auto GV = global.second; + auto GV2 = new GlobalVariable(*GM, GV->getValueType(), GV->isConstant(), GlobalValue::ExternalLinkage, literal_static_pointer_val(global.first, GV->getValueType()), GV->getName(), nullptr, GV->getThreadLocalMode(), GV->getAddressSpace(), false); + GV2->copyAttributesFrom(GV); + GV2->setDSOLocal(true); + GV2->setAlignment(GV->getAlign()); + } + return GTSM; +} + // this generates llvm code for the lambda info // and adds the result to the jitlayers // (and the shadow module), @@ -211,22 +229,20 @@ static jl_callptr_t _jl_compile_codeinst( if (params._shared_module) jl_ExecutionEngine->addModule(orc::ThreadSafeModule(std::move(params._shared_module), params.tsctx)); - if (!params.imaging) { - StringMap NewExports; + + // In imaging mode, we can't inline global variable initializers in order to preserve + // the fiction that we don't know what loads from the global will return. Thus, we + // need to emit a separate module for the globals before any functions are compiled, + // to ensure that the globals are defined when they are compiled. + if (params.imaging) { + jl_ExecutionEngine->addModule(jl_get_globals_module(params.tsctx, params.imaging, params.DL, params.TargetTriple, params.global_targets)); + } else { StringMap NewGlobals; for (auto &global : params.globals) { NewGlobals[global.second->getName()] = global.first; } for (auto &def : emitted) { - orc::ThreadSafeModule &TSM = std::get<0>(def.second); - //The underlying context object is still locked because params is not destroyed yet - auto M = TSM.getModuleUnlocked(); - for (auto &F : M->global_objects()) { - if (!F.isDeclaration() && F.getLinkage() == GlobalValue::ExternalLinkage) { - NewExports[F.getName()] = &TSM; - } - } - // Let's link all globals here also (for now) + auto M = std::get<0>(def.second).getModuleUnlocked(); for (auto &GV : M->globals()) { auto InitValue = NewGlobals.find(GV.getName()); if (InitValue != NewGlobals.end()) { @@ -234,23 +250,32 @@ static jl_callptr_t _jl_compile_codeinst( } } } - DenseMap Queued; - std::vector Stack; - for (auto &def : emitted) { - // Add the results to the execution engine now - orc::ThreadSafeModule &M = std::get<0>(def.second); - jl_add_to_ee(M, NewExports, Queued, Stack); - assert(Queued.empty() && Stack.empty() && !M); - } - } else { - jl_jit_globals(params.globals); - auto main = std::move(emitted[codeinst].first); - for (auto &def : emitted) { - if (def.first != codeinst) { - jl_merge_module(main, std::move(def.second.first)); + } + + // Collect the exported functions from the emitted modules, + // which form dependencies on which functions need to be + // compiled first. Cycles of functions are compiled together. + // (essentially we compile a DAG of SCCs in reverse topological order, + // if we treat declarations of external functions as edges from declaration + // to definition) + StringMap NewExports; + for (auto &def : emitted) { + orc::ThreadSafeModule &TSM = std::get<0>(def.second); + //The underlying context object is still locked because params is not destroyed yet + auto M = TSM.getModuleUnlocked(); + for (auto &F : M->global_objects()) { + if (!F.isDeclaration() && F.getLinkage() == GlobalValue::ExternalLinkage) { + NewExports[F.getName()] = &TSM; } } - jl_ExecutionEngine->addModule(std::move(main)); + } + DenseMap Queued; + std::vector Stack; + for (auto &def : emitted) { + // Add the results to the execution engine now + orc::ThreadSafeModule &M = std::get<0>(def.second); + jl_add_to_ee(M, NewExports, Queued, Stack); + assert(Queued.empty() && Stack.empty() && !M); } ++CompiledCodeinsts; MaxWorkqueueSize.updateMax(emitted.size()); diff --git a/test/llvmpasses/image-codegen.jl b/test/llvmpasses/image-codegen.jl index 8132dc4faa22a..2e52245b7d3b9 100644 --- a/test/llvmpasses/image-codegen.jl +++ b/test/llvmpasses/image-codegen.jl @@ -13,7 +13,8 @@ # CHECK-NOT: internal global # CHECK-NOT: private global # CHECK: jl_global -# CHECK-SAME: = global +# COM: we emit both declarations and definitions, so we may see either style in the IR +# CHECK-SAME: = {{(external )?}}global # CHECK: julia_f_ # CHECK-NOT: internal global # CHECK-NOT: private global From e549d742fcac51a2b60d68d821e4e4df82421c29 Mon Sep 17 00:00:00 2001 From: pchintalapudi <34727397+pchintalapudi@users.noreply.github.com> Date: Mon, 31 Jul 2023 17:58:04 +0000 Subject: [PATCH 073/413] Merge opaque closure modules with the rest of the workqueue (#50724) This sticks the compiled opaque closure module into the `compiled_functions` list of modules that we have compiled for the particular `jl_codegen_params_t`. We probably should manage that vector in codegen_params, since it lets us see if a particular codeinst has already been compiled but not yet emitted. (cherry picked from commit 441fcb1e06513ceff4d5ca4e111863c2ebba957b) --- src/aotcompile.cpp | 48 ++++++++++++------- src/codegen.cpp | 112 +++++++++++++++++++-------------------------- src/jitlayers.cpp | 19 ++++---- src/jitlayers.h | 27 +++++++---- 4 files changed, 106 insertions(+), 100 deletions(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index bad02bcc56e65..2db34fb220ece 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -274,7 +274,6 @@ void *jl_create_native_impl(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvm jl_native_code_desc_t *data = new jl_native_code_desc_t; CompilationPolicy policy = (CompilationPolicy) _policy; bool imaging = imaging_default() || _imaging_mode == 1; - jl_workqueue_t emitted; jl_method_instance_t *mi = NULL; jl_code_info_t *src = NULL; JL_GC_PUSH1(&src); @@ -334,7 +333,7 @@ void *jl_create_native_impl(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvm // find and prepare the source code to compile jl_code_instance_t *codeinst = NULL; jl_ci_cache_lookup(*cgparams, mi, params.world, &codeinst, &src); - if (src && !emitted.count(codeinst)) { + if (src && !params.compiled_functions.count(codeinst)) { // now add it to our compilation results JL_GC_PROMISE_ROOTED(codeinst->rettype); orc::ThreadSafeModule result_m = jl_create_ts_module(name_from_method_instance(codeinst->def), @@ -343,13 +342,13 @@ void *jl_create_native_impl(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvm Triple(clone.getModuleUnlocked()->getTargetTriple())); jl_llvm_functions_t decls = jl_emit_code(result_m, mi, src, codeinst->rettype, params); if (result_m) - emitted[codeinst] = {std::move(result_m), std::move(decls)}; + params.compiled_functions[codeinst] = {std::move(result_m), std::move(decls)}; } } } // finally, make sure all referenced methods also get compiled or fixed up - jl_compile_workqueue(emitted, *clone.getModuleUnlocked(), params, policy); + jl_compile_workqueue(params, *clone.getModuleUnlocked(), policy); } JL_UNLOCK(&jl_codegen_lock); // Might GC JL_GC_POP(); @@ -368,7 +367,7 @@ void *jl_create_native_impl(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvm data->jl_value_to_llvm[idx] = global.first; idx++; } - CreateNativeMethods += emitted.size(); + CreateNativeMethods += params.compiled_functions.size(); size_t offset = gvars.size(); data->jl_external_to_llvm.resize(params.external_fns.size()); @@ -390,17 +389,34 @@ void *jl_create_native_impl(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvm // clones the contents of the module `m` to the shadow_output collector // while examining and recording what kind of function pointer we have - Linker L(*clone.getModuleUnlocked()); - for (auto &def : emitted) { - jl_merge_module(clone, std::move(std::get<0>(def.second))); - jl_code_instance_t *this_code = def.first; - jl_llvm_functions_t decls = std::get<1>(def.second); - StringRef func = decls.functionObject; - StringRef cfunc = decls.specFunctionObject; - uint32_t func_id = 0; - uint32_t cfunc_id = 0; - if (func == "jl_fptr_args") { - func_id = -1; + { + JL_TIMING(NATIVE_AOT, NATIVE_Merge); + Linker L(*clone.getModuleUnlocked()); + for (auto &def : params.compiled_functions) { + jl_merge_module(clone, std::move(std::get<0>(def.second))); + jl_code_instance_t *this_code = def.first; + jl_llvm_functions_t decls = std::get<1>(def.second); + StringRef func = decls.functionObject; + StringRef cfunc = decls.specFunctionObject; + uint32_t func_id = 0; + uint32_t cfunc_id = 0; + if (func == "jl_fptr_args") { + func_id = -1; + } + else if (func == "jl_fptr_sparam") { + func_id = -2; + } + else { + //Safe b/c context is locked by params + data->jl_sysimg_fvars.push_back(cast(clone.getModuleUnlocked()->getNamedValue(func))); + func_id = data->jl_sysimg_fvars.size(); + } + if (!cfunc.empty()) { + //Safe b/c context is locked by params + data->jl_sysimg_fvars.push_back(cast(clone.getModuleUnlocked()->getNamedValue(cfunc))); + cfunc_id = data->jl_sysimg_fvars.size(); + } + data->jl_fvar_map[this_code] = std::make_tuple(func_id, cfunc_id); } else if (func == "jl_fptr_sparam") { func_id = -2; diff --git a/src/codegen.cpp b/src/codegen.cpp index d11ba8cb851ec..cc27871076a1f 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -1607,7 +1607,6 @@ class jl_codectx_t { std::vector> PhiNodes; std::vector ssavalue_assigned; std::vector ssavalue_usecount; - std::vector oc_modules; jl_module_t *module = NULL; jl_typecache_t type_cache; jl_tbaacache_t tbaa_cache; @@ -4451,7 +4450,7 @@ static jl_cgval_t emit_invoke(jl_codectx_t &ctx, const jl_cgval_t &lival, const // Check if we already queued this up auto it = ctx.call_targets.find(codeinst); if (need_to_emit && it != ctx.call_targets.end()) { - protoname = std::get<2>(it->second)->getName(); + protoname = it->second.decl->getName(); need_to_emit = cache_valid = false; } @@ -4495,7 +4494,7 @@ static jl_cgval_t emit_invoke(jl_codectx_t &ctx, const jl_cgval_t &lival, const handled = true; if (need_to_emit) { Function *trampoline_decl = cast(jl_Module->getNamedValue(protoname)); - ctx.call_targets[codeinst] = std::make_tuple(cc, return_roots, trampoline_decl, specsig); + ctx.call_targets[codeinst] = {cc, return_roots, trampoline_decl, specsig}; } } } @@ -5353,8 +5352,7 @@ static std::pair get_oc_function(jl_codectx_t &ctx, jl_met { jl_svec_t *sig_args = NULL; jl_value_t *sigtype = NULL; - jl_code_info_t *ir = NULL; - JL_GC_PUSH3(&sig_args, &sigtype, &ir); + JL_GC_PUSH2(&sig_args, &sigtype); size_t nsig = 1 + jl_svec_len(argt_typ->parameters); sig_args = jl_alloc_svec_uninit(nsig); @@ -5376,16 +5374,25 @@ static std::pair get_oc_function(jl_codectx_t &ctx, jl_met JL_GC_POP(); return std::make_pair((Function*)NULL, (Function*)NULL); } - ++EmittedOpaqueClosureFunctions; - ir = jl_uncompress_ir(closure_method, ci, (jl_value_t*)inferred); + auto it = ctx.emission_context.compiled_functions.find(ci); - // TODO: Emit this inline and outline it late using LLVM's coroutine support. - orc::ThreadSafeModule closure_m = jl_create_ts_module( - name_from_method_instance(mi), ctx.emission_context.tsctx, - ctx.emission_context.imaging, - jl_Module->getDataLayout(), Triple(jl_Module->getTargetTriple())); - jl_llvm_functions_t closure_decls = emit_function(closure_m, mi, ir, rettype, ctx.emission_context); + if (it == ctx.emission_context.compiled_functions.end()) { + ++EmittedOpaqueClosureFunctions; + jl_code_info_t *ir = jl_uncompress_ir(closure_method, ci, (jl_value_t*)inferred); + JL_GC_PUSH1(&ir); + // TODO: Emit this inline and outline it late using LLVM's coroutine support. + orc::ThreadSafeModule closure_m = jl_create_ts_module( + name_from_method_instance(mi), ctx.emission_context.tsctx, + ctx.emission_context.imaging, + jl_Module->getDataLayout(), Triple(jl_Module->getTargetTriple())); + jl_llvm_functions_t closure_decls = emit_function(closure_m, mi, ir, rettype, ctx.emission_context); + JL_GC_POP(); + it = ctx.emission_context.compiled_functions.insert(std::make_pair(ci, std::make_pair(std::move(closure_m), std::move(closure_decls)))).first; + } + + auto &closure_m = it->second.first; + auto &closure_decls = it->second.second; assert(closure_decls.functionObject != "jl_fptr_sparam"); bool isspecsig = closure_decls.functionObject != "jl_fptr_args"; @@ -5416,7 +5423,6 @@ static std::pair get_oc_function(jl_codectx_t &ctx, jl_met specF = cast(returninfo.decl.getCallee()); } } - ctx.oc_modules.push_back(std::move(closure_m)); JL_GC_POP(); return std::make_pair(F, specF); } @@ -5699,7 +5705,7 @@ static jl_cgval_t emit_expr(jl_codectx_t &ctx, jl_value_t *expr, ssize_t ssaidx_ if (jl_is_concrete_type(env_t)) { jl_tupletype_t *argt_typ = (jl_tupletype_t*)argt.constant; Function *F, *specF; - std::tie(F, specF) = get_oc_function(ctx, (jl_method_t*)source.constant, (jl_datatype_t*)env_t, argt_typ, ub.constant); + std::tie(F, specF) = get_oc_function(ctx, (jl_method_t*)source.constant, (jl_tupletype_t*)env_t, argt_typ, ub.constant); if (F) { jl_cgval_t jlcall_ptr = mark_julia_type(ctx, F, false, jl_voidpointer_type); jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA(ctx, ctx.tbaa().tbaa_gcframe); @@ -5709,7 +5715,7 @@ static jl_cgval_t emit_expr(jl_codectx_t &ctx, jl_value_t *expr, ssize_t ssaidx_ if (specF) fptr = mark_julia_type(ctx, specF, false, jl_voidpointer_type); else - fptr = mark_julia_type(ctx, (llvm::Value*)Constant::getNullValue(ctx.types().T_size), false, jl_voidpointer_type); + fptr = mark_julia_type(ctx, Constant::getNullValue(ctx.types().T_size), false, jl_voidpointer_type); // TODO: Inline the env at the end of the opaque closure and generate a descriptor for GC jl_cgval_t env = emit_new_struct(ctx, env_t, nargs-4, &argv.data()[4]); @@ -8675,19 +8681,6 @@ static jl_llvm_functions_t jl_Module->getFunction(FN)->setLinkage(GlobalVariable::InternalLinkage); } - // link in opaque closure modules - for (auto &TSMod : ctx.oc_modules) { - SmallVector Exports; - TSMod.withModuleDo([&](Module &Mod) { - for (const auto &F: Mod.functions()) - if (!F.isDeclaration()) - Exports.push_back(F.getName().str()); - }); - jl_merge_module(TSM, std::move(TSMod)); - for (auto FN: Exports) - jl_Module->getFunction(FN)->setLinkage(GlobalVariable::InternalLinkage); - } - JL_GC_POP(); return declarations; } @@ -8849,22 +8842,18 @@ jl_llvm_functions_t jl_emit_codeinst( void jl_compile_workqueue( - jl_workqueue_t &emitted, + jl_codegen_params_t ¶ms, Module &original, - jl_codegen_params_t ¶ms, CompilationPolicy policy) + CompilationPolicy policy) { JL_TIMING(CODEGEN, CODEGEN_Workqueue); jl_code_info_t *src = NULL; JL_GC_PUSH1(&src); while (!params.workqueue.empty()) { jl_code_instance_t *codeinst; - Function *protodecl; - jl_returninfo_t::CallingConv proto_cc; - bool proto_specsig; - unsigned proto_return_roots; auto it = params.workqueue.back(); codeinst = it.first; - std::tie(proto_cc, proto_return_roots, protodecl, proto_specsig) = it.second; + auto proto = it.second; params.workqueue.pop_back(); // try to emit code for this item from the workqueue assert(codeinst->min_world <= params.world && codeinst->max_world >= params.world && @@ -8892,12 +8881,8 @@ void jl_compile_workqueue( } } else { - auto &result = emitted[codeinst]; - jl_llvm_functions_t *decls = NULL; - if (std::get<0>(result)) { - decls = &std::get<1>(result); - } - else { + auto it = params.compiled_functions.find(codeinst); + if (it == params.compiled_functions.end()) { // Reinfer the function. The JIT came along and removed the inferred // method body. See #34993 if (policy != CompilationPolicy::Default && @@ -8908,8 +8893,9 @@ void jl_compile_workqueue( jl_create_ts_module(name_from_method_instance(codeinst->def), params.tsctx, params.imaging, original.getDataLayout(), Triple(original.getTargetTriple())); - result.second = jl_emit_code(result_m, codeinst->def, src, src->rettype, params); - result.first = std::move(result_m); + auto decls = jl_emit_code(result_m, codeinst->def, src, src->rettype, params); + if (result_m) + it = params.compiled_functions.insert(std::make_pair(codeinst, std::make_pair(std::move(result_m), std::move(decls)))).first; } } else { @@ -8917,38 +8903,36 @@ void jl_compile_workqueue( jl_create_ts_module(name_from_method_instance(codeinst->def), params.tsctx, params.imaging, original.getDataLayout(), Triple(original.getTargetTriple())); - result.second = jl_emit_codeinst(result_m, codeinst, NULL, params); - result.first = std::move(result_m); + auto decls = jl_emit_codeinst(result_m, codeinst, NULL, params); + if (result_m) + it = params.compiled_functions.insert(std::make_pair(codeinst, std::make_pair(std::move(result_m), std::move(decls)))).first; } - if (std::get<0>(result)) - decls = &std::get<1>(result); - else - emitted.erase(codeinst); // undo the insert above } - if (decls) { - if (decls->functionObject == "jl_fptr_args") { - preal_decl = decls->specFunctionObject; + if (it != params.compiled_functions.end()) { + auto &decls = it->second.second; + if (decls.functionObject == "jl_fptr_args") { + preal_decl = decls.specFunctionObject; } - else if (decls->functionObject != "jl_fptr_sparam") { - preal_decl = decls->specFunctionObject; + else if (decls.functionObject != "jl_fptr_sparam") { + preal_decl = decls.specFunctionObject; preal_specsig = true; } } } // patch up the prototype we emitted earlier - Module *mod = protodecl->getParent(); - assert(protodecl->isDeclaration()); - if (proto_specsig) { + Module *mod = proto.decl->getParent(); + assert(proto.decl->isDeclaration()); + if (proto.specsig) { // expected specsig if (!preal_specsig) { // emit specsig-to-(jl)invoke conversion Function *preal = emit_tojlinvoke(codeinst, mod, params); - protodecl->setLinkage(GlobalVariable::InternalLinkage); + proto.decl->setLinkage(GlobalVariable::InternalLinkage); //protodecl->setAlwaysInline(); - jl_init_function(protodecl, params.TargetTriple); + jl_init_function(proto.decl, params.TargetTriple); size_t nrealargs = jl_nparams(codeinst->def->specTypes); // number of actual arguments being passed // TODO: maybe this can be cached in codeinst->specfptr? - emit_cfunc_invalidate(protodecl, proto_cc, proto_return_roots, codeinst->def->specTypes, codeinst->rettype, false, nrealargs, params, preal); + emit_cfunc_invalidate(proto.decl, proto.cc, proto.return_roots, codeinst->def->specTypes, codeinst->rettype, false, nrealargs, params, preal); preal_decl = ""; // no need to fixup the name } else { @@ -8965,11 +8949,11 @@ void jl_compile_workqueue( if (!preal_decl.empty()) { // merge and/or rename this prototype to the real function if (Value *specfun = mod->getNamedValue(preal_decl)) { - if (protodecl != specfun) - protodecl->replaceAllUsesWith(specfun); + if (proto.decl != specfun) + proto.decl->replaceAllUsesWith(specfun); } else { - protodecl->setName(preal_decl); + proto.decl->setName(preal_decl); } } } diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index 6b729ea088335..2efef10dc8a2e 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -215,16 +215,15 @@ static jl_callptr_t _jl_compile_codeinst( params.world = world; params.imaging = imaging_default(); params.debug_level = jl_options.debug_level; - jl_workqueue_t emitted; { orc::ThreadSafeModule result_m = jl_create_ts_module(name_from_method_instance(codeinst->def), params.tsctx, params.imaging, params.DL, params.TargetTriple); jl_llvm_functions_t decls = jl_emit_codeinst(result_m, codeinst, src, params); if (result_m) - emitted[codeinst] = {std::move(result_m), std::move(decls)}; + params.compiled_functions[codeinst] = {std::move(result_m), std::move(decls)}; { auto temp_module = jl_create_llvm_module(name_from_method_instance(codeinst->def), params.getContext(), params.imaging); - jl_compile_workqueue(emitted, *temp_module, params, CompilationPolicy::Default); + jl_compile_workqueue(params, *temp_module, CompilationPolicy::Default); } if (params._shared_module) @@ -241,7 +240,7 @@ static jl_callptr_t _jl_compile_codeinst( for (auto &global : params.globals) { NewGlobals[global.second->getName()] = global.first; } - for (auto &def : emitted) { + for (auto &def : params.compiled_functions) { auto M = std::get<0>(def.second).getModuleUnlocked(); for (auto &GV : M->globals()) { auto InitValue = NewGlobals.find(GV.getName()); @@ -252,14 +251,14 @@ static jl_callptr_t _jl_compile_codeinst( } } - // Collect the exported functions from the emitted modules, + // Collect the exported functions from the params.compiled_functions modules, // which form dependencies on which functions need to be // compiled first. Cycles of functions are compiled together. // (essentially we compile a DAG of SCCs in reverse topological order, // if we treat declarations of external functions as edges from declaration // to definition) StringMap NewExports; - for (auto &def : emitted) { + for (auto &def : params.compiled_functions) { orc::ThreadSafeModule &TSM = std::get<0>(def.second); //The underlying context object is still locked because params is not destroyed yet auto M = TSM.getModuleUnlocked(); @@ -271,19 +270,19 @@ static jl_callptr_t _jl_compile_codeinst( } DenseMap Queued; std::vector Stack; - for (auto &def : emitted) { + for (auto &def : params.compiled_functions) { // Add the results to the execution engine now orc::ThreadSafeModule &M = std::get<0>(def.second); jl_add_to_ee(M, NewExports, Queued, Stack); assert(Queued.empty() && Stack.empty() && !M); } ++CompiledCodeinsts; - MaxWorkqueueSize.updateMax(emitted.size()); - IndirectCodeinsts += emitted.size() - 1; + MaxWorkqueueSize.updateMax(params.compiled_functions.size()); + IndirectCodeinsts += params.compiled_functions.size() - 1; } size_t i = 0; - for (auto &def : emitted) { + for (auto &def : params.compiled_functions) { jl_code_instance_t *this_code = def.first; if (i < jl_timing_print_limit) jl_timing_show_func_sig(this_code->def->specTypes, JL_TIMING_DEFAULT_BLOCK); diff --git a/src/jitlayers.h b/src/jitlayers.h index 3aa3998d3ac23..f03f62791e9cc 100644 --- a/src/jitlayers.h +++ b/src/jitlayers.h @@ -193,9 +193,18 @@ struct jl_returninfo_t { unsigned return_roots; }; -typedef std::tuple jl_codegen_call_target_t; +struct jl_codegen_call_target_t { + jl_returninfo_t::CallingConv cc; + unsigned return_roots; + llvm::Function *decl; + bool specsig; +}; -typedef struct _jl_codegen_params_t { +typedef SmallVector> jl_workqueue_t; +// TODO DenseMap? +typedef std::map> jl_compiled_functions_t; + +struct jl_codegen_params_t { orc::ThreadSafeContext tsctx; orc::ThreadSafeContext::Lock tsctx_lock; DataLayout DL; @@ -206,8 +215,9 @@ typedef struct _jl_codegen_params_t { } typedef StringMap SymMapGV; // outputs - std::vector> workqueue; - std::map globals; + jl_workqueue_t workqueue; + jl_compiled_functions_t compiled_functions; + std::map global_targets; std::map, GlobalVariable*> external_fns; std::map ditypes; std::map llvmtypes; @@ -238,10 +248,10 @@ typedef struct _jl_codegen_params_t { bool external_linkage = false; bool imaging; int debug_level; - _jl_codegen_params_t(orc::ThreadSafeContext ctx, DataLayout DL, Triple triple) + jl_codegen_params_t(orc::ThreadSafeContext ctx, DataLayout DL, Triple triple) : tsctx(std::move(ctx)), tsctx_lock(tsctx.getLock()), DL(std::move(DL)), TargetTriple(std::move(triple)), imaging(imaging_default()) {} -} jl_codegen_params_t; +}; jl_llvm_functions_t jl_emit_code( orc::ThreadSafeModule &M, @@ -261,12 +271,9 @@ enum CompilationPolicy { Extern = 1, }; -typedef std::map> jl_workqueue_t; - void jl_compile_workqueue( - jl_workqueue_t &emitted, - Module &original, jl_codegen_params_t ¶ms, + Module &original, CompilationPolicy policy); Function *jl_cfunction_object(jl_function_t *f, jl_value_t *rt, jl_tupletype_t *argt, From 6ba470d7acc2a2e41766f059a024304f9677e0b7 Mon Sep 17 00:00:00 2001 From: pchintalapudi <34727397+pchintalapudi@users.noreply.github.com> Date: Wed, 2 Aug 2023 00:25:09 +0000 Subject: [PATCH 074/413] Add alignment to constant globals (#50738) (cherry picked from commit 37082297452099ec262cd6100fe2aaa1717d7aa9) --- src/cgutils.cpp | 7 ++++--- src/codegen.cpp | 14 ++++++++------ src/llvm-late-gc-lowering.cpp | 5 ++--- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/cgutils.cpp b/src/cgutils.cpp index 8442ba99bb411..326e4823d6c34 100644 --- a/src/cgutils.cpp +++ b/src/cgutils.cpp @@ -116,7 +116,8 @@ static Value *stringConstPtr( Module *M = jl_builderModule(irbuilder); StringRef ctxt(txt.c_str(), txt.size() + 1); Constant *Data = ConstantDataArray::get(irbuilder.getContext(), arrayRefFromStringRef(ctxt)); - GlobalVariable *gv = get_pointer_to_constant(emission_context, Data, "_j_str", *M); + // Doesn't need to be aligned, we shouldn't operate on these like julia objects + GlobalVariable *gv = get_pointer_to_constant(emission_context, Data, Align(1), "_j_str", *M); Value *zero = ConstantInt::get(Type::getInt32Ty(irbuilder.getContext()), 0); Value *Args[] = { zero, zero }; auto gep = irbuilder.CreateInBoundsGEP(gv->getValueType(), @@ -928,7 +929,7 @@ static Value *data_pointer(jl_codectx_t &ctx, const jl_cgval_t &x) if (x.constant) { Constant *val = julia_const_to_llvm(ctx, x.constant); if (val) - data = get_pointer_to_constant(ctx.emission_context, val, "_j_const", *jl_Module); + data = get_pointer_to_constant(ctx.emission_context, val, Align(julia_alignment(jl_typeof(x.constant))), "_j_const", *jl_Module); else data = literal_pointer_val(ctx, x.constant); } @@ -1116,7 +1117,7 @@ static Value *emit_typeof(jl_codectx_t &ctx, const jl_cgval_t &p, bool maybenull if (justtag && jt->smalltag) { ptr = ConstantInt::get(expr_type, jt->smalltag << 4); if (ctx.emission_context.imaging) - ptr = get_pointer_to_constant(ctx.emission_context, ptr, "_j_tag", *jl_Module); + ptr = get_pointer_to_constant(ctx.emission_context, ptr, Align(sizeof(jl_value_t*)), "_j_tag", *jl_Module); } else if (ctx.emission_context.imaging) ptr = ConstantExpr::getBitCast(literal_pointer_val_slot(ctx, (jl_value_t*)jt), datatype_or_p->getType()); diff --git a/src/codegen.cpp b/src/codegen.cpp index cc27871076a1f..5ad4eb4e6e9a4 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -1768,7 +1768,7 @@ static jl_cgval_t emit_new_struct(jl_codectx_t &ctx, jl_value_t *ty, size_t narg static jl_cgval_t emit_invoke(jl_codectx_t &ctx, const jl_cgval_t &lival, const jl_cgval_t *argv, size_t nargs, jl_value_t *rt); static Value *literal_pointer_val(jl_codectx_t &ctx, jl_value_t *p); -static GlobalVariable *prepare_global_in(Module *M, GlobalVariable *G); +static unsigned julia_alignment(jl_value_t *jt); static GlobalVariable *prepare_global_in(Module *M, JuliaVariable *G) { @@ -1803,7 +1803,7 @@ static inline GlobalVariable *prepare_global_in(Module *M, GlobalVariable *G) // --- convenience functions for tagging llvm values with julia types --- -static GlobalVariable *get_pointer_to_constant(jl_codegen_params_t &emission_context, Constant *val, StringRef name, Module &M) +static GlobalVariable *get_pointer_to_constant(jl_codegen_params_t &emission_context, Constant *val, Align align, StringRef name, Module &M) { GlobalVariable *&gv = emission_context.mergedConstants[val]; StringRef localname; @@ -1826,6 +1826,7 @@ static GlobalVariable *get_pointer_to_constant(jl_codegen_params_t &emission_con val, localname); gv->setUnnamedAddr(GlobalValue::UnnamedAddr::Global); + gv->setAlignment(align); } assert(localname == gv->getName()); assert(val == gv->getInitializer()); @@ -1935,7 +1936,8 @@ static inline jl_cgval_t value_to_pointer(jl_codectx_t &ctx, Value *v, jl_value_ { Value *loc; if (valid_as_globalinit(v)) { // llvm can't handle all the things that could be inside a ConstantExpr - loc = get_pointer_to_constant(ctx.emission_context, cast(v), "_j_const", *jl_Module); + assert(jl_is_concrete_type(typ)); // not legal to have an unboxed abstract type + loc = get_pointer_to_constant(ctx.emission_context, cast(v), Align(julia_alignment(typ)), "_j_const", *jl_Module); } else { loc = emit_static_alloca(ctx, v->getType()); @@ -2309,7 +2311,7 @@ static jl_cgval_t convert_julia_type(jl_codectx_t &ctx, const jl_cgval_t &v, jl_ new_tindex = ConstantInt::get(getInt8Ty(ctx.builder.getContext()), new_idx); if (v.V && !v.ispointer()) { // TODO: remove this branch once all consumers of v.TIndex understand how to handle a non-ispointer value - return value_to_pointer(ctx, v.V, typ, new_tindex); + return jl_cgval_t(value_to_pointer(ctx, v), typ, new_tindex); } } else if (jl_subtype(v.typ, typ)) { @@ -7587,7 +7589,7 @@ static jl_llvm_functions_t Type *vtype = julia_type_to_llvm(ctx, jt, &isboxed); assert(!isboxed); assert(!type_is_ghost(vtype) && "constants should already be handled"); - Value *lv = new AllocaInst(vtype, M->getDataLayout().getAllocaAddrSpace(), NULL, Align(jl_datatype_align(jt)), jl_symbol_name(s), /*InsertBefore*/ctx.topalloca); + Value *lv = new AllocaInst(vtype, M->getDataLayout().getAllocaAddrSpace(), nullptr, Align(jl_datatype_align(jt)), jl_symbol_name(s), /*InsertBefore*/ctx.topalloca); if (CountTrackedPointers(vtype).count) { StoreInst *SI = new StoreInst(Constant::getNullValue(vtype), lv, false, Align(sizeof(void*))); SI->insertAfter(ctx.topalloca); @@ -7607,7 +7609,7 @@ static jl_llvm_functions_t (va && (int)i == ctx.vaSlot) || // or it's the va arg tuple i == 0) { // or it is the first argument (which isn't in `argArray`) AllocaInst *av = new AllocaInst(ctx.types().T_prjlvalue, M->getDataLayout().getAllocaAddrSpace(), - jl_symbol_name(s), /*InsertBefore*/ctx.topalloca); + nullptr, Align(sizeof(jl_value_t*)), jl_symbol_name(s), /*InsertBefore*/ctx.topalloca); StoreInst *SI = new StoreInst(Constant::getNullValue(ctx.types().T_prjlvalue), av, false, Align(sizeof(void*))); SI->insertAfter(ctx.topalloca); varinfo.boxroot = av; diff --git a/src/llvm-late-gc-lowering.cpp b/src/llvm-late-gc-lowering.cpp index 6d87abd68d7c2..63a71a9e180ac 100644 --- a/src/llvm-late-gc-lowering.cpp +++ b/src/llvm-late-gc-lowering.cpp @@ -2385,8 +2385,7 @@ bool LateLowerGCFrame::CleanupIR(Function &F, State *S, bool *CFGModified) { if (isLoadFromConstGV(LI, task_local) && getLoadValueAlign(LI) < 16) { Type *T_int64 = Type::getInt64Ty(LI->getContext()); auto op = ConstantAsMetadata::get(ConstantInt::get(T_int64, 16)); - LI->setMetadata(LLVMContext::MD_align, - MDNode::get(LI->getContext(), { op })); + LI->setMetadata(LLVMContext::MD_align, MDNode::get(LI->getContext(), { op })); } } // As a last resort, if we didn't manage to strip down the tag @@ -2467,7 +2466,7 @@ bool LateLowerGCFrame::CleanupIR(Function &F, State *S, bool *CFGModified) { } ReplacementArgs.push_back(nframeargs == 0 ? (llvm::Value*)ConstantPointerNull::get(T_pprjlvalue) : - (allocaAddressSpace ? Builder.CreateAddrSpaceCast(Frame, T_prjlvalue->getPointerTo(0)) : Frame)); + Builder.CreateAddrSpaceCast(Frame, T_prjlvalue->getPointerTo(0))); ReplacementArgs.push_back(ConstantInt::get(T_int32, nframeargs)); if (callee == call2_func) { // move trailing arg to the end now From 081bc5c0b0cf96b674e8b6383352b1e2917cd611 Mon Sep 17 00:00:00 2001 From: pchintalapudi <34727397+pchintalapudi@users.noreply.github.com> Date: Fri, 4 Aug 2023 00:09:17 +0000 Subject: [PATCH 075/413] Minor refactor to image generation (#50779) (cherry picked from commit f337c3d261c8618396506f3c56f5bde3479f66bf) --- src/aotcompile.cpp | 207 +++++++++++++++++++++------------------------ src/pipeline.cpp | 2 + 2 files changed, 97 insertions(+), 112 deletions(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index 2db34fb220ece..626feee34a204 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -474,10 +474,16 @@ void *jl_create_native_impl(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvm G.setVisibility(GlobalValue::HiddenVisibility); G.setDSOLocal(true); makeSafeName(G); - if (TT.isOSWindows() && TT.getArch() == Triple::x86_64) { - // Add unwind exception personalities to functions to handle async exceptions - if (Function *F = dyn_cast(&G)) + if (Function *F = dyn_cast(&G)) { + if (TT.isOSWindows() && TT.getArch() == Triple::x86_64) { + // Add unwind exception personalities to functions to handle async exceptions F->setPersonalityFn(juliapersonality_func); + } + // Alwaysinline functions must be inlined, so they should be marked internal + if (F->hasFnAttribute(Attribute::AlwaysInline)) { + F->setLinkage(GlobalValue::InternalLinkage); + F->setVisibility(GlobalValue::DefaultVisibility); + } } } } @@ -743,19 +749,13 @@ static inline bool verify_partitioning(const SmallVectorImpl &partiti dbgs() << "Global " << GV.getName() << " is a declaration but is in partition " << GVNames[GV.getName()] << "\n"; } } else { - if (auto F = dyn_cast(&GV)) { - // Ignore alwaysinline functions - if (F->hasFnAttribute(Attribute::AlwaysInline)) - continue; - } + // Local global values are not partitioned + if (GV.hasLocalLinkage()) + continue; if (!GVNames.count(GV.getName())) { bad = true; dbgs() << "Global " << GV << " not in any partition\n"; } - if (!GV.hasExternalLinkage()) { - bad = true; - dbgs() << "Global " << GV << " has non-external linkage " << GV.getLinkage() << " but is in partition " << GVNames[GV.getName()] << "\n"; - } } } for (uint32_t i = 0; i < fvars_size; i++) { @@ -827,11 +827,9 @@ static SmallVector partitionModule(Module &M, unsigned threads) { for (auto &G : M.global_values()) { if (G.isDeclaration()) continue; + if (G.hasLocalLinkage()) + continue; if (auto F = dyn_cast(&G)) { - // alwaysinline functions cannot be partitioned, - // they must remain in every module in order to be inlined - if (F->hasFnAttribute(Attribute::AlwaysInline)) - continue; partitioner.make(&G, getFunctionWeight(*F).weight); } else { partitioner.make(&G, 1); @@ -945,7 +943,6 @@ struct ShardTimers { ImageTimer deserialize; ImageTimer materialize; ImageTimer construct; - ImageTimer deletion; // impl timers ImageTimer unopt; ImageTimer optimize; @@ -959,13 +956,12 @@ struct ShardTimers { void print(raw_ostream &out, bool clear=false) { StringRef sep = "===-------------------------------------------------------------------------==="; out << formatv("{0}\n{1}\n{0}\n", sep, fmt_align(name + " : " + desc, AlignStyle::Center, sep.size())); - auto total = deserialize.elapsed + materialize.elapsed + construct.elapsed + deletion.elapsed + + auto total = deserialize.elapsed + materialize.elapsed + construct.elapsed + unopt.elapsed + optimize.elapsed + opt.elapsed + obj.elapsed + asm_.elapsed; out << "Time (s) Name Description\n"; deserialize.print(out, clear); materialize.print(out, clear); construct.print(out, clear); - deletion.print(out, clear); unopt.print(out, clear); optimize.print(out, clear); opt.print(out, clear); @@ -1119,39 +1115,38 @@ static auto serializeModule(const Module &M) { // consistent. static void materializePreserved(Module &M, Partition &partition) { DenseSet Preserve; - for (auto &GV : M.global_values()) { - if (!GV.isDeclaration()) { - if (partition.globals.count(GV.getName())) { - Preserve.insert(&GV); - } - } + for (auto &Name : partition.globals) { + auto *GV = M.getNamedValue(Name.first()); + assert(GV && !GV->isDeclaration() && !GV->hasLocalLinkage()); + Preserve.insert(GV); } + for (auto &F : M.functions()) { - if (!F.isDeclaration()) { - if (!Preserve.contains(&F)) { - if (F.hasFnAttribute(Attribute::AlwaysInline)) { - F.setLinkage(GlobalValue::InternalLinkage); - F.setVisibility(GlobalValue::DefaultVisibility); - F.setDSOLocal(true); - continue; - } - F.deleteBody(); - F.setLinkage(GlobalValue::ExternalLinkage); - F.setVisibility(GlobalValue::HiddenVisibility); - F.setDSOLocal(true); - } - } + if (F.isDeclaration()) + continue; + if (Preserve.contains(&F)) + continue; + if (F.hasLocalLinkage()) + continue; + F.deleteBody(); + F.setLinkage(GlobalValue::ExternalLinkage); + F.setVisibility(GlobalValue::HiddenVisibility); + F.setDSOLocal(true); } + for (auto &GV : M.globals()) { - if (!GV.isDeclaration()) { - if (!Preserve.contains(&GV)) { - GV.setInitializer(nullptr); - GV.setLinkage(GlobalValue::ExternalLinkage); - GV.setVisibility(GlobalValue::HiddenVisibility); - GV.setDSOLocal(true); - } - } + if (GV.isDeclaration()) + continue; + if (Preserve.contains(&GV)) + continue; + if (GV.hasLocalLinkage()) + continue; + GV.setInitializer(nullptr); + GV.setLinkage(GlobalValue::ExternalLinkage); + GV.setVisibility(GlobalValue::HiddenVisibility); + GV.setDSOLocal(true); } + // Global aliases are a pain to deal with. It is illegal to have an alias to a declaration, // so we need to replace them with either a function or a global variable declaration. However, // we can't just delete the alias, because that would break the users of the alias. Therefore, @@ -1160,25 +1155,27 @@ static void materializePreserved(Module &M, Partition &partition) { // to deleting the old alias. SmallVector> DeletedAliases; for (auto &GA : M.aliases()) { - if (!GA.isDeclaration()) { - if (!Preserve.contains(&GA)) { - if (GA.getValueType()->isFunctionTy()) { - auto F = Function::Create(cast(GA.getValueType()), GlobalValue::ExternalLinkage, "", &M); - // This is an extremely sad hack to make sure the global alias never points to an extern function - auto BB = BasicBlock::Create(M.getContext(), "", F); - new UnreachableInst(M.getContext(), BB); - GA.setAliasee(F); - - DeletedAliases.push_back({ &GA, F }); - } - else { - auto GV = new GlobalVariable(M, GA.getValueType(), false, GlobalValue::ExternalLinkage, Constant::getNullValue(GA.getValueType())); - DeletedAliases.push_back({ &GA, GV }); - } - } + assert(!GA.isDeclaration() && "Global aliases can't be declarations!"); // because LLVM says so + if (Preserve.contains(&GA)) + continue; + if (GA.hasLocalLinkage()) + continue; + if (GA.getValueType()->isFunctionTy()) { + auto F = Function::Create(cast(GA.getValueType()), GlobalValue::ExternalLinkage, "", &M); + // This is an extremely sad hack to make sure the global alias never points to an extern function + auto BB = BasicBlock::Create(M.getContext(), "", F); + new UnreachableInst(M.getContext(), BB); + GA.setAliasee(F); + DeletedAliases.push_back({ &GA, F }); + } + else { + auto GV = new GlobalVariable(M, GA.getValueType(), false, GlobalValue::ExternalLinkage, Constant::getNullValue(GA.getValueType())); + DeletedAliases.push_back({ &GA, GV }); } } + cantFail(M.materializeAll()); + for (auto &Deleted : DeletedAliases) { Deleted.second->takeName(Deleted.first); Deleted.first->replaceAllUsesWith(Deleted.second); @@ -1247,20 +1244,6 @@ static void construct_vars(Module &M, Partition &partition) { gidxs_var->setDSOLocal(true); } -// Materialization will leave many unused declarations, which multiversioning would otherwise clone. -// This function removes them to avoid unnecessary cloning of declarations. -// The GlobalDCEPass is much better at this, but we only care about removing unused -// declarations, not actually about seeing if code is dead (codegen knows it is live, by construction). -static void dropUnusedGlobals(Module &M) { - std::vector unused; - for (auto &G : M.global_values()) { - if (G.isDeclaration() && G.use_empty()) - unused.push_back(&G); - } - for (auto &G : unused) - G->eraseFromParent(); -} - // Entrypoint to optionally-multithreaded image compilation. This handles global coordination of the threading, // as well as partitioning, serialization, and deserialization. template @@ -1279,7 +1262,6 @@ static SmallVector add_output(Module &M, TargetMachine &TM, Stri timers[i].deserialize.init("deserialize_" + idx, "Deserialize module"); timers[i].materialize.init("materialize_" + idx, "Materialize declarations"); timers[i].construct.init("construct_" + idx, "Construct partitioned definitions"); - timers[i].deletion.init("deletion_" + idx, "Delete dead declarations"); timers[i].unopt.init("unopt_" + idx, "Emit unoptimized bitcode"); timers[i].optimize.init("optimize_" + idx, "Optimize shard"); timers[i].opt.init("opt_" + idx, "Emit optimized bitcode"); @@ -1345,40 +1327,39 @@ static SmallVector add_output(Module &M, TargetMachine &TM, Stri output_timer.startTimer(); // Start all of the worker threads - std::vector workers(threads); - for (unsigned i = 0; i < threads; i++) { - workers[i] = std::thread([&, i]() { - LLVMContext ctx; - // Lazily deserialize the entire module - timers[i].deserialize.startTimer(); - auto M = cantFail(getLazyBitcodeModule(MemoryBufferRef(StringRef(serialized.data(), serialized.size()), "Optimized"), ctx), "Error loading module"); - timers[i].deserialize.stopTimer(); - - timers[i].materialize.startTimer(); - materializePreserved(*M, partitions[i]); - timers[i].materialize.stopTimer(); - - timers[i].construct.startTimer(); - construct_vars(*M, partitions[i]); - M->setModuleFlag(Module::Error, "julia.mv.suffix", MDString::get(M->getContext(), "_" + std::to_string(i))); - // The DICompileUnit file is not used for anything, but ld64 requires it be a unique string per object file - // or it may skip emitting debug info for that file. Here set it to ./julia#N - DIFile *topfile = DIFile::get(M->getContext(), "julia#" + std::to_string(i), "."); - for (DICompileUnit *CU : M->debug_compile_units()) - CU->replaceOperandWith(0, topfile); - timers[i].construct.stopTimer(); - - timers[i].deletion.startTimer(); - dropUnusedGlobals(*M); - timers[i].deletion.stopTimer(); - - outputs[i] = add_output_impl(*M, TM, timers[i], unopt_out, opt_out, obj_out, asm_out); - }); - } + { + JL_TIMING(NATIVE_AOT, NATIVE_Opt); + std::vector workers(threads); + for (unsigned i = 0; i < threads; i++) { + workers[i] = std::thread([&, i]() { + LLVMContext ctx; + // Lazily deserialize the entire module + timers[i].deserialize.startTimer(); + auto M = cantFail(getLazyBitcodeModule(MemoryBufferRef(StringRef(serialized.data(), serialized.size()), "Optimized"), ctx), "Error loading module"); + timers[i].deserialize.stopTimer(); + + timers[i].materialize.startTimer(); + materializePreserved(*M, partitions[i]); + timers[i].materialize.stopTimer(); + + timers[i].construct.startTimer(); + construct_vars(*M, partitions[i]); + M->setModuleFlag(Module::Error, "julia.mv.suffix", MDString::get(M->getContext(), "_" + std::to_string(i))); + // The DICompileUnit file is not used for anything, but ld64 requires it be a unique string per object file + // or it may skip emitting debug info for that file. Here set it to ./julia#N + DIFile *topfile = DIFile::get(M->getContext(), "julia#" + std::to_string(i), "."); + for (DICompileUnit *CU : M->debug_compile_units()) + CU->replaceOperandWith(0, topfile); + timers[i].construct.stopTimer(); + + outputs[i] = add_output_impl(*M, TM, timers[i], unopt_out, opt_out, obj_out, asm_out); + }); + } - // Wait for all of the worker threads to finish - for (auto &w : workers) - w.join(); + // Wait for all of the worker threads to finish + for (auto &w : workers) + w.join(); + } output_timer.stopTimer(); @@ -1872,8 +1853,10 @@ void addOptimizationPasses(legacy::PassManagerBase *PM, int opt_level, // consider AggressiveInstCombinePass at optlevel > 2 PM->add(createInstructionCombiningPass()); PM->add(createCFGSimplificationPass(basicSimplifyCFGOptions)); - if (dump_native) + if (dump_native) { + PM->add(createStripDeadPrototypesPass()); PM->add(createMultiVersioningPass(external_use)); + } PM->add(createCPUFeaturesPass()); PM->add(createSROAPass()); PM->add(createInstSimplifyLegacyPass()); diff --git a/src/pipeline.cpp b/src/pipeline.cpp index e5dead97f7195..19cd085602594 100644 --- a/src/pipeline.cpp +++ b/src/pipeline.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -372,6 +373,7 @@ static void buildEarlyOptimizerPipeline(ModulePassManager &MPM, PassBuilder *PB, MPM.addPass(createModuleToPostOrderCGSCCPassAdaptor(std::move(CGPM))); } if (options.dump_native) { + MPM.addPass(StripDeadPrototypesPass()); JULIA_PASS(MPM.addPass(MultiVersioningPass(options.external_use))); } JULIA_PASS(MPM.addPass(CPUFeaturesPass())); From 013e951ad95dbf81011dc24a06cbfca231a0912d Mon Sep 17 00:00:00 2001 From: pchintalapudi <34727397+pchintalapudi@users.noreply.github.com> Date: Tue, 8 Aug 2023 01:11:56 +0000 Subject: [PATCH 076/413] Make symbols internal in jl_create_native, and only externalize them when partitioning (#50791) (cherry picked from commit 8b8da91ad7701c5401947a749399720f5aa51418) --- src/aotcompile.cpp | 96 ++++++++++++++++++++++++++++++---------------- 1 file changed, 63 insertions(+), 33 deletions(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index 626feee34a204..4874bf2b110ef 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -445,8 +445,7 @@ void *jl_create_native_impl(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvm //Safe b/c context is locked by params GlobalVariable *G = cast(clone.getModuleUnlocked()->getNamedValue(global)); G->setInitializer(ConstantPointerNull::get(cast(G->getValueType()))); - G->setLinkage(GlobalValue::ExternalLinkage); - G->setVisibility(GlobalValue::HiddenVisibility); + G->setLinkage(GlobalValue::InternalLinkage); G->setDSOLocal(true); data->jl_sysimg_gvars.push_back(G); } @@ -470,8 +469,7 @@ void *jl_create_native_impl(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvm //Safe b/c context is locked by params for (GlobalObject &G : clone.getModuleUnlocked()->global_objects()) { if (!G.isDeclaration()) { - G.setLinkage(GlobalValue::ExternalLinkage); - G.setVisibility(GlobalValue::HiddenVisibility); + G.setLinkage(GlobalValue::InternalLinkage); G.setDSOLocal(true); makeSafeName(G); if (Function *F = dyn_cast(&G)) { @@ -479,11 +477,6 @@ void *jl_create_native_impl(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvm // Add unwind exception personalities to functions to handle async exceptions F->setPersonalityFn(juliapersonality_func); } - // Alwaysinline functions must be inlined, so they should be marked internal - if (F->hasFnAttribute(Attribute::AlwaysInline)) { - F->setLinkage(GlobalValue::InternalLinkage); - F->setVisibility(GlobalValue::DefaultVisibility); - } } } } @@ -707,12 +700,20 @@ ModuleInfo compute_module_info(Module &M) { } struct Partition { - StringSet<> globals; + StringMap globals; StringMap fvars; StringMap gvars; size_t weight; }; +static bool canPartition(const GlobalValue &G) { + if (auto F = dyn_cast(&G)) { + if (F->hasFnAttribute(Attribute::AlwaysInline)) + return false; + } + return true; +} + static inline bool verify_partitioning(const SmallVectorImpl &partitions, const Module &M, size_t fvars_size, size_t gvars_size) { bool bad = false; #ifndef JL_NDEBUG @@ -750,12 +751,29 @@ static inline bool verify_partitioning(const SmallVectorImpl &partiti } } else { // Local global values are not partitioned - if (GV.hasLocalLinkage()) + if (!canPartition(GV)) { + if (GVNames.count(GV.getName())) { + bad = true; + dbgs() << "Shouldn't have partitioned " << GV.getName() << ", but is in partition " << GVNames[GV.getName()] << "\n"; + } continue; + } if (!GVNames.count(GV.getName())) { bad = true; dbgs() << "Global " << GV << " not in any partition\n"; } + for (ConstantUses uses(const_cast(&GV), const_cast(M)); !uses.done(); uses.next()) { + auto val = uses.get_info().val; + if (!GVNames.count(val->getName())) { + bad = true; + dbgs() << "Global " << val->getName() << " used by " << GV.getName() << ", which is not in any partition\n"; + continue; + } + if (GVNames[val->getName()] != GVNames[GV.getName()]) { + bad = true; + dbgs() << "Global " << val->getName() << " used by " << GV.getName() << ", which is in partition " << GVNames[GV.getName()] << " but " << val->getName() << " is in partition " << GVNames[val->getName()] << "\n"; + } + } } } for (uint32_t i = 0; i < fvars_size; i++) { @@ -827,8 +845,10 @@ static SmallVector partitionModule(Module &M, unsigned threads) { for (auto &G : M.global_values()) { if (G.isDeclaration()) continue; - if (G.hasLocalLinkage()) + if (!canPartition(G)) continue; + G.setLinkage(GlobalValue::ExternalLinkage); + G.setVisibility(GlobalValue::HiddenVisibility); if (auto F = dyn_cast(&G)) { partitioner.make(&G, getFunctionWeight(*F).weight); } else { @@ -841,6 +861,8 @@ static SmallVector partitionModule(Module &M, unsigned threads) { for (ConstantUses uses(partitioner.nodes[i].GV, M); !uses.done(); uses.next()) { auto val = uses.get_info().val; auto idx = partitioner.node_map.find(val); + // This can fail if we can't partition a global, but it uses something we can partition + // This should be fixed by altering canPartition to not permit partitioning this global assert(idx != partitioner.node_map.end()); partitioner.merge(i, idx->second); } @@ -868,35 +890,35 @@ static SmallVector partitionModule(Module &M, unsigned threads) { for (unsigned idx = 0; idx < idxs.size(); ++idx) { auto i = idxs[idx]; auto root = partitioner.find(i); - assert(root == i || partitioner.nodes[root].GV == nullptr); - if (partitioner.nodes[root].GV) { + assert(root == i || partitioner.nodes[root].weight == 0); + if (partitioner.nodes[root].weight) { auto &node = partitioner.nodes[root]; auto &P = *pq.top(); pq.pop(); auto name = node.GV->getName(); - P.globals.insert(name); + P.globals.insert({name, true}); if (fvars.count(node.GV)) P.fvars[name] = fvars[node.GV]; if (gvars.count(node.GV)) P.gvars[name] = gvars[node.GV]; P.weight += node.weight; - node.GV = nullptr; + node.weight = 0; node.size = &P - partitions.data(); pq.push(&P); } if (root != i) { auto &node = partitioner.nodes[i]; - assert(node.GV != nullptr); + assert(node.weight != 0); // we assigned its root already, so just add it to the root's partition // don't touch the priority queue, since we're not changing the weight auto &P = partitions[partitioner.nodes[root].size]; auto name = node.GV->getName(); - P.globals.insert(name); + P.globals.insert({name, true}); if (fvars.count(node.GV)) P.fvars[name] = fvars[node.GV]; if (gvars.count(node.GV)) P.gvars[name] = gvars[node.GV]; - node.GV = nullptr; + node.weight = 0; node.size = partitioner.nodes[root].size; } } @@ -1118,16 +1140,24 @@ static void materializePreserved(Module &M, Partition &partition) { for (auto &Name : partition.globals) { auto *GV = M.getNamedValue(Name.first()); assert(GV && !GV->isDeclaration() && !GV->hasLocalLinkage()); - Preserve.insert(GV); + if (!Name.second) { + // We skip partitioning for internal variables, so this has + // the same effect as putting it in preserve. + // This just avoids a hashtable lookup. + GV->setLinkage(GlobalValue::InternalLinkage); + assert(GV->hasDefaultVisibility()); + } else { + Preserve.insert(GV); + } } for (auto &F : M.functions()) { if (F.isDeclaration()) continue; - if (Preserve.contains(&F)) - continue; if (F.hasLocalLinkage()) continue; + if (Preserve.contains(&F)) + continue; F.deleteBody(); F.setLinkage(GlobalValue::ExternalLinkage); F.setVisibility(GlobalValue::HiddenVisibility); @@ -1211,7 +1241,7 @@ static void construct_vars(Module &M, Partition &partition) { std::vector> gvar_pairs; gvar_pairs.reserve(partition.gvars.size()); for (auto &gvar : partition.gvars) { - auto GV = M.getGlobalVariable(gvar.first()); + auto GV = M.getNamedGlobal(gvar.first()); assert(GV); assert(!GV->isDeclaration()); gvar_pairs.push_back({ gvar.second, GV }); @@ -1594,16 +1624,6 @@ void jl_dump_native_impl(void *native_code, fidxs_var->setDSOLocal(true); dataM.addModuleFlag(Module::Error, "julia.mv.suffix", MDString::get(Context, "_0")); - // reflect the address of the jl_RTLD_DEFAULT_handle variable - // back to the caller, so that we can check for consistency issues - GlobalValue *jlRTLD_DEFAULT_var = jl_emit_RTLD_DEFAULT_var(&dataM); - addComdat(new GlobalVariable(dataM, - jlRTLD_DEFAULT_var->getType(), - true, - GlobalVariable::ExternalLinkage, - jlRTLD_DEFAULT_var, - "jl_RTLD_DEFAULT_handle_pointer"), TheTriple); - // let the compiler know we are going to internalize a copy of this, // if it has a current usage with ExternalLinkage auto small_typeof_copy = dataM.getGlobalVariable("small_typeof"); @@ -1635,6 +1655,16 @@ void jl_dump_native_impl(void *native_code, metadataM.setStackProtectorGuard(StackProtectorGuard); metadataM.setOverrideStackAlignment(OverrideStackAlignment); + // reflect the address of the jl_RTLD_DEFAULT_handle variable + // back to the caller, so that we can check for consistency issues + GlobalValue *jlRTLD_DEFAULT_var = jl_emit_RTLD_DEFAULT_var(&metadataM); + addComdat(new GlobalVariable(metadataM, + jlRTLD_DEFAULT_var->getType(), + true, + GlobalVariable::ExternalLinkage, + jlRTLD_DEFAULT_var, + "jl_RTLD_DEFAULT_handle_pointer"), TheTriple); + Type *T_size = DL.getIntPtrType(Context); Type *T_psize = T_size->getPointerTo(); From 6b636b9c2d4d140673c499b7837ca97ac700cc19 Mon Sep 17 00:00:00 2001 From: Prem Chintalapudi Date: Thu, 10 Aug 2023 10:34:28 -0500 Subject: [PATCH 077/413] Combined compilation fixes --- src/aotcompile.cpp | 22 ++++------------------ src/jitlayers.cpp | 2 +- src/jitlayers.h | 2 +- 3 files changed, 6 insertions(+), 20 deletions(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index 4874bf2b110ef..55d02edf7e3dd 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -418,25 +418,11 @@ void *jl_create_native_impl(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvm } data->jl_fvar_map[this_code] = std::make_tuple(func_id, cfunc_id); } - else if (func == "jl_fptr_sparam") { - func_id = -2; + if (params._shared_module) { + bool error = L.linkInModule(std::move(params._shared_module)); + assert(!error && "Error linking in shared module"); + (void)error; } - else { - //Safe b/c context is locked by params - data->jl_sysimg_fvars.push_back(cast(clone.getModuleUnlocked()->getNamedValue(func))); - func_id = data->jl_sysimg_fvars.size(); - } - if (!cfunc.empty()) { - //Safe b/c context is locked by params - data->jl_sysimg_fvars.push_back(cast(clone.getModuleUnlocked()->getNamedValue(cfunc))); - cfunc_id = data->jl_sysimg_fvars.size(); - } - data->jl_fvar_map[this_code] = std::make_tuple(func_id, cfunc_id); - } - if (params._shared_module) { - bool error = L.linkInModule(std::move(params._shared_module)); - assert(!error && "Error linking in shared module"); - (void)error; } // now get references to the globals in the merged module diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index 2efef10dc8a2e..b5604d77d8e51 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -234,7 +234,7 @@ static jl_callptr_t _jl_compile_codeinst( // need to emit a separate module for the globals before any functions are compiled, // to ensure that the globals are defined when they are compiled. if (params.imaging) { - jl_ExecutionEngine->addModule(jl_get_globals_module(params.tsctx, params.imaging, params.DL, params.TargetTriple, params.global_targets)); + jl_ExecutionEngine->addModule(jl_get_globals_module(params.tsctx, params.imaging, params.DL, params.TargetTriple, params.globals)); } else { StringMap NewGlobals; for (auto &global : params.globals) { diff --git a/src/jitlayers.h b/src/jitlayers.h index f03f62791e9cc..380694af60742 100644 --- a/src/jitlayers.h +++ b/src/jitlayers.h @@ -217,7 +217,7 @@ struct jl_codegen_params_t { // outputs jl_workqueue_t workqueue; jl_compiled_functions_t compiled_functions; - std::map global_targets; + std::map globals; std::map, GlobalVariable*> external_fns; std::map ditypes; std::map llvmtypes; From f9afbbbf59f2e1c3cb5511317b044bc970cb77b8 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Fri, 11 Aug 2023 09:41:31 +0200 Subject: [PATCH 078/413] macOS: Don't inspect dead threadtls during exception handling. (#50871) Otherwise we may end up with the state of a dead thread, as the system IDs can alias. This can lead to an early return from the exception handler, resulting in e.g. safepoint exceptions being actually delivered to user code. --------- Co-authored-by: Jameson Nash Co-authored-by: Cody Tapscott --- src/signals-mach.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/signals-mach.c b/src/signals-mach.c index 073ab2ebc33a6..02bb044609ade 100644 --- a/src/signals-mach.c +++ b/src/signals-mach.c @@ -279,12 +279,16 @@ kern_return_t catch_mach_exception_raise( int nthreads = jl_atomic_load_acquire(&jl_n_threads); for (tid = 0; tid < nthreads; tid++) { jl_ptls_t _ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; + if (jl_atomic_load_relaxed(&_ptls2->current_task) == NULL) { + // this thread is dead + continue; + } if (pthread_mach_thread_np(_ptls2->system_id) == thread) { ptls2 = _ptls2; break; } } - if (!ptls2 || ptls2->current_task == NULL) { + if (!ptls2) { // We don't know about this thread, let the kernel try another handler // instead. This shouldn't actually happen since we only register the // handler for the threads we know about. From c11763fca79a86b613865232110801a65deb2d80 Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Mon, 14 Aug 2023 07:10:17 -0400 Subject: [PATCH 079/413] edit NEWS for 1.10 (#50848) NEWS and HISTORY have diverged, so I'm editing NEWS on the release branch and once that's locked down will move back to HISTORY on master. Opening the PR now so people know I'm doing this. --- NEWS.md | 99 +++++++++++++++++++++------------------------------------ 1 file changed, 37 insertions(+), 62 deletions(-) diff --git a/NEWS.md b/NEWS.md index 95e0bf5ff2b38..713d28d2b9036 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,5 @@ Julia v1.10 Release Notes -======================== +========================= New language features --------------------- @@ -7,8 +7,8 @@ New language features * JuliaSyntax.jl is now used as the default parser, providing better diagnostics and faster parsing. Set environment variable `JULIA_USE_FLISP_PARSER` to `1` to switch back to the old parser if necessary (and if you find this necessary, please file an issue) ([#46372]). -* `⥺` (U+297A, `\leftarrowsubset`) and `⥷` (U+2977, `\leftarrowless`) - may now be used as binary operators with arrow precedence. ([#45962]) +* `⥺` (U+297A, `\leftarrowsubset`) and `⥷` (U+2977, `\leftarrowless`) may now be used as + binary operators with arrow precedence ([#45962]). Language changes ---------------- @@ -21,69 +21,70 @@ Language changes that significantly improves load and inference times for heavily overloaded methods that dispatch on Types (such as traits and constructors). * The "h bar" `ℏ` (`\hslash` U+210F) character is now treated as equivalent to `ħ` (`\hbar` U+0127). -* The `@simd` macro now has a more limited and clearer semantics, it only enables reordering and contraction +* The `@simd` macro now has more limited and clearer semantics: it only enables reordering and contraction of floating-point operations, instead of turning on all "fastmath" optimizations. If you observe performance regressions due to this change, you can recover previous behavior with `@fastmath @simd`, - if you are OK with all the optimizations enabled by the `@fastmath` macro. ([#49405]) + if you are OK with all the optimizations enabled by the `@fastmath` macro ([#49405]). * When a method with keyword arguments is displayed in the stack trace view, the textual - representation of the keyword arguments' types is simplified using the new + representation of the keyword arguments' type is simplified using the new `@Kwargs{key1::Type1, ...}` macro syntax ([#49959]). Compiler/Runtime improvements ----------------------------- -* Updated GC heuristics to count allocated pages instead of individual objects ([#50144]). -* The `@pure` macro is now deprecated. Use `Base.@assume_effects :foldable` instead ([#48682]). -* The mark phase of the Garbage Collector is now multi-threaded ([#48600]). +* Updated GC heuristics to count allocated pages instead of object sizes ([#50144]). This should help + some programs that consumed excessive memory before. +* The mark phase of the garbage collector is now multi-threaded ([#48600]). * [JITLink](https://llvm.org/docs/JITLink.html) is enabled by default on Linux aarch64 when Julia is linked to LLVM 15 or later versions ([#49745]). This should resolve many segmentation faults previously observed on this platform. Command-line option changes --------------------------- -* New option `--gcthreads` to set how many threads will be used by the Garbage Collector ([#48600]). - The default is set to `N/2` where `N` is the amount of worker threads (`--threads`) used by Julia. - -Multi-threading changes ------------------------ - +* New option `--gcthreads` to set how many threads will be used by the garbage collector ([#48600]). + The default is `N/2` where `N` is the number of worker threads (`--threads`) used by Julia. Build system changes -------------------- +* SparseArrays and SuiteSparse are no longer included in the default system image, so the core + language no longer contains GPL libraries. However, these libraries are still included + alongside the language in the standard binary distribution ([#44247], [#48979], [#49266]). New library functions --------------------- -* `tanpi` is now defined. It computes tan(πx) more accurately than `tan(pi*x)` ([#48575]). + +* `tanpi` is now defined. It computes tan(π*x) more accurately than `tan(pi*x)` ([#48575]). * `fourthroot(x)` is now defined in `Base.Math` and can be used to compute the fourth root of `x`. It can also be accessed using the unicode character `∜`, which can be typed by `\fourthroot` ([#48899]). * `Libc.memmove`, `Libc.memset`, and `Libc.memcpy` are now defined, whose functionality matches that of their respective C calls. -* `Base.isprecompiled(pkg::PkgId)` to identify whether a package has already been precompiled ([#50218]). +* `Base.isprecompiled(pkg::PkgId)` has been added, to identify whether a package has already been precompiled ([#50218]). New library features -------------------- -* The `initialized=true` keyword assignment for `sortperm!` and `partialsortperm!` - is now a no-op ([#47979]). It previously exposed unsafe behavior ([#47977]). + * `binomial(x, k)` now supports non-integer `x` ([#48124]). * A `CartesianIndex` is now treated as a "scalar" for broadcasting ([#47044]). * `printstyled` now supports italic output ([#45164]). -* `parent` and `parentindices` support `SubString`s +* `parent` and `parentindices` support `SubString`s. * `replace(string, pattern...)` now supports an optional `IO` argument to write the output to a stream rather than returning a string ([#48625]). +* `startswith` now supports seekable `IO` streams ([#43055]). Standard library changes ------------------------ -* `startswith` now supports seekable `IO` streams ([#43055]) -* printing integral `Rational`s will skip the denominator in `Rational`-typed IO context (e.g. in `Arrays`) ([#45396]) +* The `initialized=true` keyword assignment for `sortperm!` and `partialsortperm!` + is now a no-op ([#47979]). It previously exposed unsafe behavior ([#47977]). +* Printing integral `Rational`s will skip the denominator in `Rational`-typed IO context (e.g. in arrays) ([#45396]). #### Package Manager -* `Pkg.precompile` now accepts `timing` as a keyword argument which displays per package timing information for precompilation (e.g. `Pkg.precompile(timing=true)`) +* `Pkg.precompile` now accepts `timing` as a keyword argument which displays per package timing information for precompilation (e.g. `Pkg.precompile(timing=true)`). #### LinearAlgebra -* `AbstractQ` no longer subtypes to `AbstractMatrix`. Moreover, `adjoint(Q::AbstractQ)` +* `AbstractQ` no longer subtypes `AbstractMatrix`. Moreover, `adjoint(Q::AbstractQ)` no longer wraps `Q` in an `Adjoint` type, but instead in an `AdjointQ`, that itself subtypes `AbstractQ`. This change accounts for the fact that typically `AbstractQ` instances behave like function-based, matrix-backed linear operators, and hence don't @@ -101,71 +102,41 @@ Standard library changes * The `norm` of the adjoint or transpose of an `AbstractMatrix` now returns the norm of the parent matrix by default, matching the current behaviour for `AbstractVector`s ([#49020]). * `eigen(A, B)` and `eigvals(A, B)`, where one of `A` or `B` is symmetric or Hermitian, - are now fully supported ([#49533]) + are now fully supported ([#49533]). * `eigvals/eigen(A, cholesky(B))` now computes the generalized eigenvalues (`eigen`: and eigenvectors) of `A` and `B` via Cholesky decomposition for positive definite `B`. Note: The second argument is the output of `cholesky`. #### Printf -* Format specifiers now support dynamic width and precision, e.g. `%*s` and `%*.*g` ([#40105]). - -#### Profile - - -#### Random +* Format specifiers now support dynamic width and precision, e.g. `%*s` and `%*.*g` ([#40105]). #### REPL * When stack traces are printed, the printed depth of types in function signatures will be limited to avoid overly verbose output ([#49795]). -#### SuiteSparse - - -#### SparseArrays - - #### Test - * The `@test_broken` macro (or `@test` with `broken=true`) now complains if the test expression returns a - non-boolean value in the same way as a non-broken test. ([#47804]) -* When a call to `@test` fails or errors inside a function, a larger stacktrace is now printed such that the location of the test within a `@testset` can be retrieved ([#49451]) - -#### Dates - - -#### Distributed - - -#### Unicode - - -#### DelimitedFiles - + non-boolean value in the same way as a non-broken test ([#47804]). +* When a call to `@test` fails or errors inside a function, a larger stacktrace is now printed such that the location of the test within a `@testset` can be retrieved ([#49451]). #### InteractiveUtils - * `code_native` and `@code_native` now default to intel syntax instead of AT&T. - * `@time_imports` now shows the timing of any module `__init__()`s that are run ([#49529]) +* `code_native` and `@code_native` now default to intel syntax instead of AT&T. +* `@time_imports` now shows the timing of any module `__init__()`s that are run ([#49529]). Deprecated or removed --------------------- - -External dependencies ---------------------- - - -Tooling Improvements --------------------- - +* The `@pure` macro is now deprecated. Use `Base.@assume_effects :foldable` instead ([#48682]). [#31836]: https://github.com/JuliaLang/julia/issues/31836 [#40105]: https://github.com/JuliaLang/julia/issues/40105 [#43055]: https://github.com/JuliaLang/julia/issues/43055 +[#44247]: https://github.com/JuliaLang/julia/issues/44247 [#45164]: https://github.com/JuliaLang/julia/issues/45164 [#45396]: https://github.com/JuliaLang/julia/issues/45396 [#45962]: https://github.com/JuliaLang/julia/issues/45962 @@ -179,10 +150,13 @@ Tooling Improvements [#48124]: https://github.com/JuliaLang/julia/issues/48124 [#48575]: https://github.com/JuliaLang/julia/issues/48575 [#48600]: https://github.com/JuliaLang/julia/issues/48600 +[#48625]: https://github.com/JuliaLang/julia/issues/48625 [#48682]: https://github.com/JuliaLang/julia/issues/48682 [#48899]: https://github.com/JuliaLang/julia/issues/48899 +[#48979]: https://github.com/JuliaLang/julia/issues/48979 [#49020]: https://github.com/JuliaLang/julia/issues/49020 [#49110]: https://github.com/JuliaLang/julia/issues/49110 +[#49266]: https://github.com/JuliaLang/julia/issues/49266 [#49405]: https://github.com/JuliaLang/julia/issues/49405 [#49451]: https://github.com/JuliaLang/julia/issues/49451 [#49529]: https://github.com/JuliaLang/julia/issues/49529 @@ -190,4 +164,5 @@ Tooling Improvements [#49745]: https://github.com/JuliaLang/julia/issues/49745 [#49795]: https://github.com/JuliaLang/julia/issues/49795 [#49959]: https://github.com/JuliaLang/julia/issues/49959 +[#50144]: https://github.com/JuliaLang/julia/issues/50144 [#50218]: https://github.com/JuliaLang/julia/issues/50218 From 1fc06f2892ac053a20318b58cceaeb4c24757d70 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Tue, 15 Aug 2023 08:00:34 -0300 Subject: [PATCH 080/413] Change addprocs limit to total_memory instead of free memory. (cherry picked from commit 5e3fb41e349f0a50d6ecd8315717b6234c1b5fbb) --- test/testenv.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/testenv.jl b/test/testenv.jl index a4bec15a34130..6f99291e01138 100644 --- a/test/testenv.jl +++ b/test/testenv.jl @@ -38,7 +38,7 @@ if !@isdefined(testenv_defined) function addprocs_with_testenv(X; rr_allowed=true, kwargs...) exename = rr_allowed ? `$rr_exename $test_exename` : test_exename if X isa Integer - heap_size=round(Int,(Sys.free_memory()/(1024^2)/(X+1))) + heap_size=round(Int,(Sys.total_memory()/(1024^2)/(X+1))) push!(test_exeflags.exec, "--heap-size-hint=$(heap_size)M") end addprocs(X; exename=exename, exeflags=test_exeflags, kwargs...) From a468aa198d030bd77efd7cb3e4069684af622dcc Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 17 Aug 2023 08:27:47 +0200 Subject: [PATCH 081/413] release-1.10: set VERSON to 1.10.0-beta2 (#50935) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index e00a6c71830e9..927070056a8c5 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.0-beta1 +1.10.0-beta2 From 310677969f7ab4a5b2c31e49c44503e3f838a1bf Mon Sep 17 00:00:00 2001 From: Simon Byrne Date: Thu, 10 Aug 2023 09:25:44 -0700 Subject: [PATCH 082/413] Avoid race conditions with recursive rm (#50842) If two processes attempt to recursively delete a directory at the same time, then we can end up in a state where the initial `isdir` is `true`, but by the time it actually deletes the directory it is already gone. e.g. - https://buildkite.com/clima/climacore-ci/builds/2460#0189d254-76a9-474b-ad25-e5b16440d629/140-142 which is triggered by https://github.com/cjdoris/PackageExtensionCompat.jl/blob/636eb5a14ddf9134d004c93f598515903af26443/src/PackageExtensionCompat.jl#L59 - https://buildkite.com/clima/climacore-ci/builds/2457#0189c7fe-8872-40c5-9106-da2e621ff55a/139-150 which is triggered by https://github.com/JuliaGPU/GPUCompiler.jl/blob/06e670657d7ceebc1845d7c9534a8352c33490de/src/rtlib.jl#L152 I've been conservative and only applied this when `force=true`, but perhaps it should apply generally? (cherry picked from commit cbd3c89875afb0892c4e9e7559bca0254b2781d4) --- base/file.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/base/file.jl b/base/file.jl index 866e82b6e39c2..d6373c07e993a 100644 --- a/base/file.jl +++ b/base/file.jl @@ -303,7 +303,9 @@ function rm(path::AbstractString; force::Bool=false, recursive::Bool=false) try ret = ccall(:uv_fs_rmdir, Cint, (Ptr{Cvoid}, Ptr{Cvoid}, Cstring, Ptr{Cvoid}), C_NULL, req, path, C_NULL) uv_fs_req_cleanup(req) - ret < 0 && uv_error("rm($(repr(path)))", ret) + if ret < 0 && !(force && ret == Base.UV_ENOENT) + uv_error("rm($(repr(path)))", ret) + end nothing finally Libc.free(req) From 7e92d1499d9056bc00f4ba78736a904bf4453979 Mon Sep 17 00:00:00 2001 From: Kiran Date: Fri, 11 Aug 2023 09:29:07 -0400 Subject: [PATCH 083/413] Add a `threadpool` parameter to `Channel` constructor (#50858) Without this, the task created by a `Channel` will run in the threadpool of the creating task; in the REPL, this could be the interactive threadpool. On 1.8, without threadpools: ```julia % julia +1.8 -t 8 _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.8.5 (2023-01-08) _/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release |__/ | julia> for _ in 1:10 Channel{Int}(1; spawn=true) do _ Core.print("threadid=$(Threads.threadid())\n") end end threadid=2 threadid=5 threadid=2 threadid=2 threadid=1 threadid=6 threadid=7 threadid=8 threadid=3 threadid=4 ``` On 1.9, with no interactive threads: ```julia % julia +1.9 -t 8 _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.9.2 (2023-07-05) _/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release |__/ | julia> for _ in 1:10 Channel{Int}(1; spawn=true) do _ Core.print("threadid=$(Threads.threadid())\n") end end threadid=4 threadid=4 threadid=4 threadid=2 threadid=3 threadid=1 threadid=7 threadid=5 threadid=8 threadid=6 ``` On 1.9, with an interactive thread: ```julia % julia +1.9 -t 7,1 _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.9.2 (2023-07-05) _/ |\__'_|_|_|\__'_| | Official https://julialang.org/ release |__/ | julia> for _ in 1:10 Channel{Int}(1; spawn=true) do _ Core.print("threadid=$(Threads.threadid())\n") end end threadid=1 threadid=1 threadid=1 threadid=1 threadid=1 threadid=1 threadid=1 threadid=1 threadid=1 threadid=1 ``` With this PR, the `:default` threadpool is used instead. ```julia % julia +master -t7,1 _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.11.0-DEV.244 (2023-08-09) _/ |\__'_|_|_|\__'_| | Commit d99f2496ff* (0 days old master) |__/ | julia> for _ in 1:10 Channel{Int}(1; spawn=true) do _ Core.print("threadid=$(Threads.threadid())\n") end end threadid=7 threadid=6 threadid=7 threadid=7 threadid=6 threadid=3 threadid=5 threadid=2 threadid=4 threadid=8 ``` And, the behavior can be overridden. ```julia % julia +master -t7,1 _ _ _ _(_)_ | Documentation: https://docs.julialang.org (_) | (_) (_) | _ _ _| |_ __ _ | Type "?" for help, "]?" for Pkg help. | | | | | | |/ _` | | | | |_| | | | (_| | | Version 1.11.0-DEV.244 (2023-08-09) _/ |\__'_|_|_|\__'_| | Commit d99f2496ff* (0 days old master) |__/ | julia> for _ in 1:10 Channel{Int}(1; spawn=true, threadpool=:interactive) do _ Core.print("threadid=$(Threads.threadid())\n") end end threadid=1 threadid=1 threadid=1 threadid=1 threadid=1 threadid=1 threadid=1 threadid=1 threadid=1 threadid=1 ``` --------- Co-authored-by: Nathan Daly (cherry picked from commit 555cd2304fb72669cc2cd92adb485306cc0caa7e) --- base/channels.jl | 28 +++++++++++++++++++++------- test/channel_threadpool.jl | 14 ++++++++++++++ test/channels.jl | 5 +++++ 3 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 test/channel_threadpool.jl diff --git a/base/channels.jl b/base/channels.jl index 1b5b427f92671..90dac37f41cb6 100644 --- a/base/channels.jl +++ b/base/channels.jl @@ -59,7 +59,7 @@ Channel(sz=0) = Channel{Any}(sz) # special constructors """ - Channel{T=Any}(func::Function, size=0; taskref=nothing, spawn=false) + Channel{T=Any}(func::Function, size=0; taskref=nothing, spawn=false, threadpool=nothing) Create a new task from `func`, bind it to a new channel of type `T` and size `size`, and schedule the task, all in a single call. @@ -70,9 +70,14 @@ The channel is automatically closed when the task terminates. If you need a reference to the created task, pass a `Ref{Task}` object via the keyword argument `taskref`. -If `spawn = true`, the Task created for `func` may be scheduled on another thread +If `spawn=true`, the `Task` created for `func` may be scheduled on another thread in parallel, equivalent to creating a task via [`Threads.@spawn`](@ref). +If `spawn=true` and the `threadpool` argument is not set, it defaults to `:default`. + +If the `threadpool` argument is set (to `:default` or `:interactive`), this implies +that `spawn=true` and the new Task is spawned to the specified threadpool. + Return a `Channel`. # Examples @@ -117,6 +122,9 @@ true In earlier versions of Julia, Channel used keyword arguments to set `size` and `T`, but those constructors are deprecated. +!!! compat "Julia 1.9" + The `threadpool=` argument was added in Julia 1.9. + ```jldoctest julia> chnl = Channel{Char}(1, spawn=true) do ch for c in "hello world" @@ -129,12 +137,18 @@ julia> String(collect(chnl)) "hello world" ``` """ -function Channel{T}(func::Function, size=0; taskref=nothing, spawn=false) where T +function Channel{T}(func::Function, size=0; taskref=nothing, spawn=false, threadpool=nothing) where T chnl = Channel{T}(size) task = Task(() -> func(chnl)) + if threadpool === nothing + threadpool = :default + else + spawn = true + end task.sticky = !spawn bind(chnl, task) if spawn + Threads._spawn_set_thrpool(task, threadpool) schedule(task) # start it on (potentially) another thread else yield(task) # immediately start it, yielding the current thread @@ -149,17 +163,17 @@ Channel(func::Function, args...; kwargs...) = Channel{Any}(func, args...; kwargs # of course not deprecated.) # We use `nothing` default values to check which arguments were set in order to throw the # deprecation warning if users try to use `spawn=` with `ctype=` or `csize=`. -function Channel(func::Function; ctype=nothing, csize=nothing, taskref=nothing, spawn=nothing) +function Channel(func::Function; ctype=nothing, csize=nothing, taskref=nothing, spawn=nothing, threadpool=nothing) # The spawn= keyword argument was added in Julia v1.3, and cannot be used with the # deprecated keyword arguments `ctype=` or `csize=`. - if (ctype !== nothing || csize !== nothing) && spawn !== nothing - throw(ArgumentError("Cannot set `spawn=` in the deprecated constructor `Channel(f; ctype=Any, csize=0)`. Please use `Channel{T=Any}(f, size=0; taskref=nothing, spawn=false)` instead!")) + if (ctype !== nothing || csize !== nothing) && (spawn !== nothing || threadpool !== nothing) + throw(ArgumentError("Cannot set `spawn=` or `threadpool=` in the deprecated constructor `Channel(f; ctype=Any, csize=0)`. Please use `Channel{T=Any}(f, size=0; taskref=nothing, spawn=false, threadpool=nothing)` instead!")) end # Set the actual default values for the arguments. ctype === nothing && (ctype = Any) csize === nothing && (csize = 0) spawn === nothing && (spawn = false) - return Channel{ctype}(func, csize; taskref=taskref, spawn=spawn) + return Channel{ctype}(func, csize; taskref=taskref, spawn=spawn, threadpool=threadpool) end closed_exception() = InvalidStateException("Channel is closed.", :closed) diff --git a/test/channel_threadpool.jl b/test/channel_threadpool.jl new file mode 100644 index 0000000000000..4509604087fa8 --- /dev/null +++ b/test/channel_threadpool.jl @@ -0,0 +1,14 @@ +# This file is a part of Julia. License is MIT: https://julialang.org/license + +using Test +using Base.Threads + +@testset "Task threadpools" begin + c = Channel{Symbol}() do c; put!(c, threadpool(current_task())); end + @test take!(c) === threadpool(current_task()) + c = Channel{Symbol}(spawn = true) do c; put!(c, threadpool(current_task())); end + @test take!(c) === :default + c = Channel{Symbol}(threadpool = :interactive) do c; put!(c, threadpool(current_task())); end + @test take!(c) === :interactive + @test_throws ArgumentError Channel{Symbol}(threadpool = :foo) do c; put!(c, :foo); end +end diff --git a/test/channels.jl b/test/channels.jl index dbda5cf069081..36fec7b842de1 100644 --- a/test/channels.jl +++ b/test/channels.jl @@ -107,6 +107,11 @@ end @test taskref[].sticky == false @test collect(c) == [0] end +let cmd = `$(Base.julia_cmd()) --depwarn=error --rr-detach --startup-file=no channel_threadpool.jl` + new_env = copy(ENV) + new_env["JULIA_NUM_THREADS"] = "1,1" + run(pipeline(setenv(cmd, new_env), stdout = stdout, stderr = stderr)) +end @testset "multiple concurrent put!/take! on a channel for different sizes" begin function testcpt(sz) From 48746e98b9fb8e2a5ebecd755a5bf4e83eb76829 Mon Sep 17 00:00:00 2001 From: Milan Bouchet-Valat Date: Mon, 14 Aug 2023 13:37:10 +0200 Subject: [PATCH 084/413] Fix integer overflow in `isapprox` (#50730) Ensure that `isapprox` gives correct results when comparing an integer with another integer or with a float. For comparison between integers, the fix only works when keeping default values for `rtol` and `norm`, and with `atol < 1`. It is not possible to handle the (atypical) case where `norm !== abs`, but that's OK since the user is responsible for providing a safe function. It would be possible to handle the case where `rtol > 0` or `atol >= 1`, but with complex code which would check for overflow and handle all possible corner cases; it would work only for types defined in Base and would not be extensible by packages. So I'm not sure that's worth it. At least with PR fixes the most common case. Fixes https://github.com/JuliaLang/julia/issues/50380. (cherry picked from commit 5f03a18c615526348ef06bd0144a1498cb0b13a7) --- base/floatfuncs.jl | 15 ++++++++++++++- test/floatfuncs.jl | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/base/floatfuncs.jl b/base/floatfuncs.jl index 9b8ca4b04ee28..bac500955d916 100644 --- a/base/floatfuncs.jl +++ b/base/floatfuncs.jl @@ -304,7 +304,20 @@ true function isapprox(x::Number, y::Number; atol::Real=0, rtol::Real=rtoldefault(x,y,atol), nans::Bool=false, norm::Function=abs) - x == y || (isfinite(x) && isfinite(y) && norm(x-y) <= max(atol, rtol*max(norm(x), norm(y)))) || (nans && isnan(x) && isnan(y)) + x′, y′ = promote(x, y) # to avoid integer overflow + x == y || + (isfinite(x) && isfinite(y) && norm(x-y) <= max(atol, rtol*max(norm(x′), norm(y′)))) || + (nans && isnan(x) && isnan(y)) +end + +function isapprox(x::Integer, y::Integer; + atol::Real=0, rtol::Real=rtoldefault(x,y,atol), + nans::Bool=false, norm::Function=abs) + if norm === abs && atol < 1 && rtol == 0 + return x == y + else + return norm(x - y) <= max(atol, rtol*max(norm(x), norm(y))) + end end """ diff --git a/test/floatfuncs.jl b/test/floatfuncs.jl index 7e9d8021ac5df..321f1881371a3 100644 --- a/test/floatfuncs.jl +++ b/test/floatfuncs.jl @@ -209,3 +209,47 @@ end struct CustomNumber <: Number end @test !isnan(CustomNumber()) end + +@testset "isapprox and integer overflow" begin + for T in (Int8, Int16, Int32) + T === Int && continue + @test !isapprox(typemin(T), T(0)) + @test !isapprox(typemin(T), unsigned(T)(0)) + @test !isapprox(typemin(T), 0) + @test !isapprox(typemin(T), T(0), atol=0.99) + @test !isapprox(typemin(T), unsigned(T)(0), atol=0.99) + @test !isapprox(typemin(T), 0, atol=0.99) + @test_broken !isapprox(typemin(T), T(0), atol=1) + @test_broken !isapprox(typemin(T), unsigned(T)(0), atol=1) + @test !isapprox(typemin(T), 0, atol=1) + + @test !isapprox(typemin(T)+T(10), T(10)) + @test !isapprox(typemin(T)+T(10), unsigned(T)(10)) + @test !isapprox(typemin(T)+T(10), 10) + @test !isapprox(typemin(T)+T(10), T(10), atol=0.99) + @test !isapprox(typemin(T)+T(10), unsigned(T)(10), atol=0.99) + @test !isapprox(typemin(T)+T(10), 10, atol=0.99) + @test_broken !isapprox(typemin(T)+T(10), T(10), atol=1) + @test !isapprox(typemin(T)+T(10), unsigned(T)(10), atol=1) + @test !isapprox(typemin(T)+T(10), 10, atol=1) + + @test isapprox(typemin(T), 0.0, rtol=1) + end + for T in (Int, Int64, Int128) + @test !isapprox(typemin(T), T(0)) + @test !isapprox(typemin(T), unsigned(T)(0)) + @test !isapprox(typemin(T), T(0), atol=0.99) + @test !isapprox(typemin(T), unsigned(T)(0), atol=0.99) + @test_broken !isapprox(typemin(T), T(0), atol=1) + @test_broken !isapprox(typemin(T), unsigned(T)(0), atol=1) + + @test !isapprox(typemin(T)+T(10), T(10)) + @test !isapprox(typemin(T)+T(10), unsigned(T)(10)) + @test !isapprox(typemin(T)+T(10), T(10), atol=0.99) + @test !isapprox(typemin(T)+T(10), unsigned(T)(10), atol=0.99) + @test_broken !isapprox(typemin(T)+T(10), T(10), atol=1) + @test !isapprox(typemin(T)+T(10), unsigned(T)(10), atol=1) + + @test isapprox(typemin(T), 0.0, rtol=1) + end +end From 111dc03f1c3b54a0098c5be316238c4b51d63796 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Wed, 16 Aug 2023 15:27:18 -0400 Subject: [PATCH 085/413] Add note the `Task` about sticky bit (#50915) Update the docs for `Task` to mention the fact that they default to sticky. Co-authored-by: Gabriel Baraldi (cherry picked from commit 5466d3d082e0dd1608351fb5f9be6d5ec3ae7056) --- base/docs/basedocs.jl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/base/docs/basedocs.jl b/base/docs/basedocs.jl index fd8c35a5fdf76..b0aadb2b97fff 100644 --- a/base/docs/basedocs.jl +++ b/base/docs/basedocs.jl @@ -1744,6 +1744,12 @@ Create a `Task` (i.e. coroutine) to execute the given function `func` (which must be callable with no arguments). The task exits when this function returns. The task will run in the "world age" from the parent at construction when [`schedule`](@ref)d. +!!! warning + By default tasks will have the sticky bit set to true `t.sticky`. This models the + historic default for [`@async`](@ref). Sticky tasks can only be run on the worker thread + they are first scheduled on. To obtain the behavior of [`Threads.@spawn`](@ref) set the sticky + bit manually to `false`. + # Examples ```jldoctest julia> a() = sum(i for i in 1:1000); From ca5236166b631d95aa8d9b9b2951f697c33389a7 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Fri, 18 Aug 2023 15:54:26 -0400 Subject: [PATCH 086/413] Fix Pkg branch (release-1.10) --- stdlib/Pkg.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 6551c7e24049f..06a2bfac5ebc8 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ -PKG_BRANCH = master +PKG_BRANCH = release-1.10 PKG_SHA1 = e8197dd0ed8132d4a7619f3657363c8415249c47 PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 747dea667da9fd59b08a502b5b4b0bdcf1f46c4b Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Fri, 18 Aug 2023 21:21:27 -0400 Subject: [PATCH 087/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20Pkg=20stdlib=20from=20e8197dd0e=20to=2085d6ac61?= =?UTF-8?q?7=20(#50973)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Dilum Aluthge fix inference of PackageSpec constructor in presence of imprecise input types (#3585) --- .../Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/md5 | 1 + .../Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/sha512 | 1 + .../Pkg-e8197dd0ed8132d4a7619f3657363c8415249c47.tar.gz/md5 | 1 - .../Pkg-e8197dd0ed8132d4a7619f3657363c8415249c47.tar.gz/sha512 | 1 - stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/md5 create mode 100644 deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/sha512 delete mode 100644 deps/checksums/Pkg-e8197dd0ed8132d4a7619f3657363c8415249c47.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-e8197dd0ed8132d4a7619f3657363c8415249c47.tar.gz/sha512 diff --git a/deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/md5 b/deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/md5 new file mode 100644 index 0000000000000..95df34217f215 --- /dev/null +++ b/deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/md5 @@ -0,0 +1 @@ +c46326a7aea479157b132517b0c88043 diff --git a/deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/sha512 b/deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/sha512 new file mode 100644 index 0000000000000..ed5e0ab33ac9f --- /dev/null +++ b/deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/sha512 @@ -0,0 +1 @@ +9b0460ee2bdc4b2844cff95425d46fdd0087f759dcd616c08e1c2c821244399744d0ba2f979034b744491fc84118984f5517874e040256e9b33b670a828188b9 diff --git a/deps/checksums/Pkg-e8197dd0ed8132d4a7619f3657363c8415249c47.tar.gz/md5 b/deps/checksums/Pkg-e8197dd0ed8132d4a7619f3657363c8415249c47.tar.gz/md5 deleted file mode 100644 index 8710722b5409c..0000000000000 --- a/deps/checksums/Pkg-e8197dd0ed8132d4a7619f3657363c8415249c47.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -f0e62f7b63dc9400caa2fec1b91b7889 diff --git a/deps/checksums/Pkg-e8197dd0ed8132d4a7619f3657363c8415249c47.tar.gz/sha512 b/deps/checksums/Pkg-e8197dd0ed8132d4a7619f3657363c8415249c47.tar.gz/sha512 deleted file mode 100644 index c92e62d861633..0000000000000 --- a/deps/checksums/Pkg-e8197dd0ed8132d4a7619f3657363c8415249c47.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -e48ee01791f58d41715fd44e16238d835315e930d3ef529dd3f3b5660935f7f0ca2c5163ec9c4e4d90e4ead5328f39e0bfffa88223c2094c8727460eac022cc1 diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 06a2bfac5ebc8..27e21eb49b6f9 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = e8197dd0ed8132d4a7619f3657363c8415249c47 +PKG_SHA1 = 85d6ac617442c13eda85a5782a197b81ee86003a PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 10cbf3cc855d4c6cfccd3144f07c7095927a2cdf Mon Sep 17 00:00:00 2001 From: Jeremie Knuesel Date: Sat, 8 Jul 2023 00:14:40 +0200 Subject: [PATCH 088/413] Improve documentation of sort-related functions (#48387) * document the `order` keyword in `sort!` * list explicitly the required properties of `lt` in `sort!` * clarify the sequence of "by" transformations if both `by` and `order` are given * show default values in the signatures for `searchsorted` and related functions * note that `by` is also applied to searched value in `searchsorted` and related * add `isunordered` to the manual (it's already exported) --------- Co-authored-by: Lilith Orion Hafner (cherry picked from commit a660798e47ed38c1f8039b0d7af3ff5a451f53e8) --- base/operators.jl | 12 +-- base/ordering.jl | 8 +- base/sort.jl | 209 +++++++++++++++++++++++++++----------- doc/src/base/base.md | 1 + doc/src/base/sort.md | 2 +- doc/src/manual/missing.md | 2 +- 6 files changed, 161 insertions(+), 73 deletions(-) diff --git a/base/operators.jl b/base/operators.jl index 3f51be737ca5c..3f0f8bc49b164 100644 --- a/base/operators.jl +++ b/base/operators.jl @@ -143,7 +143,7 @@ isequal(x::AbstractFloat, y::Real ) = (isnan(x) & isnan(y)) | signequal( isless(x, y) Test whether `x` is less than `y`, according to a fixed total order (defined together with -[`isequal`](@ref)). `isless` is not defined on all pairs of values `(x, y)`. However, if it +[`isequal`](@ref)). `isless` is not defined for pairs `(x, y)` of all types. However, if it is defined, it is expected to satisfy the following: - If `isless(x, y)` is defined, then so is `isless(y, x)` and `isequal(x, y)`, and exactly one of those three yields `true`. @@ -154,13 +154,13 @@ Values that are normally unordered, such as `NaN`, are ordered after regular values. [`missing`](@ref) values are ordered last. -This is the default comparison used by [`sort`](@ref). +This is the default comparison used by [`sort!`](@ref). # Implementation Non-numeric types with a total order should implement this function. Numeric types only need to implement it if they have special values such as `NaN`. Types with a partial order should implement [`<`](@ref). -See the documentation on [Alternate orderings](@ref) for how to define alternate +See the documentation on [Alternate Orderings](@ref) for how to define alternate ordering methods that can be used in sorting and related functions. # Examples @@ -335,6 +335,8 @@ New types with a canonical partial order should implement this function for two arguments of the new type. Types with a canonical total order should implement [`isless`](@ref) instead. +See also [`isunordered`](@ref). + # Examples ```jldoctest julia> 'a' < 'b' @@ -1352,7 +1354,7 @@ corresponding position in `collection`. To get a vector indicating whether each in `items` is in `collection`, wrap `collection` in a tuple or a `Ref` like this: `in.(items, Ref(collection))` or `items .∈ Ref(collection)`. -See also: [`∉`](@ref). +See also: [`∉`](@ref), [`insorted`](@ref), [`contains`](@ref), [`occursin`](@ref), [`issubset`](@ref). # Examples ```jldoctest @@ -1390,8 +1392,6 @@ julia> [1, 2] .∈ ([2, 3],) 0 1 ``` - -See also: [`insorted`](@ref), [`contains`](@ref), [`occursin`](@ref), [`issubset`](@ref). """ in diff --git a/base/ordering.jl b/base/ordering.jl index d0c9cb99f9c72..5383745b1dd1f 100644 --- a/base/ordering.jl +++ b/base/ordering.jl @@ -87,8 +87,8 @@ By(by) = By(by, Forward) """ Lt(lt) -`Ordering` which calls `lt(a, b)` to compare elements. `lt` should -obey the same rules as implementations of [`isless`](@ref). +`Ordering` that calls `lt(a, b)` to compare elements. `lt` must +obey the same rules as the `lt` parameter of [`sort!`](@ref). """ struct Lt{T} <: Ordering lt::T @@ -146,8 +146,8 @@ Construct an [`Ordering`](@ref) object from the same arguments used by Elements are first transformed by the function `by` (which may be [`identity`](@ref)) and are then compared according to either the function `lt` or an existing ordering `order`. `lt` should be [`isless`](@ref) or a function -which obeys similar rules. Finally, the resulting order is reversed if -`rev=true`. +that obeys the same rules as the `lt` parameter of [`sort!`](@ref). Finally, +the resulting order is reversed if `rev=true`. Passing an `lt` other than `isless` along with an `order` other than [`Base.Order.Forward`](@ref) or [`Base.Order.Reverse`](@ref) is not permitted, diff --git a/base/sort.jl b/base/sort.jl index 90f8755d3b1a4..786d8e110e6e2 100644 --- a/base/sort.jl +++ b/base/sort.jl @@ -65,8 +65,8 @@ end """ issorted(v, lt=isless, by=identity, rev::Bool=false, order::Ordering=Forward) -Test whether a vector is in sorted order. The `lt`, `by` and `rev` keywords modify what -order is considered to be sorted just as they do for [`sort`](@ref). +Test whether a collection is in sorted order. The keywords modify what +order is considered sorted, as described in the [`sort!`](@ref) documentation. # Examples ```jldoctest @@ -81,6 +81,9 @@ false julia> issorted([(1, "b"), (2, "a")], by = x -> x[2], rev=true) true + +julia> issorted([1, 2, -2, 3], by=abs) +true ``` """ issorted(itr; @@ -96,14 +99,17 @@ maybeview(v, k) = view(v, k) maybeview(v, k::Integer) = v[k] """ - partialsort!(v, k; by=, lt=, rev=false) + partialsort!(v, k; by=identity, lt=isless, rev=false) -Partially sort the vector `v` in place, according to the order specified by `by`, `lt` and -`rev` so that the value at index `k` (or range of adjacent values if `k` is a range) occurs +Partially sort the vector `v` in place so that the value at index `k` (or +range of adjacent values if `k` is a range) occurs at the position where it would appear if the array were fully sorted. If `k` is a single index, that value is returned; if `k` is a range, an array of values at those indices is returned. Note that `partialsort!` may not fully sort the input array. +For the keyword arguments, see the documentation of [`sort!`](@ref). + + # Examples ```jldoctest julia> a = [1, 2, 4, 3, 4] @@ -150,9 +156,9 @@ partialsort!(v::AbstractVector, k::Union{Integer,OrdinalRange}; partialsort!(v, k, ord(lt,by,rev,order)) """ - partialsort(v, k, by=, lt=, rev=false) + partialsort(v, k, by=identity, lt=isless, rev=false) -Variant of [`partialsort!`](@ref) which copies `v` before partially sorting it, thereby returning the +Variant of [`partialsort!`](@ref) that copies `v` before partially sorting it, thereby returning the same thing as `partialsort!` but leaving `v` unmodified. """ partialsort(v::AbstractVector, k::Union{Integer,OrdinalRange}; kws...) = @@ -161,7 +167,7 @@ partialsort(v::AbstractVector, k::Union{Integer,OrdinalRange}; kws...) = # reference on sorted binary search: # http://www.tbray.org/ongoing/When/200x/2003/03/22/Binary -# index of the first value of vector a that is greater than or equal to x; +# index of the first value of vector a that is greater than or equivalent to x; # returns lastindex(v)+1 if x is greater than all values in v. function searchsortedfirst(v::AbstractVector, x, lo::T, hi::T, o::Ordering)::keytype(v) where T<:Integer hi = hi + T(1) @@ -180,7 +186,7 @@ function searchsortedfirst(v::AbstractVector, x, lo::T, hi::T, o::Ordering)::key return lo end -# index of the last value of vector a that is less than or equal to x; +# index of the last value of vector a that is less than or equivalent to x; # returns firstindex(v)-1 if x is less than all values of v. function searchsortedlast(v::AbstractVector, x, lo::T, hi::T, o::Ordering)::keytype(v) where T<:Integer u = T(1) @@ -197,7 +203,7 @@ function searchsortedlast(v::AbstractVector, x, lo::T, hi::T, o::Ordering)::keyt return lo end -# returns the range of indices of v equal to x +# returns the range of indices of v equivalent to x # if v does not contain x, returns a 0-length range # indicating the insertion point of x function searchsorted(v::AbstractVector, x, ilo::T, ihi::T, o::Ordering)::UnitRange{keytype(v)} where T<:Integer @@ -290,16 +296,19 @@ for s in [:searchsortedfirst, :searchsortedlast, :searchsorted] end """ - searchsorted(a, x; by=, lt=, rev=false) + searchsorted(v, x; by=identity, lt=isless, rev=false) -Return the range of indices of `a` which compare as equal to `x` (using binary search) -according to the order specified by the `by`, `lt` and `rev` keywords, assuming that `a` -is already sorted in that order. Return an empty range located at the insertion point -if `a` does not contain values equal to `x`. +Return the range of indices in `v` where values are equivalent to `x`, or an +empty range located at the insertion point if `v` does not contain values +equivalent to `x`. The vector `v` must be sorted according to the order defined +by the keywords. Refer to [`sort!`](@ref) for the meaning of the keywords and +the definition of equivalence. Note that the `by` function is applied to the +searched value `x` as well as the values in `v`. -See [`sort!`](@ref) for an explanation of the keyword arguments `by`, `lt` and `rev`. +The range is generally found using binary search, but there are optimized +implementations for some inputs. -See also: [`insorted`](@ref), [`searchsortedfirst`](@ref), [`sort`](@ref), [`findall`](@ref). +See also: [`searchsortedfirst`](@ref), [`sort!`](@ref), [`insorted`](@ref), [`findall`](@ref). # Examples ```jldoctest @@ -324,15 +333,19 @@ julia> searchsorted([1=>"one", 2=>"two", 2=>"two", 4=>"four"], 2=>"two", by=firs """ searchsorted """ - searchsortedfirst(a, x; by=, lt=, rev=false) + searchsortedfirst(v, x; by=identity, lt=isless, rev=false) -Return the index of the first value in `a` greater than or equal to `x`, according to the -specified order. Return `lastindex(a) + 1` if `x` is greater than all values in `a`. -`a` is assumed to be sorted. +Return the index of the first value in `v` greater than or equivalent to `x`. +If `x` is greater than all values in `v`, return `lastindex(v) + 1`. -`insert!`ing `x` at this index will maintain sorted order. +The vector `v` must be sorted according to the order defined by the keywords. +`insert!`ing `x` at the returned index will maintain the sorted order. Refer to +[`sort!`](@ref) for the meaning of the keywords and the definition of +"greater than" and equivalence. Note that the `by` function is applied to the +searched value `x` as well as the values in `v`. -See [`sort!`](@ref) for an explanation of the keyword arguments `by`, `lt` and `rev`. +The index is generally found using binary search, but there are optimized +implementations for some inputs. See also: [`searchsortedlast`](@ref), [`searchsorted`](@ref), [`findfirst`](@ref). @@ -353,19 +366,24 @@ julia> searchsortedfirst([1, 2, 4, 5, 5, 7], 9) # no match, insert at end julia> searchsortedfirst([1, 2, 4, 5, 5, 7], 0) # no match, insert at start 1 -julia> searchsortedfirst([1=>"one", 2=>"two", 4=>"four"], 3=>"three", by=first) # Compare the keys of the pairs +julia> searchsortedfirst([1=>"one", 2=>"two", 4=>"four"], 3=>"three", by=first) # compare the keys of the pairs 3 ``` """ searchsortedfirst """ - searchsortedlast(a, x; by=, lt=, rev=false) + searchsortedlast(v, x; by=identity, lt=isless, rev=false) + +Return the index of the last value in `v` less than or equivalent to `x`. +If `x` is less than all values in `v` the function returns `firstindex(v) - 1`. -Return the index of the last value in `a` less than or equal to `x`, according to the -specified order. Return `firstindex(a) - 1` if `x` is less than all values in `a`. `a` is -assumed to be sorted. +The vector `v` must be sorted according to the order defined by the keywords. +Refer to [`sort!`](@ref) for the meaning of the keywords and the definition of +"less than" and equivalence. Note that the `by` function is applied to the +searched value `x` as well as the values in `v`. -See [`sort!`](@ref) for an explanation of the keyword arguments `by`, `lt` and `rev`. +The index is generally found using binary search, but there are optimized +implementations for some inputs # Examples ```jldoctest @@ -390,12 +408,16 @@ julia> searchsortedlast([1=>"one", 2=>"two", 4=>"four"], 3=>"three", by=first) # """ searchsortedlast """ - insorted(x, a; by=, lt=, rev=false) -> Bool + insorted(x, v; by=identity, lt=isless, rev=false) -> Bool + +Determine whether a vector `v` contains any value equivalent to `x`. +The vector `v` must be sorted according to the order defined by the keywords. +Refer to [`sort!`](@ref) for the meaning of the keywords and the definition of +equivalence. Note that the `by` function is applied to the searched value `x` +as well as the values in `v`. -Determine whether an item `x` is in the sorted collection `a`, in the sense that -it is [`==`](@ref) to one of the values of the collection according to the order -specified by the `by`, `lt` and `rev` keywords, assuming that `a` is already -sorted in that order, see [`sort`](@ref) for the keywords. +The check is generally done using binary search, but there are optimized +implementations for some inputs. See also [`in`](@ref). @@ -415,6 +437,9 @@ false julia> insorted(0, [1, 2, 4, 5, 5, 7]) # no match false + +julia> insorted(2=>"TWO", [1=>"one", 2=>"two", 4=>"four"], by=first) # compare the keys of the pairs +true ``` !!! compat "Julia 1.6" @@ -741,8 +766,8 @@ Insertion sort traverses the collection one element at a time, inserting each element into its correct, sorted position in the output vector. Characteristics: -* *stable*: preserves the ordering of elements which compare equal -(e.g. "a" and "A" in a sort of letters which ignores case). +* *stable*: preserves the ordering of elements that compare equal +(e.g. "a" and "A" in a sort of letters that ignores case). * *in-place* in memory. * *quadratic performance* in the number of elements to be sorted: it is well-suited to small collections but should not be used for large ones. @@ -981,8 +1006,8 @@ is treated as the first or last index of the input, respectively. `lo` and `hi` may be specified together as an `AbstractUnitRange`. Characteristics: - * *stable*: preserves the ordering of elements which compare equal - (e.g. "a" and "A" in a sort of letters which ignores case). + * *stable*: preserves the ordering of elements that compare equal + (e.g. "a" and "A" in a sort of letters that ignores case). * *not in-place* in memory. * *divide-and-conquer*: sort strategy similar to [`QuickSort`](@ref). * *linear runtime* if `length(lo:hi)` is constant @@ -1330,16 +1355,54 @@ defalg(v::AbstractArray{Union{}}) = DEFAULT_UNSTABLE # for method disambiguation """ sort!(v; alg::Algorithm=defalg(v), lt=isless, by=identity, rev::Bool=false, order::Ordering=Forward) -Sort the vector `v` in place. A stable algorithm is used by default. You can select a -specific algorithm to use via the `alg` keyword (see [Sorting Algorithms](@ref) for -available algorithms). The `by` keyword lets you provide a function that will be applied to -each element before comparison; the `lt` keyword allows providing a custom "less than" -function (note that for every `x` and `y`, only one of `lt(x,y)` and `lt(y,x)` can return -`true`); use `rev=true` to reverse the sorting order. `rev=true` preserves forward stability: -Elements that compare equal are not reversed. These options are independent and can -be used together in all possible combinations: if both `by` and `lt` are specified, the `lt` -function is applied to the result of the `by` function; `rev=true` reverses whatever -ordering specified via the `by` and `lt` keywords. +Sort the vector `v` in place. A stable algorithm is used by default: the +ordering of elements that compare equal is preserved. A specific algorithm can +be selected via the `alg` keyword (see [Sorting Algorithms](@ref) for available +algorithms). + +Elements are first transformed with the function `by` and then compared +according to either the function `lt` or the ordering `order`. Finally, the +resulting order is reversed if `rev=true` (this preserves forward stability: +elements that compare equal are not reversed). The current implemention applies +the `by` transformation before each comparison rather than once per element. + +Passing an `lt` other than `isless` along with an `order` other than +[`Base.Order.Forward`](@ref) or [`Base.Order.Reverse`](@ref) is not permitted, +otherwise all options are independent and can be used together in all possible +combinations. Note that `order` can also include a "by" transformation, in +which case it is applied after that defined with the `by` keyword. For more +information on `order` values see the documentation on [Alternate +Orderings](@ref). + +Relations between two elements are defined as follows (with "less" and +"greater" exchanged when `rev=true`): + +* `x` is less than `y` if `lt(by(x), by(y))` (or `Base.Order.lt(order, by(x), by(y))`) yields true. +* `x` is greater than `y` if `y` is less than `x`. +* `x` and `y` are equivalent if neither is less than the other ("incomparable" + is sometimes used as a synonym for "equivalent"). + +The result of `sort!` is sorted in the sense that every element is greater than +or equivalent to the previous one. + +The `lt` function must define a strict weak order, that is, it must be + +* irreflexive: `lt(x, x)` always yields `false`, +* asymmetric: if `lt(x, y)` yields `true` then `lt(y, x)` yields `false`, +* transitive: `lt(x, y) && lt(y, z)` implies `lt(x, z)`, +* transitive in equivalence: `!lt(x, y) && !lt(y, x)` and `!lt(y, z) && !lt(z, + y)` together imply `!lt(x, z) && !lt(z, x)`. In words: if `x` and `y` are + equivalent and `y` and `z` are equivalent then `x` and `z` must be + equivalent. + +For example `<` is a valid `lt` function for `Int` values but `≤` is not: it +violates irreflexivity. For `Float64` values even `<` is invalid as it violates +the fourth condition: `1.0` and `NaN` are equivalent and so are `NaN` and `2.0` +but `1.0` and `2.0` are not equivalent. + +See also [`sort`](@ref), [`sortperm`](@ref), [`sortslices`](@ref), +[`partialsort!`](@ref), [`partialsortperm`](@ref), [`issorted`](@ref), +[`searchsorted`](@ref), [`insorted`](@ref), [`Base.Order.ord`](@ref). # Examples ```jldoctest @@ -1366,6 +1429,29 @@ julia> v = [(1, "c"), (3, "a"), (2, "b")]; sort!(v, by = x -> x[2]); v (3, "a") (2, "b") (1, "c") + +julia> sort(0:3, by=x->x-2, order=Base.Order.By(abs)) # same as sort(0:3, by=abs(x->x-2)) +4-element Vector{Int64}: + 2 + 1 + 3 + 0 + +julia> sort([2, NaN, 1, NaN, 3]) # correct sort with default lt=isless +5-element Vector{Float64}: + 1.0 + 2.0 + 3.0 + NaN + NaN + +julia> sort([2, NaN, 1, NaN, 3], lt=<) # wrong sort due to invalid lt. This behavior is undefined. +5-element Vector{Float64}: + 2.0 + NaN + 1.0 + NaN + 3.0 ``` """ function sort!(v::AbstractVector{T}; @@ -1443,15 +1529,15 @@ merge(x::NTuple, y::NTuple, o::Ordering) = ## partialsortperm: the permutation to sort the first k elements of an array ## """ - partialsortperm(v, k; by=, lt=, rev=false) + partialsortperm(v, k; by=ientity, lt=isless, rev=false) Return a partial permutation `I` of the vector `v`, so that `v[I]` returns values of a fully sorted version of `v` at index `k`. If `k` is a range, a vector of indices is returned; if `k` is an integer, a single index is returned. The order is specified using the same -keywords as `sort!`. The permutation is stable, meaning that indices of equal elements -appear in ascending order. +keywords as `sort!`. The permutation is stable: the indices of equal elements +will appear in ascending order. -Note that this function is equivalent to, but more efficient than, calling `sortperm(...)[k]`. +This function is equivalent to, but more efficient than, calling `sortperm(...)[k]`. # Examples ```jldoctest @@ -1477,7 +1563,7 @@ partialsortperm(v::AbstractVector, k::Union{Integer,OrdinalRange}; kwargs...) = partialsortperm!(similar(Vector{eltype(k)}, axes(v,1)), v, k; kwargs...) """ - partialsortperm!(ix, v, k; by=, lt=, rev=false) + partialsortperm!(ix, v, k; by=identity, lt=isless, rev=false) Like [`partialsortperm`](@ref), but accepts a preallocated index vector `ix` the same size as `v`, which is used to store (a permutation of) the indices of `v`. @@ -1543,7 +1629,7 @@ end Return a permutation vector or array `I` that puts `A[I]` in sorted order along the given dimension. If `A` has more than one dimension, then the `dims` keyword argument must be specified. The order is specified using the same keywords as [`sort!`](@ref). The permutation is guaranteed to be stable even -if the sorting algorithm is unstable, meaning that indices of equal elements appear in +if the sorting algorithm is unstable: the indices of equal elements will appear in ascending order. See also [`sortperm!`](@ref), [`partialsortperm`](@ref), [`invperm`](@ref), [`indexin`](@ref). @@ -1777,7 +1863,8 @@ end sort!(A; dims::Integer, alg::Algorithm=defalg(A), lt=isless, by=identity, rev::Bool=false, order::Ordering=Forward) Sort the multidimensional array `A` along dimension `dims`. -See [`sort!`](@ref) for a description of possible keyword arguments. +See the one-dimensional version of [`sort!`](@ref) for a description of +possible keyword arguments. To sort slices of an array, refer to [`sortslices`](@ref). @@ -1931,8 +2018,8 @@ algorithm. Partial quick sort returns the smallest `k` elements sorted from smal to largest, finding them and sorting them using [`QuickSort`](@ref). Characteristics: - * *not stable*: does not preserve the ordering of elements which - compare equal (e.g. "a" and "A" in a sort of letters which + * *not stable*: does not preserve the ordering of elements that + compare equal (e.g. "a" and "A" in a sort of letters that ignores case). * *in-place* in memory. * *divide-and-conquer*: sort strategy similar to [`MergeSort`](@ref). @@ -1969,8 +2056,8 @@ Indicate that a sorting function should use the quick sort algorithm, which is *not* stable. Characteristics: - * *not stable*: does not preserve the ordering of elements which - compare equal (e.g. "a" and "A" in a sort of letters which + * *not stable*: does not preserve the ordering of elements that + compare equal (e.g. "a" and "A" in a sort of letters that ignores case). * *in-place* in memory. * *divide-and-conquer*: sort strategy similar to [`MergeSort`](@ref). @@ -1988,8 +2075,8 @@ subcollection at each step, until the entire collection has been recombined in sorted form. Characteristics: - * *stable*: preserves the ordering of elements which compare - equal (e.g. "a" and "A" in a sort of letters which ignores + * *stable*: preserves the ordering of elements that compare + equal (e.g. "a" and "A" in a sort of letters that ignores case). * *not in-place* in memory. * *divide-and-conquer* sort strategy. diff --git a/doc/src/base/base.md b/doc/src/base/base.md index 5851439408775..a4f90ba6c6d0a 100644 --- a/doc/src/base/base.md +++ b/doc/src/base/base.md @@ -129,6 +129,7 @@ Core.:(===) Core.isa Base.isequal Base.isless +Base.isunordered Base.ifelse Core.typeassert Core.typeof diff --git a/doc/src/base/sort.md b/doc/src/base/sort.md index 16e1839cf64a2..455a95d39617c 100644 --- a/doc/src/base/sort.md +++ b/doc/src/base/sort.md @@ -163,7 +163,7 @@ Base.Sort.defalg(::AbstractArray{<:Union{SmallInlineStrings, Missing}}) = Inline be stable since Julia 1.9. Previous versions had unstable edge cases when sorting numeric arrays. -## Alternate orderings +## Alternate Orderings By default, `sort` and related functions use [`isless`](@ref) to compare two elements in order to determine which should come first. The diff --git a/doc/src/manual/missing.md b/doc/src/manual/missing.md index 9bddcdfbb2ac2..8c8e801ccac9a 100644 --- a/doc/src/manual/missing.md +++ b/doc/src/manual/missing.md @@ -88,7 +88,7 @@ true ``` The [`isless`](@ref) operator is another exception: `missing` is considered -as greater than any other value. This operator is used by [`sort`](@ref), +as greater than any other value. This operator is used by [`sort!`](@ref), which therefore places `missing` values after all other values: ```jldoctest From 86f75bf1829d960173a9d508e1fb65bdf25d1d0f Mon Sep 17 00:00:00 2001 From: Lilith Orion Hafner Date: Mon, 10 Jul 2023 17:30:48 -0500 Subject: [PATCH 089/413] Revise sort.md and docstrings in sort.jl (#48363) Co-authored-by: Jeremie Knuesel (cherry picked from commit a134076bc85c78c4e46fa9a69b67665651a02a4d) --- base/sort.jl | 8 ++++---- doc/src/base/sort.md | 48 +++++++++++++++++++++----------------------- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/base/sort.jl b/base/sort.jl index 786d8e110e6e2..abf0b9ed07682 100644 --- a/base/sort.jl +++ b/base/sort.jl @@ -2013,9 +2013,9 @@ struct MergeSortAlg <: Algorithm end """ PartialQuickSort{T <: Union{Integer,OrdinalRange}} -Indicate that a sorting function should use the partial quick sort -algorithm. Partial quick sort returns the smallest `k` elements sorted from smallest -to largest, finding them and sorting them using [`QuickSort`](@ref). +Indicate that a sorting function should use the partial quick sort algorithm. +`PartialQuickSort(k)` is like `QuickSort`, but is only required to find and +sort the elements that would end up in `v[k]` were `v` fully sorted. Characteristics: * *not stable*: does not preserve the ordering of elements that @@ -2024,7 +2024,7 @@ Characteristics: * *in-place* in memory. * *divide-and-conquer*: sort strategy similar to [`MergeSort`](@ref). - Note that `PartialQuickSort(k)` does not necessarily sort the whole array. For example, +Note that `PartialQuickSort(k)` does not necessarily sort the whole array. For example, ```jldoctest julia> x = rand(100); diff --git a/doc/src/base/sort.md b/doc/src/base/sort.md index 455a95d39617c..b9d333ef2a939 100644 --- a/doc/src/base/sort.md +++ b/doc/src/base/sort.md @@ -1,7 +1,7 @@ # Sorting and Related Functions -Julia has an extensive, flexible API for sorting and interacting with already-sorted arrays of -values. By default, Julia picks reasonable algorithms and sorts in standard ascending order: +Julia has an extensive, flexible API for sorting and interacting with already-sorted arrays +of values. By default, Julia picks reasonable algorithms and sorts in ascending order: ```jldoctest julia> sort([2,3,1]) @@ -11,7 +11,7 @@ julia> sort([2,3,1]) 3 ``` -You can easily sort in reverse order as well: +You can sort in reverse order as well: ```jldoctest julia> sort([2,3,1], rev=true) @@ -36,8 +36,8 @@ julia> a 3 ``` -Instead of directly sorting an array, you can compute a permutation of the array's indices that -puts the array into sorted order: +Instead of directly sorting an array, you can compute a permutation of the array's +indices that puts the array into sorted order: ```julia-repl julia> v = randn(5) @@ -65,7 +65,7 @@ julia> v[p] 0.382396 ``` -Arrays can easily be sorted according to an arbitrary transformation of their values: +Arrays can be sorted according to an arbitrary transformation of their values: ```julia-repl julia> sort(v, by=abs) @@ -101,9 +101,12 @@ julia> sort(v, alg=InsertionSort) 0.382396 ``` -All the sorting and order related functions rely on a "less than" relation defining a total order -on the values to be manipulated. The `isless` function is invoked by default, but the relation -can be specified via the `lt` keyword. +All the sorting and order related functions rely on a "less than" relation defining a +[strict weak order](https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings) +on the values to be manipulated. The `isless` function is invoked by default, but the +relation can be specified via the `lt` keyword, a function that takes two array elements +and returns `true` if and only if the first argument is "less than" the second. See +[`sort!`](@ref) and [Alternate Orderings](@ref) for more information. ## Sorting Functions @@ -165,22 +168,17 @@ Base.Sort.defalg(::AbstractArray{<:Union{SmallInlineStrings, Missing}}) = Inline ## Alternate Orderings -By default, `sort` and related functions use [`isless`](@ref) to compare two -elements in order to determine which should come first. The -[`Base.Order.Ordering`](@ref) abstract type provides a mechanism for defining -alternate orderings on the same set of elements: when calling a sorting function like -`sort`, an instance of `Ordering` can be provided with the keyword argument `order`. - -Instances of `Ordering` define a [total order](https://en.wikipedia.org/wiki/Total_order) -on a set of elements, so that for any elements `a`, `b`, `c` the following hold: - -* Exactly one of the following is true: `a` is less than `b`, `b` is less than - `a`, or `a` and `b` are equal (according to [`isequal`](@ref)). -* The relation is transitive - if `a` is less than `b` and `b` is less than `c` - then `a` is less than `c`. - -The [`Base.Order.lt`](@ref) function works as a generalization of `isless` to -test whether `a` is less than `b` according to a given order. +By default, `sort`, `searchsorted`, and related functions use [`isless`](@ref) to compare +two elements in order to determine which should come first. The +[`Base.Order.Ordering`](@ref) abstract type provides a mechanism for defining alternate +orderings on the same set of elements: when calling a sorting function like +`sort!`, an instance of `Ordering` can be provided with the keyword argument `order`. + +Instances of `Ordering` define an order through the [`Base.Order.lt`](@ref) +function, which works as a generalization of `isless`. +This function's behavior on custom `Ordering`s must satisfy all the conditions of a +[strict weak order](https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings). +See [`sort!`](@ref) for details and examples of valid and invalid `lt` functions. ```@docs Base.Order.Ordering From 344ef77c7d0f91ece2de2958a9baf5919341715e Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Mon, 31 Jul 2023 12:40:41 -0400 Subject: [PATCH 090/413] fix `CyclePadding(::DataType)` (#50719) We probably want to add a test for this code path. (cherry picked from commit f4cb8bc014f21e7066c72ca4f2c32c14fdf7a59f) --- base/reinterpretarray.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/base/reinterpretarray.jl b/base/reinterpretarray.jl index 74b888a39fd76..3844edc331c7c 100644 --- a/base/reinterpretarray.jl +++ b/base/reinterpretarray.jl @@ -720,7 +720,9 @@ function CyclePadding(T::DataType) a, s = datatype_alignment(T), sizeof(T) as = s + (a - (s % a)) % a pad = padding(T) - s != as && push!(pad, Padding(s, as - s)) + if s != as + pad = Core.svec(pad..., Padding(s, as - s)) + end CyclePadding(pad, as) end From 6867fa6c93db5b3cd55225436287012341c301c4 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Tue, 1 Aug 2023 23:32:13 -0400 Subject: [PATCH 091/413] inference: permit recursive type traits (#50694) We had a special case for Type that disallowed type trait recursion in favor of a pattern that almost never appears in code (only once in the compiler by accident where it doesn't matter). This was unnecessarily confusing and unexpected to predict what can infer, and made traits harder than necessary (such as Broadcast.ndims since 70fc3cdc11b). Fix #43296 Fix #43368 (cherry picked from commit 33e3d9f7de229a109cc2afeb72be2bb7931d3e79) --- base/compiler/typelimits.jl | 45 +++++++++++++++++++-------------- test/compiler/inference.jl | 50 +++++++++++++++++++++++++++++++++---- 2 files changed, 71 insertions(+), 24 deletions(-) diff --git a/base/compiler/typelimits.jl b/base/compiler/typelimits.jl index b648144ea3bd1..e24fd257f02a6 100644 --- a/base/compiler/typelimits.jl +++ b/base/compiler/typelimits.jl @@ -116,15 +116,32 @@ function _limit_type_size(@nospecialize(t), @nospecialize(c), sources::SimpleVec return Union{a, b} end elseif isa(t, DataType) - if isType(t) # see equivalent case in type_more_complex - tt = unwrap_unionall(t.parameters[1]) - if isa(tt, Union) || isa(tt, TypeVar) || isType(tt) - is_derived_type_from_any(tt, sources, depth + 1) && return t + if isType(t) + # Type is fairly important, so do not widen it as fast as other types if avoidable + tt = t.parameters[1] + ttu = unwrap_unionall(tt) # TODO: use argument_datatype(tt) after #50692 fixed + # must forbid nesting through this if we detect that potentially occurring + # we already know !is_derived_type_from_any so refuse to recurse here + if !isa(ttu, DataType) + return Type + elseif isType(ttu) + return Type{<:Type} + end + # try to peek into c to get a comparison object, but if we can't perhaps t is already simple enough on its own + # (this is slightly more permissive than type_more_complex implements for the same case). + if isType(c) + ct = c.parameters[1] else - isType(c) && (c = unwrap_unionall(c.parameters[1])) - type_more_complex(tt, c, sources, depth, 0, 0) || return t + ct = Union{} end - return Type + Qt = __limit_type_size(tt, ct, sources, depth + 1, 0) + Qt === Any && return Type + Qt === tt && return t + # Can't form Type{<:Qt} just yet, without first make sure we limited the depth + # enough, since this moves Qt outside of Type for is_derived_type_from_any + Qt = __limit_type_size(tt, ct, sources, depth + 2, 0) + Qt === Any && return Type + return Type{<:Qt} elseif isa(c, DataType) tP = t.parameters cP = c.parameters @@ -157,6 +174,7 @@ function _limit_type_size(@nospecialize(t), @nospecialize(c), sources::SimpleVec end end if allowed_tuplelen < 1 && t.name === Tuple.name + # forbid nesting Tuple{Tuple{Tuple...}} through this return Any end widert = t.name.wrapper @@ -247,18 +265,7 @@ function type_more_complex(@nospecialize(t), @nospecialize(c), sources::SimpleVe # base case for data types if isa(t, DataType) tP = t.parameters - if isType(t) - # Treat Type{T} and T as equivalent to allow taking typeof any - # source type (DataType) anywhere as Type{...}, as long as it isn't - # nesting as Type{Type{...}} - tt = unwrap_unionall(t.parameters[1]) - if isa(tt, Union) || isa(tt, TypeVar) || isType(tt) - return !is_derived_type_from_any(tt, sources, depth + 1) - else - isType(c) && (c = unwrap_unionall(c.parameters[1])) - return type_more_complex(tt, c, sources, depth, 0, 0) - end - elseif isa(c, DataType) && t.name === c.name + if isa(c, DataType) && t.name === c.name cP = c.parameters length(cP) < length(tP) && return true isempty(tP) && return false diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index 2ef172b3e3643..a34ba18e0d04e 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -60,7 +60,8 @@ end # issue #42835 @test !Core.Compiler.type_more_complex(Int, Any, Core.svec(), 1, 1, 1) @test !Core.Compiler.type_more_complex(Int, Type{Int}, Core.svec(), 1, 1, 1) -@test !Core.Compiler.type_more_complex(Type{Int}, Any, Core.svec(), 1, 1, 1) +@test Core.Compiler.type_more_complex(Type{Int}, Any, Core.svec(), 1, 1, 1) # maybe should be fixed? +@test Core.Compiler.limit_type_size(Type{Int}, Any, Union{}, 0, 0) == Type{Int} @test Core.Compiler.type_more_complex(Type{Type{Int}}, Type{Int}, Core.svec(Type{Int}), 1, 1, 1) @test Core.Compiler.type_more_complex(Type{Type{Int}}, Int, Core.svec(Type{Int}), 1, 1, 1) @test Core.Compiler.type_more_complex(Type{Type{Int}}, Any, Core.svec(), 1, 1, 1) @@ -71,22 +72,23 @@ end @test Core.Compiler.type_more_complex(ComplexF32, Type{ComplexF32}, Core.svec(), 1, 1, 1) @test !Core.Compiler.type_more_complex(Type{ComplexF32}, Any, Core.svec(Type{Type{ComplexF32}}), 1, 1, 1) @test Core.Compiler.type_more_complex(Type{ComplexF32}, Type{Type{ComplexF32}}, Core.svec(), 1, 1, 1) -@test !Core.Compiler.type_more_complex(Type{ComplexF32}, ComplexF32, Core.svec(), 1, 1, 1) +@test Core.Compiler.type_more_complex(Type{ComplexF32}, ComplexF32, Core.svec(), 1, 1, 1) +@test Core.Compiler.limit_type_size(Type{ComplexF32}, ComplexF32, Union{}, 1, 1) == Type{<:Complex} @test Core.Compiler.type_more_complex(Type{ComplexF32}, Any, Core.svec(), 1, 1, 1) @test Core.Compiler.type_more_complex(Type{Type{ComplexF32}}, Type{ComplexF32}, Core.svec(Type{ComplexF32}), 1, 1, 1) @test Core.Compiler.type_more_complex(Type{Type{ComplexF32}}, ComplexF32, Core.svec(ComplexF32), 1, 1, 1) @test Core.Compiler.type_more_complex(Type{Type{Type{ComplexF32}}}, Type{Type{ComplexF32}}, Core.svec(Type{ComplexF32}), 1, 1, 1) # n.b. Type{Type{Union{}} === Type{Core.TypeofBottom} -@test !Core.Compiler.type_more_complex(Type{Union{}}, Any, Core.svec(), 1, 1, 1) -@test !Core.Compiler.type_more_complex(Type{Type{Union{}}}, Any, Core.svec(), 1, 1, 1) +@test Core.Compiler.type_more_complex(Type{Union{}}, Any, Core.svec(), 1, 1, 1) +@test Core.Compiler.type_more_complex(Type{Type{Union{}}}, Any, Core.svec(), 1, 1, 1) @test Core.Compiler.type_more_complex(Type{Type{Type{Union{}}}}, Any, Core.svec(), 1, 1, 1) @test Core.Compiler.type_more_complex(Type{Type{Type{Union{}}}}, Type{Type{Union{}}}, Core.svec(Type{Type{Union{}}}), 1, 1, 1) @test Core.Compiler.type_more_complex(Type{Type{Type{Type{Union{}}}}}, Type{Type{Type{Union{}}}}, Core.svec(Type{Type{Type{Union{}}}}), 1, 1, 1) @test !Core.Compiler.type_more_complex(Type{1}, Type{2}, Core.svec(), 1, 1, 1) @test Core.Compiler.type_more_complex(Type{Union{Float32,Float64}}, Union{Float32,Float64}, Core.svec(Union{Float32,Float64}), 1, 1, 1) -@test !Core.Compiler.type_more_complex(Type{Union{Float32,Float64}}, Union{Float32,Float64}, Core.svec(Union{Float32,Float64}), 0, 1, 1) +@test Core.Compiler.type_more_complex(Type{Union{Float32,Float64}}, Union{Float32,Float64}, Core.svec(Union{Float32,Float64}), 0, 1, 1) @test Core.Compiler.type_more_complex(Type{<:Union{Float32,Float64}}, Type{Union{Float32,Float64}}, Core.svec(Union{Float32,Float64}), 1, 1, 1) @test Core.Compiler.type_more_complex(Type{<:Union{Float32,Float64}}, Any, Core.svec(Union{Float32,Float64}), 1, 1, 1) @@ -101,6 +103,44 @@ let # 40336 @test t !== r && t <: r end +@test Core.Compiler.limit_type_size(Type{Type{Type{Int}}}, Type, Union{}, 0, 0) == Type{<:Type} +@test Core.Compiler.limit_type_size(Type{Type{Int}}, Type, Union{}, 0, 0) == Type{<:Type} +@test Core.Compiler.limit_type_size(Type{Int}, Type, Union{}, 0, 0) == Type{Int} +@test Core.Compiler.limit_type_size(Type{<:Int}, Type, Union{}, 0, 0) == Type{<:Int} +@test Core.Compiler.limit_type_size(Type{ComplexF32}, ComplexF32, Union{}, 0, 0) == Type{<:Complex} # added nesting +@test Core.Compiler.limit_type_size(Type{ComplexF32}, Type{ComplexF64}, Union{}, 0, 0) == Type{ComplexF32} # base matches +@test Core.Compiler.limit_type_size(Type{ComplexF32}, Type, Union{}, 0, 0) == Type{<:Complex} +@test_broken Core.Compiler.limit_type_size(Type{<:ComplexF64}, Type, Union{}, 0, 0) == Type{<:Complex} +@test Core.Compiler.limit_type_size(Type{<:ComplexF64}, Type, Union{}, 0, 0) == Type #50692 +@test Core.Compiler.limit_type_size(Type{Union{ComplexF32,ComplexF64}}, Type, Union{}, 0, 0) == Type +@test_broken Core.Compiler.limit_type_size(Type{Union{ComplexF32,ComplexF64}}, Type, Union{}, 0, 0) == Type{<:Complex} #50692 +@test Core.Compiler.limit_type_size(Type{Union{Float32,Float64}}, Type, Union{}, 0, 0) == Type +@test Core.Compiler.limit_type_size(Type{Union{Int,Type{Int}}}, Type{Type{Int}}, Union{}, 0, 0) == Type +@test Core.Compiler.limit_type_size(Type{Union{Int,Type{Int}}}, Union{Type{Int},Type{Type{Int}}}, Union{}, 0, 0) == Type +@test Core.Compiler.limit_type_size(Type{Union{Int,Type{Int}}}, Type{Union{Type{Int},Type{Type{Int}}}}, Union{}, 0, 0) == Type{Union{Int, Type{Int}}} +@test Core.Compiler.limit_type_size(Type{Union{Int,Type{Int}}}, Type{Type{Int}}, Union{}, 0, 0) == Type + + +# issue #43296 #43296 +struct C43296{t,I} end +r43296(b) = r43296(typeof(b)) +r43296(::Type) = nothing +r43296(::Nothing) = nonexistent +r43296(::Type{C43296{c,d}}) where {c,d} = f43296(r43296(c), e) +f43296(::Nothing, :) = nothing +f43296(g, :) = h +k43296(b, j, :) = l +k43296(b, j, ::Nothing) = b +i43296(b, j) = k43296(b, j, r43296(j)) +@test only(Base.return_types(i43296, (Int, C43296{C43296{C43296{Val, Tuple}, Tuple}}))) == Int + +abstract type e43296{a, j} <: AbstractArray{a, j} end +abstract type b43296{a, j, c, d} <: e43296{a, j} end +struct h43296{a, j, f, d, i} <: b43296{a, j, f, d} end +Base.ndims(::Type{f}) where {f<:e43296} = ndims(supertype(f)) +Base.ndims(g::e43296) = ndims(typeof(g)) +@test only(Base.return_types(ndims, (h43296{Any, 0, Any, Int, Any},))) == Int + @test Core.Compiler.unionlen(Union{}) == 1 @test Core.Compiler.unionlen(Int8) == 1 @test Core.Compiler.unionlen(Union{Int8, Int16}) == 2 From 843937b0ba36c0cd2ffe6a76835f1ae2b72116b9 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Thu, 10 Aug 2023 13:28:14 +0400 Subject: [PATCH 092/413] Disallow non-index Integer types in isassigned (#50594) Extend #50587 to more general `AbstractArray`s. This is mainly to disallow `Bool` as an index in `isassigned`, as this isn't supported by `getindex`. After this ```julia julia> isassigned(rand(2,2), 1, true) ERROR: ArgumentError: invalid index: true of type Bool ``` which matches the behavior on v1.9. (cherry picked from commit b9913973f84b80e9125e37a0312a44bb38239b10) --- base/multidimensional.jl | 2 +- test/abstractarray.jl | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/base/multidimensional.jl b/base/multidimensional.jl index ba4e6eb12695a..2b4bf54d88826 100644 --- a/base/multidimensional.jl +++ b/base/multidimensional.jl @@ -1564,7 +1564,7 @@ end isassigned(a::AbstractArray, i::CartesianIndex) = isassigned(a, Tuple(i)...) function isassigned(A::AbstractArray, i::Union{Integer, CartesianIndex}...) - isa(i, Tuple{Vararg{Int}}) || return isassigned(A, CartesianIndex(i...)) + isa(i, Tuple{Vararg{Int}}) || return isassigned(A, CartesianIndex(to_indices(A, i))) @boundscheck checkbounds(Bool, A, i...) || return false S = IndexStyle(A) ninds = length(i) diff --git a/test/abstractarray.jl b/test/abstractarray.jl index 6e2294fec1f64..8a74f90f2d553 100644 --- a/test/abstractarray.jl +++ b/test/abstractarray.jl @@ -1844,3 +1844,9 @@ end # type stable [x;;] (https://github.com/JuliaLang/julia/issues/45952) f45952(x) = [x;;] @inferred f45952(1.0) + +@testset "isassigned with a Bool index" begin + A = zeros(2,2) + @test_throws "invalid index: true of type Bool" isassigned(A, 1, true) + @test_throws "invalid index: true of type Bool" isassigned(A, true) +end From 9477e1b0e9b2de03968f677da8f43fdfe3f84cae Mon Sep 17 00:00:00 2001 From: pchintalapudi <34727397+pchintalapudi@users.noreply.github.com> Date: Fri, 11 Aug 2023 14:15:23 +0000 Subject: [PATCH 093/413] Restrict COFF to a single thread when symbol count is high (#50874) (cherry picked from commit eb4416b16b8a865376da5c76451a4d60516e2c4a) --- src/aotcompile.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index 55d02edf7e3dd..d288586916560 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -650,6 +650,7 @@ static FunctionInfo getFunctionWeight(const Function &F) } struct ModuleInfo { + Triple triple; size_t globals; size_t funcs; size_t bbs; @@ -660,6 +661,7 @@ struct ModuleInfo { ModuleInfo compute_module_info(Module &M) { ModuleInfo info; + info.triple = Triple(M.getTargetTriple()); info.globals = 0; info.funcs = 0; info.bbs = 0; @@ -1406,6 +1408,13 @@ static unsigned compute_image_thread_count(const ModuleInfo &info) { LLVM_DEBUG(dbgs() << "32-bit systems are restricted to a single thread\n"); return 1; #endif + // COFF has limits on external symbols (even hidden) up to 65536. We reserve the last few + // for any of our other symbols that we insert during compilation. + if (info.triple.isOSBinFormatCOFF() && info.globals > 64000) { + LLVM_DEBUG(dbgs() << "COFF is restricted to a single thread for large images\n"); + return 1; + } + // This is not overridable because empty modules do occasionally appear, but they'll be very small and thus exit early to // known easy behavior. Plus they really don't warrant multiple threads if (info.weight < 1000) { From 03108f25a065e54956e9d8ded6fadebd50d528e8 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Fri, 11 Aug 2023 16:20:48 -0300 Subject: [PATCH 094/413] Add default method for setmodifiers! (#50822) Fixes #50690 (cherry picked from commit 0eb13d70a3ea2419f96fd5db5676db91a54ede32) --- stdlib/REPL/src/REPL.jl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stdlib/REPL/src/REPL.jl b/stdlib/REPL/src/REPL.jl index 218f89de798c8..efef8f1f9d459 100644 --- a/stdlib/REPL/src/REPL.jl +++ b/stdlib/REPL/src/REPL.jl @@ -519,6 +519,8 @@ active_module((; mistate)::LineEditREPL) = mistate === nothing ? Main : mistate. active_module(::AbstractREPL) = Main active_module(d::REPLDisplay) = active_module(d.repl) +setmodifiers!(c::CompletionProvider, m::LineEdit.Modifiers) = nothing + setmodifiers!(c::REPLCompletionProvider, m::LineEdit.Modifiers) = c.modifiers = m """ From 19fdccea42835f7ebc4b23486cba454f961ff5ac Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Mon, 14 Aug 2023 09:50:02 -0300 Subject: [PATCH 095/413] Remove weird Rational dispatch and add pi functions to list (#50850) Should fix https://github.com/JuliaLang/julia/issues/48735 (cherry picked from commit b7637287c50e1568582baea1f85b1b202c6d3f97) --- base/math.jl | 2 +- base/special/trig.jl | 32 ++++++++++++-------------------- test/math.jl | 6 ++++++ 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/base/math.jl b/base/math.jl index 71bd4949498b5..0f917dce7c99c 100644 --- a/base/math.jl +++ b/base/math.jl @@ -1571,7 +1571,7 @@ sincos(a::Float16) = Float16.(sincos(Float32(a))) for f in (:sin, :cos, :tan, :asin, :atan, :acos, :sinh, :cosh, :tanh, :asinh, :acosh, :atanh, :exp, :exp2, :exp10, :expm1, :log, :log2, :log10, :log1p, - :exponent, :sqrt, :cbrt) + :exponent, :sqrt, :cbrt, :sinpi, :cospi, :sincospi, :tanpi) @eval function ($f)(x::Real) xf = float(x) x === xf && throw(MethodError($f, (x,))) diff --git a/base/special/trig.jl b/base/special/trig.jl index 6463560caa3e5..50d3d69585217 100644 --- a/base/special/trig.jl +++ b/base/special/trig.jl @@ -789,16 +789,14 @@ Compute ``\\sin(\\pi x)`` more accurately than `sin(pi*x)`, especially for large See also [`sind`](@ref), [`cospi`](@ref), [`sincospi`](@ref). """ -function sinpi(_x::T) where T<:Union{IEEEFloat, Rational} +function sinpi(_x::T) where T<:IEEEFloat x = abs(_x) if !isfinite(x) isnan(x) && return x throw(DomainError(x, "`x` cannot be infinite.")) end # For large x, answers are all 1 or zero. - if T <: AbstractFloat - x >= maxintfloat(T) && return copysign(zero(T), _x) - end + x >= maxintfloat(T) && return copysign(zero(T), _x) # reduce to interval [0, 0.5] n = round(2*x) @@ -820,16 +818,14 @@ end Compute ``\\cos(\\pi x)`` more accurately than `cos(pi*x)`, especially for large `x`. """ -function cospi(x::T) where T<:Union{IEEEFloat, Rational} +function cospi(x::T) where T<:IEEEFloat x = abs(x) if !isfinite(x) isnan(x) && return x throw(DomainError(x, "`x` cannot be infinite.")) end # For large x, answers are all 1 or zero. - if T <: AbstractFloat - x >= maxintfloat(T) && return one(T) - end + x >= maxintfloat(T) && return one(T) # reduce to interval [0, 0.5] n = round(2*x) @@ -856,16 +852,14 @@ where `x` is in radians), returning a tuple `(sine, cosine)`. See also: [`cispi`](@ref), [`sincosd`](@ref), [`sinpi`](@ref). """ -function sincospi(_x::T) where T<:Union{IEEEFloat, Rational} +function sincospi(_x::T) where T<:IEEEFloat x = abs(_x) if !isfinite(x) isnan(x) && return x, x throw(DomainError(x, "`x` cannot be infinite.")) end # For large x, answers are all 1 or zero. - if T <: AbstractFloat - x >= maxintfloat(T) && return (copysign(zero(T), _x), one(T)) - end + x >= maxintfloat(T) && return (copysign(zero(T), _x), one(T)) # reduce to interval [0, 0.5] n = round(2*x) @@ -895,7 +889,7 @@ Compute ``\\tan(\\pi x)`` more accurately than `tan(pi*x)`, especially for large See also [`tand`](@ref), [`sinpi`](@ref), [`cospi`](@ref), [`sincospi`](@ref). """ -function tanpi(_x::T) where T<:Union{IEEEFloat, Rational} +function tanpi(_x::T) where T<:IEEEFloat # This is modified from sincospi. # Would it be faster or more accurate to make a tanpi_kernel? x = abs(_x) @@ -905,9 +899,7 @@ function tanpi(_x::T) where T<:Union{IEEEFloat, Rational} end # For large x, answers are all zero. # All integer values for floats larger than maxintfloat are even. - if T <: AbstractFloat - x >= maxintfloat(T) && return copysign(zero(T), _x) - end + x >= maxintfloat(T) && return copysign(zero(T), _x) # reduce to interval [0, 0.5] n = round(2*x) @@ -932,10 +924,10 @@ cospi(x::Integer) = isodd(x) ? -one(float(x)) : one(float(x)) tanpi(x::Integer) = x >= 0 ? (isodd(x) ? -zero(float(x)) : zero(float(x))) : (isodd(x) ? zero(float(x)) : -zero(float(x))) sincospi(x::Integer) = (sinpi(x), cospi(x)) -sinpi(x::Real) = sin(pi*x) -cospi(x::Real) = cos(pi*x) -sincospi(x::Real) = sincos(pi*x) -tanpi(x::Real) = tan(pi*x) +sinpi(x::AbstractFloat) = sin(pi*x) +cospi(x::AbstractFloat) = cos(pi*x) +sincospi(x::AbstractFloat) = sincos(pi*x) +tanpi(x::AbstractFloat) = tan(pi*x) tanpi(x::Complex) = sinpi(x) / cospi(x) # Is there a better way to do this? function sinpi(z::Complex{T}) where T diff --git a/test/math.jl b/test/math.jl index 19d9f7893a496..8e6afba0acfce 100644 --- a/test/math.jl +++ b/test/math.jl @@ -1558,3 +1558,9 @@ for T in (Float16, Float32, Float64) @test Core.Compiler.is_foldable(Base.infer_effects(^, (T,Int))) @test Core.Compiler.is_foldable(Base.infer_effects(^, (T,T))) end + +@testset "BigInt Rationals with special funcs" begin + @test sinpi(big(1//1)) == big(0.0) + @test tanpi(big(1//1)) == big(0.0) + @test cospi(big(1//1)) == big(-1.0) +end From 24f34d899d7ad8cf3fb0066ed196cd13364193f7 Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Wed, 16 Aug 2023 06:36:38 -0400 Subject: [PATCH 096/413] Limit type-printing in MethodError (#50809) This applies the same `...` depth-based parametric truncation to the signature in `MethodError` that we use in printing stacktraces. Fixes #50803 (cherry picked from commit 90b4eedbf4b2beae0b12e6b8317e15ef0bb91126) --- base/client.jl | 4 ++-- base/errorshow.jl | 20 ++++++++++++-------- base/show.jl | 11 ++++++++--- test/errorshow.jl | 19 +++++++++++++++++++ 4 files changed, 41 insertions(+), 13 deletions(-) diff --git a/base/client.jl b/base/client.jl index 6e30c9991e45e..264c91cbabde7 100644 --- a/base/client.jl +++ b/base/client.jl @@ -103,8 +103,8 @@ scrub_repl_backtrace(stack::ExceptionStack) = ExceptionStack(Any[(;x.exception, backtrace = scrub_repl_backtrace(x.backtrace)) for x in stack]) istrivialerror(stack::ExceptionStack) = - length(stack) == 1 && length(stack[1].backtrace) ≤ 1 - # frame 1 = top level; assumes already went through scrub_repl_backtrace + length(stack) == 1 && length(stack[1].backtrace) ≤ 1 && !isa(stack[1].exception, MethodError) + # frame 1 = top level; assumes already went through scrub_repl_backtrace; MethodError see #50803 function display_error(io::IO, stack::ExceptionStack) printstyled(io, "ERROR: "; bold=true, color=Base.error_color()) diff --git a/base/errorshow.jl b/base/errorshow.jl index 2a02747dc2a2b..dd199f808e7ad 100644 --- a/base/errorshow.jl +++ b/base/errorshow.jl @@ -268,20 +268,24 @@ function showerror(io::IO, ex::MethodError) f_is_function = true end print(io, "no method matching ") - show_signature_function(io, isa(f, Type) ? Type{f} : typeof(f)) - print(io, "(") + iob = IOContext(IOBuffer(), io) # for type abbreviation as in #49795; some, like `convert(T, x)`, should not abbreviate + show_signature_function(iob, isa(f, Type) ? Type{f} : typeof(f)) + print(iob, "(") for (i, typ) in enumerate(arg_types_param) - print(io, "::", typ) - i == length(arg_types_param) || print(io, ", ") + print(iob, "::", typ) + i == length(arg_types_param) || print(iob, ", ") end if !isempty(kwargs) - print(io, "; ") + print(iob, "; ") for (i, (k, v)) in enumerate(kwargs) - print(io, k, "::", typeof(v)) - i == length(kwargs)::Int || print(io, ", ") + print(iob, k, "::", typeof(v)) + i == length(kwargs)::Int || print(iob, ", ") end end - print(io, ")") + print(iob, ")") + str = String(take!(unwrapcontext(iob)[1])) + str = type_limited_string_from_context(io, str) + print(io, str) end # catch the two common cases of element-wise addition and subtraction if (f === Base.:+ || f === Base.:-) && length(arg_types_param) == 2 diff --git a/base/show.jl b/base/show.jl index b259e95e54720..6db661879f791 100644 --- a/base/show.jl +++ b/base/show.jl @@ -2557,17 +2557,22 @@ function show_tuple_as_call(out::IO, name::Symbol, sig::Type; print_within_stacktrace(io, ")", bold=true) show_method_params(io, tv) str = String(take!(unwrapcontext(io)[1])) + str = type_limited_string_from_context(out, str) + print(out, str) + nothing +end + +function type_limited_string_from_context(out::IO, str::String) typelimitflag = get(out, :stacktrace_types_limited, nothing) if typelimitflag isa RefValue{Bool} - sz = get(out, :displaysize, (typemax(Int), typemax(Int)))::Tuple{Int, Int} + sz = get(out, :displaysize, displaysize(out))::Tuple{Int, Int} str_lim = type_depth_limit(str, max(sz[2], 120)) if sizeof(str_lim) < sizeof(str) typelimitflag[] = true end str = str_lim end - print(out, str) - nothing + return str end # limit nesting depth of `{ }` until string textwidth is less than `n` diff --git a/test/errorshow.jl b/test/errorshow.jl index 28ae3fd32365a..861d7dd0d68e3 100644 --- a/test/errorshow.jl +++ b/test/errorshow.jl @@ -549,6 +549,25 @@ foo_9965(x::Int) = 2x @test occursin("got unsupported keyword argument \"w\"", String(take!(io))) end +@testset "MethodError with long types (#50803)" begin + a = view(reinterpret(reshape, UInt8, PermutedDimsArray(rand(5, 7), (2, 1))), 2:3, 2:4, 1:4) # a mildly-complex type + function f50803 end + ex50803 = try + f50803(a, a, a, a, a, a) + catch e + e + end::MethodError + tlf = Ref(false) + str = sprint(Base.showerror, ex50803; context=(:displaysize=>(1000, 120), :stacktrace_types_limited=>tlf)) + @test tlf[] + @test occursin("::SubArray{…}", str) + tlf[] = false + str = sprint(Base.showerror, ex50803; context=(:displaysize=>(1000, 10000), :stacktrace_types_limited=>tlf)) + @test !tlf[] + str = sprint(Base.showerror, ex50803; context=(:displaysize=>(1000, 120))) + @test !occursin("::SubArray{…}", str) +end + # Issue #20556 import REPL module EnclosingModule From 0737e800d20011d964c1041d1d26328b7032c063 Mon Sep 17 00:00:00 2001 From: Oscar Smith Date: Thu, 17 Aug 2023 14:21:09 -0400 Subject: [PATCH 097/413] when widening tuple types in tmerge, only widen the complex parts (#50929) This is the part of https://github.com/JuliaLang/julia/pull/50927 required to fix https://github.com/JuliaLang/julia/issues/49249. Specifically, before this change `tmerge(Tuple{Any, Int}, Nothing)` would be `Union{Nothing, Tuple{Any, Int}}` but `tmerge(Tuple{BIG_UNION, Int}, Nothing)` would be `Union{Nothing, Tuple{Any, Any}}`. This feels bad intuitively because giving the compiler more type information led it to forget type information that it already knew about, and is especially damaging because it led to unnecessary type instability when iterating tuples with complex element types (because the iterator state should be inferrable as an `Int` even if you have no idea what the tuple type is). This is tagged for backport to 1.10 since it is a relatively unobtrusive change and it fixes the string regression in a more proper way. (cherry picked from commit 6e2e6d00258b930f5909d576f2b3510ffa49c4bf) --- base/compiler/typelimits.jl | 25 +++++++++++++------------ test/compiler/inference.jl | 15 +++++++++++++++ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/base/compiler/typelimits.jl b/base/compiler/typelimits.jl index e24fd257f02a6..4552c4f815337 100644 --- a/base/compiler/typelimits.jl +++ b/base/compiler/typelimits.jl @@ -764,23 +764,24 @@ end return u end # don't let the slow widening of Tuple cause the whole type to grow too fast + # Specifically widen Tuple{..., Union{lots of stuff}...} to Tuple{..., Any, ...} for i in 1:length(types) if typenames[i] === Tuple.name - widen = unwrap_unionall(types[i]) - if isa(widen, DataType) && !isvatuple(widen) - widen = NTuple{length(widen.parameters), Any} - else - widen = Tuple - end - types[i] = widen - u = Union{types...} - if issimpleenoughtype(u) - return u + ti = types[i] + tip = (unwrap_unionall(types[i])::DataType).parameters + lt = length(tip) + p = Vector{Any}(undef, lt) + for j = 1:lt + ui = tip[j] + p[j] = (unioncomplexity(ui)==0) ? ui : isvarargtype(ui) ? Vararg : Any end - break + types[i] = rewrap_unionall(Tuple{p...}, ti) end end - # finally, just return the widest possible type + u = Union{types...} + if issimpleenoughtype(u) + return u + end return Any end diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index a34ba18e0d04e..1799dd94de74f 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -213,6 +213,21 @@ tmerge_test(Tuple{}, Tuple{Complex, Vararg{Union{ComplexF32, ComplexF64}}}, @test Core.Compiler.tmerge(Base.BitIntegerType, Union{}) === Base.BitIntegerType @test Core.Compiler.tmerge(Union{}, Base.BitIntegerType) === Base.BitIntegerType @test Core.Compiler.tmerge(Core.Compiler.fallback_ipo_lattice, Core.Compiler.InterConditional(1, Int, Union{}), Core.Compiler.InterConditional(2, String, Union{})) === Core.Compiler.Const(true) +# test issue behind https://github.com/JuliaLang/julia/issues/50458 +@test Core.Compiler.tmerge(Nothing, Tuple{Base.BitInteger, Int}) == Union{Nothing, Tuple{Any, Int}} +@test Core.Compiler.tmerge(Nothing, Tuple{Union{Char, String, SubString{String}, Symbol}, Int}) == Union{Nothing, Tuple{Any, Int}} +@test Core.Compiler.tmerge(Nothing, Tuple{Integer, Int}) == Union{Nothing, Tuple{Integer, Int}} + +# test that recursively more complicated types don't widen all the way to Any when there is a useful valid type upper bound +# Specificially test with base types of a trivial type, a simple union, a complicated union, and a tuple. +for T in (Nothing, Base.BitInteger, Union{Int, Int32, Int16, Int8}, Tuple{Int, Int}) + Ta, Tb = T, T + for i in 1:10 + Ta = Union{Tuple{Ta}, Nothing} + Tb = Core.Compiler.tmerge(Tuple{Tb}, Nothing) + @test Ta <: Tb <: Union{Nothing, Tuple} + end +end struct SomethingBits x::Base.BitIntegerType From cd69cc40b9a76bb6da0a4d1999297c830a116b59 Mon Sep 17 00:00:00 2001 From: Claire Foster Date: Fri, 18 Aug 2023 18:51:38 +1000 Subject: [PATCH 098/413] Bump JuliaSyntax to 0.4.6 (#50928) This is just a minor update fixing several small but annoying bugs people have noticed since JuliaSyntax was integrated. (cherry picked from commit 43164cfad745d31f11525e6a2229d3f63adfb3cf) --- deps/JuliaSyntax.version | 2 +- .../md5 | 1 + .../sha512 | 1 + .../md5 | 1 - .../sha512 | 1 - 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/JuliaSyntax-045d156c44dbb87769c7416d049a7c08908539d4.tar.gz/md5 create mode 100644 deps/checksums/JuliaSyntax-045d156c44dbb87769c7416d049a7c08908539d4.tar.gz/sha512 delete mode 100644 deps/checksums/JuliaSyntax-8731bab86f14762cca8cf24224d8c7a6a89c21c5.tar.gz/md5 delete mode 100644 deps/checksums/JuliaSyntax-8731bab86f14762cca8cf24224d8c7a6a89c21c5.tar.gz/sha512 diff --git a/deps/JuliaSyntax.version b/deps/JuliaSyntax.version index b604eedaa43dd..e726eea3656fc 100644 --- a/deps/JuliaSyntax.version +++ b/deps/JuliaSyntax.version @@ -1,4 +1,4 @@ JULIASYNTAX_BRANCH = main -JULIASYNTAX_SHA1 = 8731bab86f14762cca8cf24224d8c7a6a89c21c5 +JULIASYNTAX_SHA1 = 045d156c44dbb87769c7416d049a7c08908539d4 JULIASYNTAX_GIT_URL := https://github.com/JuliaLang/JuliaSyntax.jl.git JULIASYNTAX_TAR_URL = https://api.github.com/repos/JuliaLang/JuliaSyntax.jl/tarball/$1 diff --git a/deps/checksums/JuliaSyntax-045d156c44dbb87769c7416d049a7c08908539d4.tar.gz/md5 b/deps/checksums/JuliaSyntax-045d156c44dbb87769c7416d049a7c08908539d4.tar.gz/md5 new file mode 100644 index 0000000000000..387ff43532a6e --- /dev/null +++ b/deps/checksums/JuliaSyntax-045d156c44dbb87769c7416d049a7c08908539d4.tar.gz/md5 @@ -0,0 +1 @@ +ac6d344a55ec798abd2b4fb68304794e diff --git a/deps/checksums/JuliaSyntax-045d156c44dbb87769c7416d049a7c08908539d4.tar.gz/sha512 b/deps/checksums/JuliaSyntax-045d156c44dbb87769c7416d049a7c08908539d4.tar.gz/sha512 new file mode 100644 index 0000000000000..a43f4dfd4bcae --- /dev/null +++ b/deps/checksums/JuliaSyntax-045d156c44dbb87769c7416d049a7c08908539d4.tar.gz/sha512 @@ -0,0 +1 @@ +89cf036193135337ae722e05dccbcd6535d2fa54316ae801a8c764f5f4eaf90fa95a644d024dbefb09433781043dfb4830a1679a049e47b7b35e9acd1e834b90 diff --git a/deps/checksums/JuliaSyntax-8731bab86f14762cca8cf24224d8c7a6a89c21c5.tar.gz/md5 b/deps/checksums/JuliaSyntax-8731bab86f14762cca8cf24224d8c7a6a89c21c5.tar.gz/md5 deleted file mode 100644 index 8bec9dde7fbae..0000000000000 --- a/deps/checksums/JuliaSyntax-8731bab86f14762cca8cf24224d8c7a6a89c21c5.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -6fdeb9332af478502be39af642027387 diff --git a/deps/checksums/JuliaSyntax-8731bab86f14762cca8cf24224d8c7a6a89c21c5.tar.gz/sha512 b/deps/checksums/JuliaSyntax-8731bab86f14762cca8cf24224d8c7a6a89c21c5.tar.gz/sha512 deleted file mode 100644 index 50c676f808c5c..0000000000000 --- a/deps/checksums/JuliaSyntax-8731bab86f14762cca8cf24224d8c7a6a89c21c5.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -fbb4ab0b99de7e1f86b918b401c2d42883a2bf8e80f6af4d6b85b7ca263d97cca1c47b25aca48359f14dee91b658684c0c590b7f20240bd9e0ce6e960ccf6647 From 1da3068401c60c31534fd2957ed911df2b987fa9 Mon Sep 17 00:00:00 2001 From: Alex Arslan Date: Fri, 18 Aug 2023 09:06:44 -0700 Subject: [PATCH 099/413] Update libssh2 patches (#50959) We're now using libssh2 v1.11.0 which includes the two patches we were carrying. The patches need to be dropped in order to build with `USE_BINARYBUILDER=0`. (This was my bad, I should have made this change as part of #50826, which updated libssh2 to v1.11.0.) (cherry picked from commit 315ff53a37556ae0d26188d73f97325be44c26de) --- deps/libssh2.mk | 16 +-- .../patches/libssh2-fix-import-lib-name.patch | 26 ----- deps/patches/libssh2-mbedtls-size_t.patch | 105 ++++++++++++++++++ deps/patches/libssh2-userauth-check.patch | 30 ----- 4 files changed, 109 insertions(+), 68 deletions(-) delete mode 100644 deps/patches/libssh2-fix-import-lib-name.patch create mode 100644 deps/patches/libssh2-mbedtls-size_t.patch delete mode 100644 deps/patches/libssh2-userauth-check.patch diff --git a/deps/libssh2.mk b/deps/libssh2.mk index d0174c0c090e2..3f9738515e4a1 100644 --- a/deps/libssh2.mk +++ b/deps/libssh2.mk @@ -30,21 +30,13 @@ endif LIBSSH2_SRC_PATH := $(SRCCACHE)/$(LIBSSH2_SRC_DIR) - # Apply patch to fix v1.10.0 CVE (https://github.com/libssh2/libssh2/issues/649), drop with v1.11 -$(LIBSSH2_SRC_PATH)/libssh2-userauth-check.patch-applied: $(LIBSSH2_SRC_PATH)/source-extracted +$(LIBSSH2_SRC_PATH)/libssh2-mbedtls-size_t.patch-applied: $(LIBSSH2_SRC_PATH)/source-extracted cd $(LIBSSH2_SRC_PATH) && \ - patch -p1 -f < $(SRCDIR)/patches/libssh2-userauth-check.patch - echo 1 > $@ - -# issue: https://github.com/JuliaLang/julia/issues/45645#issuecomment-1153214379 -# fix pr: https://github.com/libssh2/libssh2/pull/711 -$(LIBSSH2_SRC_PATH)/libssh2-fix-import-lib-name.patch-applied: $(LIBSSH2_SRC_PATH)/libssh2-userauth-check.patch-applied - cd $(LIBSSH2_SRC_PATH) && \ - patch -p1 -f < $(SRCDIR)/patches/libssh2-fix-import-lib-name.patch + patch -p1 -f < $(SRCDIR)/patches/libssh2-mbedtls-size_t.patch echo 1 > $@ $(BUILDDIR)/$(LIBSSH2_SRC_DIR)/build-configured: \ - $(LIBSSH2_SRC_PATH)/libssh2-fix-import-lib-name.patch-applied + $(LIBSSH2_SRC_PATH)/libssh2-mbedtls-size_t.patch-applied $(BUILDDIR)/$(LIBSSH2_SRC_DIR)/build-configured: $(LIBSSH2_SRC_PATH)/source-extracted mkdir -p $(dir $@) @@ -53,7 +45,7 @@ $(BUILDDIR)/$(LIBSSH2_SRC_DIR)/build-configured: $(LIBSSH2_SRC_PATH)/source-extr echo 1 > $@ $(BUILDDIR)/$(LIBSSH2_SRC_DIR)/build-compiled: $(BUILDDIR)/$(LIBSSH2_SRC_DIR)/build-configured - $(MAKE) -C $(dir $<) libssh2 + $(MAKE) -C $(dir $<) echo 1 > $@ $(BUILDDIR)/$(LIBSSH2_SRC_DIR)/build-checked: $(BUILDDIR)/$(LIBSSH2_SRC_DIR)/build-compiled diff --git a/deps/patches/libssh2-fix-import-lib-name.patch b/deps/patches/libssh2-fix-import-lib-name.patch deleted file mode 100644 index 15aafb58d2736..0000000000000 --- a/deps/patches/libssh2-fix-import-lib-name.patch +++ /dev/null @@ -1,26 +0,0 @@ -From 3732420725efbf410df5863b91a09ca214ee18ba Mon Sep 17 00:00:00 2001 -From: "Y. Yang" -Date: Thu, 16 Jun 2022 19:16:37 +0800 -Subject: [PATCH] Fix DLL import library name - -https://aur.archlinux.org/packages/mingw-w64-libssh2 -https://cmake.org/cmake/help/latest/prop_tgt/IMPORT_PREFIX.html ---- - src/CMakeLists.txt | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index cb8fee1..17ecefd 100644 ---- a/src/CMakeLists.txt -+++ b/src/CMakeLists.txt -@@ -220,6 +220,7 @@ endif() - add_library(libssh2 ${SOURCES}) - # we want it to be called libssh2 on all platforms - set_target_properties(libssh2 PROPERTIES PREFIX "") -+set_target_properties(libssh2 PROPERTIES IMPORT_PREFIX "") - - target_compile_definitions(libssh2 PRIVATE ${PRIVATE_COMPILE_DEFINITIONS}) - target_include_directories(libssh2 --- -2.36.1 - diff --git a/deps/patches/libssh2-mbedtls-size_t.patch b/deps/patches/libssh2-mbedtls-size_t.patch new file mode 100644 index 0000000000000..502adf6bdf439 --- /dev/null +++ b/deps/patches/libssh2-mbedtls-size_t.patch @@ -0,0 +1,105 @@ +From 6cad964056848d3d78ccc74600fbff6298baddcb Mon Sep 17 00:00:00 2001 +From: Viktor Szakats +Date: Tue, 30 May 2023 17:28:03 +0000 +Subject: [PATCH 1/1] mbedtls: use more size_t to sync up with crypto.h + +Ref: 5a96f494ee0b00282afb2db2e091246fc5e1774a #846 #879 + +Fixes #1053 +Closes #1054 +--- + src/mbedtls.c | 14 ++++++++------ + src/mbedtls.h | 13 ++++++------- + 2 files changed, 14 insertions(+), 13 deletions(-) + +diff --git a/src/mbedtls.c b/src/mbedtls.c +index e387cdb..cd14a4b 100644 +--- a/src/mbedtls.c ++++ b/src/mbedtls.c +@@ -186,7 +186,7 @@ _libssh2_mbedtls_cipher_dtor(_libssh2_cipher_ctx *ctx) + int + _libssh2_mbedtls_hash_init(mbedtls_md_context_t *ctx, + mbedtls_md_type_t mdtype, +- const unsigned char *key, unsigned long keylen) ++ const unsigned char *key, size_t keylen) + { + const mbedtls_md_info_t *md_info; + int ret, hmac; +@@ -221,7 +221,7 @@ _libssh2_mbedtls_hash_final(mbedtls_md_context_t *ctx, unsigned char *hash) + } + + int +-_libssh2_mbedtls_hash(const unsigned char *data, unsigned long datalen, ++_libssh2_mbedtls_hash(const unsigned char *data, size_t datalen, + mbedtls_md_type_t mdtype, unsigned char *hash) + { + const mbedtls_md_info_t *md_info; +@@ -497,8 +497,9 @@ int + _libssh2_mbedtls_rsa_sha2_verify(libssh2_rsa_ctx * rsactx, + size_t hash_len, + const unsigned char *sig, +- unsigned long sig_len, +- const unsigned char *m, unsigned long m_len) ++ size_t sig_len, ++ const unsigned char *m, ++ size_t m_len) + { + int ret; + int md_type; +@@ -548,8 +549,9 @@ _libssh2_mbedtls_rsa_sha2_verify(libssh2_rsa_ctx * rsactx, + int + _libssh2_mbedtls_rsa_sha1_verify(libssh2_rsa_ctx * rsactx, + const unsigned char *sig, +- unsigned long sig_len, +- const unsigned char *m, unsigned long m_len) ++ size_t sig_len, ++ const unsigned char *m, ++ size_t m_len) + { + return _libssh2_mbedtls_rsa_sha2_verify(rsactx, SHA_DIGEST_LENGTH, + sig, sig_len, m, m_len); +diff --git a/src/mbedtls.h b/src/mbedtls.h +index d9592f7..03484da 100644 +--- a/src/mbedtls.h ++++ b/src/mbedtls.h +@@ -478,12 +478,12 @@ _libssh2_mbedtls_cipher_dtor(_libssh2_cipher_ctx *ctx); + int + _libssh2_mbedtls_hash_init(mbedtls_md_context_t *ctx, + mbedtls_md_type_t mdtype, +- const unsigned char *key, unsigned long keylen); ++ const unsigned char *key, size_t keylen); + + int + _libssh2_mbedtls_hash_final(mbedtls_md_context_t *ctx, unsigned char *hash); + int +-_libssh2_mbedtls_hash(const unsigned char *data, unsigned long datalen, ++_libssh2_mbedtls_hash(const unsigned char *data, size_t datalen, + mbedtls_md_type_t mdtype, unsigned char *hash); + + _libssh2_bn * +@@ -526,9 +526,8 @@ _libssh2_mbedtls_rsa_new_private_frommemory(libssh2_rsa_ctx **rsa, + int + _libssh2_mbedtls_rsa_sha1_verify(libssh2_rsa_ctx *rsa, + const unsigned char *sig, +- unsigned long sig_len, +- const unsigned char *m, +- unsigned long m_len); ++ size_t sig_len, ++ const unsigned char *m, size_t m_len); + int + _libssh2_mbedtls_rsa_sha1_sign(LIBSSH2_SESSION *session, + libssh2_rsa_ctx *rsa, +@@ -540,8 +539,8 @@ int + _libssh2_mbedtls_rsa_sha2_verify(libssh2_rsa_ctx * rsactx, + size_t hash_len, + const unsigned char *sig, +- unsigned long sig_len, +- const unsigned char *m, unsigned long m_len); ++ size_t sig_len, ++ const unsigned char *m, size_t m_len); + int + _libssh2_mbedtls_rsa_sha2_sign(LIBSSH2_SESSION *session, + libssh2_rsa_ctx *rsa, +-- +2.31.0 + diff --git a/deps/patches/libssh2-userauth-check.patch b/deps/patches/libssh2-userauth-check.patch deleted file mode 100644 index 1dc6108ebece7..0000000000000 --- a/deps/patches/libssh2-userauth-check.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 37ee0aa214655b63e7869d1d74ff1ec9f9818a5e Mon Sep 17 00:00:00 2001 -From: Daniel Stenberg -Date: Fri, 17 Dec 2021 17:46:29 +0100 -Subject: [PATCH] userauth: check for too large userauth_kybd_auth_name_len - (#650) - -... before using it. - -Reported-by: MarcoPoloPie -Fixes #649 ---- - src/userauth.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/src/userauth.c b/src/userauth.c -index 40ef915..caa5635 100644 ---- a/src/userauth.c -+++ b/src/userauth.c -@@ -1769,6 +1769,11 @@ userauth_keyboard_interactive(LIBSSH2_SESSION * session, - if(session->userauth_kybd_data_len >= 5) { - /* string name (ISO-10646 UTF-8) */ - session->userauth_kybd_auth_name_len = _libssh2_ntohu32(s); -+ if(session->userauth_kybd_auth_name_len > -+ session->userauth_kybd_data_len - 5) -+ return _libssh2_error(session, -+ LIBSSH2_ERROR_OUT_OF_BOUNDARY, -+ "Bad keyboard auth name"); - s += 4; - } - else { From 1094763035de2762b507a38c796eae4679371ed3 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Thu, 29 Jun 2023 20:12:42 -0400 Subject: [PATCH 100/413] Add docs on task-specific buffering using multithreading (#48542) Co-authored-by: Mason Protter (cherry picked from commit 02f80c6bdf87edd90898f0af5828d68343340afa) From 3fa49905ba86165e202d7337ea451923e3b6c2b5 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Mon, 14 Aug 2023 11:06:51 -0300 Subject: [PATCH 101/413] Make ranges more robust with unsigned indexes. (#50823) Fixes #44895 (cherry picked from commit 91093fe5b4bb4095ebb66698792631befe530a3c) --- base/range.jl | 4 ++-- base/twiceprecision.jl | 4 ++-- test/ranges.jl | 7 +++++++ test/testhelpers/OffsetArrays.jl | 4 ++-- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/base/range.jl b/base/range.jl index 356ae8ab49e57..67735ad930a2c 100644 --- a/base/range.jl +++ b/base/range.jl @@ -959,13 +959,13 @@ end # This is separate to make it useful even when running with --check-bounds=yes function unsafe_getindex(r::StepRangeLen{T}, i::Integer) where T i isa Bool && throw(ArgumentError("invalid index: $i of type Bool")) - u = i - r.offset + u = oftype(r.offset, i) - r.offset T(r.ref + u*r.step) end function _getindex_hiprec(r::StepRangeLen, i::Integer) # without rounding by T i isa Bool && throw(ArgumentError("invalid index: $i of type Bool")) - u = i - r.offset + u = oftype(r.offset, i) - r.offset r.ref + u*r.step end diff --git a/base/twiceprecision.jl b/base/twiceprecision.jl index d91a04371230c..5c10b1d2b5027 100644 --- a/base/twiceprecision.jl +++ b/base/twiceprecision.jl @@ -478,7 +478,7 @@ function unsafe_getindex(r::StepRangeLen{T,<:TwicePrecision,<:TwicePrecision}, i # Very similar to _getindex_hiprec, but optimized to avoid a 2nd call to add12 @inline i isa Bool && throw(ArgumentError("invalid index: $i of type Bool")) - u = i - r.offset + u = oftype(r.offset, i) - r.offset shift_hi, shift_lo = u*r.step.hi, u*r.step.lo x_hi, x_lo = add12(r.ref.hi, shift_hi) T(x_hi + (x_lo + (shift_lo + r.ref.lo))) @@ -486,7 +486,7 @@ end function _getindex_hiprec(r::StepRangeLen{<:Any,<:TwicePrecision,<:TwicePrecision}, i::Integer) i isa Bool && throw(ArgumentError("invalid index: $i of type Bool")) - u = i - r.offset + u = oftype(r.offset, i) - r.offset shift_hi, shift_lo = u*r.step.hi, u*r.step.lo x_hi, x_lo = add12(r.ref.hi, shift_hi) x_hi, x_lo = add12(x_hi, x_lo + (shift_lo + r.ref.lo)) diff --git a/test/ranges.jl b/test/ranges.jl index 94548a76326d8..85f6a04634a14 100644 --- a/test/ranges.jl +++ b/test/ranges.jl @@ -2510,3 +2510,10 @@ end @test collect(r) isa Vector{Int} @test collect(r) == r end + +@testset "unsigned index #44895" begin + x = range(-1,1,length=11) + @test x[UInt(1)] == -1.0 + a = StepRangeLen(1,2,3,2) + @test a[UInt(1)] == -1 +end diff --git a/test/testhelpers/OffsetArrays.jl b/test/testhelpers/OffsetArrays.jl index 705bd07b2878c..2f7d29b53a199 100644 --- a/test/testhelpers/OffsetArrays.jl +++ b/test/testhelpers/OffsetArrays.jl @@ -142,7 +142,7 @@ end @inline function Base.getindex(r::IdOffsetRange, i::Integer) i isa Bool && throw(ArgumentError("invalid index: $i of type Bool")) @boundscheck checkbounds(r, i) - @inbounds eltype(r)(r.parent[i - r.offset] + r.offset) + @inbounds eltype(r)(r.parent[oftype(r.offset, i) - r.offset] + r.offset) end # Logical indexing following https://github.com/JuliaLang/julia/pull/31829 @@ -592,7 +592,7 @@ Base.fill!(A::OffsetArray, x) = parent_call(Ap -> fill!(Ap, x), A) # Δi = i - first(r) # i′ = first(r.parent) + Δi # and one obtains the result below. -parentindex(r::IdOffsetRange, i) = i - r.offset +parentindex(r::IdOffsetRange, i) = oftype(r.offset, i) - r.offset @propagate_inbounds Base.getindex(A::OffsetArray{<:Any,0}) = A.parent[] From 07faa2296a13b9cebb0ea3e5a8b44693f4234f8b Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Fri, 18 Aug 2023 23:58:20 -0400 Subject: [PATCH 102/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20Pkg=20stdlib=20from=2085d6ac617=20to=2061257864?= =?UTF-8?q?f=20(#50978)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Dilum Aluthge --- .../Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/md5 | 1 + .../Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/sha512 | 1 + .../Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/md5 | 1 - .../Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/sha512 | 1 - stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/md5 create mode 100644 deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/sha512 delete mode 100644 deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/sha512 diff --git a/deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/md5 b/deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/md5 new file mode 100644 index 0000000000000..d8580f44b07fd --- /dev/null +++ b/deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/md5 @@ -0,0 +1 @@ +a913b67362f54d8ad7b1721f84ca15bf diff --git a/deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/sha512 b/deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/sha512 new file mode 100644 index 0000000000000..c7626f9c0e0cf --- /dev/null +++ b/deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/sha512 @@ -0,0 +1 @@ +6c7efb3c1972e576e2a0aac3992e468047ab67b02bdfacf94fc42d77a9d7cd3c06df54c54b31427abe751d480eafcd0ef47ed388ee08e3eafd932cd3d23e09c8 diff --git a/deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/md5 b/deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/md5 deleted file mode 100644 index 95df34217f215..0000000000000 --- a/deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -c46326a7aea479157b132517b0c88043 diff --git a/deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/sha512 b/deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/sha512 deleted file mode 100644 index ed5e0ab33ac9f..0000000000000 --- a/deps/checksums/Pkg-85d6ac617442c13eda85a5782a197b81ee86003a.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -9b0460ee2bdc4b2844cff95425d46fdd0087f759dcd616c08e1c2c821244399744d0ba2f979034b744491fc84118984f5517874e040256e9b33b670a828188b9 diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 27e21eb49b6f9..62468ccf4f6d9 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = 85d6ac617442c13eda85a5782a197b81ee86003a +PKG_SHA1 = 61257864fe97ef14ad13eca3b6e0ac1a040c9236 PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 972259ee378a8f6b7ffb88050c63078a89ff0259 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 18 Aug 2023 12:09:43 -0400 Subject: [PATCH 103/413] types: fix hash values of Vararg (#50932) Fixes #50455 (cherry picked from commit c239e9966a30797949d856c18b14e4e5421a90e9) --- src/jltypes.c | 15 ++++++++------- test/tuple.jl | 5 +++++ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/jltypes.c b/src/jltypes.c index 444923f600569..024d0be74e659 100644 --- a/src/jltypes.c +++ b/src/jltypes.c @@ -1593,19 +1593,20 @@ static unsigned typekey_hash(jl_typename_t *tn, jl_value_t **key, size_t n, int int failed = nofail; for (j = 0; j < n; j++) { jl_value_t *p = key[j]; + size_t repeats = 1; if (jl_is_vararg(p)) { jl_vararg_t *vm = (jl_vararg_t*)p; - if (!nofail && vm->N) - return 0; - // 0x064eeaab is just a randomly chosen constant - hash = bitmix(vm->N ? type_hash(vm->N, &failed) : 0x064eeaab, hash); - if (failed && !nofail) - return 0; + if (vm->N && jl_is_long(vm->N)) + repeats = jl_unbox_long(vm->N); + else + hash = bitmix(0x064eeaab, hash); // 0x064eeaab is just a randomly chosen constant p = vm->T ? vm->T : (jl_value_t*)jl_any_type; } - hash = bitmix(type_hash(p, &failed), hash); + unsigned hashp = type_hash(p, &failed); if (failed && !nofail) return 0; + while (repeats--) + hash = bitmix(hashp, hash); } hash = bitmix(~tn->hash, hash); return hash ? hash : 1; diff --git a/test/tuple.jl b/test/tuple.jl index 71770b6a553c2..8ff311928b6b8 100644 --- a/test/tuple.jl +++ b/test/tuple.jl @@ -796,3 +796,8 @@ namedtup = (;a=1, b=2, c=3) @test_throws ErrorException("Tuple field type cannot be Union{}") Tuple{Vararg{Union{},1}} @test Tuple{} <: Tuple{Vararg{Union{},N}} where N @test !(Tuple{} >: Tuple{Vararg{Union{},N}} where N) + +@test Val{Tuple{T,T,T} where T} === Val{Tuple{Vararg{T,3}} where T} +@test Val{Tuple{Vararg{T,4}} where T} === Val{Tuple{T,T,T,T} where T} +@test Val{Tuple{Int64, Vararg{Int32,N}} where N} === Val{Tuple{Int64, Vararg{Int32}}} +@test Val{Tuple{Int32, Vararg{Int64}}} === Val{Tuple{Int32, Vararg{Int64,N}} where N} From f58e1ebe0803e3ad09afd31e167509690a2d69c3 Mon Sep 17 00:00:00 2001 From: Oscar Smith Date: Sun, 20 Aug 2023 23:29:14 -0400 Subject: [PATCH 104/413] fix incorrect results in `expm1(::Union{Float16, Float32})` (#50989) `unsafe_trunc(UInt, -1.0)` is unspecified behavior but worked fine on apple and AMD so we didn't notice??? This has been very broken since 1.7. (cherry picked from commit 61ebaf6643c57cef8b3bb4013b75931608ac6344) --- base/special/exp.jl | 4 ++-- test/math.jl | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/base/special/exp.jl b/base/special/exp.jl index 9cca6f568305f..8e940a4d85ad9 100644 --- a/base/special/exp.jl +++ b/base/special/exp.jl @@ -460,7 +460,7 @@ function expm1(x::Float32) end x = Float64(x) N_float = round(x*Ln2INV(Float64)) - N = unsafe_trunc(UInt64, N_float) + N = unsafe_trunc(Int64, N_float) r = muladd(N_float, Ln2(Float64), x) hi = evalpoly(r, (1.0, .5, 0.16666667546642386, 0.041666183019487026, 0.008332997481506921, 0.0013966479175977883, 0.0002004037059220124)) @@ -477,7 +477,7 @@ function expm1(x::Float16) return Float16(x*evalpoly(x, (1f0, .5f0, 0.16666628f0, 0.04166785f0, 0.008351848f0, 0.0013675707f0))) end N_float = round(x*Ln2INV(Float32)) - N = unsafe_trunc(UInt32, N_float) + N = unsafe_trunc(Int32, N_float) r = muladd(N_float, Ln2(Float32), x) hi = evalpoly(r, (1f0, .5f0, 0.16666667f0, 0.041665863f0, 0.008333111f0, 0.0013981499f0, 0.00019983904f0)) small_part = r*hi diff --git a/test/math.jl b/test/math.jl index 8e6afba0acfce..6a41fa55c4f47 100644 --- a/test/math.jl +++ b/test/math.jl @@ -188,6 +188,7 @@ end @test exp10(x) ≈ exp10(big(x)) @test exp2(x) ≈ exp2(big(x)) @test expm1(x) ≈ expm1(big(x)) + @test expm1(T(-1.1)) ≈ expm1(big(T(-1.1))) @test hypot(x,y) ≈ hypot(big(x),big(y)) @test hypot(x,x,y) ≈ hypot(hypot(big(x),big(x)),big(y)) @test hypot(x,x,y,y) ≈ hypot(hypot(big(x),big(x)),hypot(big(y),big(y))) From 13ec3ceb57c5392d0e556d1d35b26966c6b8f16d Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Mon, 21 Aug 2023 09:06:00 -0400 Subject: [PATCH 105/413] Separate foreign threads into a :foreign threadpool (#50912) Co-authored-by: Gabriel Baraldi Co-authored-by: Dilum Aluthge (cherry picked from commit 8be469e275a455ca894fdc5fad8a80aafb359544) --- base/partr.jl | 7 +++++++ base/task.jl | 2 +- base/threadingconstructs.jl | 14 ++++++++++---- src/partr.c | 2 +- src/threading.c | 2 +- 5 files changed, 20 insertions(+), 7 deletions(-) diff --git a/base/partr.jl b/base/partr.jl index a02272ceab202..c77a24bdcc003 100644 --- a/base/partr.jl +++ b/base/partr.jl @@ -95,6 +95,7 @@ end function multiq_insert(task::Task, priority::UInt16) tpid = ccall(:jl_get_task_threadpoolid, Int8, (Any,), task) + @assert tpid > -1 heap_p = multiq_size(tpid) tp = tpid + 1 @@ -131,6 +132,9 @@ function multiq_deletemin() tid = Threads.threadid() tp = ccall(:jl_threadpoolid, Int8, (Int16,), tid-1) + 1 + if tp == 0 # Foreign thread + return nothing + end tpheaps = heaps[tp] @label retry @@ -182,6 +186,9 @@ end function multiq_check_empty() tid = Threads.threadid() tp = ccall(:jl_threadpoolid, Int8, (Int16,), tid-1) + 1 + if tp == 0 # Foreign thread + return true + end for i = UInt32(1):length(heaps[tp]) if heaps[tp][i].ntasks != 0 return false diff --git a/base/task.jl b/base/task.jl index db2f7e22bce67..137b0f7c4a3f6 100644 --- a/base/task.jl +++ b/base/task.jl @@ -794,7 +794,7 @@ function enq_work(t::Task) else @label not_sticky tp = Threads.threadpool(t) - if Threads.threadpoolsize(tp) == 1 + if tp === :foreign || Threads.threadpoolsize(tp) == 1 # There's only one thread in the task's assigned thread pool; # use its work queue. tid = (tp === :interactive) ? 1 : Threads.threadpoolsize(:interactive)+1 diff --git a/base/threadingconstructs.jl b/base/threadingconstructs.jl index 7a70132a9dccc..a5a1294be049b 100644 --- a/base/threadingconstructs.jl +++ b/base/threadingconstructs.jl @@ -63,6 +63,8 @@ function _tpid_to_sym(tpid::Int8) return :interactive elseif tpid == 1 return :default + elseif tpid == -1 + return :foreign else throw(ArgumentError("Unrecognized threadpool id $tpid")) end @@ -73,6 +75,8 @@ function _sym_to_tpid(tp::Symbol) return Int8(0) elseif tp === :default return Int8(1) + elseif tp == :foreign + return Int8(-1) else throw(ArgumentError("Unrecognized threadpool name `$(repr(tp))`")) end @@ -81,7 +85,7 @@ end """ Threads.threadpool(tid = threadid()) -> Symbol -Returns the specified thread's threadpool; either `:default` or `:interactive`. +Returns the specified thread's threadpool; either `:default`, `:interactive`, or `:foreign`. """ function threadpool(tid = threadid()) tpid = ccall(:jl_threadpoolid, Int8, (Int16,), tid-1) @@ -108,6 +112,8 @@ See also: `BLAS.get_num_threads` and `BLAS.set_num_threads` in the function threadpoolsize(pool::Symbol = :default) if pool === :default || pool === :interactive tpid = _sym_to_tpid(pool) + elseif pool == :foreign + error("Threadpool size of `:foreign` is indeterminant") else error("invalid threadpool specified") end @@ -151,7 +157,7 @@ function threading_run(fun, static) else # TODO: this should be the current pool (except interactive) if there # are ever more than two pools. - ccall(:jl_set_task_threadpoolid, Cint, (Any, Int8), t, _sym_to_tpid(:default)) + @assert ccall(:jl_set_task_threadpoolid, Cint, (Any, Int8), t, _sym_to_tpid(:default)) == 1 end tasks[i] = t schedule(t) @@ -357,10 +363,10 @@ end function _spawn_set_thrpool(t::Task, tp::Symbol) tpid = _sym_to_tpid(tp) - if _nthreads_in_pool(tpid) == 0 + if tpid == -1 || _nthreads_in_pool(tpid) == 0 tpid = _sym_to_tpid(:default) end - ccall(:jl_set_task_threadpoolid, Cint, (Any, Int8), t, tpid) + @assert ccall(:jl_set_task_threadpoolid, Cint, (Any, Int8), t, tpid) == 1 nothing end diff --git a/src/partr.c b/src/partr.c index 428389db7f218..0f3b581f5122f 100644 --- a/src/partr.c +++ b/src/partr.c @@ -70,7 +70,7 @@ JL_DLLEXPORT int jl_set_task_tid(jl_task_t *task, int16_t tid) JL_NOTSAFEPOINT JL_DLLEXPORT int jl_set_task_threadpoolid(jl_task_t *task, int8_t tpid) JL_NOTSAFEPOINT { - if (tpid < 0 || tpid >= jl_n_threadpools) + if (tpid < -1 || tpid >= jl_n_threadpools) return 0; task->threadpoolid = tpid; return 1; diff --git a/src/threading.c b/src/threading.c index e2eb686e3061a..4faa8a0a2dc46 100644 --- a/src/threading.c +++ b/src/threading.c @@ -332,7 +332,7 @@ JL_DLLEXPORT int8_t jl_threadpoolid(int16_t tid) JL_NOTSAFEPOINT if (tid < n) return (int8_t)i; } - return 0; // everything else uses threadpool 0 (though does not become part of any threadpool) + return -1; // everything else uses threadpool -1 (does not belong to any threadpool) } jl_ptls_t jl_init_threadtls(int16_t tid) From c1126a3475fb62aa611ef543223fe28e7a37f357 Mon Sep 17 00:00:00 2001 From: Wimmerer Date: Tue, 22 Aug 2023 17:49:53 -0400 Subject: [PATCH 106/413] add ORIGIN to rpath on Linux/FreeBSD (cherry picked from commit 89a7c953b23f1ddfe5b3a4de6fdf9194a2b5edea) --- deps/libsuitesparse.mk | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/deps/libsuitesparse.mk b/deps/libsuitesparse.mk index 16d4919031ca5..e547030c16a08 100644 --- a/deps/libsuitesparse.mk +++ b/deps/libsuitesparse.mk @@ -24,6 +24,10 @@ LIBSUITESPARSE_CMAKE_FLAGS := $(CMAKE_COMMON) \ -DLAPACK_LIBRARIES="$(build_shlibdir)/libblastrampoline.$(SHLIB_EXT)" \ -DLAPACK_LINKER_FLAGS="blastrampoline" +ifneq (,$(findstring $(OS),Linux FreeBSD)) +LIBSUITESPARSE_CMAKE_FLAGS += -DCMAKE_INSTALL_RPATH="\$$ORIGIN" +endif + $(SRCCACHE)/SuiteSparse-$(LIBSUITESPARSE_VER).tar.gz: | $(SRCCACHE) $(JLDOWNLOAD) $@ https://github.com/Wimmerer/SuiteSparse/archive/v$(LIBSUITESPARSE_VER).tar.gz From 0e01cb5ff7176cd5cd43b73ef7f45d320174e148 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 2 Aug 2023 11:41:19 -0400 Subject: [PATCH 107/413] cat: remove unused promote_eltype methods that confuse inference (#50753) These cannot be reached, but they would imply this function might return Bottom, which it cannot. Fix #50550 (cherry picked from commit edff86adfa870b4d7ab86e94c9b1291e3796c5de) --- base/abstractarray.jl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/base/abstractarray.jl b/base/abstractarray.jl index cfc5078cb005e..8f1274d960e41 100644 --- a/base/abstractarray.jl +++ b/base/abstractarray.jl @@ -1584,10 +1584,12 @@ replace_in_print_matrix(A::AbstractVector,i::Integer,j::Integer,s::AbstractStrin eltypeof(x) = typeof(x) eltypeof(x::AbstractArray) = eltype(x) -promote_eltypeof() = Bottom +promote_eltypeof() = error() +promote_eltypeof(v1) = eltypeof(v1) promote_eltypeof(v1, vs...) = promote_type(eltypeof(v1), promote_eltypeof(vs...)) -promote_eltype() = Bottom +promote_eltype() = error() +promote_eltype(v1) = eltype(v1) promote_eltype(v1, vs...) = promote_type(eltype(v1), promote_eltype(vs...)) #TODO: ERROR CHECK From 77900dcb9331703fdd6a1f61aa1842ce94763eeb Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Thu, 24 Aug 2023 14:12:05 -0400 Subject: [PATCH 108/413] fix #50562, regression in `in` of tuple of Symbols (#51009) fix #50562 --- base/tuple.jl | 1 - test/tuple.jl | 6 ++++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/base/tuple.jl b/base/tuple.jl index 59fe2c1e531e1..ae5de41586848 100644 --- a/base/tuple.jl +++ b/base/tuple.jl @@ -607,7 +607,6 @@ any(x::Tuple{Bool, Bool, Bool}) = x[1]|x[2]|x[3] # a version of `in` esp. for NamedTuple, to make it pure, and not compiled for each tuple length function sym_in(x::Symbol, @nospecialize itr::Tuple{Vararg{Symbol}}) - @noinline @_total_meta for y in itr y === x && return true diff --git a/test/tuple.jl b/test/tuple.jl index 8ff311928b6b8..b806667fd9d0a 100644 --- a/test/tuple.jl +++ b/test/tuple.jl @@ -763,6 +763,12 @@ g42457(a, b) = Base.isequal(a, b) ? 1 : 2.0 # issue #46049: setindex(::Tuple) regression @inferred Base.setindex((1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16), 42, 1) +# issue #50562 +f50562(r) = in(:i_backward, r[]) +r50562 = Ref((:b_back, :foofakgka, :i_backw)) +f50562(r50562) +@test @allocated(f50562(r50562)) == 0 + # issue #47326 function fun1_47326(args...) head..., tail = args From 27f60cda79cc5af2fc7ce2650f1e5a74ae5b7c6f Mon Sep 17 00:00:00 2001 From: Milan Bouchet-Valat Date: Fri, 25 Aug 2023 21:28:34 +0200 Subject: [PATCH 109/413] Bump Statistics stdlib (#51053) For some reason we haven't updated Statistics since April. Diff: https://github.com/JuliaStats/Statistics.jl/compare/a3feba2bb63f06b7f40024185e9fa5f6385e2510...08562cb8abbe67829e437aa8533994121c350c05 --- .../md5 | 1 + .../sha512 | 1 + .../md5 | 1 - .../sha512 | 1 - stdlib/Statistics.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/md5 create mode 100644 deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/sha512 delete mode 100644 deps/checksums/Statistics-a3feba2bb63f06b7f40024185e9fa5f6385e2510.tar.gz/md5 delete mode 100644 deps/checksums/Statistics-a3feba2bb63f06b7f40024185e9fa5f6385e2510.tar.gz/sha512 diff --git a/deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/md5 b/deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/md5 new file mode 100644 index 0000000000000..42034e9a42a7b --- /dev/null +++ b/deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/md5 @@ -0,0 +1 @@ +735ae885122f81261ecf152853ce0b42 diff --git a/deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/sha512 b/deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/sha512 new file mode 100644 index 0000000000000..dbec046cef091 --- /dev/null +++ b/deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/sha512 @@ -0,0 +1 @@ +42dd950bd59fa91540806f9c1b26c391373ef4508106e59f875ca256805951784fe4469b834978a6d20ab340eb979da97b0f4b32c8f53626b03d7b3f84e4cb5a diff --git a/deps/checksums/Statistics-a3feba2bb63f06b7f40024185e9fa5f6385e2510.tar.gz/md5 b/deps/checksums/Statistics-a3feba2bb63f06b7f40024185e9fa5f6385e2510.tar.gz/md5 deleted file mode 100644 index 7e7a889eecd29..0000000000000 --- a/deps/checksums/Statistics-a3feba2bb63f06b7f40024185e9fa5f6385e2510.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -6564297a5f5971231809bf9940f68b98 diff --git a/deps/checksums/Statistics-a3feba2bb63f06b7f40024185e9fa5f6385e2510.tar.gz/sha512 b/deps/checksums/Statistics-a3feba2bb63f06b7f40024185e9fa5f6385e2510.tar.gz/sha512 deleted file mode 100644 index bbe9b8bed6371..0000000000000 --- a/deps/checksums/Statistics-a3feba2bb63f06b7f40024185e9fa5f6385e2510.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -22d14c82a30f3ec7af09028423cc823808abf86918d5707fd1fcf6ca20dea7871589da9b22e462d194e86fcee380f549aeb65f585048f00bf23281786b17e040 diff --git a/stdlib/Statistics.version b/stdlib/Statistics.version index 27197b12be54c..05d7839223924 100644 --- a/stdlib/Statistics.version +++ b/stdlib/Statistics.version @@ -1,4 +1,4 @@ STATISTICS_BRANCH = master -STATISTICS_SHA1 = a3feba2bb63f06b7f40024185e9fa5f6385e2510 +STATISTICS_SHA1 = 08562cb8abbe67829e437aa8533994121c350c05 STATISTICS_GIT_URL := https://github.com/JuliaStats/Statistics.jl.git STATISTICS_TAR_URL = https://api.github.com/repos/JuliaStats/Statistics.jl/tarball/$1 From 25d58ad4f6c3c39bfb01f70deaed00a788b9e4d9 Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Sun, 27 Aug 2023 22:46:12 -0400 Subject: [PATCH 110/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20Pkg=20stdlib=20from=2061257864f=20to=20a3621e97?= =?UTF-8?q?8=20(#51076)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/md5 | 1 - .../Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/sha512 | 1 - .../Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/md5 | 1 + .../Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/sha512 | 1 + stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/sha512 create mode 100644 deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/md5 create mode 100644 deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/sha512 diff --git a/deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/md5 b/deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/md5 deleted file mode 100644 index d8580f44b07fd..0000000000000 --- a/deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -a913b67362f54d8ad7b1721f84ca15bf diff --git a/deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/sha512 b/deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/sha512 deleted file mode 100644 index c7626f9c0e0cf..0000000000000 --- a/deps/checksums/Pkg-61257864fe97ef14ad13eca3b6e0ac1a040c9236.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -6c7efb3c1972e576e2a0aac3992e468047ab67b02bdfacf94fc42d77a9d7cd3c06df54c54b31427abe751d480eafcd0ef47ed388ee08e3eafd932cd3d23e09c8 diff --git a/deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/md5 b/deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/md5 new file mode 100644 index 0000000000000..83c24e02ad0a1 --- /dev/null +++ b/deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/md5 @@ -0,0 +1 @@ +704f13debf1a844f4393ada0bc22ef67 diff --git a/deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/sha512 b/deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/sha512 new file mode 100644 index 0000000000000..07336b42ee45c --- /dev/null +++ b/deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/sha512 @@ -0,0 +1 @@ +0aa0b9ceb18b4f410c23994467e30bb0c53a81f6d388f158598c5d74c3907565b5bf1646a900621f90175649e559971eea9a9d8d4102a4aa444552c1782de247 diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 62468ccf4f6d9..6a653fdae1ba9 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = 61257864fe97ef14ad13eca3b6e0ac1a040c9236 +PKG_SHA1 = a3621e97860bd26955dbbe7282c443882f43d9c3 PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 4545f0ba0c4fc01389ff3caaeef2022dc3b5a00d Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Tue, 12 Sep 2023 16:59:02 -0400 Subject: [PATCH 111/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20Pkg=20stdlib=20from=20a3621e978=20to=20484bc3ec?= =?UTF-8?q?0=20(#51285)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Dilum Aluthge --- .../Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/md5 | 1 + .../Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/sha512 | 1 + .../Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/md5 | 1 - .../Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/sha512 | 1 - stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/md5 create mode 100644 deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/sha512 delete mode 100644 deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/sha512 diff --git a/deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/md5 b/deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/md5 new file mode 100644 index 0000000000000..2deaaffefaee3 --- /dev/null +++ b/deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/md5 @@ -0,0 +1 @@ +6325a13a4b6925907528131f19076e86 diff --git a/deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/sha512 b/deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/sha512 new file mode 100644 index 0000000000000..d8c8a9d320f71 --- /dev/null +++ b/deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/sha512 @@ -0,0 +1 @@ +3c0f55fed47c6e99f471a8d666d6c3347f6ebffd8b41be3134b942e9b315f4ad7f5229a7151e4dea4741d93d2d639213ece32479db5016236e7dab8aa80db92b diff --git a/deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/md5 b/deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/md5 deleted file mode 100644 index 83c24e02ad0a1..0000000000000 --- a/deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -704f13debf1a844f4393ada0bc22ef67 diff --git a/deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/sha512 b/deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/sha512 deleted file mode 100644 index 07336b42ee45c..0000000000000 --- a/deps/checksums/Pkg-a3621e97860bd26955dbbe7282c443882f43d9c3.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -0aa0b9ceb18b4f410c23994467e30bb0c53a81f6d388f158598c5d74c3907565b5bf1646a900621f90175649e559971eea9a9d8d4102a4aa444552c1782de247 diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 6a653fdae1ba9..61511df893558 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = a3621e97860bd26955dbbe7282c443882f43d9c3 +PKG_SHA1 = 484bc3ec08a77b71693e2c6aa502a96f0d8ae31f PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From e5e91421929033707c8e49a1a17230f9a4e06ad6 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Wed, 23 Aug 2023 21:59:06 -0300 Subject: [PATCH 112/413] Implement realloc accounting correctly (#51027) This was potentially making us getting wrong results. (cherry picked from commit ce8acdd4d9cd8321141c37ddafb63062191418f4) --- src/gc.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/gc.c b/src/gc.c index ad0c545c13e8d..0d285b7251589 100644 --- a/src/gc.c +++ b/src/gc.c @@ -3711,11 +3711,12 @@ JL_DLLEXPORT void *jl_gc_counted_realloc_with_old_size(void *p, size_t old, size int64_t diff = sz - old; if (diff < 0) { + diff = -diff; uint64_t free_acc = jl_atomic_load_relaxed(&ptls->gc_num.free_acc); if (free_acc + diff < 16*1024) - jl_atomic_store_relaxed(&ptls->gc_num.free_acc, free_acc + (-diff)); + jl_atomic_store_relaxed(&ptls->gc_num.free_acc, free_acc + diff); else { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -(free_acc + (-diff))); + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -(free_acc + diff)); jl_atomic_store_relaxed(&ptls->gc_num.free_acc, 0); } } @@ -3847,11 +3848,12 @@ static void *gc_managed_realloc_(jl_ptls_t ptls, void *d, size_t sz, size_t olds int64_t diff = allocsz - oldsz; if (diff < 0) { + diff = -diff; uint64_t free_acc = jl_atomic_load_relaxed(&ptls->gc_num.free_acc); if (free_acc + diff < 16*1024) - jl_atomic_store_relaxed(&ptls->gc_num.free_acc, free_acc + (-diff)); + jl_atomic_store_relaxed(&ptls->gc_num.free_acc, free_acc + diff); else { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -(free_acc + (-diff))); + jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -(free_acc + diff)); jl_atomic_store_relaxed(&ptls->gc_num.free_acc, 0); } } From 78c8cf1b354525ab0777531378444b01b6a3f080 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Thu, 24 Aug 2023 14:33:32 +0200 Subject: [PATCH 113/413] fix a case of potentially use of undefined variable when handling error in distributed message processing (#51019) There is a use of `oldstate` on line 244 which has the possibility of being undefined. This bug seems to have been introduced in https://github.com/JuliaLang/julia/commit/40c622b7e66a88c05d8892222126f1d13851bc62#diff-39fa44ff86c5b38bd6b9e7f60733b25724a9efd9221ca38f776ed3f3ab01dec2. I don't have a repro for this but this PR reverts back to the situation where `oldstate` is defined at the topmost level of the catch block as it was before the offending commit. (cherry picked from commit 777b784dde077defd0aea58b598241f95146152a) --- stdlib/Distributed/src/process_messages.jl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stdlib/Distributed/src/process_messages.jl b/stdlib/Distributed/src/process_messages.jl index 7bbf7cfde943b..e68e05b9db52b 100644 --- a/stdlib/Distributed/src/process_messages.jl +++ b/stdlib/Distributed/src/process_messages.jl @@ -210,6 +210,9 @@ function message_handler_loop(r_stream::IO, w_stream::IO, incoming::Bool) handle_msg(msg, header, r_stream, w_stream, version) end catch e + werr = worker_from_id(wpid) + oldstate = werr.state + # Check again as it may have been set in a message handler but not propagated to the calling block above if wpid < 1 wpid = worker_id_from_socket(r_stream) @@ -219,8 +222,6 @@ function message_handler_loop(r_stream::IO, w_stream::IO, incoming::Bool) println(stderr, e, CapturedException(e, catch_backtrace())) println(stderr, "Process($(myid())) - Unknown remote, closing connection.") elseif !(wpid in map_del_wrkr) - werr = worker_from_id(wpid) - oldstate = werr.state set_worker_state(werr, W_TERMINATED) # If unhandleable error occurred talking to pid 1, exit From aa115080feb08b614d01b7cf62e054f2831bf29e Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Fri, 25 Aug 2023 06:18:22 -0400 Subject: [PATCH 114/413] Revert "Optimize findall(f, ::AbstractArray{Bool}) (#42202)" (#51039) This reverts commit 4c4c94f4781da4f4109086368205db8a2f7ec7c4. (Except keeps the tests and adds a new one) fixes #46425 (cherry picked from commit defe187ed5b4f274778c964f979138334a2d1dfb) --- base/array.jl | 39 ++++++++------------------------------- test/arrayops.jl | 9 +++++++++ 2 files changed, 17 insertions(+), 31 deletions(-) diff --git a/base/array.jl b/base/array.jl index 825b5f9f7e206..7fb3d0501bb7b 100644 --- a/base/array.jl +++ b/base/array.jl @@ -2487,42 +2487,19 @@ function findall(A) end # Allocating result upfront is faster (possible only when collection can be iterated twice) -function _findall(f::Function, A::AbstractArray{Bool}) - n = count(f, A) +function findall(A::AbstractArray{Bool}) + n = count(A) I = Vector{eltype(keys(A))}(undef, n) - isempty(I) && return I - _findall(f, I, A) -end - -function _findall(f::Function, I::Vector, A::AbstractArray{Bool}) - cnt = 1 - len = length(I) - for (k, v) in pairs(A) - @inbounds I[cnt] = k - cnt += f(v) - cnt > len && return I - end - # In case of impure f, this line could potentially be hit. In that case, - # we can't assume I is the correct length. - resize!(I, cnt - 1) -end - -function _findall(f::Function, I::Vector, A::AbstractVector{Bool}) - i = firstindex(A) cnt = 1 - len = length(I) - while cnt ≤ len - @inbounds I[cnt] = i - cnt += f(@inbounds A[i]) - i = nextind(A, i) + for (i,a) in pairs(A) + if a + I[cnt] = i + cnt += 1 + end end - cnt - 1 == len ? I : resize!(I, cnt - 1) + I end -findall(f::Function, A::AbstractArray{Bool}) = _findall(f, A) -findall(f::Fix2{typeof(in)}, A::AbstractArray{Bool}) = _findall(f, A) -findall(A::AbstractArray{Bool}) = _findall(identity, A) - findall(x::Bool) = x ? [1] : Vector{Int}() findall(testf::Function, x::Number) = testf(x) ? [1] : Vector{Int}() findall(p::Fix2{typeof(in)}, x::Number) = x in p.x ? [1] : Vector{Int}() diff --git a/test/arrayops.jl b/test/arrayops.jl index 770cec3705038..ba02847094b0e 100644 --- a/test/arrayops.jl +++ b/test/arrayops.jl @@ -604,6 +604,15 @@ end @testset "issue 43078" begin @test_throws TypeError findall([1]) end + + @testset "issue #46425" begin + counter = 0 + function pred46425(x) + counter += 1 + counter < 4 && x + end + @test findall(pred46425, [false, false, true, true]) == [3] + end end @testset "find with Matrix" begin A = [1 2 0; 3 4 0] From 210fb22edd285925df15b5040dc1156e7c0cbb6a Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Sat, 26 Aug 2023 13:00:49 -0400 Subject: [PATCH 115/413] add missing invoke edge for nospecialize targets (#51036) We need 2 edges: one for the lookup (which uses the call signature) and one for the invoke (which uses the invoke signature). It is hard to make a small example for this, but the test case demonstrated this issue, particularly if inspected by `SnoopCompile.@snoopr`. Additionally, we can do some easy optimizations on the invoke invalidation, since in most cases we know from subtyping transativity that it is only invalid if the method callee target is actually deleted, and otherwise it cannot ever be partially replaced. Fixes: #50091 Likely introduced by #49404, so marking for v1.10 backport only (cherry picked from commit 6097140fdd7ed3523b1a80dd78a6c6a0a81c99ed) --- base/compiler/ssair/inlining.jl | 5 ++-- src/gf.c | 5 +++- src/staticdata_utils.c | 44 +++++++++++++++++++-------------- test/worlds.jl | 37 +++++++++++++++++++++++++++ 4 files changed, 69 insertions(+), 22 deletions(-) diff --git a/base/compiler/ssair/inlining.jl b/base/compiler/ssair/inlining.jl index 304a5e78a13e1..639a7fcc09c5b 100644 --- a/base/compiler/ssair/inlining.jl +++ b/base/compiler/ssair/inlining.jl @@ -817,8 +817,8 @@ end function compileable_specialization(mi::MethodInstance, effects::Effects, et::InliningEdgeTracker, @nospecialize(info::CallInfo); compilesig_invokes::Bool=true) mi_invoke = mi + method, atype, sparams = mi.def::Method, mi.specTypes, mi.sparam_vals if compilesig_invokes - method, atype, sparams = mi.def::Method, mi.specTypes, mi.sparam_vals new_atype = get_compileable_sig(method, atype, sparams) new_atype === nothing && return nothing if atype !== new_atype @@ -836,7 +836,8 @@ function compileable_specialization(mi::MethodInstance, effects::Effects, return nothing end end - add_inlining_backedge!(et, mi) + add_inlining_backedge!(et, mi) # to the dispatch lookup + push!(et.edges, method.sig, mi_invoke) # add_inlining_backedge to the invoke call return InvokeCase(mi_invoke, effects, info) end diff --git a/src/gf.c b/src/gf.c index 935fd1e60db78..9ee77a8426432 100644 --- a/src/gf.c +++ b/src/gf.c @@ -2130,7 +2130,10 @@ JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method int replaced_edge; if (invokeTypes) { // n.b. normally we must have mi.specTypes <: invokeTypes <: m.sig (though it might not strictly hold), so we only need to check the other subtypes - replaced_edge = jl_subtype(invokeTypes, type) && is_replacing(ambig, type, m, d, n, invokeTypes, NULL, morespec); + if (jl_egal(invokeTypes, caller->def.method->sig)) + replaced_edge = 0; // if invokeTypes == m.sig, then the only way to change this invoke is to replace the method itself + else + replaced_edge = jl_subtype(invokeTypes, type) && is_replacing(ambig, type, m, d, n, invokeTypes, NULL, morespec); } else { replaced_edge = replaced_dispatch; diff --git a/src/staticdata_utils.c b/src/staticdata_utils.c index bf1a830b608de..ed80a1f6278f4 100644 --- a/src/staticdata_utils.c +++ b/src/staticdata_utils.c @@ -505,19 +505,17 @@ static void jl_collect_edges(jl_array_t *edges, jl_array_t *ext_targets, jl_arra size_t max_valid = ~(size_t)0; if (invokeTypes) { assert(jl_is_method_instance(callee)); - jl_methtable_t *mt = jl_method_get_table(((jl_method_instance_t*)callee)->def.method); - if ((jl_value_t*)mt == jl_nothing) { - callee_ids = NULL; // invalid - break; - } - else { + jl_method_t *m = ((jl_method_instance_t*)callee)->def.method; + matches = (jl_value_t*)m; // valid because there is no method replacement permitted +#ifndef NDEBUG + jl_methtable_t *mt = jl_method_get_table(m); + if ((jl_value_t*)mt != jl_nothing) { matches = jl_gf_invoke_lookup_worlds(invokeTypes, (jl_value_t*)mt, world, &min_valid, &max_valid); - if (matches == jl_nothing) { - callee_ids = NULL; // invalid - break; + if (matches != jl_nothing) { + assert(m == ((jl_method_match_t*)matches)->method); } - matches = (jl_value_t*)((jl_method_match_t*)matches)->method; } +#endif } else { if (jl_is_method_instance(callee)) { @@ -855,19 +853,27 @@ static jl_array_t *jl_verify_edges(jl_array_t *targets, size_t minworld) size_t max_valid = ~(size_t)0; if (invokesig) { assert(callee && "unsupported edge"); - jl_methtable_t *mt = jl_method_get_table(((jl_method_instance_t*)callee)->def.method); - if ((jl_value_t*)mt == jl_nothing) { - max_valid = 0; + jl_method_t *m = ((jl_method_instance_t*)callee)->def.method; + if (jl_egal(invokesig, m->sig)) { + // the invoke match is `m` for `m->sig`, unless `m` is invalid + if (m->deleted_world < max_valid) + max_valid = 0; } else { - matches = jl_gf_invoke_lookup_worlds(invokesig, (jl_value_t*)mt, minworld, &min_valid, &max_valid); - if (matches == jl_nothing) { - max_valid = 0; + jl_methtable_t *mt = jl_method_get_table(m); + if ((jl_value_t*)mt == jl_nothing) { + max_valid = 0; } else { - matches = (jl_value_t*)((jl_method_match_t*)matches)->method; - if (matches != expected) { - max_valid = 0; + matches = jl_gf_invoke_lookup_worlds(invokesig, (jl_value_t*)mt, minworld, &min_valid, &max_valid); + if (matches == jl_nothing) { + max_valid = 0; + } + else { + matches = (jl_value_t*)((jl_method_match_t*)matches)->method; + if (matches != expected) { + max_valid = 0; + } } } } diff --git a/test/worlds.jl b/test/worlds.jl index b5a8f1c5449ac..8e820bdab88df 100644 --- a/test/worlds.jl +++ b/test/worlds.jl @@ -419,3 +419,40 @@ ccall(:jl_debug_method_invalidation, Any, (Cint,), 0) which(mc48954, (AbstractFloat, Int)), "jl_method_table_insert" ] + +# issue #50091 -- missing invoke edge affecting nospecialized dispatch +module ExceptionUnwrapping +@nospecialize +unwrap_exception(@nospecialize(e)) = e +unwrap_exception(e::Base.TaskFailedException) = e.task.exception +@noinline function _summarize_task_exceptions(io::IO, exc, prefix = nothing) + _summarize_exception((;prefix,), io, exc) + nothing +end +@noinline function _summarize_exception(kws, io::IO, e::TaskFailedException) + _summarize_task_exceptions(io, e.task, kws.prefix) +end +# This is the overload that prints the actual exception that occurred. +result = Bool[] +@noinline function _summarize_exception(kws, io::IO, @nospecialize(exc)) + global result + push!(result, unwrap_exception(exc) === exc) + if unwrap_exception(exc) !== exc # something uninferrable + return _summarize_exception(kws, io, unwrap_exception(exc)) + end +end +struct X; x; end +end +let e = ExceptionUnwrapping.X(nothing) + @test ExceptionUnwrapping.unwrap_exception(e) === e + ExceptionUnwrapping._summarize_task_exceptions(devnull, e) + @test ExceptionUnwrapping.result == [true] + empty!(ExceptionUnwrapping.result) +end +ExceptionUnwrapping.unwrap_exception(e::ExceptionUnwrapping.X) = e.x +let e = ExceptionUnwrapping.X(nothing) + @test !(ExceptionUnwrapping.unwrap_exception(e) === e) + ExceptionUnwrapping._summarize_task_exceptions(devnull, e) + @test ExceptionUnwrapping.result == [false, true] + empty!(ExceptionUnwrapping.result) +end From d889379a0337ff0ba78d8ac199a826e52d0a361b Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Sun, 27 Aug 2023 01:08:19 -0400 Subject: [PATCH 116/413] inference: fix return_type_tfunc modeling of concrete functions (#51042) The `aft` parameter is a value already, so we should be checking it in the value domain, not the type domain like `tt`. That check happens to already be done (somewhat unnecessarily) earlier in the function. Fixes #40606 --------- Co-authored-by: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> (cherry picked from commit f24a93a3f6607f569c739cbcd3a84d21bdc6c908) --- base/compiler/tfuncs.jl | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/base/compiler/tfuncs.jl b/base/compiler/tfuncs.jl index bc5c4240ac222..eae04021342d0 100644 --- a/base/compiler/tfuncs.jl +++ b/base/compiler/tfuncs.jl @@ -2620,13 +2620,15 @@ function return_type_tfunc(interp::AbstractInterpreter, argtypes::Vector{Any}, s if length(argtypes) == 3 aft = widenslotwrapper(argtypes[2]) - if !isa(aft, Const) && !(isType(aft) && !has_free_typevars(aft)) && - !(isconcretetype(aft) && !(aft <: Builtin)) - return UNKNOWN - end argtypes_vec = Any[aft, af_argtype.parameters...] else argtypes_vec = Any[af_argtype.parameters...] + isempty(argtypes_vec) && push!(argtypes_vec, Union{}) + aft = argtypes_vec[1] + end + if !(isa(aft, Const) || (isType(aft) && !has_free_typevars(aft)) || + (isconcretetype(aft) && !(aft <: Builtin) && !iskindtype(aft))) + return UNKNOWN end if contains_is(argtypes_vec, Union{}) @@ -2659,8 +2661,7 @@ function return_type_tfunc(interp::AbstractInterpreter, argtypes::Vector{Any}, s # in two ways: both as being a subtype of this, and # because of LimitedAccuracy causes return CallMeta(Type{<:rt}, EFFECTS_TOTAL, info) - elseif (isa(tt, Const) || isconstType(tt)) && - (isa(aft, Const) || isconstType(aft)) + elseif isa(tt, Const) || isconstType(tt) # input arguments were known for certain # XXX: this doesn't imply we know anything about rt return CallMeta(Const(rt), EFFECTS_TOTAL, info) From 15359fa7a61e358e3c9164fdc785850bd3372701 Mon Sep 17 00:00:00 2001 From: Cody Tapscott <84105208+topolarity@users.noreply.github.com> Date: Wed, 30 Aug 2023 21:58:57 -0400 Subject: [PATCH 117/413] Workaround upstream FreeBSD issue #272992 (#51114) ELF doesn't handle WEAK symbols dynamically the way it handles them statically. Looking up overloaded WEAK symbols via a library-specific handle will often give you the empty stub (in `libc.so.7` in this case) instead of the strong implementation elsewhere (`ld-elf.so.1` here). Even after the [upstream fix](https://cgit.freebsd.org/src/commit/?id=21a52f99440c9bec7679f3b0c5c9d888901c3694), `dlsym`, `dladdr` and a ton of other symbols still have stubs with no trampoline in FreeBSD's libc: https://cgit.freebsd.org/src/tree/lib/libc/gen/dlfcn.c?id=21a52f99440c9bec7679f3b0c5c9d888901c3694 Thankfully `dl_iterate_phdr` appears to be the only function that we directly `ccall` from Julia's Libdl so we can leave this fix incomplete for now. Resolves #50846. (cherry picked from commit c65901171a30b261f063c6a56c4a58a36d492be0) --- src/dlload.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/dlload.c b/src/dlload.c index ffa9a053d5f1c..8124605880b5e 100644 --- a/src/dlload.c +++ b/src/dlload.c @@ -435,6 +435,13 @@ JL_DLLEXPORT int jl_dlsym(void *handle, const char *symbol, void ** value, int t // Look for symbols in internal libraries JL_DLLEXPORT const char *jl_dlfind(const char *f_name) { +#ifdef _OS_FREEBSD_ + // This is a workaround for FreeBSD <= 13.2 which do not have + // https://cgit.freebsd.org/src/commit/?id=21a52f99440c9bec7679f3b0c5c9d888901c3694 + // (See https://github.com/JuliaLang/julia/issues/50846) + if (strcmp(f_name, "dl_iterate_phdr") == 0) + return JL_EXE_LIBNAME; +#endif void * dummy; if (jl_dlsym(jl_libjulia_internal_handle, f_name, &dummy, 0)) return JL_LIBJULIA_INTERNAL_DL_LIBNAME; From 70937646c4ecbf10ae7db1e9de791a4f4215a9e4 Mon Sep 17 00:00:00 2001 From: Cody Tapscott <84105208+topolarity@users.noreply.github.com> Date: Fri, 1 Sep 2023 14:46:25 -0400 Subject: [PATCH 118/413] Add `JL_DLLIMPORT` to `small_typeof` declaration (#50892) Resolves #50714 (cherry picked from commit 91b8c9b99f05b99db8b259257adeb1997f8c4415) --- cli/jl_exports.h | 2 +- src/Makefile | 7 ++++++- src/aotcompile.cpp | 20 ++++++++++---------- src/builtins.c | 2 +- src/cgutils.cpp | 6 +++--- src/codegen.cpp | 6 +++--- src/gc.c | 4 ++-- src/jltypes.c | 20 ++++++++------------ src/julia.expmap.in | 1 - src/julia.h | 16 +++++++++++++--- src/processor.cpp | 2 +- src/processor.h | 6 +++--- src/staticdata.c | 8 ++++---- test/embedding/embedding.c | 6 ++++++ 14 files changed, 61 insertions(+), 45 deletions(-) diff --git a/cli/jl_exports.h b/cli/jl_exports.h index d28958c097edb..f1a05b504d9da 100644 --- a/cli/jl_exports.h +++ b/cli/jl_exports.h @@ -18,7 +18,7 @@ JL_EXPORTED_DATA_SYMBOLS(XX) // define a copy of exported data #define jl_max_tags 64 -JL_DLLEXPORT void *small_typeof[(jl_max_tags << 4) / sizeof(void*)]; // 16-bit aligned, like the GC +JL_DLLEXPORT void *jl_small_typeof[(jl_max_tags << 4) / sizeof(void*)]; // 16-bit aligned, like the GC // Declare list of exported functions (sans type) #define XX(name) JL_DLLEXPORT void name(void); diff --git a/src/Makefile b/src/Makefile index 9e34dfda1c4ed..3ea28e7c40324 100644 --- a/src/Makefile +++ b/src/Makefile @@ -520,7 +520,12 @@ clang-tidy-%: $(SRCDIR)/%.cpp $(build_shlibdir)/libImplicitAtomicsPlugin.$(SHLIB -- $(CLANGSA_FLAGS) $(CLANGSA_CXXFLAGS) $(LLVM_CXXFLAGS) $(JCPPFLAGS_CLANG) $(JCXXFLAGS_CLANG) $(JL_CXXFLAGS) $(DEBUGFLAGS_CLANG) -fcolor-diagnostics --system-header-prefix=llvm -Wno-deprecated-declarations -fno-caret-diagnostics -x c++) # set the exports for the source files based on where they are getting linked -clang-sa-% clang-sagc-% clang-tidy-%: DEBUGFLAGS_CLANG += -DJL_LIBRARY_EXPORTS +$(addprefix clang-sa-,$(SRCS)): DEBUGFLAGS_CLANG += -DJL_LIBRARY_EXPORTS_INTERNAL +$(addprefix clang-sagc-,$(SRCS)): DEBUGFLAGS_CLANG += -DJL_LIBRARY_EXPORTS_INTERNAL +$(addprefix clang-tidy-,$(SRCS)): DEBUGFLAGS_CLANG += -DJL_LIBRARY_EXPORTS_INTERNAL +$(addprefix clang-sa-,$(CODEGEN_SRCS)): DEBUGFLAGS_CLANG += -DJL_LIBRARY_EXPORTS_CODEGEN +$(addprefix clang-sagc-,$(CODEGEN_SRCS)): DEBUGFLAGS_CLANG += -DJL_LIBRARY_EXPORTS_CODEGEN +$(addprefix clang-tidy-,$(CODEGEN_SRCS)): DEBUGFLAGS_CLANG += -DJL_LIBRARY_EXPORTS_CODEGEN # Add C files as a target of `analyzesrc` and `analyzegc` and `tidysrc` tidysrc: $(addprefix clang-tidy-,$(filter-out $(basename $(SKIP_IMPLICIT_ATOMICS)),$(CODEGEN_SRCS) $(SRCS))) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index d288586916560..05088394500c1 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -1621,10 +1621,10 @@ void jl_dump_native_impl(void *native_code, // let the compiler know we are going to internalize a copy of this, // if it has a current usage with ExternalLinkage - auto small_typeof_copy = dataM.getGlobalVariable("small_typeof"); - if (small_typeof_copy) { - small_typeof_copy->setVisibility(GlobalValue::HiddenVisibility); - small_typeof_copy->setDSOLocal(true); + auto jl_small_typeof_copy = dataM.getGlobalVariable("jl_small_typeof"); + if (jl_small_typeof_copy) { + jl_small_typeof_copy->setVisibility(GlobalValue::HiddenVisibility); + jl_small_typeof_copy->setDSOLocal(true); } } @@ -1698,13 +1698,13 @@ void jl_dump_native_impl(void *native_code, auto shards = emit_shard_table(metadataM, T_size, T_psize, threads); auto ptls = emit_ptls_table(metadataM, T_size, T_psize); auto header = emit_image_header(metadataM, threads, nfvars, ngvars); - auto AT = ArrayType::get(T_size, sizeof(small_typeof) / sizeof(void*)); - auto small_typeof_copy = new GlobalVariable(metadataM, AT, false, + auto AT = ArrayType::get(T_size, sizeof(jl_small_typeof) / sizeof(void*)); + auto jl_small_typeof_copy = new GlobalVariable(metadataM, AT, false, GlobalVariable::ExternalLinkage, Constant::getNullValue(AT), - "small_typeof"); - small_typeof_copy->setVisibility(GlobalValue::HiddenVisibility); - small_typeof_copy->setDSOLocal(true); + "jl_small_typeof"); + jl_small_typeof_copy->setVisibility(GlobalValue::HiddenVisibility); + jl_small_typeof_copy->setDSOLocal(true); AT = ArrayType::get(T_psize, 5); auto pointers = new GlobalVariable(metadataM, AT, false, GlobalVariable::ExternalLinkage, @@ -1712,7 +1712,7 @@ void jl_dump_native_impl(void *native_code, ConstantExpr::getBitCast(header, T_psize), ConstantExpr::getBitCast(shards, T_psize), ConstantExpr::getBitCast(ptls, T_psize), - ConstantExpr::getBitCast(small_typeof_copy, T_psize), + ConstantExpr::getBitCast(jl_small_typeof_copy, T_psize), ConstantExpr::getBitCast(target_ids, T_psize) }), "jl_image_pointers"); diff --git a/src/builtins.c b/src/builtins.c index 4f75fd79eadcc..e2169abb704fc 100644 --- a/src/builtins.c +++ b/src/builtins.c @@ -222,7 +222,7 @@ JL_DLLEXPORT int jl_egal__unboxed(const jl_value_t *a JL_MAYBE_UNROOTED, const j JL_DLLEXPORT int jl_egal__bitstag(const jl_value_t *a JL_MAYBE_UNROOTED, const jl_value_t *b JL_MAYBE_UNROOTED, uintptr_t dtag) JL_NOTSAFEPOINT { if (dtag < jl_max_tags << 4) { - switch ((enum jlsmall_typeof_tags)(dtag >> 4)) { + switch ((enum jl_small_typeof_tags)(dtag >> 4)) { case jl_int8_tag: case jl_uint8_tag: return *(uint8_t*)a == *(uint8_t*)b; diff --git a/src/cgutils.cpp b/src/cgutils.cpp index 326e4823d6c34..69f620869df93 100644 --- a/src/cgutils.cpp +++ b/src/cgutils.cpp @@ -411,7 +411,7 @@ static Constant *literal_pointer_val_slot(jl_codectx_t &ctx, jl_value_t *p) if (addr->smalltag) { // some common builtin datatypes have a special pool for accessing them by smalltag id Constant *tag = ConstantInt::get(getInt32Ty(ctx.builder.getContext()), addr->smalltag << 4); - Constant *smallp = ConstantExpr::getInBoundsGetElementPtr(getInt8Ty(ctx.builder.getContext()), prepare_global_in(jl_Module, jlsmall_typeof_var), tag); + Constant *smallp = ConstantExpr::getInBoundsGetElementPtr(getInt8Ty(ctx.builder.getContext()), prepare_global_in(jl_Module, jl_small_typeof_var), tag); return ConstantExpr::getBitCast(smallp, ctx.types().T_ppjlvalue); } // DataTypes are prefixed with a + @@ -1096,7 +1096,7 @@ static Value *emit_typeof(jl_codectx_t &ctx, const jl_cgval_t &p, bool maybenull if (jl_has_intersect_type_not_kind(typ)) return false; for (size_t i = 0; i < jl_tags_count; i++) { - jl_datatype_t *dt = small_typeof[(i << 4) / sizeof(*small_typeof)]; + jl_datatype_t *dt = jl_small_typeof[(i << 4) / sizeof(*jl_small_typeof)]; if (dt && !jl_has_empty_intersection((jl_value_t*)dt, typ)) return false; } @@ -1457,7 +1457,7 @@ static Value *emit_typeof(jl_codectx_t &ctx, Value *v, bool maybenull, bool just // we lied a bit: this wasn't really an object (though it was valid for GC rooting) // and we need to use it as an index to get the real object now Module *M = jl_Module; - Value *smallp = ctx.builder.CreateInBoundsGEP(getInt8Ty(ctx.builder.getContext()), prepare_global_in(M, jlsmall_typeof_var), tag); + Value *smallp = ctx.builder.CreateInBoundsGEP(getInt8Ty(ctx.builder.getContext()), prepare_global_in(M, jl_small_typeof_var), tag); smallp = ctx.builder.CreateBitCast(smallp, typetag->getType()->getPointerTo(0)); jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA(ctx, ctx.tbaa().tbaa_const); auto small = ctx.builder.CreateAlignedLoad(typetag->getType(), smallp, M->getDataLayout().getPointerABIAlignment(0)); diff --git a/src/codegen.cpp b/src/codegen.cpp index 5ad4eb4e6e9a4..f72c2ae2056b9 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -649,8 +649,8 @@ static const auto jldlli_var = new JuliaVariable{ true, [](Type *T_size) -> Type * { return getInt8PtrTy(T_size->getContext()); }, }; -static const auto jlsmall_typeof_var = new JuliaVariable{ - XSTR(small_typeof), +static const auto jl_small_typeof_var = new JuliaVariable{ + XSTR(jl_small_typeof), true, [](Type *T_size) -> Type * { return getInt8Ty(T_size->getContext()); }, }; @@ -9032,7 +9032,7 @@ static void init_f16_funcs(void) static void init_jit_functions(void) { - add_named_global(jlsmall_typeof_var, &small_typeof); + add_named_global(jl_small_typeof_var, &jl_small_typeof); add_named_global(jlstack_chk_guard_var, &__stack_chk_guard); add_named_global(jlRTLD_DEFAULT_var, &jl_RTLD_DEFAULT_handle); add_named_global(jlexe_var, &jl_exe_handle); diff --git a/src/gc.c b/src/gc.c index 0d285b7251589..7d847195dce8c 100644 --- a/src/gc.c +++ b/src/gc.c @@ -2422,7 +2422,7 @@ FORCE_INLINE void gc_mark_outrefs(jl_ptls_t ptls, jl_gc_markqueue_t *mq, void *_ vtag == (jl_vararg_tag << 4)) { // these objects have pointers in them, but no other special handling // so we want these to fall through to the end - vtag = (uintptr_t)small_typeof[vtag / sizeof(*small_typeof)]; + vtag = (uintptr_t)ijl_small_typeof[vtag / sizeof(*ijl_small_typeof)]; } else if (vtag < jl_max_tags << 4) { // these objects either have specialing handling @@ -2532,7 +2532,7 @@ FORCE_INLINE void gc_mark_outrefs(jl_ptls_t ptls, jl_gc_markqueue_t *mq, void *_ objprofile_count(jl_string_type, bits == GC_OLD_MARKED, dtsz); } else { - jl_datatype_t *vt = small_typeof[vtag / sizeof(*small_typeof)]; + jl_datatype_t *vt = ijl_small_typeof[vtag / sizeof(*ijl_small_typeof)]; size_t dtsz = jl_datatype_size(vt); if (update_meta) gc_setmark(ptls, o, bits, dtsz); diff --git a/src/jltypes.c b/src/jltypes.c index 024d0be74e659..8da119248203a 100644 --- a/src/jltypes.c +++ b/src/jltypes.c @@ -20,7 +20,7 @@ extern "C" { #endif _Atomic(jl_value_t*) cmpswap_names JL_GLOBALLY_ROOTED; -jl_datatype_t *small_typeof[(jl_max_tags << 4) / sizeof(*small_typeof)]; // 16-bit aligned, like the GC +jl_datatype_t *ijl_small_typeof[(jl_max_tags << 4) / sizeof(*ijl_small_typeof)]; // 16-bit aligned, like the GC // compute empirical max-probe for a given size #define max_probe(size) ((size) <= 1024 ? 16 : (size) >> 6) @@ -2525,19 +2525,13 @@ static jl_tvar_t *tvar(const char *name) (jl_value_t*)jl_any_type); } -void export_small_typeof(void) +void export_jl_small_typeof(void) { - void *copy; -#ifdef _OS_WINDOWS_ - jl_dlsym(jl_libjulia_handle, "small_typeof", ©, 1); -#else - jl_dlsym(jl_libjulia_internal_handle, "small_typeof", ©, 1); -#endif - memcpy(copy, &small_typeof, sizeof(small_typeof)); + memcpy(&jl_small_typeof, &ijl_small_typeof, sizeof(jl_small_typeof)); } #define XX(name) \ - small_typeof[(jl_##name##_tag << 4) / sizeof(*small_typeof)] = jl_##name##_type; \ + ijl_small_typeof[(jl_##name##_tag << 4) / sizeof(*ijl_small_typeof)] = jl_##name##_type; \ jl_##name##_type->smalltag = jl_##name##_tag; void jl_init_types(void) JL_GC_DISABLED { @@ -3357,7 +3351,8 @@ void jl_init_types(void) JL_GC_DISABLED // override the preferred layout for a couple types jl_lineinfonode_type->name->mayinlinealloc = 0; // FIXME: assumed to be a pointer by codegen - export_small_typeof(); + + export_jl_small_typeof(); } static jl_value_t *core(const char *name) @@ -3438,7 +3433,8 @@ void post_boot_hooks(void) } } } - export_small_typeof(); + + export_jl_small_typeof(); } #undef XX diff --git a/src/julia.expmap.in b/src/julia.expmap.in index 484c83a4b16b2..213d087fdc2ad 100644 --- a/src/julia.expmap.in +++ b/src/julia.expmap.in @@ -7,7 +7,6 @@ ios_*; arraylist_grow; small_arraylist_grow; - small_typeof; jl_*; ijl_*; _jl_mutex_*; diff --git a/src/julia.h b/src/julia.h index 5af8a5bc1a170..f4229eae909ac 100644 --- a/src/julia.h +++ b/src/julia.h @@ -740,7 +740,7 @@ typedef struct { /* XX(slotnumber) */ \ /* XX(ssavalue) */ \ /* end of JL_SMALL_TYPEOF */ -enum jlsmall_typeof_tags { +enum jl_small_typeof_tags { jl_null_tag = 0, #define XX(name) jl_##name##_tag, JL_SMALL_TYPEOF(XX) @@ -749,13 +749,23 @@ enum jlsmall_typeof_tags { jl_bitstags_first = jl_char_tag, // n.b. bool is not considered a bitstype, since it can be compared by pointer jl_max_tags = 64 }; -extern jl_datatype_t *small_typeof[(jl_max_tags << 4) / sizeof(jl_datatype_t*)]; +extern JL_DLLIMPORT jl_datatype_t *jl_small_typeof[(jl_max_tags << 4) / sizeof(jl_datatype_t*)]; +#ifndef JL_LIBRARY_EXPORTS_INTERNAL static inline jl_value_t *jl_to_typeof(uintptr_t t) { if (t < (jl_max_tags << 4)) - return (jl_value_t*)small_typeof[t / sizeof(*small_typeof)]; + return (jl_value_t*)jl_small_typeof[t / sizeof(*jl_small_typeof)]; return (jl_value_t*)t; } +#else +extern JL_HIDDEN jl_datatype_t *ijl_small_typeof[(jl_max_tags << 4) / sizeof(jl_datatype_t*)]; +static inline jl_value_t *jl_to_typeof(uintptr_t t) +{ + if (t < (jl_max_tags << 4)) + return (jl_value_t*)ijl_small_typeof[t / sizeof(*ijl_small_typeof)]; + return (jl_value_t*)t; +} +#endif // kinds diff --git a/src/processor.cpp b/src/processor.cpp index 9a602ba836f89..d2d91d3cd9966 100644 --- a/src/processor.cpp +++ b/src/processor.cpp @@ -812,7 +812,7 @@ static inline jl_image_t parse_sysimg(void *hdl, F &&callback) *tls_offset_idx = (uintptr_t)(jl_tls_offset == -1 ? 0 : jl_tls_offset); } - res.small_typeof = pointers->small_typeof; + res.jl_small_typeof = pointers->jl_small_typeof; return res; } diff --git a/src/processor.h b/src/processor.h index 74610cbe64b28..a3ebdf4f8c605 100644 --- a/src/processor.h +++ b/src/processor.h @@ -88,7 +88,7 @@ typedef struct { const int32_t *gvars_offsets; uint32_t ngvars; jl_image_fptrs_t fptrs; - void **small_typeof; + void **jl_small_typeof; } jl_image_t; // The header for each image @@ -197,8 +197,8 @@ typedef struct { const jl_image_shard_t *shards; // points to header->nshards length array // The TLS data pointer const jl_image_ptls_t *ptls; - // A copy of small_typeof[] - void **small_typeof; + // A copy of jl_small_typeof[] + void **jl_small_typeof; // serialized target data // This contains the number of targets diff --git a/src/staticdata.c b/src/staticdata.c index c05422fd10969..a974d98a39835 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -1984,7 +1984,7 @@ static void jl_update_all_fptrs(jl_serializer_state *s, jl_image_t *image) if (fvars.base == NULL) return; - memcpy(image->small_typeof, &small_typeof, sizeof(small_typeof)); + memcpy(image->jl_small_typeof, &jl_small_typeof, sizeof(jl_small_typeof)); int img_fvars_max = s->fptr_record->size / sizeof(void*); size_t i; @@ -2838,7 +2838,7 @@ JL_DLLEXPORT void jl_set_sysimg_so(void *handle) #endif extern void rebuild_image_blob_tree(void); -extern void export_small_typeof(void); +extern void export_jl_small_typeof(void); static void jl_restore_system_image_from_stream_(ios_t *f, jl_image_t *image, jl_array_t *depmods, uint64_t checksum, /* outputs */ jl_array_t **restored, jl_array_t **init_order, @@ -2914,10 +2914,10 @@ static void jl_restore_system_image_from_stream_(ios_t *f, jl_image_t *image, jl *tag = jl_read_value(&s); } #define XX(name) \ - small_typeof[(jl_##name##_tag << 4) / sizeof(*small_typeof)] = jl_##name##_type; + ijl_small_typeof[(jl_##name##_tag << 4) / sizeof(*ijl_small_typeof)] = jl_##name##_type; JL_SMALL_TYPEOF(XX) #undef XX - export_small_typeof(); + export_jl_small_typeof(); jl_global_roots_table = (jl_array_t*)jl_read_value(&s); // set typeof extra-special values now that we have the type set by tags above jl_astaggedvalue(jl_nothing)->header = (uintptr_t)jl_nothing_type | jl_astaggedvalue(jl_nothing)->header; diff --git a/test/embedding/embedding.c b/test/embedding/embedding.c index 1294d4cdafb45..c5b8845b7c823 100644 --- a/test/embedding/embedding.c +++ b/test/embedding/embedding.c @@ -192,6 +192,12 @@ int main() checked_eval_string("f28825()"); } + { + // jl_typeof works (#50714) + jl_value_t *v = checked_eval_string("sqrt(2.0)"); + jl_value_t *t = jl_typeof(v); + } + JL_TRY { jl_error("exception thrown"); } From 8332712e46416d56024ea97f455d218a18704e9f Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Sat, 2 Sep 2023 22:11:55 -0400 Subject: [PATCH 119/413] broadcast: use recursion rather than ntuple to map over a tuple (#51154) Inference seems to have trouble with the anonymous function version, so go back to the recursive version. Fixes #51129 Probably also fixes #50859 (cherry picked from commit d949bb4332c5b18c93c428094b3b1a83190029ad) --- base/broadcast.jl | 4 ++-- test/broadcast.jl | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/base/broadcast.jl b/base/broadcast.jl index 1e057789509ed..a1a86bfb3f59c 100644 --- a/base/broadcast.jl +++ b/base/broadcast.jl @@ -750,8 +750,8 @@ _broadcast_getindex_eltype(A) = eltype(A) # Tuple, Array, etc. eltypes(::Tuple{}) = Tuple{} eltypes(t::Tuple{Any}) = Iterators.TupleOrBottom(_broadcast_getindex_eltype(t[1])) eltypes(t::Tuple{Any,Any}) = Iterators.TupleOrBottom(_broadcast_getindex_eltype(t[1]), _broadcast_getindex_eltype(t[2])) -# eltypes(t::Tuple) = (TT = eltypes(tail(t)); TT === Union{} ? Union{} : Iterators.TupleOrBottom(_broadcast_getindex_eltype(t[1]), TT.parameters...)) -eltypes(t::Tuple) = Iterators.TupleOrBottom(ntuple(i -> _broadcast_getindex_eltype(t[i]), Val(length(t)))...) +eltypes(t::Tuple) = (TT = eltypes(tail(t)); TT === Union{} ? Union{} : Iterators.TupleOrBottom(_broadcast_getindex_eltype(t[1]), TT.parameters...)) +# eltypes(t::Tuple) = Iterators.TupleOrBottom(ntuple(i -> _broadcast_getindex_eltype(t[i]), Val(length(t)))...) # Inferred eltype of result of broadcast(f, args...) function combine_eltypes(f, args::Tuple) diff --git a/test/broadcast.jl b/test/broadcast.jl index 87858dd0f08fc..5e737a63e24dc 100644 --- a/test/broadcast.jl +++ b/test/broadcast.jl @@ -1133,3 +1133,6 @@ end import Base.Broadcast: BroadcastStyle, DefaultArrayStyle @test Base.infer_effects(BroadcastStyle, (DefaultArrayStyle{1},DefaultArrayStyle{2},)) |> Core.Compiler.is_foldable + +f51129(v, x) = (1 .- (v ./ x) .^ 2) +@test @inferred(f51129([13.0], 6.5)) == [-3.0] From 0e7eed85b558c03da7e223c0a36627a9328c3484 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Sat, 2 Sep 2023 22:12:28 -0400 Subject: [PATCH 120/413] fix debug typo in "add missing invoke edge for nospecialize targets (#51036)" (#51153) Causes `matches` to get replaced with `MethodMatch` instead, which then later will fail to match with the expected value. Fixes #51146 Co-authored-by: Dilum Aluthge (cherry picked from commit da86735259702850ee7a66c58021c1d6e0ad259e) --- src/staticdata_utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/staticdata_utils.c b/src/staticdata_utils.c index ed80a1f6278f4..a4cbc3fd5ebc4 100644 --- a/src/staticdata_utils.c +++ b/src/staticdata_utils.c @@ -510,7 +510,7 @@ static void jl_collect_edges(jl_array_t *edges, jl_array_t *ext_targets, jl_arra #ifndef NDEBUG jl_methtable_t *mt = jl_method_get_table(m); if ((jl_value_t*)mt != jl_nothing) { - matches = jl_gf_invoke_lookup_worlds(invokeTypes, (jl_value_t*)mt, world, &min_valid, &max_valid); + jl_value_t *matches = jl_gf_invoke_lookup_worlds(invokeTypes, (jl_value_t*)mt, world, &min_valid, &max_valid); if (matches != jl_nothing) { assert(m == ((jl_method_match_t*)matches)->method); } From 0c0638dbd424b8e70a92c67960302af5b3a0e423 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Thu, 7 Sep 2023 18:55:47 -0300 Subject: [PATCH 121/413] Check again if the tty is open inside the IO lock (#51222) This can cause segfaults when exiting julia. Co-authored-by: Valentin Churavy (cherry picked from commit b3741c01f2e2d4956be3ba41858c4065c6fbc7e8) --- base/stream.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/stream.jl b/base/stream.jl index 0b6c9a93777f6..22af8d59359f3 100644 --- a/base/stream.jl +++ b/base/stream.jl @@ -565,7 +565,6 @@ displaysize() = (parse(Int, get(ENV, "LINES", "24")), parse(Int, get(ENV, "COLUMNS", "80")))::Tuple{Int, Int} function displaysize(io::TTY) - # A workaround for #34620 and #26687 (this still has the TOCTOU problem). check_open(io) local h::Int, w::Int @@ -588,6 +587,7 @@ function displaysize(io::TTY) s1 = Ref{Int32}(0) s2 = Ref{Int32}(0) iolock_begin() + check_open(io) Base.uv_error("size (TTY)", ccall(:uv_tty_get_winsize, Int32, (Ptr{Cvoid}, Ptr{Int32}, Ptr{Int32}), io, s1, s2) != 0) From 81c9a3cddb5ce813d1c2de426ce12bd59f49ae3f Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Sat, 9 Sep 2023 17:43:01 -0300 Subject: [PATCH 122/413] Add lock around uv_unref during init (#51236) This is not a legal operation outside the lock because it's not atomic Co-authored-by: Valentin Churavy (cherry picked from commit bbbcc4fed67337c038b485f00677e2e88d24becd) --- base/libuv.jl | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/base/libuv.jl b/base/libuv.jl index 24a04f5bcad78..4c56af29e7e60 100644 --- a/base/libuv.jl +++ b/base/libuv.jl @@ -103,8 +103,17 @@ uv_error(prefix::AbstractString, c::Integer) = c < 0 ? throw(_UVError(prefix, c) eventloop() = ccall(:jl_global_event_loop, Ptr{Cvoid}, ()) -uv_unref(h::Ptr{Cvoid}) = ccall(:uv_unref, Cvoid, (Ptr{Cvoid},), h) -uv_ref(h::Ptr{Cvoid}) = ccall(:uv_ref, Cvoid, (Ptr{Cvoid},), h) +function uv_unref(h::Ptr{Cvoid}) + iolock_begin() + ccall(:uv_unref, Cvoid, (Ptr{Cvoid},), h) + iolock_end() +end + +function uv_ref(h::Ptr{Cvoid}) + iolock_begin() + ccall(:uv_ref, Cvoid, (Ptr{Cvoid},), h) + iolock_end() +end function process_events() return ccall(:jl_process_events, Int32, ()) From c12e85155c4bdec251fe564ea3033427619d1be3 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Mon, 11 Sep 2023 16:39:29 +0200 Subject: [PATCH 123/413] GMP: Gracefully handle more overflows. (#51243) Fixes https://github.com/JuliaLang/julia/issues/8286, which regressed due to a GMP upgrade in https://github.com/JuliaLang/julia/pull/45375. (cherry picked from commit 10974814b3faa1dea140062cfe1f3e63962074d5) --- deps/checksums/gmp | 116 ++++++++++----------- deps/gmp.mk | 7 +- deps/patches/gmp-more_alloc_overflow.patch | 37 +++++++ stdlib/GMP_jll/Project.toml | 2 +- test/gmp.jl | 5 + 5 files changed, 107 insertions(+), 60 deletions(-) create mode 100644 deps/patches/gmp-more_alloc_overflow.patch diff --git a/deps/checksums/gmp b/deps/checksums/gmp index 312f79dfc1d6a..c9f6deac6e19b 100644 --- a/deps/checksums/gmp +++ b/deps/checksums/gmp @@ -1,60 +1,60 @@ -GMP.v6.2.1+5.aarch64-apple-darwin.tar.gz/md5/56a01b4c21e4bc3ef3014f162c78e0a7 -GMP.v6.2.1+5.aarch64-apple-darwin.tar.gz/sha512/4c0e31f03965602b811be25847b94e227c63f66a152225477468303a44dd0f148970aaaf00e9cf800ba7df602b31b75f64c28e509362bf82b9c9f341b044a20d -GMP.v6.2.1+5.aarch64-linux-gnu-cxx03.tar.gz/md5/a1beafc662eaf934dfb3cec74ea8fe6b -GMP.v6.2.1+5.aarch64-linux-gnu-cxx03.tar.gz/sha512/370de52ddaa4e744bb6cc8eb61bc369e4e96dccdff6b1a65f21d30d4a19d0dbe41c068c8867c0fcd2bffee9aaf375c60050263dcf7c10b215b290253a7654c71 -GMP.v6.2.1+5.aarch64-linux-gnu-cxx11.tar.gz/md5/afaca916697bcdac17f4dba7444cd467 -GMP.v6.2.1+5.aarch64-linux-gnu-cxx11.tar.gz/sha512/cd7bf7c502e927a05ecde303733240c0245b239447ed4c8c3d13a52b42e47cde48264726321ff318ad6f8c08e8cf4e0c85ac875dade355720fbd7e8b33392092 -GMP.v6.2.1+5.aarch64-linux-musl-cxx03.tar.gz/md5/1d7b2be36a999f2b991abae4b9a350c9 -GMP.v6.2.1+5.aarch64-linux-musl-cxx03.tar.gz/sha512/6e4f04980a2d326a2ec2ba9b52cb4143fc227459c936706cac9f19c67607019927dc8d9f4822a73c885eb3ab2c37c6af806bff50e1e76d546274979d2589e140 -GMP.v6.2.1+5.aarch64-linux-musl-cxx11.tar.gz/md5/d114c9a351854c62b4f4724302a61677 -GMP.v6.2.1+5.aarch64-linux-musl-cxx11.tar.gz/sha512/1a0d4e3ef9fd4e2bf17cf0d90b262c1cd4f684e1ed31b6e040afe59cc13ec3dc3ce274f55c62c19217bffdd847850fe55a607f616422e2c31d92d7553100ee98 -GMP.v6.2.1+5.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/3e5989fb44bc6e2cb4054e885e931cc6 -GMP.v6.2.1+5.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/b42884d9a8d9a7a63f51f602c3cc1c2b80a6fd4aaaa47eebcf89a42443b25ba9691da844d2ac69a46b4099a5bdb34c8089f4efd8ca213d6d9866c2076d1fe061 -GMP.v6.2.1+5.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/c65ae9faa092285cc4082bfd585e7b03 -GMP.v6.2.1+5.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/74ab5afd05de93315d3e2b7f2ee6b86a2dbc165621e98cbc08b9c61146d595189b641f2bb8af4cd17d868325fa2a193b9f350e0ed457ca8bc9b96bdfb72c51e6 -GMP.v6.2.1+5.armv6l-linux-musleabihf-cxx03.tar.gz/md5/cc8e27fc3ec1c1f9e044c9d918d8cfb6 -GMP.v6.2.1+5.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/59ae96ed0571ce64a44798767c389f4822222d9519422b5050d22ada68d57371583d4de82c6d22d9636aa2e25cfd9528151364fbf207fdb391bc61d4ad3265e1 -GMP.v6.2.1+5.armv6l-linux-musleabihf-cxx11.tar.gz/md5/e5eb9e0084bf9b4b28c7d1060893159f -GMP.v6.2.1+5.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/3befcb4638d29e4d05ba1bc438e5f861a69385f5a3aa2a331194bed8f7f69331ebc61577dadec97a7c2c42e53a6dd240e30c19d4854af0670b98b02f11afc35d -GMP.v6.2.1+5.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/a3feda2d30469e8980f7c1d1694f2a65 -GMP.v6.2.1+5.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/d6787b7beca9c98e1e8771842052e5f332dc4d34a1d53968704cc54056477072a7cf0c87ae4c9a51ea35c4b4de14cad6f67579469bb802e50eb6d49d65bd0540 -GMP.v6.2.1+5.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/989a83feae172a0f01670d89065ac58c -GMP.v6.2.1+5.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/331a08346f8fd7d70a3cd40b1f9c6e7790751cadc9f3027bb1a815314c2e54bae5268a2ecca53a1a5086366641ef7389cb9574cd5f0431dee70ddedff7870b6c -GMP.v6.2.1+5.armv7l-linux-musleabihf-cxx03.tar.gz/md5/705e406788adacc5d73746306215e412 -GMP.v6.2.1+5.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/32fa29cb8abcb823cc1e170c4e1ea09b1f970207279c88ac78df352bb3969590e50fc9eb6446d9c5044f5fae2168878614b189cb1cc612ae8b8afe820b83778a -GMP.v6.2.1+5.armv7l-linux-musleabihf-cxx11.tar.gz/md5/2fff6e51075ce3b64c7684451d3a057c -GMP.v6.2.1+5.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/266036a380e3e58e799f1f03129321345a0c4d9db60b88d12166c7c6d817279239aa2e2cbf2442435e12bba8cef18c48fe9844d0b88f0026be67378e18f135c2 -GMP.v6.2.1+5.i686-linux-gnu-cxx03.tar.gz/md5/7f07924e4a691436727621e2fd1ff349 -GMP.v6.2.1+5.i686-linux-gnu-cxx03.tar.gz/sha512/3e33534fd8ba681c9e4dddd0dbb1c287b1fcb284a55ae13ac685b73d79036fb9de39443e4fbba9f7d3e804ad85c6128ce2e138f92e19df17cda51297089be300 -GMP.v6.2.1+5.i686-linux-gnu-cxx11.tar.gz/md5/5882ef18722ca8ea83fc64796ac9a6fc -GMP.v6.2.1+5.i686-linux-gnu-cxx11.tar.gz/sha512/45a25dc59060640accbb9d09574f769da05c448891a7e00b608ec3349c3d05b41710c49cd7d7fa4c5101adc9db1625ff19082715d1a9296e9da957520cca8e9e -GMP.v6.2.1+5.i686-linux-musl-cxx03.tar.gz/md5/dbf0e6f7b74e48ff63e136b4703a92df -GMP.v6.2.1+5.i686-linux-musl-cxx03.tar.gz/sha512/69321bd73da7271147f6cb073c9c8e853ab5b6b84d2cf196df197121a6fe0f6c1c64839bfd1106bba7e547b02f9dd32be9603d76be270e1e22854c600141e80f -GMP.v6.2.1+5.i686-linux-musl-cxx11.tar.gz/md5/94204c12eba64544f58a3dc0b8afc43e -GMP.v6.2.1+5.i686-linux-musl-cxx11.tar.gz/sha512/734b529a24b85eca85b3a95a3df9673a5aa51e2c61456557d273c122870018b574b09a678263c122bcef706c47dc69b142aeb688ccdcd39761eb8ca45e635a3f -GMP.v6.2.1+5.i686-w64-mingw32-cxx03.tar.gz/md5/327155a11581b319a58e780eb97628ad -GMP.v6.2.1+5.i686-w64-mingw32-cxx03.tar.gz/sha512/32c6eaaa3e2d6cc354d7c8cd8cd3b348d560d818f8af0fe8d738b8476e811d38c0d85d4dad9433ce9915322ce2c7634480340c0aace987eebeffd692f4a325d0 -GMP.v6.2.1+5.i686-w64-mingw32-cxx11.tar.gz/md5/d7ae966f2ffef8abfb731579c4ef5fb0 -GMP.v6.2.1+5.i686-w64-mingw32-cxx11.tar.gz/sha512/ebf234e3dd983d49f68ea2322d2658f9cad53de4ec94a0db33f47860331991ca765ec86a646242fdbbeb36051a182767de75ad47e7808bcbac32b196cbc538b3 -GMP.v6.2.1+5.powerpc64le-linux-gnu-cxx03.tar.gz/md5/96bab6f8a36d110065cbe06d8fa654ef -GMP.v6.2.1+5.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/d5472ea1a16ec2312e96b85cba9209eb543abca1b07c48fd7a31c42892fe4a9a2368edbb2f2410580a9ff3337a6b9dbb6cad377fc2ffa66746d4a25fb2da4d46 -GMP.v6.2.1+5.powerpc64le-linux-gnu-cxx11.tar.gz/md5/41704d02be36f94086f8e79124c15410 -GMP.v6.2.1+5.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/dc1800a7e796b4e5dea7c7136545a3120b619f25e28b3aa7e2478dc27d4224160bfc0e03875c4fdd6703c854a8851b27b0f23fd2f5470450230bfb33e337a420 -GMP.v6.2.1+5.x86_64-apple-darwin.tar.gz/md5/ec93617dd921d13eeccf946aeda3bdab -GMP.v6.2.1+5.x86_64-apple-darwin.tar.gz/sha512/a1c490e969d2d747d81016381bbabd6c07915ceca456e4fa77f0bb473193fa013dc185ae4b8bb8bd3451a25d9779f90039ac362d8c911fc307928af22e79a50c -GMP.v6.2.1+5.x86_64-linux-gnu-cxx03.tar.gz/md5/899dadfaaf4cd1d787ac6a905c108a02 -GMP.v6.2.1+5.x86_64-linux-gnu-cxx03.tar.gz/sha512/d304e85f17503a8e9472b69e908f04c6c3e8e3a88f3692f86c0e1e8d5576620b9b144e2224111a7e6f0eb5a58c6f1cb536803764fc8be13a8ef3147f3bbf779a -GMP.v6.2.1+5.x86_64-linux-gnu-cxx11.tar.gz/md5/ece1ecee696e47609ab06b6463f3ede2 -GMP.v6.2.1+5.x86_64-linux-gnu-cxx11.tar.gz/sha512/7fee1caf74f01d2ac9538642901f969f1715ce84199dccd17e016fdeab22fa5dc7a6865e1b5ebf7f54b287d51f7eb48eba4a0b7eb80b8fc4485e49198b914531 -GMP.v6.2.1+5.x86_64-linux-musl-cxx03.tar.gz/md5/aff0fb74a84d0867f2692bf61787bfd1 -GMP.v6.2.1+5.x86_64-linux-musl-cxx03.tar.gz/sha512/057d552a433f0f4e8d1f5cc1c3f1125f5096a7de72ce41ecb1ab2b7e378e0e39f323a4c50f8875c8ba1a5b66541b83e0841fe60f0ece168aeb3a9b63d3eac68f -GMP.v6.2.1+5.x86_64-linux-musl-cxx11.tar.gz/md5/89f6a22a065acbb2366076b271949141 -GMP.v6.2.1+5.x86_64-linux-musl-cxx11.tar.gz/sha512/93cdb3b1ccfbc7c0aca1f9497022d2ea69a023142d59144853300f02b5a25a8f6eacb5da68ff6dc6e969bc315d14386c75aedb828670e96fe84ccb83591bbde4 -GMP.v6.2.1+5.x86_64-unknown-freebsd.tar.gz/md5/285707b8dedcee127959bde79d6ad622 -GMP.v6.2.1+5.x86_64-unknown-freebsd.tar.gz/sha512/77d70f2b29d0bc1fd6c2d938db5b1883697b181d05491931c53eb6d23d84560743fb069ed3b8b9374fdf7d3c37b1f8f732d038e133e38fd3f42a8182ef50fc20 -GMP.v6.2.1+5.x86_64-w64-mingw32-cxx03.tar.gz/md5/fe8257f44266f6741eca3ff288048725 -GMP.v6.2.1+5.x86_64-w64-mingw32-cxx03.tar.gz/sha512/225bf51c55de35cf81e36d848e2fae2646722ceea2e72d66d6d476422df2f5960819db4f3d8a89428fe4d865a657ee4313398109f6fe688971d151cbcd69a279 -GMP.v6.2.1+5.x86_64-w64-mingw32-cxx11.tar.gz/md5/cfb3c9a7a015a271f50dd2a55b55297e -GMP.v6.2.1+5.x86_64-w64-mingw32-cxx11.tar.gz/sha512/a8b6587d9e6a8964d1ff914402b48a6f8ad52cbca96ba5bf732e4e232bf0c942d535926e755983c5e4cc4aa90b473edeac44742ef498963d1276f1ff3c49fa98 +GMP.v6.2.1+6.aarch64-apple-darwin.tar.gz/md5/8123f7925ae9aa60b6998313b21a9db9 +GMP.v6.2.1+6.aarch64-apple-darwin.tar.gz/sha512/5c7927ecfd47409dd4116cd4209768294ba229b51472ed220da498823dc1e7f9100292ec4b3a990491acd27f16ce3a3dce7a7c6e20dcd515982a9c8e364d91bc +GMP.v6.2.1+6.aarch64-linux-gnu-cxx03.tar.gz/md5/0d0d2ee67cff251941e3474341280b34 +GMP.v6.2.1+6.aarch64-linux-gnu-cxx03.tar.gz/sha512/69fb2f1476e0bb73f89ad2f73b58ec4da1b99e099124666e6da93b7705fde23913daa59f2ad479f99fcb4f0df152603bb0ba4875420b583f01fded0fec280a15 +GMP.v6.2.1+6.aarch64-linux-gnu-cxx11.tar.gz/md5/86ba1313c8ab4ca1ae8313cbf96e1e7d +GMP.v6.2.1+6.aarch64-linux-gnu-cxx11.tar.gz/sha512/05c306c01d1b0e9e4dc7ce937075eeaede4e5e0791826a8892fae2eb73cdb7f22c4873cf31cea3cfe3db996ac77387346f4f8a851ce52c29883146678f3851fd +GMP.v6.2.1+6.aarch64-linux-musl-cxx03.tar.gz/md5/2fbbb9adee7db794f5888442b7b7688c +GMP.v6.2.1+6.aarch64-linux-musl-cxx03.tar.gz/sha512/d8a1719e529374d00ba6372013d0c7ddc9f44f9f6ee0f966b4ed16d731ce74c26b6e6a807403b3396bed67dd3e775e18c1e70c247a371d622a6e7013eb6b8905 +GMP.v6.2.1+6.aarch64-linux-musl-cxx11.tar.gz/md5/b6a8c494d4c90decb6eacbca3ce3f22a +GMP.v6.2.1+6.aarch64-linux-musl-cxx11.tar.gz/sha512/6798406e20cc4d58647c266a2b1b8d0670e62f19bf4bff991c39eef13cf92c043f00717e7289bcc00007d7e248e943b37ba2eef89c9e68c42e30f0e2be9dd589 +GMP.v6.2.1+6.armv6l-linux-gnueabihf-cxx03.tar.gz/md5/a6866ee9784e9359e32dc18f417b2be7 +GMP.v6.2.1+6.armv6l-linux-gnueabihf-cxx03.tar.gz/sha512/548953ccc8444886316d4dfd7081783e397ec180e88a1d17a464e4b1d0a27f51ee7f6a1936ddab499db192d3cdfdc87d572731c5ab2f87d528609dabfccad2d3 +GMP.v6.2.1+6.armv6l-linux-gnueabihf-cxx11.tar.gz/md5/6b78c826a4aedc8107c1bbfccbe5c097 +GMP.v6.2.1+6.armv6l-linux-gnueabihf-cxx11.tar.gz/sha512/e8c075c29e4d8a916f087faeb2db50168e1a5546fcb02fc841477cf82a39188c3b9e7703b5354d4842880b5ac7215a32d022abe08aacc5e23238b63c6b994af4 +GMP.v6.2.1+6.armv6l-linux-musleabihf-cxx03.tar.gz/md5/57e1a6c71b3c5b4047bf08bfc4d4f22d +GMP.v6.2.1+6.armv6l-linux-musleabihf-cxx03.tar.gz/sha512/0f72c675ab3005ea183393bc4e5b4a157c13042367fd1bb3b03b3f7742e09604bddffb89f1478dc0dab4d992939519578549d05f9885b89319b0b51678b8a619 +GMP.v6.2.1+6.armv6l-linux-musleabihf-cxx11.tar.gz/md5/65a13f49cbdaa9d3a8e20d0b84bbc701 +GMP.v6.2.1+6.armv6l-linux-musleabihf-cxx11.tar.gz/sha512/0487b18d1c9c59d990e6c4ec435b8dff91ae02d5d56c665b12aaaea105f7d2ab5beae9dfcbb133c990f70774b0d32e55df7f2e91e2d0a85c391a4090dcadf080 +GMP.v6.2.1+6.armv7l-linux-gnueabihf-cxx03.tar.gz/md5/30e20c183153f8ce60e564b35e4b54bd +GMP.v6.2.1+6.armv7l-linux-gnueabihf-cxx03.tar.gz/sha512/41bdabc2610b46b215043e98eaddb2e2ad0695ae15f3088c9beef24a97864dce4088ae68993de928d952baaf123f279d74705664fffbf96be9b7436f1ba7692b +GMP.v6.2.1+6.armv7l-linux-gnueabihf-cxx11.tar.gz/md5/5f2cba31677e6681666c0b6ebd33c3ad +GMP.v6.2.1+6.armv7l-linux-gnueabihf-cxx11.tar.gz/sha512/a89399bf84bebf4b8432e48aae6dce5547bb6f1c048364697c577541c4f1a555b976370634624e9cf039fcbcb70e449a2f55563f0a4f48e60ee4653a185cf7dd +GMP.v6.2.1+6.armv7l-linux-musleabihf-cxx03.tar.gz/md5/4a682d832109d7ab5743832f73ca33d2 +GMP.v6.2.1+6.armv7l-linux-musleabihf-cxx03.tar.gz/sha512/d5062bd8eee926eb1177e70e5d9e8d6ed7a00a17c25d2b165b974c01aa79d45ca97e219b26ded752b5f323546192d595b838b474c61bdd87e641549db9e9ef5d +GMP.v6.2.1+6.armv7l-linux-musleabihf-cxx11.tar.gz/md5/caa51529cb1b6dc8db765e202e1b7737 +GMP.v6.2.1+6.armv7l-linux-musleabihf-cxx11.tar.gz/sha512/d11ae870e68ca8d28bbcdf799a04769c3df2fbd169f6f2b16d88a556c40866b39636820ac3497e869086e638ba31dc1c87ec780add2d1aafe5e4ca178641678e +GMP.v6.2.1+6.i686-linux-gnu-cxx03.tar.gz/md5/dfcb024b9cfba37f80da5b7cc0c5b1ad +GMP.v6.2.1+6.i686-linux-gnu-cxx03.tar.gz/sha512/10eb086228b4250ecce11ad5bbec15e2bfff2429530cfd700602ead7f108163bc48fc83d9714443cbf5a93e7dd5f9046bdc15ef324486475f6b4be1cf34bad4b +GMP.v6.2.1+6.i686-linux-gnu-cxx11.tar.gz/md5/e889c1d65c9ca710c859129ae99ef322 +GMP.v6.2.1+6.i686-linux-gnu-cxx11.tar.gz/sha512/4d97ebdd6a12d39907ccc9bad00266e286c949b3f99a306c1c4a4380a292694d944f275c351d9ddf465d020c8197b3b19dfccb5080249c75e3f5ffb9aa77a1c4 +GMP.v6.2.1+6.i686-linux-musl-cxx03.tar.gz/md5/d57b3948e7a120bafeae67c28fe40869 +GMP.v6.2.1+6.i686-linux-musl-cxx03.tar.gz/sha512/88165c809a73007d2b5e750d23c619fbb088f6de200aae1dee34b5e3783949150d91b94774cd1881d2a621d092c0e7e7332707ed4737ff8426686dfce7e0313a +GMP.v6.2.1+6.i686-linux-musl-cxx11.tar.gz/md5/e3c53fc468a9f48f9d06fdf51eafae62 +GMP.v6.2.1+6.i686-linux-musl-cxx11.tar.gz/sha512/3c6a99acd84c226d7a48177c8e18624a677ea2a3df15fb2d54002eb5a6d55144b6f51f82ff491373366f32e92252fd14747503166621c2d2359029bdb1b20741 +GMP.v6.2.1+6.i686-w64-mingw32-cxx03.tar.gz/md5/64b9bed188f9a300200659efdb9facef +GMP.v6.2.1+6.i686-w64-mingw32-cxx03.tar.gz/sha512/f7ed47cc29be31f99e612abd1db0d806ece84c117677cd639e04e2f6b08bbbfa4056ed9504bb073ec5f722de6955db668934f3d3ca05ddde0f22b096afcea2e3 +GMP.v6.2.1+6.i686-w64-mingw32-cxx11.tar.gz/md5/a8f38cefb46dc9c3faddfd597d0e1a4c +GMP.v6.2.1+6.i686-w64-mingw32-cxx11.tar.gz/sha512/f02c3458c05869fab493d9be5ea98390baf6eed136fe2916cd6214c4f24a6f22d0716d59f352454fd4c799df71a8fd90e3a169644e1c6ffe89f3620f2a52f158 +GMP.v6.2.1+6.powerpc64le-linux-gnu-cxx03.tar.gz/md5/7f8da2b7e16ef4cb593fea4bdb2e43eb +GMP.v6.2.1+6.powerpc64le-linux-gnu-cxx03.tar.gz/sha512/d0105fe7dfcc1daf7024d2f58b53240bab473c3ae44a904833d009beeb8e41f5487430f68e79bd79fc5c74b55f1111eb7479fedc84bcb45fe4dff3d8c3ac3e4f +GMP.v6.2.1+6.powerpc64le-linux-gnu-cxx11.tar.gz/md5/31fb7b6e37c650f0b8c3a2d475cb2b5b +GMP.v6.2.1+6.powerpc64le-linux-gnu-cxx11.tar.gz/sha512/d03f3f1303996008ff267682de5b9d6e3be78ca1b0d6aa7cadbf4a612b331fe70460b689125f4ededa1c6078092ad3dafaad32c68a98d31713764a7a7461cf98 +GMP.v6.2.1+6.x86_64-apple-darwin.tar.gz/md5/9276d90b4f850f167f673f731c7d3781 +GMP.v6.2.1+6.x86_64-apple-darwin.tar.gz/sha512/f914452a49988b0694915483547c2f878c0ba71be2079fd1228b3e583cb08e92d8c958a052f29025054ded74cacb699893a5a6ef27749c851e83607ad3f1fe8f +GMP.v6.2.1+6.x86_64-linux-gnu-cxx03.tar.gz/md5/cded149fcef93ab1ba89c51d7cc58b73 +GMP.v6.2.1+6.x86_64-linux-gnu-cxx03.tar.gz/sha512/8f97582d6323df6f86e3079b9a2534425bd4e64bb4cec337c21059605d50c1220fd006e55bdb34e8aa7195cd79ef518f1541c1b1a92187ed928f7939b3128dd6 +GMP.v6.2.1+6.x86_64-linux-gnu-cxx11.tar.gz/md5/0529bb60dcf584222cd91e9e11510f24 +GMP.v6.2.1+6.x86_64-linux-gnu-cxx11.tar.gz/sha512/0532821e81a4e51363570f87ec59c37dea24cab59a94e43127837ce4b388d1951853d50e52d4c9f30b4a21cfe222e368207239ce8ac0f1ee1e9375f51fb10127 +GMP.v6.2.1+6.x86_64-linux-musl-cxx03.tar.gz/md5/2d332d096da5515581ee92128aff88ab +GMP.v6.2.1+6.x86_64-linux-musl-cxx03.tar.gz/sha512/b17f7b762bd4d61fa4c4be8124275c2b337383da167bdeaca34e44d71f20716b182b46bc5a6714a798a0951d73b335ab9c87f451cf4c5456edbe76cf3ad36ba4 +GMP.v6.2.1+6.x86_64-linux-musl-cxx11.tar.gz/md5/a9dae953f9d59589162a3ea149c46d1e +GMP.v6.2.1+6.x86_64-linux-musl-cxx11.tar.gz/sha512/31e568aba38a29ec6713dda9eb1c7d7b50c2a736e8883ae8ff2eaf16840b15c93e6dc53025e7750d3ac3e4ffc7d2c91787bda5b799ecfdeea3d928657176b1b3 +GMP.v6.2.1+6.x86_64-unknown-freebsd.tar.gz/md5/6f42d7486fa85ce1bf0cac409d1dd5ae +GMP.v6.2.1+6.x86_64-unknown-freebsd.tar.gz/sha512/5111751619388e51d1b3c0e32548a6de0aa02b7967994a4b4b78cdc9e0e852dae9d78bf48a503a6fb67e3b08343ddcf5a9f0b7a64a803c4d5067d69e4cb2edee +GMP.v6.2.1+6.x86_64-w64-mingw32-cxx03.tar.gz/md5/39cca70db2d23bc73a47870a0ee5156c +GMP.v6.2.1+6.x86_64-w64-mingw32-cxx03.tar.gz/sha512/a2877a6641e4cccd39e7ef093dd9ba7501c6e312f160b2924880d129195aadb74badfbf198fd6ee11035a6a7c99d64c0965c44526104a43569ca0d97fa565b5a +GMP.v6.2.1+6.x86_64-w64-mingw32-cxx11.tar.gz/md5/e2e03ed150558405ca1993ca14488662 +GMP.v6.2.1+6.x86_64-w64-mingw32-cxx11.tar.gz/sha512/50995f6382ed2a4c425097e7abf762b847872734c104847f6a042090be132c68e864d34bb24baf64832d3636810cb631464767949eb2df2fedaa7ccd9824f78b gmp-6.2.1.tar.bz2/md5/28971fc21cf028042d4897f02fd355ea gmp-6.2.1.tar.bz2/sha512/8904334a3bcc5c896ececabc75cda9dec642e401fb5397c4992c4fabea5e962c9ce8bd44e8e4233c34e55c8010cc28db0545f5f750cbdbb5f00af538dc763be9 diff --git a/deps/gmp.mk b/deps/gmp.mk index 12ba15f8aa0f6..0ebabe53acf8d 100644 --- a/deps/gmp.mk +++ b/deps/gmp.mk @@ -57,7 +57,12 @@ $(SRCCACHE)/gmp-$(GMP_VER)/gmp-CVE-2021-43618.patch-applied: $(SRCCACHE)/gmp-$(G patch -p1 < $(SRCDIR)/patches/gmp-CVE-2021-43618.patch echo 1 > $@ -$(SRCCACHE)/gmp-$(GMP_VER)/source-patched: $(SRCCACHE)/gmp-$(GMP_VER)/gmp-CVE-2021-43618.patch-applied +$(SRCCACHE)/gmp-$(GMP_VER)/gmp-more_alloc_overflow.patch-applied: $(SRCCACHE)/gmp-$(GMP_VER)/gmp-CVE-2021-43618.patch-applied + cd $(dir $@) && \ + patch -p1 < $(SRCDIR)/patches/gmp-more_alloc_overflow.patch + echo 1 > $@ + +$(SRCCACHE)/gmp-$(GMP_VER)/source-patched: $(SRCCACHE)/gmp-$(GMP_VER)/gmp-more_alloc_overflow.patch-applied echo 1 > $@ $(BUILDDIR)/gmp-$(GMP_VER)/build-configured: $(SRCCACHE)/gmp-$(GMP_VER)/source-patched diff --git a/deps/patches/gmp-more_alloc_overflow.patch b/deps/patches/gmp-more_alloc_overflow.patch new file mode 100644 index 0000000000000..09d07d7dbd8d5 --- /dev/null +++ b/deps/patches/gmp-more_alloc_overflow.patch @@ -0,0 +1,37 @@ +diff -ur gmp-6.2.1.orig/mpz/n_pow_ui.c gmp-6.2.1/mpz/n_pow_ui.c +--- gmp-6.2.1.orig/mpz/n_pow_ui.c 2023-09-08 11:41:16.620551175 +0200 ++++ gmp-6.2.1/mpz/n_pow_ui.c 2023-09-08 12:49:29.650492180 +0200 +@@ -220,8 +220,7 @@ + umul_ppmm (ovfl, rtwos_bits, e, btwos); + if (ovfl) + { +- fprintf (stderr, "gmp: overflow in mpz type\n"); +- abort (); ++ __GMP_ALLOC_OVERFLOW_FUNC (); + } + + rtwos_limbs += rtwos_bits / GMP_NUMB_BITS; +@@ -382,8 +381,7 @@ + umul_ppmm (ovfl, ralloc, (bsize*GMP_NUMB_BITS - cnt + GMP_NAIL_BITS), e); + if (ovfl) + { +- fprintf (stderr, "gmp: overflow in mpz type\n"); +- abort (); ++ __GMP_ALLOC_OVERFLOW_FUNC (); + } + ralloc = ralloc / GMP_NUMB_BITS + 5; + +diff -ur gmp-6.2.1.orig/tal-reent.c gmp-6.2.1/tal-reent.c +--- gmp-6.2.1.orig/tal-reent.c 2020-11-14 19:45:09.000000000 +0100 ++++ gmp-6.2.1/tal-reent.c 2023-09-08 12:10:34.061357613 +0200 +@@ -61,6 +61,11 @@ + + total_size = size + HSIZ; + p = __GMP_ALLOCATE_FUNC_TYPE (total_size, char); ++ if (!p) ++ { ++ __GMP_ALLOC_OVERFLOW_FUNC (); ++ } + P->size = total_size; + P->next = *markp; + *markp = P; diff --git a/stdlib/GMP_jll/Project.toml b/stdlib/GMP_jll/Project.toml index e4af2a8674a51..9f3b917257bfa 100644 --- a/stdlib/GMP_jll/Project.toml +++ b/stdlib/GMP_jll/Project.toml @@ -1,6 +1,6 @@ name = "GMP_jll" uuid = "781609d7-10c4-51f6-84f2-b8444358ff6d" -version = "6.2.1+5" +version = "6.2.1+6" [deps] Artifacts = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" diff --git a/test/gmp.jl b/test/gmp.jl index 8f6be13c38054..6efc349ca2ba1 100644 --- a/test/gmp.jl +++ b/test/gmp.jl @@ -11,6 +11,11 @@ ee = typemax(Int64) @test BigInt <: Signed @test big(1) isa Signed + if sizeof(Culong) >= 8 + @test_throws OutOfMemoryError big(96608869069402268615522366320733234710)^16374500563449903721 + @test_throws OutOfMemoryError 555555555555555555555555555555555555555555555555555^55555555555555555 + end + let x = big(1) @test signed(x) === x @test convert(Signed, x) === x From 2e14912310c3b5fe47a51489589496e8e5db2546 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Tue, 12 Sep 2023 12:23:19 -0400 Subject: [PATCH 124/413] Ryu: make sure adding zeros does not overwrite trailing dot (#51254) Fix #43129 (cherry picked from commit 832e46d923d4cf81351038a046e22f221b5e6120) --- base/ryu/exp.jl | 2 +- base/ryu/fixed.jl | 12 ++++++------ test/ryu.jl | 5 +++++ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/base/ryu/exp.jl b/base/ryu/exp.jl index 30291212d014d..90c6869f8847f 100644 --- a/base/ryu/exp.jl +++ b/base/ryu/exp.jl @@ -147,7 +147,7 @@ function writeexp(buf, pos, v::T, end roundUp = 0 if lastDigit != 5 - roundUp = lastDigit > 5 + roundUp = lastDigit > 5 ? 1 : 0 else rexp = precision - e requiredTwos = -e2 - rexp diff --git a/base/ryu/fixed.jl b/base/ryu/fixed.jl index e0085f5c66dab..f0b96fef966f0 100644 --- a/base/ryu/fixed.jl +++ b/base/ryu/fixed.jl @@ -38,7 +38,7 @@ function writefixed(buf, pos, v::T, mant = bits & MANTISSA_MASK exp = Int((bits >> 52) & EXP_MASK) - if exp == 0 + if exp == 0 # subnormal e2 = 1 - 1023 - 52 m2 = mant else @@ -53,7 +53,7 @@ function writefixed(buf, pos, v::T, i = len - 1 while i >= 0 j = p10bits - e2 - #=@inbounds=# mula, mulb, mulc = POW10_SPLIT[POW10_OFFSET[idx + 1] + i + 1] + mula, mulb, mulc = POW10_SPLIT[POW10_OFFSET[idx + 1] + i + 1] digits = mulshiftmod1e9(m2 << 8, mula, mulb, mulc, j + 8) if nonzero pos = append_nine_digits(digits, buf, pos) @@ -103,7 +103,7 @@ function writefixed(buf, pos, v::T, end break end - #=@inbounds=# mula, mulb, mulc = POW10_SPLIT_2[p + 1] + mula, mulb, mulc = POW10_SPLIT_2[p + 1] digits = mulshiftmod1e9(m2 << 8, mula, mulb, mulc, j + 8) if i < blocks - 1 pos = append_nine_digits(digits, buf, pos) @@ -118,11 +118,11 @@ function writefixed(buf, pos, v::T, k += 1 end if lastDigit != 5 - roundUp = lastDigit > 5 + roundUp = lastDigit > 5 ? 1 : 0 else requiredTwos = -e2 - precision - 1 trailingZeros = requiredTwos <= 0 || (requiredTwos < 60 && pow2(m2, requiredTwos)) - roundUp = trailingZeros ? 2 : 1 + roundUp = trailingZeros ? 2 : 1 # 2 means round only if odd end if maximum > 0 pos = append_c_digits(maximum, digits, buf, pos) @@ -137,13 +137,13 @@ function writefixed(buf, pos, v::T, while true roundPos -= 1 if roundPos == (startpos - 1) || (buf[roundPos] == UInt8('-')) || (plus && buf[roundPos] == UInt8('+')) || (space && buf[roundPos] == UInt8(' ')) + buf[pos] = UInt8('0') buf[roundPos + 1] = UInt8('1') if dotPos > 1 buf[dotPos] = UInt8('0') buf[dotPos + 1] = decchar hasfractional = true end - buf[pos] = UInt8('0') pos += 1 break end diff --git a/test/ryu.jl b/test/ryu.jl index 0b10bd7e49ba5..4acd2fd08df50 100644 --- a/test/ryu.jl +++ b/test/ryu.jl @@ -558,6 +558,11 @@ end # Float16 @test Ryu.writefixed(1.25e+5, 1, false, false, false, UInt8('.'), true) == "125000" @test Ryu.writefixed(1.25e+5, 2, false, false, false, UInt8('.'), true) == "125000" end + + @test Ryu.writefixed(100.0-eps(100.0), 0, false, false, true, UInt8('.'), false) == "100." + @test Ryu.writefixed(-100.0+eps(-100.0), 0, false, false, true, UInt8('.'), false) == "-100." + @test Ryu.writefixed(100.0-eps(100.0), 1, false, false, true, UInt8('.'), false) == "100.0" + @test Ryu.writefixed(-100.0+eps(-100.0), 1, false, false, true, UInt8('.'), false) == "-100.0" end # fixed @testset "Ryu.writeexp" begin From de20256209ec9531bac8d45735aa1720beafc888 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Tue, 12 Sep 2023 23:19:26 +0100 Subject: [PATCH 125/413] shorten stale_age for cachefile lock (#51175) (cherry picked from commit 4af6be80f238fce9cd124925d488a4c7171cf74a) --- base/loading.jl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/base/loading.jl b/base/loading.jl index 90f549b7a5cb9..dd7038845f4f8 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -2968,11 +2968,13 @@ global parse_pidfile_hook compilecache_pidfile_path(pkg::PkgId) = compilecache_path(pkg, UInt64(0); project="") * ".pidfile" # Allows processes to wait if another process is precompiling a given source already. -# The lock file is deleted and precompilation will proceed after `stale_age` seconds if +# The lock file mtime will be updated when held every `stale_age/2` seconds. +# After `stale_age` seconds beyond the mtime of the lock file, the lock file is deleted and +# precompilation will proceed if # - the locking process no longer exists # - the lock is held by another host, since processes cannot be checked remotely # or after `stale_age * 25` seconds if the process does still exist. -function maybe_cachefile_lock(f, pkg::PkgId, srcpath::String; stale_age=300) +function maybe_cachefile_lock(f, pkg::PkgId, srcpath::String; stale_age=10) if @isdefined(mkpidlock_hook) && @isdefined(trymkpidlock_hook) && @isdefined(parse_pidfile_hook) pidfile = compilecache_pidfile_path(pkg) cachefile = invokelatest(trymkpidlock_hook, f, pidfile; stale_age) From 503a44f77cb28818fe0828049872c4116a735da4 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 13 Sep 2023 17:36:52 -0400 Subject: [PATCH 126/413] fix method definition error for bad vararg (#51300) We had the ordering of tests incorrect, so Vararg was not correctly checked for validity during method definition. Fixes #51228 (cherry picked from commit 34e603503853ec16f6d2f8877c212d9029bb8f06) --- src/method.c | 19 ++++++++++--------- test/syntax.jl | 4 ++++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/method.c b/src/method.c index 06a05361a927d..e96d1008e3056 100644 --- a/src/method.c +++ b/src/method.c @@ -1039,9 +1039,16 @@ JL_DLLEXPORT jl_method_t* jl_method_def(jl_svec_t *argdata, for (i = 0; i < na; i++) { jl_value_t *elt = jl_svecref(atypes, i); - int isvalid = jl_is_type(elt) || jl_is_typevar(elt) || jl_is_vararg(elt); - if (elt == jl_bottom_type || (jl_is_vararg(elt) && jl_unwrap_vararg(elt) == jl_bottom_type)) - isvalid = 0; + if (jl_is_vararg(elt)) { + if (i < na-1) + jl_exceptionf(jl_argumenterror_type, + "Vararg on non-final argument in method definition for %s at %s:%d", + jl_symbol_name(name), + jl_symbol_name(file), + line); + elt = jl_unwrap_vararg(elt); + } + int isvalid = (jl_is_type(elt) || jl_is_typevar(elt) || jl_is_vararg(elt)) && elt != jl_bottom_type; if (!isvalid) { jl_sym_t *argname = (jl_sym_t*)jl_array_ptr_ref(f->slotnames, i); if (argname == jl_unused_sym) @@ -1059,12 +1066,6 @@ JL_DLLEXPORT jl_method_t* jl_method_def(jl_svec_t *argdata, jl_symbol_name(file), line); } - if (jl_is_vararg(elt) && i < na-1) - jl_exceptionf(jl_argumenterror_type, - "Vararg on non-final argument in method definition for %s at %s:%d", - jl_symbol_name(name), - jl_symbol_name(file), - line); } for (i = jl_svec_len(tvars); i > 0; i--) { jl_value_t *tv = jl_svecref(tvars, i - 1); diff --git a/test/syntax.jl b/test/syntax.jl index 4d1b167693adb..36f0f50c376c4 100644 --- a/test/syntax.jl +++ b/test/syntax.jl @@ -501,6 +501,10 @@ let m_error, error_out, filename = Base.source_path() m_error = try @eval foo(types::NTuple{N}, values::Vararg{Any,N}, c) where {N} = nothing; catch e; e; end error_out = sprint(showerror, m_error) @test startswith(error_out, "ArgumentError: Vararg on non-final argument") + + m_error = try @eval method_c6(a::Vararg{:A}) = 1; catch e; e; end + error_out = sprint(showerror, m_error) + @test startswith(error_out, "ArgumentError: invalid type for argument a in method definition for method_c6 at $filename:") end # issue #7272 From ea93115ebc6257a4d11aedc6a341c5df67c2badd Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 14 Sep 2023 10:35:50 -0400 Subject: [PATCH 127/413] fix force-throw ctrl-C on Windows (#51307) This was getting current-task on the wrong thread, which resulted in the value being NULL and crashing. Fixes #50325 (cherry picked from commit 5090bc05f01728ffaa7ab028611eb9df3159fbef) --- src/signals-win.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/signals-win.c b/src/signals-win.c index 5dd6b34558ca6..7cd3b02462851 100644 --- a/src/signals-win.c +++ b/src/signals-win.c @@ -124,10 +124,8 @@ void restore_signals(void) SetConsoleCtrlHandler(NULL, 0); } -void jl_throw_in_ctx(jl_value_t *excpt, PCONTEXT ctxThread) +void jl_throw_in_ctx(jl_task_t *ct, jl_value_t *excpt, PCONTEXT ctxThread) { - jl_task_t *ct = jl_current_task; - jl_ptls_t ptls = ct->ptls; #if defined(_CPU_X86_64_) DWORD64 Rsp = (ctxThread->Rsp & (DWORD64)-16) - 8; #elif defined(_CPU_X86_) @@ -135,8 +133,9 @@ void jl_throw_in_ctx(jl_value_t *excpt, PCONTEXT ctxThread) #else #error WIN16 not supported :P #endif - if (!jl_get_safe_restore()) { + if (ct && !jl_get_safe_restore()) { assert(excpt != NULL); + jl_ptls_t ptls = ct->ptls; ptls->bt_size = 0; if (excpt != jl_stackovf_exception) { ptls->bt_size = rec_backtrace_ctx(ptls->bt_data, JL_MAX_BT_SIZE, ctxThread, @@ -193,7 +192,8 @@ static void jl_try_deliver_sigint(void) jl_safe_printf("error: GetThreadContext failed\n"); return; } - jl_throw_in_ctx(jl_interrupt_exception, &ctxThread); + jl_task_t *ct = jl_atomic_load_relaxed(&ptls2->current_task); + jl_throw_in_ctx(ct, jl_interrupt_exception, &ctxThread); ctxThread.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER; if (!SetThreadContext(hMainThread, &ctxThread)) { jl_safe_printf("error: SetThreadContext failed\n"); @@ -237,14 +237,14 @@ LONG WINAPI jl_exception_handler(struct _EXCEPTION_POINTERS *ExceptionInfo) case EXCEPTION_INT_DIVIDE_BY_ZERO: if (ct->eh != NULL) { fpreset(); - jl_throw_in_ctx(jl_diverror_exception, ExceptionInfo->ContextRecord); + jl_throw_in_ctx(ct, jl_diverror_exception, ExceptionInfo->ContextRecord); return EXCEPTION_CONTINUE_EXECUTION; } break; case EXCEPTION_STACK_OVERFLOW: if (ct->eh != NULL) { ptls->needs_resetstkoflw = 1; - jl_throw_in_ctx(jl_stackovf_exception, ExceptionInfo->ContextRecord); + jl_throw_in_ctx(ct, jl_stackovf_exception, ExceptionInfo->ContextRecord); return EXCEPTION_CONTINUE_EXECUTION; } break; @@ -259,17 +259,17 @@ LONG WINAPI jl_exception_handler(struct _EXCEPTION_POINTERS *ExceptionInfo) } else if (jl_safepoint_consume_sigint()) { jl_clear_force_sigint(); - jl_throw_in_ctx(jl_interrupt_exception, ExceptionInfo->ContextRecord); + jl_throw_in_ctx(ct, jl_interrupt_exception, ExceptionInfo->ContextRecord); } return EXCEPTION_CONTINUE_EXECUTION; } if (jl_get_safe_restore()) { - jl_throw_in_ctx(NULL, ExceptionInfo->ContextRecord); + jl_throw_in_ctx(NULL, NULL, ExceptionInfo->ContextRecord); return EXCEPTION_CONTINUE_EXECUTION; } if (ct->eh != NULL) { if (ExceptionInfo->ExceptionRecord->ExceptionInformation[0] == 1) { // writing to read-only memory (e.g. mmap) - jl_throw_in_ctx(jl_readonlymemory_exception, ExceptionInfo->ContextRecord); + jl_throw_in_ctx(ct, jl_readonlymemory_exception, ExceptionInfo->ContextRecord); return EXCEPTION_CONTINUE_EXECUTION; } } From 0eff9d86fdc159412250bd31188093311796c5f1 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 14 Sep 2023 10:36:19 -0400 Subject: [PATCH 128/413] jltypes: ensure revising structs is safe (#51303) (cherry picked from commit 11427597eb8e51afe4d31681c8ffde443ff44e10) --- src/jltypes.c | 6 ++++++ test/core.jl | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/jltypes.c b/src/jltypes.c index 8da119248203a..a39bc935fb181 100644 --- a/src/jltypes.c +++ b/src/jltypes.c @@ -2491,6 +2491,8 @@ void jl_reinstantiate_inner_types(jl_datatype_t *t) // can throw! for (j = 0; j < jl_array_len(partial); j++) { jl_datatype_t *ndt = (jl_datatype_t*)jl_array_ptr_ref(partial, j); + if (ndt == NULL) + continue; assert(jl_unwrap_unionall(ndt->name->wrapper) == (jl_value_t*)t); for (i = 0; i < n; i++) env[i].val = jl_svecref(ndt->parameters, i); @@ -2502,6 +2504,8 @@ void jl_reinstantiate_inner_types(jl_datatype_t *t) // can throw! if (t->types != jl_emptysvec) { for (j = 0; j < jl_array_len(partial); j++) { jl_datatype_t *ndt = (jl_datatype_t*)jl_array_ptr_ref(partial, j); + if (ndt == NULL) + continue; for (i = 0; i < n; i++) env[i].val = jl_svecref(ndt->parameters, i); assert(ndt->types == NULL); @@ -2510,7 +2514,9 @@ void jl_reinstantiate_inner_types(jl_datatype_t *t) // can throw! if (ndt->isconcretetype) { // cacheable jl_compute_field_offsets(ndt); } + jl_array_ptr_set(partial, j, NULL); } + t->name->partial = NULL; } else { assert(jl_field_names(t) == jl_emptysvec); diff --git a/test/core.jl b/test/core.jl index 087234abe1a94..0e58b7e157fde 100644 --- a/test/core.jl +++ b/test/core.jl @@ -7544,6 +7544,19 @@ end struct T36104 # check that redefining it works, issue #21816 v::Vector{T36104} end +struct S36104{K,V} + v::S36104{K,V} + S36104{K,V}() where {K,V} = new() + S36104{K,V}(x::S36104) where {K,V} = new(x) +end +@test !isdefined(Base.unwrap_unionall(Base.ImmutableDict).name, :partial) +@test !isdefined(S36104.body.body.name, :partial) +@test hasfield(typeof(S36104.body.body.name), :partial) +struct S36104{K,V} # check that redefining it works + v::S36104{K,V} + S36104{K,V}() where {K,V} = new() + S36104{K,V}(x::S36104) where {K,V} = new(x) +end # with a gensymmed unionall struct Symmetric{T,S<:AbstractMatrix{<:T}} <: AbstractMatrix{T} data::S From 763ec695a746102c8ebc6c0575af02aa1db3e43f Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Thu, 31 Aug 2023 14:57:50 -0400 Subject: [PATCH 129/413] inference: type bound error due to free typevar in sparam env (#51013) Fix #50709 This issue *appears* fixed on master due to #50432, which simply removed the error. This fixes the underlying cause, which is that we sometimes return typevars in the environment from intersection that have free vars in their bounds. I think it's reasonable to just widen these aggressively, since we usually cannot do much with these kinds of unknown static parameters anyway. (cherry picked from commit a3e23161b60e51d7aaa1183559dc70b9c28426e6) --- base/compiler/abstractinterpretation.jl | 6 ++++++ test/compiler/inference.jl | 3 +++ 2 files changed, 9 insertions(+) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 48b6a234d13ba..973c7dc6f879b 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -2182,6 +2182,12 @@ function sp_type_rewrap(@nospecialize(T), linfo::MethodInstance, isreturn::Bool) T = UnionAll(v, T) end end + if has_free_typevars(T) + fv = ccall(:jl_find_free_typevars, Vector{Any}, (Any,), T) + for v in fv + T = UnionAll(v, T) + end + end else T = rewrap_unionall(T, spsig) end diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index 1799dd94de74f..8b980f1fdb17c 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -5086,6 +5086,9 @@ let x = Issue50544((1, Issue50544((2.0, 'x')))) @test only(Base.return_types(h_issue50544, (typeof(x),))) == Type{Issue50544{Tuple{Int,Float64}}} end +# issue #50709 +@test Base.code_typed_by_type(Tuple{Type{Vector{S}} where {T, S<:AbstractVector{T}}, UndefInitializer, Int})[1][2] == Vector{<:AbstractVector{T}} where T + # override const-prop' return type with the concrete-eval result # if concrete-eval returns non-inlineable constant Base.@assume_effects :foldable function continue_const_prop(i, j) From 76277febc5c232525b1afe2ba1fceaf3a8809dfc Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 14 Sep 2023 10:36:30 -0400 Subject: [PATCH 130/413] reduce test time for rounding and floatfuncs (#51305) These test were taking on the order of 5 minutes and 10-100s of GB, but they really did not need to. (cherry picked from commit bab20f492a61d49e7a2af9289c156e75ebcecf5e) --- test/floatfuncs.jl | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/test/floatfuncs.jl b/test/floatfuncs.jl index 321f1881371a3..a0d6e8743514b 100644 --- a/test/floatfuncs.jl +++ b/test/floatfuncs.jl @@ -139,9 +139,10 @@ end end @testset "literal pow matches runtime pow matches optimized pow" begin - two = 2 - @test 1.0000000105367122^2 == 1.0000000105367122^two - @test 1.0041504f0^2 == 1.0041504f0^two + let two = 2 + @test 1.0000000105367122^2 == 1.0000000105367122^two + @test 1.0041504f0^2 == 1.0041504f0^two + end function g2(start, two, N) x = start @@ -192,11 +193,13 @@ end finv(x) = f(x, -1) f2(x) = f(x, 2) f3(x) = f(x, 3) - x = 1.0000000105367122 - @test x^2 == f(x, 2) == f2(x) == x*x == Float64(big(x)*big(x)) - @test x^3 == f(x, 3) == f3(x) == x*x*x == Float64(big(x)*big(x)*big(x)) - x = 1.000000007393669 - @test x^-1 == f(x, -1) == finv(x) == 1/x == inv(x) == Float64(1/big(x)) == Float64(inv(big(x))) + let x = 1.0000000105367122 + @test x^2 == f(x, 2) == f2(x) == x*x == Float64(big(x)*big(x)) + @test x^3 == f(x, 3) == f3(x) == x*x*x == Float64(big(x)*big(x)*big(x)) + end + let x = 1.000000007393669 + @test x^-1 == f(x, -1) == finv(x) == 1/x == inv(x) == Float64(1/big(x)) == Float64(inv(big(x))) + end end @testset "curried approximation" begin From eea947798da08ca8911938e0947fa37a5577f872 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Wed, 13 Sep 2023 22:20:46 +0200 Subject: [PATCH 131/413] use LibGit2_jll for LibGit2 library (#51294) Fixes https://github.com/JuliaLang/julia/issues/51293 (cherry picked from commit 377f9dfb2dd8be2f2c3d80db7a397150dde53311) --- pkgimage.mk | 8 ++--- stdlib/LibGit2/Project.toml | 1 + stdlib/LibGit2/src/LibGit2.jl | 10 +++--- stdlib/LibGit2/src/blame.jl | 6 ++-- stdlib/LibGit2/src/blob.jl | 8 ++--- stdlib/LibGit2/src/callbacks.jl | 16 +++++----- stdlib/LibGit2/src/commit.jl | 10 +++--- stdlib/LibGit2/src/config.jl | 38 +++++++++++----------- stdlib/LibGit2/src/diff.jl | 18 +++++------ stdlib/LibGit2/src/error.jl | 3 +- stdlib/LibGit2/src/index.jl | 24 +++++++------- stdlib/LibGit2/src/merge.jl | 14 ++++---- stdlib/LibGit2/src/oid.jl | 20 ++++++------ stdlib/LibGit2/src/rebase.jl | 16 +++++----- stdlib/LibGit2/src/reference.jl | 46 +++++++++++++------------- stdlib/LibGit2/src/remote.jl | 34 ++++++++++---------- stdlib/LibGit2/src/repository.jl | 48 ++++++++++++++-------------- stdlib/LibGit2/src/signature.jl | 6 ++-- stdlib/LibGit2/src/status.jl | 8 ++--- stdlib/LibGit2/src/tag.jl | 10 +++--- stdlib/LibGit2/src/tree.jl | 20 ++++++------ stdlib/LibGit2/src/types.jl | 12 +++---- stdlib/LibGit2/src/utils.jl | 4 +-- stdlib/LibGit2/src/walker.jl | 12 +++---- stdlib/LibGit2/test/libgit2-tests.jl | 7 ++-- test/precompile.jl | 18 ++++------- 26 files changed, 209 insertions(+), 208 deletions(-) diff --git a/pkgimage.mk b/pkgimage.mk index 8b127173b4e05..f6afc0a9ab6cc 100644 --- a/pkgimage.mk +++ b/pkgimage.mk @@ -83,7 +83,7 @@ $(eval $(call pkgimg_builder,GMP_jll,Artifacts Libdl)) $(eval $(call pkgimg_builder,LLVMLibUnwind_jll,Artifacts Libdl)) $(eval $(call pkgimg_builder,LibUV_jll,Artifacts Libdl)) $(eval $(call pkgimg_builder,LibUnwind_jll,Artifacts Libdl)) -$(eval $(call pkgimg_builder,MbedTLS_jll,Artifacts Libdl)) +$(eval $(call sysimg_builder,MbedTLS_jll,Artifacts Libdl)) $(eval $(call pkgimg_builder,nghttp2_jll,Artifacts Libdl)) $(eval $(call pkgimg_builder,OpenLibm_jll,Artifacts Libdl)) $(eval $(call pkgimg_builder,PCRE2_jll,Artifacts Libdl)) @@ -100,18 +100,17 @@ $(eval $(call pkgimg_builder,DelimitedFiles,Mmap)) # 2-depth packages $(eval $(call pkgimg_builder,LLD_jll,Zlib_jll libLLVM_jll Artifacts Libdl)) -$(eval $(call pkgimg_builder,LibSSH2_jll,Artifacts Libdl MbedTLS_jll)) +$(eval $(call sysimg_builder,LibSSH2_jll,Artifacts Libdl MbedTLS_jll)) $(eval $(call pkgimg_builder,MPFR_jll,Artifacts Libdl GMP_jll)) $(eval $(call sysimg_builder,LinearAlgebra,Libdl libblastrampoline_jll OpenBLAS_jll)) $(eval $(call sysimg_builder,Dates,Printf)) $(eval $(call pkgimg_builder,Distributed,Random Serialization Sockets)) $(eval $(call sysimg_builder,Future,Random)) $(eval $(call sysimg_builder,InteractiveUtils,Markdown)) -$(eval $(call sysimg_builder,LibGit2,NetworkOptions Printf SHA Base64)) $(eval $(call sysimg_builder,UUIDs,Random SHA)) # 3-depth packages - # LibGit2_jll +$(eval $(call sysimg_builder,LibGit2_jll,MbedTLS_jll LibSSH2_jll Artifacts Libdl)) $(eval $(call pkgimg_builder,LibCURL_jll,LibSSH2_jll nghttp2_jll MbedTLS_jll Zlib_jll Artifacts Libdl)) $(eval $(call sysimg_builder,REPL,InteractiveUtils Markdown Sockets Unicode)) $(eval $(call pkgimg_builder,SharedArrays,Distributed Mmap Random Serialization)) @@ -119,6 +118,7 @@ $(eval $(call sysimg_builder,TOML,Dates)) $(eval $(call pkgimg_builder,Test,Logging Random Serialization InteractiveUtils)) # 4-depth packages +$(eval $(call sysimg_builder,LibGit2,LibGit2_jll NetworkOptions Printf SHA Base64)) $(eval $(call sysimg_builder,LibCURL,LibCURL_jll MozillaCACerts_jll)) # 5-depth packages diff --git a/stdlib/LibGit2/Project.toml b/stdlib/LibGit2/Project.toml index da78f70fa1005..1205716369e09 100644 --- a/stdlib/LibGit2/Project.toml +++ b/stdlib/LibGit2/Project.toml @@ -3,6 +3,7 @@ uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" [deps] Base64 = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +LibGit2_jll = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" NetworkOptions = "ca575930-c2e3-43a9-ace4-1e988b2c1908" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" SHA = "ea8e919c-243c-51af-8825-aaa63cd721ce" diff --git a/stdlib/LibGit2/src/LibGit2.jl b/stdlib/LibGit2/src/LibGit2.jl index 6a797937ccf0b..13b78c1046490 100644 --- a/stdlib/LibGit2/src/LibGit2.jl +++ b/stdlib/LibGit2/src/LibGit2.jl @@ -14,6 +14,8 @@ using SHA: sha1, sha256 export with, GitRepo, GitConfig +using LibGit2_jll + const GITHUB_REGEX = r"^(?:(?:ssh://)?git@|git://|https://(?:[\w\.\+\-]+@)?)github.com[:/](([^/].+)/(.+?))(?:\.git)?$"i @@ -983,7 +985,7 @@ function ensure_initialized() end @noinline function initialize() - @check ccall((:git_libgit2_init, :libgit2), Cint, ()) + @check ccall((:git_libgit2_init, libgit2), Cint, ()) cert_loc = NetworkOptions.ca_roots() cert_loc !== nothing && set_ssl_cert_locations(cert_loc) @@ -991,7 +993,7 @@ end atexit() do # refcount zero, no objects to be finalized if Threads.atomic_sub!(REFCOUNT, 1) == 1 - ccall((:git_libgit2_shutdown, :libgit2), Cint, ()) + ccall((:git_libgit2_shutdown, libgit2), Cint, ()) end end end @@ -1003,7 +1005,7 @@ function set_ssl_cert_locations(cert_loc) else # files, /dev/null, non-existent paths, etc. cert_file = cert_loc end - ret = @ccall "libgit2".git_libgit2_opts( + ret = @ccall libgit2.git_libgit2_opts( Consts.SET_SSL_CERT_LOCATIONS::Cint; cert_file::Cstring, cert_dir::Cstring)::Cint @@ -1029,7 +1031,7 @@ end Sets the system tracing configuration to the specified level. """ function trace_set(level::Union{Integer,Consts.GIT_TRACE_LEVEL}, cb=trace_cb()) - @check @ccall "libgit2".git_trace_set(level::Cint, cb::Ptr{Cvoid})::Cint + @check @ccall libgit2.git_trace_set(level::Cint, cb::Ptr{Cvoid})::Cint end end # module diff --git a/stdlib/LibGit2/src/blame.jl b/stdlib/LibGit2/src/blame.jl index 3aa94e30200b4..89071ea9c6f79 100644 --- a/stdlib/LibGit2/src/blame.jl +++ b/stdlib/LibGit2/src/blame.jl @@ -11,7 +11,7 @@ which commits to probe - see [`BlameOptions`](@ref) for more information. function GitBlame(repo::GitRepo, path::AbstractString; options::BlameOptions=BlameOptions()) ensure_initialized() blame_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_blame_file, :libgit2), Cint, + @check ccall((:git_blame_file, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring, Ptr{BlameOptions}), blame_ptr_ptr, repo.ptr, path, Ref(options)) return GitBlame(repo, blame_ptr_ptr[]) @@ -27,7 +27,7 @@ that function later. """ function counthunks(blame::GitBlame) ensure_initialized() - return ccall((:git_blame_get_hunk_count, :libgit2), Int32, (Ptr{Cvoid},), blame.ptr) + return ccall((:git_blame_get_hunk_count, libgit2), Int32, (Ptr{Cvoid},), blame.ptr) end function Base.getindex(blame::GitBlame, i::Integer) @@ -36,7 +36,7 @@ function Base.getindex(blame::GitBlame, i::Integer) end ensure_initialized() GC.@preserve blame begin - hunk_ptr = ccall((:git_blame_get_hunk_byindex, :libgit2), + hunk_ptr = ccall((:git_blame_get_hunk_byindex, libgit2), Ptr{BlameHunk}, (Ptr{Cvoid}, Csize_t), blame.ptr, i-1) elem = unsafe_load(hunk_ptr) diff --git a/stdlib/LibGit2/src/blob.jl b/stdlib/LibGit2/src/blob.jl index efd7a14c9c6f7..1941989b5f529 100644 --- a/stdlib/LibGit2/src/blob.jl +++ b/stdlib/LibGit2/src/blob.jl @@ -2,7 +2,7 @@ function Base.length(blob::GitBlob) ensure_initialized() - return ccall((:git_blob_rawsize, :libgit2), Int64, (Ptr{Cvoid},), blob.ptr) + return ccall((:git_blob_rawsize, libgit2), Int64, (Ptr{Cvoid},), blob.ptr) end """ @@ -20,7 +20,7 @@ is binary and not valid Unicode. """ function rawcontent(blob::GitBlob) ensure_initialized() - ptr = ccall((:git_blob_rawcontent, :libgit2), Ptr{UInt8}, (Ptr{Cvoid},), blob.ptr) + ptr = ccall((:git_blob_rawcontent, libgit2), Ptr{UInt8}, (Ptr{Cvoid},), blob.ptr) copy(unsafe_wrap(Array, ptr, (length(blob),), own = false)) end @@ -47,7 +47,7 @@ the first 8000 bytes. """ function isbinary(blob::GitBlob) ensure_initialized() - bin_flag = ccall((:git_blob_is_binary, :libgit2), Cint, (Ptr{Cvoid},), blob.ptr) + bin_flag = ccall((:git_blob_is_binary, libgit2), Cint, (Ptr{Cvoid},), blob.ptr) return bin_flag == 1 end @@ -67,7 +67,7 @@ id = LibGit2.addblob!(repo, blob_file) function addblob!(repo::GitRepo, path::AbstractString) ensure_initialized() id_ref = Ref{GitHash}() - @check ccall((:git_blob_create_from_disk, :libgit2), Cint, + @check ccall((:git_blob_create_from_disk, libgit2), Cint, (Ptr{GitHash}, Ptr{Cvoid}, Cstring), id_ref, repo.ptr, path) return id_ref[] diff --git a/stdlib/LibGit2/src/callbacks.jl b/stdlib/LibGit2/src/callbacks.jl index 3bc6463140d5f..f4df26cdc30d8 100644 --- a/stdlib/LibGit2/src/callbacks.jl +++ b/stdlib/LibGit2/src/callbacks.jl @@ -9,7 +9,7 @@ function mirror_callback(remote::Ptr{Ptr{Cvoid}}, repo_ptr::Ptr{Cvoid}, ensure_initialized() # Create the remote with a mirroring url fetch_spec = "+refs/*:refs/*" - err = ccall((:git_remote_create_with_fetchspec, :libgit2), Cint, + err = ccall((:git_remote_create_with_fetchspec, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring, Cstring, Cstring), remote, repo_ptr, name, url, fetch_spec) err != 0 && return Cint(err) @@ -43,7 +43,7 @@ end function user_abort() ensure_initialized() # Note: Potentially it could be better to just throw a Julia error. - ccall((:giterr_set_str, :libgit2), Cvoid, + ccall((:giterr_set_str, libgit2), Cvoid, (Cint, Cstring), Cint(Error.Callback), "Aborting, user cancelled credential request.") return Cint(Error.EUSER) @@ -51,7 +51,7 @@ end function prompt_limit() ensure_initialized() - ccall((:giterr_set_str, :libgit2), Cvoid, + ccall((:giterr_set_str, libgit2), Cvoid, (Cint, Cstring), Cint(Error.Callback), "Aborting, maximum number of prompts reached.") return Cint(Error.EAUTH) @@ -59,7 +59,7 @@ end function exhausted_abort() ensure_initialized() - ccall((:giterr_set_str, :libgit2), Cvoid, + ccall((:giterr_set_str, libgit2), Cvoid, (Cint, Cstring), Cint(Error.Callback), "All authentication methods have failed.") return Cint(Error.EAUTH) @@ -79,7 +79,7 @@ function authenticate_ssh(libgit2credptr::Ptr{Ptr{Cvoid}}, p::CredentialPayload, # first try ssh-agent if credentials support its usage if p.use_ssh_agent && username_ptr != Cstring(C_NULL) && (!revised || !isfilled(cred)) - err = ccall((:git_cred_ssh_key_from_agent, :libgit2), Cint, + err = ccall((:git_cred_ssh_key_from_agent, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Cstring), libgit2credptr, username_ptr) p.use_ssh_agent = false # use ssh-agent only one time @@ -175,7 +175,7 @@ function authenticate_ssh(libgit2credptr::Ptr{Ptr{Cvoid}}, p::CredentialPayload, if !revised return exhausted_abort() end - return ccall((:git_cred_ssh_key_new, :libgit2), Cint, + return ccall((:git_cred_ssh_key_new, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Cstring, Cstring, Cstring, Cstring), libgit2credptr, cred.user, cred.pubkey, cred.prvkey, cred.pass) end @@ -235,7 +235,7 @@ function authenticate_userpass(libgit2credptr::Ptr{Ptr{Cvoid}}, p::CredentialPay return exhausted_abort() end - return ccall((:git_cred_userpass_plaintext_new, :libgit2), Cint, + return ccall((:git_cred_userpass_plaintext_new, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Cstring, Cstring), libgit2credptr, cred.user, cred.pass) end @@ -339,7 +339,7 @@ function credentials_callback(libgit2credptr::Ptr{Ptr{Cvoid}}, url_ptr::Cstring, if err == 0 if p.explicit !== nothing ensure_initialized() - ccall((:giterr_set_str, :libgit2), Cvoid, (Cint, Cstring), Cint(Error.Callback), + ccall((:giterr_set_str, libgit2), Cvoid, (Cint, Cstring), Cint(Error.Callback), "The explicitly provided credential is incompatible with the requested " * "authentication methods.") end diff --git a/stdlib/LibGit2/src/commit.jl b/stdlib/LibGit2/src/commit.jl index 5d3c666af4bbb..0ec670e16376b 100644 --- a/stdlib/LibGit2/src/commit.jl +++ b/stdlib/LibGit2/src/commit.jl @@ -14,8 +14,8 @@ function message(c::GitCommit, raw::Bool=false) ensure_initialized() GC.@preserve c begin local msg_ptr::Cstring - msg_ptr = raw ? ccall((:git_commit_message_raw, :libgit2), Cstring, (Ptr{Cvoid},), c.ptr) : - ccall((:git_commit_message, :libgit2), Cstring, (Ptr{Cvoid},), c.ptr) + msg_ptr = raw ? ccall((:git_commit_message_raw, libgit2), Cstring, (Ptr{Cvoid},), c.ptr) : + ccall((:git_commit_message, libgit2), Cstring, (Ptr{Cvoid},), c.ptr) if msg_ptr == C_NULL return nothing end @@ -33,7 +33,7 @@ the person who made changes to the relevant file(s). See also [`committer`](@ref function author(c::GitCommit) ensure_initialized() GC.@preserve c begin - ptr = ccall((:git_commit_author, :libgit2), Ptr{SignatureStruct}, (Ptr{Cvoid},), c.ptr) + ptr = ccall((:git_commit_author, libgit2), Ptr{SignatureStruct}, (Ptr{Cvoid},), c.ptr) @assert ptr != C_NULL sig = Signature(ptr) end @@ -51,7 +51,7 @@ a `committer` who committed it. function committer(c::GitCommit) ensure_initialized() GC.@preserve c begin - ptr = ccall((:git_commit_committer, :libgit2), Ptr{SignatureStruct}, (Ptr{Cvoid},), c.ptr) + ptr = ccall((:git_commit_committer, libgit2), Ptr{SignatureStruct}, (Ptr{Cvoid},), c.ptr) sig = Signature(ptr) end return sig @@ -74,7 +74,7 @@ function commit(repo::GitRepo, commit_id_ptr = Ref(GitHash()) nparents = length(parents) parentptrs = Ptr{Cvoid}[c.ptr for c in parents] - @check ccall((:git_commit_create, :libgit2), Cint, + @check ccall((:git_commit_create, libgit2), Cint, (Ptr{GitHash}, Ptr{Cvoid}, Ptr{UInt8}, Ptr{SignatureStruct}, Ptr{SignatureStruct}, Ptr{UInt8}, Ptr{UInt8}, Ptr{Cvoid}, diff --git a/stdlib/LibGit2/src/config.jl b/stdlib/LibGit2/src/config.jl index a54cd352aa063..affe881abde08 100644 --- a/stdlib/LibGit2/src/config.jl +++ b/stdlib/LibGit2/src/config.jl @@ -13,7 +13,7 @@ function GitConfig(path::AbstractString, ensure_initialized() # create new config object cfg_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_config_new, :libgit2), Cint, (Ptr{Ptr{Cvoid}},), cfg_ptr_ptr) + @check ccall((:git_config_new, libgit2), Cint, (Ptr{Ptr{Cvoid}},), cfg_ptr_ptr) cfg = GitConfig(cfg_ptr_ptr[]) try addfile(cfg, path, level, repo, force) @@ -34,7 +34,7 @@ used. function GitConfig(repo::GitRepo) ensure_initialized() cfg_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_repository_config, :libgit2), Cint, + @check ccall((:git_repository_config, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}), cfg_ptr_ptr, repo.ptr) return GitConfig(repo, cfg_ptr_ptr[]) end @@ -49,14 +49,14 @@ options outside a specific git repository. function GitConfig(level::Consts.GIT_CONFIG = Consts.CONFIG_LEVEL_DEFAULT) ensure_initialized() cfg_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_config_open_default, :libgit2), Cint, + @check ccall((:git_config_open_default, libgit2), Cint, (Ptr{Ptr{Cvoid}},), cfg_ptr_ptr) cfg = GitConfig(cfg_ptr_ptr[]) if level != Consts.CONFIG_LEVEL_DEFAULT glb_cfg_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) tmpcfg = cfg try - @check ccall((:git_config_open_level, :libgit2), Cint, + @check ccall((:git_config_open_level, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cint), glb_cfg_ptr_ptr, cfg.ptr, Cint(level)) cfg = GitConfig(glb_cfg_ptr_ptr[]) @@ -90,12 +90,12 @@ function addfile(cfg::GitConfig, path::AbstractString, force::Bool=false) ensure_initialized() @static if LibGit2.VERSION >= v"0.27.0" - @check ccall((:git_config_add_file_ondisk, :libgit2), Cint, + @check ccall((:git_config_add_file_ondisk, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Cstring, Cint, Ptr{Cvoid}, Cint), cfg.ptr, path, Cint(level), isa(repo, GitRepo) ? repo.ptr : C_NULL, Cint(force)) else repo === nothing || error("repo argument is not supported in this version of LibGit2") - @check ccall((:git_config_add_file_ondisk, :libgit2), Cint, + @check ccall((:git_config_add_file_ondisk, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Cstring, Cint, Cint), cfg.ptr, path, Cint(level), Cint(force)) end @@ -104,7 +104,7 @@ end function get(::Type{<:AbstractString}, c::GitConfig, name::AbstractString) ensure_initialized() buf_ref = Ref(Buffer()) - @check ccall((:git_config_get_string_buf, :libgit2), Cint, + @check ccall((:git_config_get_string_buf, libgit2), Cint, (Ptr{Buffer}, Ptr{Cvoid}, Cstring), buf_ref, c.ptr, name) buf = buf_ref[] str = unsafe_string(buf.ptr, buf.size) @@ -115,7 +115,7 @@ end function get(::Type{Bool}, c::GitConfig, name::AbstractString) ensure_initialized() val_ptr = Ref(Cint(0)) - @check ccall((:git_config_get_bool, :libgit2), Cint, + @check ccall((:git_config_get_bool, libgit2), Cint, (Ptr{Cint}, Ptr{Cvoid}, Cstring), val_ptr, c.ptr, name) return Bool(val_ptr[]) end @@ -123,7 +123,7 @@ end function get(::Type{Int32}, c::GitConfig, name::AbstractString) ensure_initialized() val_ptr = Ref(Cint(0)) - @check ccall((:git_config_get_int32, :libgit2), Cint, + @check ccall((:git_config_get_int32, libgit2), Cint, (Ptr{Cint}, Ptr{Cvoid}, Cstring), val_ptr, c.ptr, name) return val_ptr[] end @@ -131,7 +131,7 @@ end function get(::Type{Int64}, c::GitConfig, name::AbstractString) ensure_initialized() val_ptr = Ref(Cintmax_t(0)) - @check ccall((:git_config_get_int64, :libgit2), Cint, + @check ccall((:git_config_get_int64, libgit2), Cint, (Ptr{Cintmax_t}, Ptr{Cvoid}, Cstring), val_ptr, c.ptr, name) return val_ptr[] end @@ -164,33 +164,33 @@ end function set!(c::GitConfig, name::AbstractString, value::AbstractString) ensure_initialized() - @check ccall((:git_config_set_string, :libgit2), Cint, + @check ccall((:git_config_set_string, libgit2), Cint, (Ptr{Cvoid}, Cstring, Cstring), c.ptr, name, value) end function set!(c::GitConfig, name::AbstractString, value::Bool) ensure_initialized() bval = Int32(value) - @check ccall((:git_config_set_bool, :libgit2), Cint, + @check ccall((:git_config_set_bool, libgit2), Cint, (Ptr{Cvoid}, Cstring, Cint), c.ptr, name, bval) end function set!(c::GitConfig, name::AbstractString, value::Int32) ensure_initialized() - @check ccall((:git_config_set_int32, :libgit2), Cint, + @check ccall((:git_config_set_int32, libgit2), Cint, (Ptr{Cvoid}, Cstring, Cint), c.ptr, name, value) end function set!(c::GitConfig, name::AbstractString, value::Int64) ensure_initialized() - @check ccall((:git_config_set_int64, :libgit2), Cint, + @check ccall((:git_config_set_int64, libgit2), Cint, (Ptr{Cvoid}, Cstring, Cintmax_t), c.ptr, name, value) end function GitConfigIter(cfg::GitConfig) ensure_initialized() ci_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_config_iterator_new, :libgit2), Cint, + @check ccall((:git_config_iterator_new, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}), ci_ptr, cfg.ptr) return GitConfigIter(ci_ptr[]) end @@ -198,7 +198,7 @@ end function GitConfigIter(cfg::GitConfig, name::AbstractString) ensure_initialized() ci_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_config_multivar_iterator_new, :libgit2), Cint, + @check ccall((:git_config_multivar_iterator_new, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring, Cstring), ci_ptr, cfg.ptr, name, C_NULL) return GitConfigIter(ci_ptr[]) @@ -207,7 +207,7 @@ end function GitConfigIter(cfg::GitConfig, name::AbstractString, value::Regex) ensure_initialized() ci_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_config_multivar_iterator_new, :libgit2), Cint, + @check ccall((:git_config_multivar_iterator_new, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring, Cstring), ci_ptr, cfg.ptr, name, value.pattern) return GitConfigIter(ci_ptr[]) @@ -216,7 +216,7 @@ end function GitConfigIter(cfg::GitConfig, name::Regex) ensure_initialized() ci_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_config_iterator_glob_new, :libgit2), Cint, + @check ccall((:git_config_iterator_glob_new, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring), ci_ptr, cfg.ptr, name.pattern) return GitConfigIter(ci_ptr[]) @@ -225,7 +225,7 @@ end function Base.iterate(ci::GitConfigIter, state=nothing) ensure_initialized() entry_ptr_ptr = Ref{Ptr{ConfigEntry}}(C_NULL) - err = ccall((:git_config_next, :libgit2), Cint, + err = ccall((:git_config_next, libgit2), Cint, (Ptr{Ptr{ConfigEntry}}, Ptr{Cvoid}), entry_ptr_ptr, ci.ptr) if err == Cint(Error.GIT_OK) return (unsafe_load(entry_ptr_ptr[]), nothing) diff --git a/stdlib/LibGit2/src/diff.jl b/stdlib/LibGit2/src/diff.jl index f2aa2feb2c2e9..044c6331dc1f1 100644 --- a/stdlib/LibGit2/src/diff.jl +++ b/stdlib/LibGit2/src/diff.jl @@ -27,11 +27,11 @@ function diff_tree(repo::GitRepo, tree::GitTree, pathspecs::AbstractString=""; c ensure_initialized() diff_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) if cached - @check ccall((:git_diff_tree_to_index, :libgit2), Cint, + @check ccall((:git_diff_tree_to_index, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{DiffOptionsStruct}), diff_ptr_ptr, repo.ptr, tree.ptr, C_NULL, isempty(pathspecs) ? C_NULL : pathspecs) else - @check ccall((:git_diff_tree_to_workdir_with_index, :libgit2), Cint, + @check ccall((:git_diff_tree_to_workdir_with_index, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{DiffOptionsStruct}), diff_ptr_ptr, repo.ptr, tree.ptr, isempty(pathspecs) ? C_NULL : pathspecs) end @@ -51,7 +51,7 @@ to compare a commit on another branch with the current latest commit on `master` function diff_tree(repo::GitRepo, oldtree::GitTree, newtree::GitTree) ensure_initialized() diff_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_diff_tree_to_tree, :libgit2), Cint, + @check ccall((:git_diff_tree_to_tree, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{DiffOptionsStruct}), diff_ptr_ptr, repo.ptr, oldtree.ptr, newtree.ptr, C_NULL) return GitDiff(repo, diff_ptr_ptr[]) @@ -67,7 +67,7 @@ files were changed, how many insertions were made, and how many deletions were m function GitDiffStats(diff::GitDiff) ensure_initialized() diff_stat_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_diff_get_stats, :libgit2), Cint, + @check ccall((:git_diff_get_stats, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}), diff_stat_ptr_ptr, diff.ptr) return GitDiffStats(diff.owner, diff_stat_ptr_ptr[]) @@ -83,7 +83,7 @@ are to be included or not). """ function files_changed(diff_stat::GitDiffStats) ensure_initialized() - return ccall((:git_diff_stats_files_changed, :libgit2), Csize_t, (Ptr{Cvoid},), diff_stat.ptr) + return ccall((:git_diff_stats_files_changed, libgit2), Csize_t, (Ptr{Cvoid},), diff_stat.ptr) end """ @@ -96,7 +96,7 @@ are to be included or not). """ function insertions(diff_stat::GitDiffStats) ensure_initialized() - return ccall((:git_diff_stats_insertions, :libgit2), Csize_t, (Ptr{Cvoid},), diff_stat.ptr) + return ccall((:git_diff_stats_insertions, libgit2), Csize_t, (Ptr{Cvoid},), diff_stat.ptr) end """ @@ -109,12 +109,12 @@ are to be included or not). """ function deletions(diff_stat::GitDiffStats) ensure_initialized() - return ccall((:git_diff_stats_deletions, :libgit2), Csize_t, (Ptr{Cvoid},), diff_stat.ptr) + return ccall((:git_diff_stats_deletions, libgit2), Csize_t, (Ptr{Cvoid},), diff_stat.ptr) end function count(diff::GitDiff) ensure_initialized() - return ccall((:git_diff_num_deltas, :libgit2), Cint, (Ptr{Cvoid},), diff.ptr) + return ccall((:git_diff_num_deltas, libgit2), Cint, (Ptr{Cvoid},), diff.ptr) end function Base.getindex(diff::GitDiff, i::Integer) @@ -122,7 +122,7 @@ function Base.getindex(diff::GitDiff, i::Integer) throw(BoundsError(diff, (i,))) end ensure_initialized() - delta_ptr = ccall((:git_diff_get_delta, :libgit2), + delta_ptr = ccall((:git_diff_get_delta, libgit2), Ptr{DiffDelta}, (Ptr{Cvoid}, Csize_t), diff.ptr, i-1) return unsafe_load(delta_ptr) diff --git a/stdlib/LibGit2/src/error.jl b/stdlib/LibGit2/src/error.jl index 219b8cdf88e69..fd70ed8ce5706 100644 --- a/stdlib/LibGit2/src/error.jl +++ b/stdlib/LibGit2/src/error.jl @@ -3,6 +3,7 @@ module Error import ..LibGit2: ensure_initialized +using LibGit2_jll export GitError @@ -84,7 +85,7 @@ Base.show(io::IO, err::GitError) = print(io, "GitError(Code:$(err.code), Class:$ function last_error() ensure_initialized() - err = ccall((:giterr_last, :libgit2), Ptr{ErrorStruct}, ()) + err = ccall((:giterr_last, libgit2), Ptr{ErrorStruct}, ()) if err != C_NULL err_obj = unsafe_load(err) err_class = Class(err_obj.class) diff --git a/stdlib/LibGit2/src/index.jl b/stdlib/LibGit2/src/index.jl index b8baf624540b0..15e04d16b5756 100644 --- a/stdlib/LibGit2/src/index.jl +++ b/stdlib/LibGit2/src/index.jl @@ -8,7 +8,7 @@ Load the index file for the repository `repo`. function GitIndex(repo::GitRepo) ensure_initialized() idx_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_repository_index, :libgit2), Cint, + @check ccall((:git_repository_index, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}), idx_ptr_ptr, repo.ptr) return GitIndex(repo, idx_ptr_ptr[]) end @@ -25,7 +25,7 @@ has changed since the last time it was loaded into `idx`. """ function read!(idx::GitIndex, force::Bool = false) ensure_initialized() - @check ccall((:git_index_read, :libgit2), Cint, (Ptr{Cvoid}, Cint), idx.ptr, Cint(force)) + @check ccall((:git_index_read, libgit2), Cint, (Ptr{Cvoid}, Cint), idx.ptr, Cint(force)) return idx end @@ -36,7 +36,7 @@ Write the state of index `idx` to disk using a file lock. """ function write!(idx::GitIndex) ensure_initialized() - @check ccall((:git_index_write, :libgit2), Cint, (Ptr{Cvoid},), idx.ptr) + @check ccall((:git_index_write, libgit2), Cint, (Ptr{Cvoid},), idx.ptr) return idx end @@ -51,7 +51,7 @@ repository cannot be bare. `idx` must not contain any files with conflicts. function write_tree!(idx::GitIndex) ensure_initialized() oid_ptr = Ref(GitHash()) - @check ccall((:git_index_write_tree, :libgit2), Cint, + @check ccall((:git_index_write_tree, libgit2), Cint, (Ptr{GitHash}, Ptr{Cvoid}), oid_ptr, idx.ptr) return oid_ptr[] end @@ -73,7 +73,7 @@ Read the tree `tree` (or the tree pointed to by `treehash` in the repository own """ function read_tree!(idx::GitIndex, tree::GitTree) ensure_initialized() - @check ccall((:git_index_read_tree, :libgit2), Cint, + @check ccall((:git_index_read_tree, libgit2), Cint, (Ptr{Cvoid}, Ptr{Cvoid}), idx.ptr, tree.ptr) end read_tree!(idx::GitIndex, hash::AbstractGitHash) = @@ -104,7 +104,7 @@ with respect to ignored files: function add!(idx::GitIndex, files::AbstractString...; flags::Cuint = Consts.INDEX_ADD_DEFAULT) ensure_initialized() - @check ccall((:git_index_add_all, :libgit2), Cint, + @check ccall((:git_index_add_all, libgit2), Cint, (Ptr{Cvoid}, Ptr{StrArrayStruct}, Cuint, Ptr{Cvoid}, Ptr{Cvoid}), idx.ptr, collect(files), flags, C_NULL, C_NULL) end @@ -120,7 +120,7 @@ database. """ function update!(idx::GitIndex, files::AbstractString...) ensure_initialized() - @check ccall((:git_index_update_all, :libgit2), Cint, + @check ccall((:git_index_update_all, libgit2), Cint, (Ptr{Cvoid}, Ptr{StrArrayStruct}, Ptr{Cvoid}, Ptr{Cvoid}), idx.ptr, collect(files), C_NULL, C_NULL) end @@ -134,7 +134,7 @@ of the `repo`). """ function remove!(idx::GitIndex, files::AbstractString...) ensure_initialized() - @check ccall((:git_index_remove_all, :libgit2), Cint, + @check ccall((:git_index_remove_all, libgit2), Cint, (Ptr{Cvoid}, Ptr{StrArrayStruct}, Ptr{Cvoid}, Ptr{Cvoid}), idx.ptr, collect(files), C_NULL, C_NULL) end @@ -173,13 +173,13 @@ end function count(idx::GitIndex) ensure_initialized() - return ccall((:git_index_entrycount, :libgit2), Csize_t, (Ptr{Cvoid},), idx.ptr) + return ccall((:git_index_entrycount, libgit2), Csize_t, (Ptr{Cvoid},), idx.ptr) end function Base.getindex(idx::GitIndex, i::Integer) ensure_initialized() GC.@preserve idx begin - ie_ptr = ccall((:git_index_get_byindex, :libgit2), + ie_ptr = ccall((:git_index_get_byindex, libgit2), Ptr{IndexEntry}, (Ptr{Cvoid}, Csize_t), idx.ptr, i-1) ie_ptr == C_NULL && return nothing @@ -191,7 +191,7 @@ end function Base.findall(path::String, idx::GitIndex) ensure_initialized() pos_ref = Ref{Csize_t}(0) - ret = ccall((:git_index_find, :libgit2), Cint, + ret = ccall((:git_index_find, libgit2), Cint, (Ref{Csize_t}, Ptr{Cvoid}, Cstring), pos_ref, idx.ptr, path) ret == Cint(Error.ENOTFOUND) && return nothing return pos_ref[]+1 @@ -210,7 +210,7 @@ of a multi-branch "octopus" merge, stages `2`, `3`, and `4` might be used). """ function stage(ie::IndexEntry) ensure_initialized() - return ccall((:git_index_entry_stage, :libgit2), Cint, (Ptr{IndexEntry},), Ref(ie)) + return ccall((:git_index_entry_stage, libgit2), Cint, (Ptr{IndexEntry},), Ref(ie)) end function Base.show(io::IO, idx::GitIndex) diff --git a/stdlib/LibGit2/src/merge.jl b/stdlib/LibGit2/src/merge.jl index 0b2ddab1e8512..7c946315fdd86 100644 --- a/stdlib/LibGit2/src/merge.jl +++ b/stdlib/LibGit2/src/merge.jl @@ -16,7 +16,7 @@ branch head described using `GitReference`. function GitAnnotated(repo::GitRepo, commit_id::GitHash) ensure_initialized() ann_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_annotated_commit_lookup, :libgit2), Cint, + @check ccall((:git_annotated_commit_lookup, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{GitHash}), ann_ptr_ptr, repo.ptr, Ref(commit_id)) return GitAnnotated(repo, ann_ptr_ptr[]) @@ -25,7 +25,7 @@ end function GitAnnotated(repo::GitRepo, ref::GitReference) ensure_initialized() ann_ref_ref = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_annotated_commit_from_ref, :libgit2), Cint, + @check ccall((:git_annotated_commit_from_ref, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{Cvoid}), ann_ref_ref, repo.ptr, ref.ptr) return GitAnnotated(repo, ann_ref_ref[]) @@ -34,7 +34,7 @@ end function GitAnnotated(repo::GitRepo, fh::FetchHead) ensure_initialized() ann_ref_ref = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_annotated_commit_from_fetchhead, :libgit2), Cint, + @check ccall((:git_annotated_commit_from_fetchhead, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring, Cstring, Ptr{GitHash}), ann_ref_ref, repo.ptr, fh.name, fh.url, Ref(fh.oid)) return GitAnnotated(repo, ann_ref_ref[]) @@ -49,7 +49,7 @@ end function GitHash(ann::GitAnnotated) ensure_initialized() GC.@preserve ann begin - oid = unsafe_load(ccall((:git_annotated_commit_id, :libgit2), Ptr{GitHash}, (Ptr{Cvoid},), ann.ptr)) + oid = unsafe_load(ccall((:git_annotated_commit_id, libgit2), Ptr{GitHash}, (Ptr{Cvoid},), ann.ptr)) end return oid end @@ -88,7 +88,7 @@ function merge_analysis(repo::GitRepo, anns::Vector{GitAnnotated}) preference = Ref{Cint}(0) anns_ref = Ref(Base.map(a->a.ptr, anns), 1) anns_size = Csize_t(length(anns)) - @check ccall((:git_merge_analysis, :libgit2), Cint, + @check ccall((:git_merge_analysis, libgit2), Cint, (Ptr{Cint}, Ptr{Cint}, Ptr{Cvoid}, Ptr{Ptr{Cvoid}}, Csize_t), analysis, preference, repo.ptr, anns_ref, anns_size) return analysis[], preference[] @@ -147,7 +147,7 @@ function merge!(repo::GitRepo, anns::Vector{GitAnnotated}; checkout_opts::CheckoutOptions = CheckoutOptions()) ensure_initialized() anns_size = Csize_t(length(anns)) - @check ccall((:git_merge, :libgit2), Cint, + @check ccall((:git_merge, libgit2), Cint, (Ptr{Cvoid}, Ptr{Ptr{Cvoid}}, Csize_t, Ptr{MergeOptions}, Ptr{CheckoutOptions}), repo.ptr, Base.map(x->x.ptr, anns), anns_size, @@ -261,7 +261,7 @@ function merge_base(repo::GitRepo, one::AbstractString, two::AbstractString) oid2_ptr = Ref(GitHash(two)) moid_ptr = Ref(GitHash()) moid = try - @check ccall((:git_merge_base, :libgit2), Cint, + @check ccall((:git_merge_base, libgit2), Cint, (Ptr{GitHash}, Ptr{Cvoid}, Ptr{GitHash}, Ptr{GitHash}), moid_ptr, repo.ptr, oid1_ptr, oid2_ptr) moid_ptr[] diff --git a/stdlib/LibGit2/src/oid.jl b/stdlib/LibGit2/src/oid.jl index 937684439419f..be4944791f55c 100644 --- a/stdlib/LibGit2/src/oid.jl +++ b/stdlib/LibGit2/src/oid.jl @@ -13,7 +13,7 @@ function GitHash(ptr::Ptr{UInt8}) end ensure_initialized() oid_ptr = Ref(GitHash()) - @check ccall((:git_oid_fromraw, :libgit2), Cint, + @check ccall((:git_oid_fromraw, libgit2), Cint, (Ptr{GitHash}, Ptr{UInt8}), oid_ptr, ptr) return oid_ptr[] end @@ -43,7 +43,7 @@ function GitHash(id::AbstractString) end ensure_initialized() oid_ptr = Ref{GitHash}() - @check ccall((:git_oid_fromstrn, :libgit2), Cint, + @check ccall((:git_oid_fromstrn, libgit2), Cint, (Ptr{GitHash}, Ptr{UInt8}, Csize_t), oid_ptr, bstr, len) return oid_ptr[] end @@ -56,7 +56,7 @@ Construct a `GitShortHash` from the data stored in the given [`Buffer`](@ref). function GitShortHash(buf::Buffer) ensure_initialized() oid_ptr = Ref{GitHash}() - @check ccall((:git_oid_fromstrn, :libgit2), Cint, + @check ccall((:git_oid_fromstrn, libgit2), Cint, (Ptr{GitHash}, Ptr{UInt8}, Csize_t), oid_ptr, buf.ptr, buf.size) GitShortHash(oid_ptr[], buf.size) end @@ -71,7 +71,7 @@ function GitShortHash(id::AbstractString) bstr = String(id) len = sizeof(bstr) oid_ptr = Ref{GitHash}() - @check ccall((:git_oid_fromstrn, :libgit2), Cint, + @check ccall((:git_oid_fromstrn, libgit2), Cint, (Ptr{GitHash}, Ptr{UInt8}, Csize_t), oid_ptr, bstr, len) GitShortHash(oid_ptr[], len) end @@ -113,7 +113,7 @@ function GitHash(ref::GitReference) reftype(ref) != Consts.REF_OID && return GitHash() ensure_initialized() GC.@preserve ref begin - oid_ptr = ccall((:git_reference_target, :libgit2), Ptr{UInt8}, (Ptr{Cvoid},), ref.ptr) + oid_ptr = ccall((:git_reference_target, libgit2), Ptr{UInt8}, (Ptr{Cvoid},), ref.ptr) oid_ptr == C_NULL && return GitHash() oid = GitHash(oid_ptr) end @@ -131,7 +131,7 @@ function GitHash(repo::GitRepo, ref_name::AbstractString) isempty(repo) && return GitHash() ensure_initialized() oid_ptr = Ref(GitHash()) - @check ccall((:git_reference_name_to_id, :libgit2), Cint, + @check ccall((:git_reference_name_to_id, libgit2), Cint, (Ptr{GitHash}, Ptr{Cvoid}, Cstring), oid_ptr, repo.ptr, ref_name) return oid_ptr[] @@ -144,7 +144,7 @@ Get the identifier (`GitHash`) of `obj`. """ function GitHash(obj::GitObject) ensure_initialized() - GitHash(ccall((:git_object_id, :libgit2), Ptr{UInt8}, (Ptr{Cvoid},), obj.ptr)) + GitHash(ccall((:git_object_id, libgit2), Ptr{UInt8}, (Ptr{Cvoid},), obj.ptr)) end ==(obj1::GitObject, obj2::GitObject) = GitHash(obj1) == GitHash(obj2) @@ -159,7 +159,7 @@ unambiguously identify the object in the repository. function GitShortHash(obj::GitObject) ensure_initialized() buf_ref = Ref(Buffer()) - @check ccall((:git_object_short_id, :libgit2), Cint, + @check ccall((:git_object_short_id, libgit2), Cint, (Ptr{Buffer},Ptr{Cvoid}), buf_ref, obj.ptr) sid = GitShortHash(buf_ref[]) free(buf_ref) @@ -187,7 +187,7 @@ Base.hash(id::GitHash, h::UInt) = hash(id.val, h) function Base.cmp(id1::GitHash, id2::GitHash) ensure_initialized() - Int(ccall((:git_oid_cmp, :libgit2), Cint, + Int(ccall((:git_oid_cmp, libgit2), Cint, (Ptr{GitHash}, Ptr{GitHash}), Ref(id1), Ref(id2))) end @@ -195,7 +195,7 @@ function Base.cmp(id1::GitShortHash, id2::GitShortHash) ensure_initialized() # shortened hashes appear at the beginning of the order, i.e. # 000 < 01 < 010 < 011 < 0112 - c = Int(ccall((:git_oid_ncmp, :libgit2), Cint, + c = Int(ccall((:git_oid_ncmp, libgit2), Cint, (Ptr{GitHash}, Ptr{GitHash}, Csize_t), Ref(id1.hash), Ref(id2.hash), min(id1.len, id2.len))) return c == 0 ? cmp(id1.len, id2.len) : c diff --git a/stdlib/LibGit2/src/rebase.jl b/stdlib/LibGit2/src/rebase.jl index 51b52ef006c38..b36c2f3f475cf 100644 --- a/stdlib/LibGit2/src/rebase.jl +++ b/stdlib/LibGit2/src/rebase.jl @@ -5,7 +5,7 @@ function GitRebase(repo::GitRepo, branch::GitAnnotated, upstream::GitAnnotated; opts::RebaseOptions = RebaseOptions()) ensure_initialized() rebase_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_rebase_init, :libgit2), Cint, + @check ccall((:git_rebase_init, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{RebaseOptions}), rebase_ptr_ptr, repo.ptr, branch.ptr, upstream.ptr, @@ -15,7 +15,7 @@ end function count(rb::GitRebase) ensure_initialized() - return ccall((:git_rebase_operation_entrycount, :libgit2), Csize_t, (Ptr{Cvoid},), rb.ptr) + return ccall((:git_rebase_operation_entrycount, libgit2), Csize_t, (Ptr{Cvoid},), rb.ptr) end """ @@ -28,7 +28,7 @@ has not yet been called or iteration over `rb` has not yet begun), return """ function current(rb::GitRebase) ensure_initialized() - return ccall((:git_rebase_operation_current, :libgit2), Csize_t, (Ptr{Cvoid},), rb.ptr) + return ccall((:git_rebase_operation_current, libgit2), Csize_t, (Ptr{Cvoid},), rb.ptr) end function Base.getindex(rb::GitRebase, i::Integer) @@ -37,7 +37,7 @@ function Base.getindex(rb::GitRebase, i::Integer) end ensure_initialized() GC.@preserve rb begin - rb_op_ptr = ccall((:git_rebase_operation_byindex, :libgit2), + rb_op_ptr = ccall((:git_rebase_operation_byindex, libgit2), Ptr{RebaseOperation}, (Ptr{Cvoid}, Csize_t), rb.ptr, i-1) rb_op = unsafe_load(rb_op_ptr) @@ -49,7 +49,7 @@ function Base.iterate(rb::GitRebase, state=nothing) ensure_initialized() rb_op_ptr_ptr = Ref{Ptr{RebaseOperation}}(C_NULL) GC.@preserve rb begin - err = ccall((:git_rebase_next, :libgit2), Cint, + err = ccall((:git_rebase_next, libgit2), Cint, (Ptr{Ptr{RebaseOperation}}, Ptr{Cvoid}), rb_op_ptr_ptr, rb.ptr) if err == Cint(Error.GIT_OK) @@ -78,7 +78,7 @@ function commit(rb::GitRebase, sig::GitSignature) ensure_initialized() oid_ptr = Ref(GitHash()) try - @check ccall((:git_rebase_commit, :libgit2), Error.Code, + @check ccall((:git_rebase_commit, libgit2), Error.Code, (Ptr{GitHash}, Ptr{Cvoid}, Ptr{SignatureStruct}, Ptr{SignatureStruct}, Ptr{UInt8}, Ptr{UInt8}), oid_ptr, rb.ptr, C_NULL, sig.ptr, C_NULL, C_NULL) catch err @@ -100,7 +100,7 @@ rebase had completed), and `-1` for other errors. """ function abort(rb::GitRebase) ensure_initialized() - return ccall((:git_rebase_abort, :libgit2), Csize_t, + return ccall((:git_rebase_abort, libgit2), Csize_t, (Ptr{Cvoid},), rb.ptr) end @@ -113,7 +113,7 @@ rebase finishes successfully, `-1` if there is an error. """ function finish(rb::GitRebase, sig::GitSignature) ensure_initialized() - return ccall((:git_rebase_finish, :libgit2), Csize_t, + return ccall((:git_rebase_finish, libgit2), Csize_t, (Ptr{Cvoid}, Ptr{SignatureStruct}), rb.ptr, sig.ptr) end diff --git a/stdlib/LibGit2/src/reference.jl b/stdlib/LibGit2/src/reference.jl index c05b09ddfc518..9f849ed01a00f 100644 --- a/stdlib/LibGit2/src/reference.jl +++ b/stdlib/LibGit2/src/reference.jl @@ -3,7 +3,7 @@ function GitReference(repo::GitRepo, refname::AbstractString) ensure_initialized() ref_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_reference_lookup, :libgit2), Cint, + @check ccall((:git_reference_lookup, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring), ref_ptr_ptr, repo.ptr, refname) return GitReference(repo, ref_ptr_ptr[]) @@ -13,7 +13,7 @@ function GitReference(repo::GitRepo, obj_oid::GitHash, refname::AbstractString = force::Bool=false, msg::AbstractString="") ensure_initialized() ref_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_reference_create, :libgit2), Cint, + @check ccall((:git_reference_create, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{UInt8}, Ptr{GitHash}, Cint, Cstring), ref_ptr_ptr, repo.ptr, refname, Ref(obj_oid), Cint(force), isempty(msg) ? C_NULL : msg) @@ -28,7 +28,7 @@ to this branch will have no parents. """ function isorphan(repo::GitRepo) ensure_initialized() - r = @check ccall((:git_repository_head_unborn, :libgit2), Cint, + r = @check ccall((:git_repository_head_unborn, libgit2), Cint, (Ptr{Cvoid},), repo.ptr) r != 0 end @@ -41,7 +41,7 @@ Return a `GitReference` to the current HEAD of `repo`. function head(repo::GitRepo) ensure_initialized() head_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_repository_head, :libgit2), Cint, + @check ccall((:git_repository_head, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}), head_ptr_ptr, repo.ptr) return GitReference(repo, head_ptr_ptr[]) end @@ -68,7 +68,7 @@ function shortname(ref::GitReference) isempty(ref) && return "" ensure_initialized() GC.@preserve ref begin - name_ptr = ccall((:git_reference_shorthand, :libgit2), Cstring, (Ptr{Cvoid},), ref.ptr) + name_ptr = ccall((:git_reference_shorthand, libgit2), Cstring, (Ptr{Cvoid},), ref.ptr) name_ptr == C_NULL && return "" name = unsafe_string(name_ptr) end @@ -85,7 +85,7 @@ Return a `Cint` corresponding to the type of `ref`: """ function reftype(ref::GitReference) ensure_initialized() - return ccall((:git_reference_type, :libgit2), Cint, (Ptr{Cvoid},), ref.ptr) + return ccall((:git_reference_type, libgit2), Cint, (Ptr{Cvoid},), ref.ptr) end """ @@ -100,7 +100,7 @@ function fullname(ref::GitReference) reftype(ref) == Consts.REF_OID && return "" ensure_initialized() GC.@preserve ref begin - rname = ccall((:git_reference_symbolic_target, :libgit2), Cstring, (Ptr{Cvoid},), ref.ptr) + rname = ccall((:git_reference_symbolic_target, libgit2), Cstring, (Ptr{Cvoid},), ref.ptr) rname == C_NULL && return "" name = unsafe_string(rname) end @@ -116,7 +116,7 @@ function name(ref::GitReference) isempty(ref) && return "" ensure_initialized() GC.@preserve ref begin - name_ptr = ccall((:git_reference_name, :libgit2), Cstring, (Ptr{Cvoid},), ref.ptr) + name_ptr = ccall((:git_reference_name, libgit2), Cstring, (Ptr{Cvoid},), ref.ptr) name_ptr == C_NULL && return "" name = unsafe_string(name_ptr) end @@ -128,7 +128,7 @@ function branch(ref::GitReference) ensure_initialized() str_ptr_ptr = Ref{Cstring}() GC.@preserve ref begin - @check ccall((:git_branch_name, :libgit2), Cint, + @check ccall((:git_branch_name, libgit2), Cint, (Ptr{Cstring}, Ptr{Cvoid},), str_ptr_ptr, ref.ptr) str = unsafe_string(str_ptr_ptr[]) end @@ -138,7 +138,7 @@ end function ishead(ref::GitReference) isempty(ref) && return false ensure_initialized() - err = ccall((:git_branch_is_head, :libgit2), Cint, + err = ccall((:git_branch_is_head, libgit2), Cint, (Ptr{Cvoid},), ref.ptr) return err == 1 end @@ -146,7 +146,7 @@ end function isbranch(ref::GitReference) isempty(ref) && return false ensure_initialized() - err = ccall((:git_reference_is_branch, :libgit2), Cint, + err = ccall((:git_reference_is_branch, libgit2), Cint, (Ptr{Cvoid},), ref.ptr) return err == 1 end @@ -154,7 +154,7 @@ end function istag(ref::GitReference) isempty(ref) && return false ensure_initialized() - err = ccall((:git_reference_is_tag, :libgit2), Cint, + err = ccall((:git_reference_is_tag, libgit2), Cint, (Ptr{Cvoid},), ref.ptr) return err == 1 end @@ -162,7 +162,7 @@ end function isremote(ref::GitReference) isempty(ref) && return false ensure_initialized() - err = ccall((:git_reference_is_remote, :libgit2), Cint, + err = ccall((:git_reference_is_remote, libgit2), Cint, (Ptr{Cvoid},), ref.ptr) return err == 1 end @@ -199,7 +199,7 @@ then `ref` will be peeled until an object other than a [`GitTag`](@ref) is obtai function peel(::Type{T}, ref::GitReference) where T<:GitObject ensure_initialized() obj_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_reference_peel, :libgit2), Cint, + @check ccall((:git_reference_peel, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cint), obj_ptr_ptr, ref.ptr, Consts.OBJECT(T)) return T(ref.owner, obj_ptr_ptr[]) end @@ -213,7 +213,7 @@ Get a list of all reference names in the `repo` repository. function ref_list(repo::GitRepo) ensure_initialized() sa_ref = Ref(StrArrayStruct()) - @check ccall((:git_reference_list, :libgit2), Cint, + @check ccall((:git_reference_list, libgit2), Cint, (Ptr{StrArrayStruct}, Ptr{Cvoid}), sa_ref, repo.ptr) res = convert(Vector{String}, sa_ref[]) free(sa_ref) @@ -235,7 +235,7 @@ function create_branch(repo::GitRepo, force::Bool=false) ensure_initialized() ref_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_branch_create, :libgit2), Cint, + @check ccall((:git_branch_create, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring, Ptr{Cvoid}, Cint), ref_ptr_ptr, repo.ptr, bname, commit_obj.ptr, Cint(force)) return GitReference(repo, ref_ptr_ptr[]) @@ -248,7 +248,7 @@ Delete the branch pointed to by `branch`. """ function delete_branch(branch::GitReference) ensure_initialized() - @check ccall((:git_branch_delete, :libgit2), Cint, (Ptr{Cvoid},), branch.ptr) + @check ccall((:git_branch_delete, libgit2), Cint, (Ptr{Cvoid},), branch.ptr) end """ @@ -259,7 +259,7 @@ Set the HEAD of `repo` to the object pointed to by `ref`. function head!(repo::GitRepo, ref::GitReference) ensure_initialized() ref_name = name(ref) - @check ccall((:git_repository_set_head, :libgit2), Cint, + @check ccall((:git_repository_set_head, libgit2), Cint, (Ptr{Cvoid}, Cstring), repo.ptr, ref_name) return ref end @@ -280,7 +280,7 @@ function lookup_branch(repo::GitRepo, ensure_initialized() ref_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) branch_type = remote ? Consts.BRANCH_REMOTE : Consts.BRANCH_LOCAL - err = ccall((:git_branch_lookup, :libgit2), Cint, + err = ccall((:git_branch_lookup, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{UInt8}, Cint), ref_ptr_ptr, repo.ptr, branch_name, branch_type) if err != Int(Error.GIT_OK) @@ -307,7 +307,7 @@ function upstream(ref::GitReference) isempty(ref) && return nothing ensure_initialized() ref_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - err = ccall((:git_branch_upstream, :libgit2), Cint, + err = ccall((:git_branch_upstream, libgit2), Cint, (Ref{Ptr{Cvoid}}, Ptr{Cvoid},), ref_ptr_ptr, ref.ptr) if err != Int(Error.GIT_OK) if err == Int(Error.ENOTFOUND) @@ -326,7 +326,7 @@ repository(ref::GitReference) = ref.owner function target!(ref::GitReference, new_oid::GitHash; msg::AbstractString="") ensure_initialized() ref_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_reference_set_target, :libgit2), Cint, + @check ccall((:git_reference_set_target, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{GitHash}, Cstring), ref_ptr_ptr, ref.ptr, Ref(new_oid), isempty(msg) ? C_NULL : msg) return GitReference(ref.owner, ref_ptr_ptr[]) @@ -335,7 +335,7 @@ end function GitBranchIter(repo::GitRepo, flags::Cint=Cint(Consts.BRANCH_LOCAL)) ensure_initialized() bi_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_branch_iterator_new, :libgit2), Cint, + @check ccall((:git_branch_iterator_new, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cint), bi_ptr, repo.ptr, flags) return GitBranchIter(repo, bi_ptr[]) end @@ -344,7 +344,7 @@ function Base.iterate(bi::GitBranchIter, state=nothing) ensure_initialized() ref_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) btype = Ref{Cint}() - err = ccall((:git_branch_next, :libgit2), Cint, + err = ccall((:git_branch_next, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cint}, Ptr{Cvoid}), ref_ptr_ptr, btype, bi.ptr) if err == Cint(Error.GIT_OK) diff --git a/stdlib/LibGit2/src/remote.jl b/stdlib/LibGit2/src/remote.jl index 384a3b21bdbfa..f5be4499d227e 100644 --- a/stdlib/LibGit2/src/remote.jl +++ b/stdlib/LibGit2/src/remote.jl @@ -14,7 +14,7 @@ remote = LibGit2.GitRemote(repo, "upstream", repo_url) function GitRemote(repo::GitRepo, rmt_name::AbstractString, rmt_url::AbstractString) ensure_initialized() rmt_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_remote_create, :libgit2), Cint, + @check ccall((:git_remote_create, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring, Cstring), rmt_ptr_ptr, repo.ptr, rmt_name, rmt_url) return GitRemote(repo, rmt_ptr_ptr[]) @@ -37,7 +37,7 @@ remote = LibGit2.GitRemote(repo, "upstream", repo_url, refspec) function GitRemote(repo::GitRepo, rmt_name::AbstractString, rmt_url::AbstractString, fetch_spec::AbstractString) ensure_initialized() rmt_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_remote_create_with_fetchspec, :libgit2), Cint, + @check ccall((:git_remote_create_with_fetchspec, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring, Cstring, Cstring), rmt_ptr_ptr, repo.ptr, rmt_name, rmt_url, fetch_spec) return GitRemote(repo, rmt_ptr_ptr[]) @@ -57,7 +57,7 @@ remote = LibGit2.GitRemoteAnon(repo, repo_url) function GitRemoteAnon(repo::GitRepo, url::AbstractString) ensure_initialized() rmt_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_remote_create_anonymous, :libgit2), Cint, + @check ccall((:git_remote_create_anonymous, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring), rmt_ptr_ptr, repo.ptr, url) return GitRemote(repo, rmt_ptr_ptr[]) @@ -80,7 +80,7 @@ LibGit2.lookup_remote(repo, remote_name) # will return nothing function lookup_remote(repo::GitRepo, remote_name::AbstractString) ensure_initialized() rmt_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - err = ccall((:git_remote_lookup, :libgit2), Cint, + err = ccall((:git_remote_lookup, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring), rmt_ptr_ptr, repo.ptr, remote_name) if err == Int(Error.GIT_OK) @@ -95,7 +95,7 @@ end function get(::Type{GitRemote}, repo::GitRepo, rmt_name::AbstractString) ensure_initialized() rmt_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_remote_lookup, :libgit2), Cint, + @check ccall((:git_remote_lookup, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring), rmt_ptr_ptr, repo.ptr, rmt_name) return GitRemote(repo, rmt_ptr_ptr[]) @@ -120,7 +120,7 @@ julia> LibGit2.url(remote) """ function url(rmt::GitRemote) ensure_initialized() - url_ptr = ccall((:git_remote_url, :libgit2), Cstring, (Ptr{Cvoid},), rmt.ptr) + url_ptr = ccall((:git_remote_url, libgit2), Cstring, (Ptr{Cvoid},), rmt.ptr) url_ptr == C_NULL && return "" return unsafe_string(url_ptr) end @@ -144,7 +144,7 @@ julia> LibGit2.push_url(LibGit2.get(LibGit2.GitRemote, repo, "origin")) """ function push_url(rmt::GitRemote) ensure_initialized() - url_ptr = ccall((:git_remote_pushurl, :libgit2), Cstring, (Ptr{Cvoid},), rmt.ptr) + url_ptr = ccall((:git_remote_pushurl, libgit2), Cstring, (Ptr{Cvoid},), rmt.ptr) url_ptr == C_NULL && return "" return unsafe_string(url_ptr) end @@ -170,7 +170,7 @@ julia> name(remote) """ function name(rmt::GitRemote) ensure_initialized() - name_ptr = ccall((:git_remote_name, :libgit2), Cstring, (Ptr{Cvoid},), rmt.ptr) + name_ptr = ccall((:git_remote_name, libgit2), Cstring, (Ptr{Cvoid},), rmt.ptr) name_ptr == C_NULL && return "" return unsafe_string(name_ptr) end @@ -194,7 +194,7 @@ String["+refs/heads/*:refs/remotes/upstream/*"] function fetch_refspecs(rmt::GitRemote) ensure_initialized() sa_ref = Ref(StrArrayStruct()) - @check ccall((:git_remote_get_fetch_refspecs, :libgit2), Cint, + @check ccall((:git_remote_get_fetch_refspecs, libgit2), Cint, (Ptr{StrArrayStruct}, Ptr{Cvoid}), sa_ref, rmt.ptr) res = convert(Vector{String}, sa_ref[]) free(sa_ref) @@ -224,7 +224,7 @@ String["refs/heads/master"] function push_refspecs(rmt::GitRemote) ensure_initialized() sa_ref = Ref(StrArrayStruct()) - @check ccall((:git_remote_get_push_refspecs, :libgit2), Cint, + @check ccall((:git_remote_get_push_refspecs, libgit2), Cint, (Ptr{StrArrayStruct}, Ptr{Cvoid}), sa_ref, rmt.ptr) res = convert(Vector{String}, sa_ref[]) free(sa_ref) @@ -247,7 +247,7 @@ String["+refs/heads/*:refs/remotes/upstream/*"] """ function add_fetch!(repo::GitRepo, rmt::GitRemote, fetch_spec::String) ensure_initialized() - @check ccall((:git_remote_add_fetch, :libgit2), Cint, + @check ccall((:git_remote_add_fetch, libgit2), Cint, (Ptr{Cvoid}, Cstring, Cstring), repo.ptr, name(rmt), fetch_spec) end @@ -276,7 +276,7 @@ String["refs/heads/master"] """ function add_push!(repo::GitRepo, rmt::GitRemote, push_spec::String) ensure_initialized() - @check ccall((:git_remote_add_push, :libgit2), Cint, + @check ccall((:git_remote_add_push, libgit2), Cint, (Ptr{Cvoid}, Cstring, Cstring), repo.ptr, name(rmt), push_spec) end @@ -296,7 +296,7 @@ function fetch(rmt::GitRemote, refspecs::Vector{<:AbstractString}; msg::AbstractString="") ensure_initialized() msg = "libgit2.fetch: $msg" - @check ccall((:git_remote_fetch, :libgit2), Cint, + @check ccall((:git_remote_fetch, libgit2), Cint, (Ptr{Cvoid}, Ptr{StrArrayStruct}, Ptr{FetchOptions}, Cstring), rmt.ptr, isempty(refspecs) ? C_NULL : refspecs, Ref(options), msg) end @@ -321,7 +321,7 @@ The keyword arguments are: function push(rmt::GitRemote, refspecs::Vector{<:AbstractString}; force::Bool = false, options::PushOptions = PushOptions()) ensure_initialized() - @check ccall((:git_remote_push, :libgit2), Cint, + @check ccall((:git_remote_push, libgit2), Cint, (Ptr{Cvoid}, Ptr{StrArrayStruct}, Ptr{PushOptions}), rmt.ptr, isempty(refspecs) ? C_NULL : refspecs, Ref(options)) end @@ -333,7 +333,7 @@ Delete the `remote_name` from the git `repo`. """ function remote_delete(repo::GitRepo, remote_name::AbstractString) ensure_initialized() - @check ccall((:git_remote_delete, :libgit2), Cint, + @check ccall((:git_remote_delete, libgit2), Cint, (Ptr{Cvoid}, Cstring), repo.ptr, remote_name) end @@ -352,7 +352,7 @@ function set_remote_fetch_url end function set_remote_fetch_url(repo::GitRepo, remote_name::AbstractString, url::AbstractString) ensure_initialized() - @check ccall((:git_remote_set_url, :libgit2), Cint, + @check ccall((:git_remote_set_url, libgit2), Cint, (Ptr{Cvoid}, Cstring, Cstring), repo.ptr, remote_name, url) end @@ -375,7 +375,7 @@ function set_remote_push_url end function set_remote_push_url(repo::GitRepo, remote_name::AbstractString, url::AbstractString) ensure_initialized() - @check ccall((:git_remote_set_pushurl, :libgit2), Cint, + @check ccall((:git_remote_set_pushurl, libgit2), Cint, (Ptr{Cvoid}, Cstring, Cstring), repo.ptr, remote_name, url) end diff --git a/stdlib/LibGit2/src/repository.jl b/stdlib/LibGit2/src/repository.jl index 994d0a9f32875..8297ae92a6a00 100644 --- a/stdlib/LibGit2/src/repository.jl +++ b/stdlib/LibGit2/src/repository.jl @@ -8,7 +8,7 @@ Open a git repository at `path`. function GitRepo(path::AbstractString) ensure_initialized() repo_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_repository_open, :libgit2), Cint, + @check ccall((:git_repository_open, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Cstring), repo_ptr_ptr, path) return GitRepo(repo_ptr_ptr[]) end @@ -23,7 +23,7 @@ function GitRepoExt(path::AbstractString, flags::Cuint = Cuint(Consts.REPOSITORY ensure_initialized() separator = @static Sys.iswindows() ? ";" : ":" repo_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_repository_open_ext, :libgit2), Cint, + @check ccall((:git_repository_open_ext, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Cstring, Cuint, Cstring), repo_ptr_ptr, path, flags, separator) return GitRepo(repo_ptr_ptr[]) @@ -32,7 +32,7 @@ end function cleanup(r::GitRepo) if r.ptr != C_NULL ensure_initialized() - @check ccall((:git_repository__cleanup, :libgit2), Cint, (Ptr{Cvoid},), r.ptr) + @check ccall((:git_repository__cleanup, libgit2), Cint, (Ptr{Cvoid},), r.ptr) end end @@ -46,7 +46,7 @@ is `true`, no working directory will be created. function init(path::AbstractString, bare::Bool=false) ensure_initialized() repo_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_repository_init, :libgit2), Cint, + @check ccall((:git_repository_init, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Cstring, Cuint), repo_ptr_ptr, path, bare) return GitRepo(repo_ptr_ptr[]) end @@ -97,7 +97,7 @@ tree, and no tracking information for remote branches or configurations is prese function isbare(repo::GitRepo) ensure_initialized() @assert repo.ptr != C_NULL - return ccall((:git_repository_is_bare, :libgit2), Cint, (Ptr{Cvoid},), repo.ptr) == 1 + return ccall((:git_repository_is_bare, libgit2), Cint, (Ptr{Cvoid},), repo.ptr) == 1 end """ @@ -109,7 +109,7 @@ Determine if `repo` is detached - that is, whether its HEAD points to a commit function isattached(repo::GitRepo) ensure_initialized() @assert repo.ptr != C_NULL - ccall((:git_repository_head_detached, :libgit2), Cint, (Ptr{Cvoid},), repo.ptr) != 1 + ccall((:git_repository_head_detached, libgit2), Cint, (Ptr{Cvoid},), repo.ptr) != 1 end @doc """ @@ -139,7 +139,7 @@ function (::Type{T})(repo::GitRepo, spec::AbstractString) where T<:GitObject ensure_initialized() obj_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) @assert repo.ptr != C_NULL - @check ccall((:git_revparse_single, :libgit2), Cint, + @check ccall((:git_revparse_single, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring), obj_ptr_ptr, repo.ptr, spec) # check object is of correct type if T != GitObject && T != GitUnknownObject @@ -155,7 +155,7 @@ function (::Type{T})(repo::GitRepo, oid::GitHash) where T<:GitObject obj_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) @assert repo.ptr != C_NULL - @check ccall((:git_object_lookup, :libgit2), Cint, + @check ccall((:git_object_lookup, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{GitHash}, Consts.OBJECT), obj_ptr_ptr, repo.ptr, oid_ptr, Consts.OBJECT(T)) @@ -167,7 +167,7 @@ function (::Type{T})(repo::GitRepo, oid::GitShortHash) where T<:GitObject obj_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) @assert repo.ptr != C_NULL - @check ccall((:git_object_lookup_prefix, :libgit2), Cint, + @check ccall((:git_object_lookup_prefix, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{GitHash}, Csize_t, Consts.OBJECT), obj_ptr_ptr, repo.ptr, oid_ptr, oid.len, Consts.OBJECT(T)) @@ -190,7 +190,7 @@ See also [`workdir`](@ref), [`path`](@ref). function gitdir(repo::GitRepo) ensure_initialized() @assert repo.ptr != C_NULL - return unsafe_string(ccall((:git_repository_path, :libgit2), Cstring, + return unsafe_string(ccall((:git_repository_path, libgit2), Cstring, (Ptr{Cvoid},), repo.ptr)) end @@ -211,7 +211,7 @@ See also [`gitdir`](@ref), [`path`](@ref). function workdir(repo::GitRepo) ensure_initialized() @assert repo.ptr != C_NULL - sptr = ccall((:git_repository_workdir, :libgit2), Cstring, + sptr = ccall((:git_repository_workdir, libgit2), Cstring, (Ptr{Cvoid},), repo.ptr) sptr == C_NULL && throw(GitError(Error.Object, Error.ERROR, "No working directory found.")) return unsafe_string(sptr) @@ -255,7 +255,7 @@ function peel(::Type{T}, obj::GitObject) where T<:GitObject ensure_initialized() new_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_object_peel, :libgit2), Cint, + @check ccall((:git_object_peel, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cint), new_ptr_ptr, obj.ptr, Consts.OBJECT(T)) return T(obj.owner, new_ptr_ptr[]) @@ -285,7 +285,7 @@ function GitDescribeResult(committish::GitObject; options::DescribeOptions=DescribeOptions()) ensure_initialized() result_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_describe_commit, :libgit2), Cint, + @check ccall((:git_describe_commit, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{DescribeOptions}), result_ptr_ptr, committish.ptr, Ref(options)) return GitDescribeResult(committish.owner, result_ptr_ptr[]) @@ -312,7 +312,7 @@ function GitDescribeResult(repo::GitRepo; options::DescribeOptions=DescribeOptio ensure_initialized() result_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) @assert repo.ptr != C_NULL - @check ccall((:git_describe_workdir, :libgit2), Cint, + @check ccall((:git_describe_workdir, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{DescribeOptions}), result_ptr_ptr, repo.ptr, Ref(options)) return GitDescribeResult(repo, result_ptr_ptr[]) @@ -329,7 +329,7 @@ Formatting options are controlled by the keyword argument: function format(result::GitDescribeResult; options::DescribeFormatOptions=DescribeFormatOptions()) ensure_initialized() buf_ref = Ref(Buffer()) - @check ccall((:git_describe_format, :libgit2), Cint, + @check ccall((:git_describe_format, libgit2), Cint, (Ptr{Buffer}, Ptr{Cvoid}, Ptr{DescribeFormatOptions}), buf_ref, result.ptr, Ref(options)) buf = buf_ref[] @@ -355,7 +355,7 @@ function checkout_tree(repo::GitRepo, obj::GitObject; options::CheckoutOptions = CheckoutOptions()) ensure_initialized() @assert repo.ptr != C_NULL - @check ccall((:git_checkout_tree, :libgit2), Cint, + @check ccall((:git_checkout_tree, libgit2), Cint, (Ptr{Cvoid}, Ptr{Cvoid}, Ptr{CheckoutOptions}), repo.ptr, obj.ptr, Ref(options)) end @@ -371,7 +371,7 @@ function checkout_index(repo::GitRepo, idx::Union{GitIndex, Nothing} = nothing; options::CheckoutOptions = CheckoutOptions()) ensure_initialized() @assert repo.ptr != C_NULL - @check ccall((:git_checkout_index, :libgit2), Cint, + @check ccall((:git_checkout_index, libgit2), Cint, (Ptr{Cvoid}, Ptr{Cvoid}, Ptr{CheckoutOptions}), repo.ptr, idx === nothing ? C_NULL : idx.ptr, @@ -391,7 +391,7 @@ Update the index and working tree of `repo` to match the commit pointed to by HE function checkout_head(repo::GitRepo; options::CheckoutOptions = CheckoutOptions()) ensure_initialized() @assert repo.ptr != C_NULL - @check ccall((:git_checkout_head, :libgit2), Cint, + @check ccall((:git_checkout_head, libgit2), Cint, (Ptr{Cvoid}, Ptr{CheckoutOptions}), repo.ptr, Ref(options)) end @@ -410,7 +410,7 @@ The keyword argument `options` sets checkout and merge options for the cherrypic function cherrypick(repo::GitRepo, commit::GitCommit; options::CherrypickOptions = CherrypickOptions()) ensure_initialized() @assert repo.ptr != C_NULL - @check ccall((:git_cherrypick, :libgit2), Cint, + @check ccall((:git_cherrypick, libgit2), Cint, (Ptr{Cvoid}, Ptr{Cvoid}, Ptr{CherrypickOptions}), repo.ptr, commit.ptr, Ref(options)) end @@ -419,7 +419,7 @@ end function reset!(repo::GitRepo, obj::Union{GitObject, Nothing}, pathspecs::AbstractString...) ensure_initialized() @assert repo.ptr != C_NULL - @check ccall((:git_reset_default, :libgit2), Cint, + @check ccall((:git_reset_default, libgit2), Cint, (Ptr{Cvoid}, Ptr{Cvoid}, Ptr{StrArrayStruct}), repo.ptr, obj === nothing ? C_NULL : obj.ptr, @@ -432,7 +432,7 @@ function reset!(repo::GitRepo, obj::GitObject, mode::Cint; checkout_opts::CheckoutOptions = CheckoutOptions()) ensure_initialized() @assert repo.ptr != C_NULL - @check ccall((:git_reset, :libgit2), Cint, + @check ccall((:git_reset, libgit2), Cint, (Ptr{Cvoid}, Ptr{Cvoid}, Cint, Ptr{CheckoutOptions}), repo.ptr, obj.ptr, mode, Ref(checkout_opts)) return head_oid(repo) @@ -456,7 +456,7 @@ function clone(repo_url::AbstractString, repo_path::AbstractString, ensure_initialized() clone_opts_ref = Ref(clone_opts) repo_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_clone, :libgit2), Cint, + @check ccall((:git_clone, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Cstring, Cstring, Ref{CloneOptions}), repo_ptr_ptr, repo_url, repo_path, clone_opts_ref) return GitRepo(repo_ptr_ptr[]) @@ -490,7 +490,7 @@ function fetchheads(repo::GitRepo) fh = FetchHead[] ffcb = fetchhead_foreach_cb() @assert repo.ptr != C_NULL - @check ccall((:git_repository_fetchhead_foreach, :libgit2), Cint, + @check ccall((:git_repository_fetchhead_foreach, libgit2), Cint, (Ptr{Cvoid}, Ptr{Cvoid}, Any), repo.ptr, ffcb, fh) return fh @@ -505,7 +505,7 @@ function remotes(repo::GitRepo) ensure_initialized() sa_ref = Ref(StrArrayStruct()) @assert repo.ptr != C_NULL - @check ccall((:git_remote_list, :libgit2), Cint, + @check ccall((:git_remote_list, libgit2), Cint, (Ptr{StrArrayStruct}, Ptr{Cvoid}), sa_ref, repo.ptr) res = convert(Vector{String}, sa_ref[]) free(sa_ref) diff --git a/stdlib/LibGit2/src/signature.jl b/stdlib/LibGit2/src/signature.jl index 9c13bc2256ef5..85e62cd8c2b7e 100644 --- a/stdlib/LibGit2/src/signature.jl +++ b/stdlib/LibGit2/src/signature.jl @@ -13,7 +13,7 @@ Signature(sig::GitSignature) = Signature(sig.ptr) function Signature(name::AbstractString, email::AbstractString) ensure_initialized() sig_ptr_ptr = Ref{Ptr{SignatureStruct}}(C_NULL) - @check ccall((:git_signature_now, :libgit2), Cint, + @check ccall((:git_signature_now, libgit2), Cint, (Ptr{Ptr{SignatureStruct}}, Cstring, Cstring), sig_ptr_ptr, name, email) sig = GitSignature(sig_ptr_ptr[]) s = Signature(sig.ptr) @@ -31,7 +31,7 @@ end function Base.convert(::Type{GitSignature}, sig::Signature) ensure_initialized() sig_ptr_ptr = Ref{Ptr{SignatureStruct}}(C_NULL) - @check ccall((:git_signature_new, :libgit2), Cint, + @check ccall((:git_signature_new, libgit2), Cint, (Ptr{Ptr{SignatureStruct}}, Cstring, Cstring, Int64, Cint), sig_ptr_ptr, sig.name, sig.email, sig.time, sig.time_offset) return GitSignature(sig_ptr_ptr[]) @@ -66,7 +66,7 @@ end function default_signature(repo::GitRepo) ensure_initialized() sig_ptr_ptr = Ref{Ptr{SignatureStruct}}(C_NULL) - @check ccall((:git_signature_default, :libgit2), Cint, + @check ccall((:git_signature_default, libgit2), Cint, (Ptr{Ptr{SignatureStruct}}, Ptr{Cvoid}), sig_ptr_ptr, repo.ptr) return GitSignature(sig_ptr_ptr[]) end diff --git a/stdlib/LibGit2/src/status.jl b/stdlib/LibGit2/src/status.jl index cd871681e4ae9..c1cb2fb1c5a9c 100644 --- a/stdlib/LibGit2/src/status.jl +++ b/stdlib/LibGit2/src/status.jl @@ -12,7 +12,7 @@ submodules or not. See [`StatusOptions`](@ref) for more information. function GitStatus(repo::GitRepo; status_opts=StatusOptions()) ensure_initialized() stat_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_status_list_new, :libgit2), Cint, + @check ccall((:git_status_list_new, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{StatusOptions}), stat_ptr_ptr, repo.ptr, Ref(status_opts)) return GitStatus(repo, stat_ptr_ptr[]) @@ -20,7 +20,7 @@ end function Base.length(status::GitStatus) ensure_initialized() - return Int(ccall((:git_status_list_entrycount, :libgit2), Csize_t, + return Int(ccall((:git_status_list_entrycount, libgit2), Csize_t, (Ptr{Ptr{Cvoid}},), status.ptr)) end @@ -28,7 +28,7 @@ function Base.getindex(status::GitStatus, i::Integer) 1 <= i <= length(status) || throw(BoundsError()) ensure_initialized() GC.@preserve status begin - entry_ptr = ccall((:git_status_byindex, :libgit2), + entry_ptr = ccall((:git_status_byindex, libgit2), Ptr{StatusEntry}, (Ptr{Cvoid}, Csize_t), status.ptr, i-1) @@ -49,7 +49,7 @@ and needs to be staged and committed. function status(repo::GitRepo, path::String) ensure_initialized() status_ptr = Ref{Cuint}(0) - ret = ccall((:git_status_file, :libgit2), Cint, + ret = ccall((:git_status_file, libgit2), Cint, (Ref{Cuint}, Ptr{Cvoid}, Cstring), status_ptr, repo.ptr, path) (ret == Cint(Error.ENOTFOUND) || ret == Cint(Error.EAMBIGUOUS)) && return nothing diff --git a/stdlib/LibGit2/src/tag.jl b/stdlib/LibGit2/src/tag.jl index 4209a4e2f917d..0e3d2b398a835 100644 --- a/stdlib/LibGit2/src/tag.jl +++ b/stdlib/LibGit2/src/tag.jl @@ -8,7 +8,7 @@ Get a list of all tags in the git repository `repo`. function tag_list(repo::GitRepo) ensure_initialized() sa_ref = Ref(StrArrayStruct()) - @check ccall((:git_tag_list, :libgit2), Cint, + @check ccall((:git_tag_list, libgit2), Cint, (Ptr{StrArrayStruct}, Ptr{Cvoid}), sa_ref, repo.ptr) res = convert(Vector{String}, sa_ref[]) free(sa_ref) @@ -22,7 +22,7 @@ Remove the git tag `tag` from the repository `repo`. """ function tag_delete(repo::GitRepo, tag::AbstractString) ensure_initialized() - @check ccall((:git_tag_delete, :libgit2), Cint, + @check ccall((:git_tag_delete, libgit2), Cint, (Ptr{Cvoid}, Cstring), repo.ptr, tag) end @@ -46,7 +46,7 @@ function tag_create(repo::GitRepo, tag::AbstractString, commit::Union{AbstractSt commit_obj === nothing && return oid_ptr[] # return empty oid with(convert(GitSignature, sig)) do git_sig ensure_initialized() - @check ccall((:git_tag_create, :libgit2), Cint, + @check ccall((:git_tag_create, libgit2), Cint, (Ptr{GitHash}, Ptr{Cvoid}, Cstring, Ptr{Cvoid}, Ptr{SignatureStruct}, Cstring, Cint), oid_ptr, repo.ptr, tag, commit_obj.ptr, git_sig.ptr, msg, Cint(force)) end @@ -62,7 +62,7 @@ The name of `tag` (e.g. `"v0.5"`). function name(tag::GitTag) ensure_initialized() GC.@preserve tag begin - str_ptr = ccall((:git_tag_name, :libgit2), Cstring, (Ptr{Cvoid},), tag.ptr) + str_ptr = ccall((:git_tag_name, libgit2), Cstring, (Ptr{Cvoid},), tag.ptr) str_ptr == C_NULL && throw(Error.GitError(Error.ERROR)) str = unsafe_string(str_ptr) end @@ -78,7 +78,7 @@ The `GitHash` of the target object of `tag`. function target(tag::GitTag) ensure_initialized() GC.@preserve tag begin - oid_ptr = ccall((:git_tag_target_id, :libgit2), Ptr{GitHash}, (Ptr{Cvoid},), tag.ptr) + oid_ptr = ccall((:git_tag_target_id, libgit2), Ptr{GitHash}, (Ptr{Cvoid},), tag.ptr) oid_ptr == C_NULL && throw(Error.GitError(Error.ERROR)) str = unsafe_load(oid_ptr) end diff --git a/stdlib/LibGit2/src/tree.jl b/stdlib/LibGit2/src/tree.jl index 1ef8a2eb75003..1aeeec96ea778 100644 --- a/stdlib/LibGit2/src/tree.jl +++ b/stdlib/LibGit2/src/tree.jl @@ -2,7 +2,7 @@ function GitTree(c::GitCommit) tree_out = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_commit_tree, :libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}), tree_out, c) + @check ccall((:git_commit_tree, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}), tree_out, c) GitTree(repository(c), tree_out[]) end @@ -35,7 +35,7 @@ function treewalk(f, tree::GitTree, post::Bool = false) entry = GitTreeEntry(tree, entry_ptr, false) return f(root, entry) end, Cint, (Cstring, Ptr{Cvoid}, Ref{Vector{Any}})) - err = ccall((:git_tree_walk, :libgit2), Cint, + err = ccall((:git_tree_walk, libgit2), Cint, (Ptr{Cvoid}, Cint, Ptr{Cvoid}, Any), tree.ptr, post, cbf, payload) if err < 0 @@ -58,7 +58,7 @@ Return the filename of the object on disk to which `te` refers. """ function filename(te::GitTreeEntry) ensure_initialized() - str = ccall((:git_tree_entry_name, :libgit2), Cstring, (Ptr{Cvoid},), te.ptr) + str = ccall((:git_tree_entry_name, libgit2), Cstring, (Ptr{Cvoid},), te.ptr) str != C_NULL && return unsafe_string(str) return nothing end @@ -70,7 +70,7 @@ Return the UNIX filemode of the object on disk to which `te` refers as an intege """ function filemode(te::GitTreeEntry) ensure_initialized() - return ccall((:git_tree_entry_filemode, :libgit2), Cint, (Ptr{Cvoid},), te.ptr) + return ccall((:git_tree_entry_filemode, libgit2), Cint, (Ptr{Cvoid},), te.ptr) end """ @@ -81,7 +81,7 @@ one of the types which [`objtype`](@ref) returns, e.g. a `GitTree` or `GitBlob`. """ function entrytype(te::GitTreeEntry) ensure_initialized() - otype = ccall((:git_tree_entry_type, :libgit2), Cint, (Ptr{Cvoid},), te.ptr) + otype = ccall((:git_tree_entry_type, libgit2), Cint, (Ptr{Cvoid},), te.ptr) return objtype(Consts.OBJECT(otype)) end @@ -93,7 +93,7 @@ Return the [`GitHash`](@ref) of the object to which `te` refers. function entryid(te::GitTreeEntry) ensure_initialized() GC.@preserve te begin - oid_ptr = ccall((:git_tree_entry_id, :libgit2), Ptr{UInt8}, (Ptr{Cvoid},), te.ptr) + oid_ptr = ccall((:git_tree_entry_id, libgit2), Ptr{UInt8}, (Ptr{Cvoid},), te.ptr) oid = GitHash(oid_ptr) end return oid @@ -101,7 +101,7 @@ end function count(tree::GitTree) ensure_initialized() - return ccall((:git_tree_entrycount, :libgit2), Csize_t, (Ptr{Cvoid},), tree.ptr) + return ccall((:git_tree_entrycount, libgit2), Csize_t, (Ptr{Cvoid},), tree.ptr) end function Base.getindex(tree::GitTree, i::Integer) @@ -109,7 +109,7 @@ function Base.getindex(tree::GitTree, i::Integer) throw(BoundsError(tree, i)) end ensure_initialized() - te_ptr = ccall((:git_tree_entry_byindex, :libgit2), + te_ptr = ccall((:git_tree_entry_byindex, libgit2), Ptr{Cvoid}, (Ptr{Cvoid}, Csize_t), tree.ptr, i-1) return GitTreeEntry(tree, te_ptr, false) @@ -133,7 +133,7 @@ function (::Type{T})(te::GitTreeEntry) where T<:GitObject ensure_initialized() repo = repository(te) obj_ptr_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_tree_entry_to_object, :libgit2), Cint, + @check ccall((:git_tree_entry_to_object, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Ptr{Cvoid}), obj_ptr_ptr, repo, te) return T(repo, obj_ptr_ptr[]) @@ -162,7 +162,7 @@ function _getindex(tree::GitTree, target::AbstractString) end entry = Ref{Ptr{Cvoid}}(C_NULL) - err = ccall((:git_tree_entry_bypath, :libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring), entry, tree, target) + err = ccall((:git_tree_entry_bypath, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}, Cstring), entry, tree, target) err == Int(Error.ENOTFOUND) && return nothing err < 0 && throw(Error.GitError(err)) entry = GitTreeEntry(tree, entry[], true #= N.B.: Most other lookups need false here =#) diff --git a/stdlib/LibGit2/src/types.jl b/stdlib/LibGit2/src/types.jl index 0b653f9b6ad21..6af95b894f1ca 100644 --- a/stdlib/LibGit2/src/types.jl +++ b/stdlib/LibGit2/src/types.jl @@ -99,7 +99,7 @@ StrArrayStruct() = StrArrayStruct(C_NULL, 0) function free(sa_ref::Base.Ref{StrArrayStruct}) ensure_initialized() - ccall((:git_strarray_free, :libgit2), Cvoid, (Ptr{StrArrayStruct},), sa_ref) + ccall((:git_strarray_free, libgit2), Cvoid, (Ptr{StrArrayStruct},), sa_ref) end """ @@ -126,7 +126,7 @@ Buffer() = Buffer(C_NULL, 0, 0) function free(buf_ref::Base.Ref{Buffer}) ensure_initialized() - ccall((:git_buf_free, :libgit2), Cvoid, (Ptr{Buffer},), buf_ref) + ccall((:git_buf_free, libgit2), Cvoid, (Ptr{Buffer},), buf_ref) end """ @@ -1064,11 +1064,11 @@ for (typ, owntyp, sup, cname) in Tuple{Symbol,Any,Symbol,Symbol}[ @eval function Base.close(obj::$typ) if obj.ptr != C_NULL ensure_initialized() - ccall(($(string(cname, :_free)), :libgit2), Cvoid, (Ptr{Cvoid},), obj.ptr) + ccall(($(string(cname, :_free)), libgit2), Cvoid, (Ptr{Cvoid},), obj.ptr) obj.ptr = C_NULL if Threads.atomic_sub!(REFCOUNT, 1) == 1 # will the last finalizer please turn out the lights? - ccall((:git_libgit2_shutdown, :libgit2), Cint, ()) + ccall((:git_libgit2_shutdown, libgit2), Cint, ()) end end end @@ -1098,7 +1098,7 @@ end function Base.close(obj::GitSignature) if obj.ptr != C_NULL ensure_initialized() - ccall((:git_signature_free, :libgit2), Cvoid, (Ptr{SignatureStruct},), obj.ptr) + ccall((:git_signature_free, libgit2), Cvoid, (Ptr{SignatureStruct},), obj.ptr) obj.ptr = C_NULL end end @@ -1197,7 +1197,7 @@ Consts.OBJECT(::Type{GitObject}) = Consts.OBJ_ANY function Consts.OBJECT(ptr::Ptr{Cvoid}) ensure_initialized() - ccall((:git_object_type, :libgit2), Consts.OBJECT, (Ptr{Cvoid},), ptr) + ccall((:git_object_type, libgit2), Consts.OBJECT, (Ptr{Cvoid},), ptr) end """ diff --git a/stdlib/LibGit2/src/utils.jl b/stdlib/LibGit2/src/utils.jl index 5234e9b6fc291..f62663a6ea4ca 100644 --- a/stdlib/LibGit2/src/utils.jl +++ b/stdlib/LibGit2/src/utils.jl @@ -37,7 +37,7 @@ function version() major = Ref{Cint}(0) minor = Ref{Cint}(0) patch = Ref{Cint}(0) - @check ccall((:git_libgit2_version, :libgit2), Cint, + @check ccall((:git_libgit2_version, libgit2), Cint, (Ref{Cint}, Ref{Cint}, Ref{Cint}), major, minor, patch) return VersionNumber(major[], minor[], patch[]) end @@ -72,7 +72,7 @@ Return a list of git features the current version of libgit2 supports, such as threading or using HTTPS or SSH. """ function features() - feat = ccall((:git_libgit2_features, :libgit2), Cint, ()) + feat = ccall((:git_libgit2_features, libgit2), Cint, ()) res = Consts.GIT_FEATURE[] for f in instances(Consts.GIT_FEATURE) isset(feat, Cuint(f)) && Base.push!(res, f) diff --git a/stdlib/LibGit2/src/walker.jl b/stdlib/LibGit2/src/walker.jl index 468e6899a7aa8..e43687b014226 100644 --- a/stdlib/LibGit2/src/walker.jl +++ b/stdlib/LibGit2/src/walker.jl @@ -21,7 +21,7 @@ Since the `GitHash` is unique to a commit, `cnt` will be `1`. function GitRevWalker(repo::GitRepo) ensure_initialized() w_ptr = Ref{Ptr{Cvoid}}(C_NULL) - @check ccall((:git_revwalk_new, :libgit2), Cint, + @check ccall((:git_revwalk_new, libgit2), Cint, (Ptr{Ptr{Cvoid}}, Ptr{Cvoid}), w_ptr, repo.ptr) return GitRevWalker(repo, w_ptr[]) end @@ -29,7 +29,7 @@ end function Base.iterate(w::GitRevWalker, state=nothing) ensure_initialized() id_ptr = Ref(GitHash()) - err = ccall((:git_revwalk_next, :libgit2), Cint, + err = ccall((:git_revwalk_next, libgit2), Cint, (Ptr{GitHash}, Ptr{Cvoid}), id_ptr, w.ptr) if err == Cint(Error.GIT_OK) return (id_ptr[], nothing) @@ -51,7 +51,7 @@ during the walk. """ function push_head!(w::GitRevWalker) ensure_initialized() - @check ccall((:git_revwalk_push_head, :libgit2), Cint, (Ptr{Cvoid},), w.ptr) + @check ccall((:git_revwalk_push_head, libgit2), Cint, (Ptr{Cvoid},), w.ptr) return w end @@ -64,20 +64,20 @@ of that year as `cid` and then passing the resulting `w` to [`LibGit2.map`](@ref """ function push!(w::GitRevWalker, cid::GitHash) ensure_initialized() - @check ccall((:git_revwalk_push, :libgit2), Cint, (Ptr{Cvoid}, Ptr{GitHash}), w.ptr, Ref(cid)) + @check ccall((:git_revwalk_push, libgit2), Cint, (Ptr{Cvoid}, Ptr{GitHash}), w.ptr, Ref(cid)) return w end function push!(w::GitRevWalker, range::AbstractString) ensure_initialized() - @check ccall((:git_revwalk_push_range, :libgit2), Cint, (Ptr{Cvoid}, Ptr{UInt8}), w.ptr, range) + @check ccall((:git_revwalk_push_range, libgit2), Cint, (Ptr{Cvoid}, Ptr{UInt8}), w.ptr, range) return w end function Base.sort!(w::GitRevWalker; by::Cint = Consts.SORT_NONE, rev::Bool=false) ensure_initialized() rev && (by |= Consts.SORT_REVERSE) - @check ccall((:git_revwalk_sorting, :libgit2), Cint, (Ptr{Cvoid}, Cint), w.ptr, by) + @check ccall((:git_revwalk_sorting, libgit2), Cint, (Ptr{Cvoid}, Cint), w.ptr, by) return w end diff --git a/stdlib/LibGit2/test/libgit2-tests.jl b/stdlib/LibGit2/test/libgit2-tests.jl index 7dbbd10af6f67..d2f2fc050dcd4 100644 --- a/stdlib/LibGit2/test/libgit2-tests.jl +++ b/stdlib/LibGit2/test/libgit2-tests.jl @@ -3,6 +3,7 @@ module LibGit2Tests import LibGit2 +using LibGit2_jll using Test using Random, Serialization, Sockets @@ -129,7 +130,7 @@ end function get_global_dir() buf = Ref(LibGit2.Buffer()) - LibGit2.@check @ccall "libgit2".git_libgit2_opts( + LibGit2.@check @ccall libgit2.git_libgit2_opts( LibGit2.Consts.GET_SEARCH_PATH::Cint; LibGit2.Consts.CONFIG_LEVEL_GLOBAL::Cint, buf::Ptr{LibGit2.Buffer})::Cint @@ -139,7 +140,7 @@ function get_global_dir() end function set_global_dir(dir) - LibGit2.@check @ccall "libgit2".git_libgit2_opts( + LibGit2.@check @ccall libgit2.git_libgit2_opts( LibGit2.Consts.SET_SEARCH_PATH::Cint; LibGit2.Consts.CONFIG_LEVEL_GLOBAL::Cint, dir::Cstring)::Cint @@ -1163,7 +1164,7 @@ mktempdir() do dir # test workaround for git_tree_walk issue # https://github.com/libgit2/libgit2/issues/4693 - ccall((:giterr_set_str, :libgit2), Cvoid, (Cint, Cstring), + ccall((:giterr_set_str, libgit2), Cvoid, (Cint, Cstring), Cint(LibGit2.Error.Invalid), "previous error") try # file needs to exist in tree in order to trigger the stop walk condition diff --git a/test/precompile.jl b/test/precompile.jl index d76a5a9a16f85..82f445a115fee 100644 --- a/test/precompile.jl +++ b/test/precompile.jl @@ -388,25 +388,21 @@ precompile_test_harness(false) do dir @test_throws ErrorException Base.read_dependency_src(cachefile, joinpath(dir, "foo.jl")) modules, deps1 = Base.cache_dependencies(cachefile) - @test Dict(modules) == merge( + modules_ok = merge( Dict(let m = Base.PkgId(s) m => Base.module_build_id(Base.root_module(m)) end for s in [ "Base", "Core", "Main", - string(Foo2_module), string(FooBase_module) ]), + string(Foo2_module), string(FooBase_module),]), # plus modules included in the system image Dict(let m = Base.root_module(Base, s) Base.PkgId(m) => Base.module_build_id(m) - end for s in - [:ArgTools, :Artifacts, :Base64, :CRC32c, :Dates, - :Downloads, :FileWatching, :Future, :InteractiveUtils, :libblastrampoline_jll, - :LibCURL, :LibCURL_jll, :LibGit2, :Libdl, :LinearAlgebra, - :Logging, :Markdown, :Mmap, :MozillaCACerts_jll, :NetworkOptions, :OpenBLAS_jll, :Pkg, :Printf, - :p7zip_jll, :REPL, :Random, :SHA, :Serialization, :Sockets, - :TOML, :Tar, :Test, :UUIDs, :Unicode, - :nghttp2_jll] - ), + end for s in [Symbol(x.name) for x in Base._sysimage_modules if !(x.name in ["Base", "Core", "Main"])]), + # plus test module, + Dict(Base.PkgId(Base.root_module(Base, :Test)) => Base.module_build_id(Base.root_module(Base, :Test))) ) + @test Dict(modules) == modules_ok + @test discard_module.(deps) == deps1 modules, (deps, requires), required_modules, _... = Base.parse_cache_header(cachefile; srcfiles_only=true) @test map(x -> x.filename, deps) == [Foo_file] From f0758b02a2371b354f551c5529c35f33f2372638 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Sun, 17 Sep 2023 10:08:37 -0400 Subject: [PATCH 132/413] Precompile pidlocks: add to NEWS and docs (#50385) --- NEWS.md | 3 +++ doc/src/manual/environment-variables.md | 2 +- doc/src/manual/faq.md | 20 +++++++++----------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/NEWS.md b/NEWS.md index 713d28d2b9036..576c38e79cefc 100644 --- a/NEWS.md +++ b/NEWS.md @@ -37,6 +37,9 @@ Compiler/Runtime improvements * The mark phase of the garbage collector is now multi-threaded ([#48600]). * [JITLink](https://llvm.org/docs/JITLink.html) is enabled by default on Linux aarch64 when Julia is linked to LLVM 15 or later versions ([#49745]). This should resolve many segmentation faults previously observed on this platform. +* The precompilation process now uses pidfile locks and orchestrates multiple julia processes to only have one process + spend effort precompiling while the others wait. Previously all would do the work and race to overwrite the cache files. + ([#49052]) Command-line option changes --------------------------- diff --git a/doc/src/manual/environment-variables.md b/doc/src/manual/environment-variables.md index eb26063a5e61e..ce6d628b2f0e7 100644 --- a/doc/src/manual/environment-variables.md +++ b/doc/src/manual/environment-variables.md @@ -378,7 +378,7 @@ should have at the terminal. ## System and Package Image Building -### `JULIA_CPU_TARGET` +### [`JULIA_CPU_TARGET`](@id JULIA_CPU_TARGET) Modify the target machine architecture for (pre)compiling [system](@ref sysimg-multi-versioning) and [package images](@ref pkgimgs-multi-versioning). diff --git a/doc/src/manual/faq.md b/doc/src/manual/faq.md index bdecb5ecf106f..b04c9585e30f3 100644 --- a/doc/src/manual/faq.md +++ b/doc/src/manual/faq.md @@ -1035,17 +1035,15 @@ Modifying OpenBLAS settings or compiling Julia with a different BLAS library, eg ### How do I manage precompilation caches in distributed file systems? -When using `julia` in high-performance computing (HPC) facilities, invoking -_n_ `julia` processes simultaneously creates at most _n_ temporary copies of -precompilation cache files. If this is an issue (slow and/or small distributed -file system), you may: - -1. Use `julia` with `--compiled-modules=no` flag to turn off precompilation. -2. Configure a private writable depot using `pushfirst!(DEPOT_PATH, private_path)` - where `private_path` is a path unique to this `julia` process. This - can also be done by setting environment variable `JULIA_DEPOT_PATH` to - `$private_path:$HOME/.julia`. -3. Create a symlink from `~/.julia/compiled` to a directory in a scratch space. +When using Julia in high-performance computing (HPC) facilities with shared filesystems, it is recommended to use a shared +depot (via the `JULIA_DEPOT_PATH` environment variable). Since Julia v1.10, multiple Julia processes on functionally similar +workers and using the same depot will coordinate via pidfile locks to only spend effort precompiling on one process while the +others wait. The precompilation process will indicate when the process is precompiling or waiting for another that is +precompiling. If non-interactive the messages are via `@debug`. + +However, due to caching of binary code, the cache rejection since v1.9 is more strict and users may need to set the +[`JULIA_CPU_TARGET`](@ref JULIA_CPU_TARGET) environment variable appropriately to get a single cache that is usable throughout the HPC +environment. ## Julia Releases From b407e1b2d4e77a4a2660a3dc847c19cf2dfb61ef Mon Sep 17 00:00:00 2001 From: Dilum Aluthge Date: Sun, 17 Sep 2023 22:15:27 -0400 Subject: [PATCH 133/413] testdefs: make sure that if a test set changes the active project, they change it back when they're done (#51029) We already check the following for mutation by a test set: 1. DEPOT_PATH 2. LOAD_PATH 3. ENV So this PR just adds the active project to the list of things we check. Changing the active project during a test set can definitely have negative effects on subsequent test sets that are run on the same worker, so we want to make sure if a test set changes the active project, that they change it back when they're done. (cherry picked from commit 106e867e6c28347e42b91905d526cc4908e50ec3) --- test/testdefs.jl | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/testdefs.jl b/test/testdefs.jl index 4aac988cda7fb..8417fb09cca5b 100644 --- a/test/testdefs.jl +++ b/test/testdefs.jl @@ -25,6 +25,7 @@ function runtests(name, path, isolate=true; seed=nothing) original_depot_path = copy(Base.DEPOT_PATH) original_load_path = copy(Base.LOAD_PATH) original_env = copy(ENV) + original_project = Base.active_project() Base.include(m, "$path.jl") @@ -63,6 +64,17 @@ function runtests(name, path, isolate=true; seed=nothing) error(msg) end end + if Base.active_project() != original_project + msg = "The `$(name)` test set changed the active project and did not restore the original value" + @error( + msg, + original_project, + Base.active_project(), + testset_name = name, + testset_path = path, + ) + error(msg) + end end rss = Sys.maxrss() #res_and_time_data[1] is the testset From 491dfb5f30f590842c9e3da419cbfce3ae0217b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Drvo=C5=A1t=C4=9Bp?= Date: Mon, 25 Sep 2023 12:56:49 +0200 Subject: [PATCH 134/413] Backport a fix for GMP patches to `backports-release-1.10` (#51445) This backports `Fixes and improvements for source builds (#51422)` PR to the `backports-release-1.10` branch to make it buildable without binary builder (we are monitoring that branch in our CI to make sure we are up to date with the upcoming 1.10 release). Co-authored-by: Tim Besard --- Make.inc | 2 +- deps/gmp.mk | 10 +++++----- deps/llvm.mk | 6 +++--- deps/patches/gmp-more_alloc_overflow.patch | 14 +++++++------- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/Make.inc b/Make.inc index 4eacd49e5155a..1163f66c2fdbd 100644 --- a/Make.inc +++ b/Make.inc @@ -1171,7 +1171,7 @@ endif # We need python for things like BB triplet recognition. We don't really care # about version, generally, so just find something that works: -PYTHON := "$(shell which python 2>/dev/null || which python3 2>/dev/null || which python2 2>/dev/null || echo not found)" +PYTHON := $(shell which python 2>/dev/null || which python3 2>/dev/null || which python2 2>/dev/null || echo not found) PYTHON_SYSTEM := $(shell $(PYTHON) -c 'from __future__ import print_function; import platform; print(platform.system())') # If we're running on Cygwin, but using a native-windows Python, we need to use cygpath -w diff --git a/deps/gmp.mk b/deps/gmp.mk index 0ebabe53acf8d..491d649e9202f 100644 --- a/deps/gmp.mk +++ b/deps/gmp.mk @@ -39,27 +39,27 @@ checksum-gmp: $(SRCCACHE)/gmp-$(GMP_VER).tar.bz2 # Necessary for version 6.2.1, remove after next gmp release $(SRCCACHE)/gmp-$(GMP_VER)/gmp-HG-changeset.patch-applied: $(SRCCACHE)/gmp-$(GMP_VER)/source-extracted cd $(dir $@) && \ - patch -p1 < $(SRCDIR)/patches/gmp-HG-changeset.patch + patch -p1 -f < $(SRCDIR)/patches/gmp-HG-changeset.patch echo 1 > $@ $(SRCCACHE)/gmp-$(GMP_VER)/gmp-exception.patch-applied: $(SRCCACHE)/gmp-$(GMP_VER)/gmp-HG-changeset.patch-applied cd $(dir $@) && \ - patch -p1 < $(SRCDIR)/patches/gmp-exception.patch + patch -p1 -f < $(SRCDIR)/patches/gmp-exception.patch echo 1 > $@ $(SRCCACHE)/gmp-$(GMP_VER)/gmp_alloc_overflow_func.patch-applied: $(SRCCACHE)/gmp-$(GMP_VER)/gmp-exception.patch-applied cd $(dir $@) && \ - patch -p1 < $(SRCDIR)/patches/gmp_alloc_overflow_func.patch + patch -p1 -f < $(SRCDIR)/patches/gmp_alloc_overflow_func.patch echo 1 > $@ $(SRCCACHE)/gmp-$(GMP_VER)/gmp-CVE-2021-43618.patch-applied: $(SRCCACHE)/gmp-$(GMP_VER)/gmp_alloc_overflow_func.patch-applied cd $(dir $@) && \ - patch -p1 < $(SRCDIR)/patches/gmp-CVE-2021-43618.patch + patch -p1 -f < $(SRCDIR)/patches/gmp-CVE-2021-43618.patch echo 1 > $@ $(SRCCACHE)/gmp-$(GMP_VER)/gmp-more_alloc_overflow.patch-applied: $(SRCCACHE)/gmp-$(GMP_VER)/gmp-CVE-2021-43618.patch-applied cd $(dir $@) && \ - patch -p1 < $(SRCDIR)/patches/gmp-more_alloc_overflow.patch + patch -p1 -f < $(SRCDIR)/patches/gmp-more_alloc_overflow.patch echo 1 > $@ $(SRCCACHE)/gmp-$(GMP_VER)/source-patched: $(SRCCACHE)/gmp-$(GMP_VER)/gmp-more_alloc_overflow.patch-applied diff --git a/deps/llvm.mk b/deps/llvm.mk index 2a8365dd73e75..a06db1fb0781b 100644 --- a/deps/llvm.mk +++ b/deps/llvm.mk @@ -214,7 +214,7 @@ LLVM_CMAKE += -DLLVM_SHLIB_SYMBOL_VERSION:STRING="JL_LLVM_$(LLVM_VER_SHORT)" LLVM_PATCH_PREV := define LLVM_PATCH $$(SRCCACHE)/$$(LLVM_SRC_DIR)/$1.patch-applied: $$(SRCCACHE)/$$(LLVM_SRC_DIR)/source-extracted | $$(SRCDIR)/patches/$1.patch $$(LLVM_PATCH_PREV) - cd $$(SRCCACHE)/$$(LLVM_SRC_DIR)/llvm && patch -p1 < $$(SRCDIR)/patches/$1.patch + cd $$(SRCCACHE)/$$(LLVM_SRC_DIR)/llvm && patch -p1 -f < $$(SRCDIR)/patches/$1.patch echo 1 > $$@ # declare that applying any patch must re-run the compile step $$(LLVM_BUILDDIR_withtype)/build-compiled: $$(SRCCACHE)/$$(LLVM_SRC_DIR)/$1.patch-applied @@ -223,7 +223,7 @@ endef define LLVM_PROJ_PATCH $$(SRCCACHE)/$$(LLVM_SRC_DIR)/$1.patch-applied: $$(SRCCACHE)/$$(LLVM_SRC_DIR)/source-extracted | $$(SRCDIR)/patches/$1.patch $$(LLVM_PATCH_PREV) - cd $$(SRCCACHE)/$$(LLVM_SRC_DIR) && patch -p1 < $$(SRCDIR)/patches/$1.patch + cd $$(SRCCACHE)/$$(LLVM_SRC_DIR) && patch -p1 -f < $$(SRCDIR)/patches/$1.patch echo 1 > $$@ # declare that applying any patch must re-run the compile step $$(LLVM_BUILDDIR_withtype)/build-compiled: $$(SRCCACHE)/$$(LLVM_SRC_DIR)/$1.patch-applied @@ -249,7 +249,7 @@ $(BUILDDIR)/julia-patches.patch: # Apply the patch. $(SRCCACHE)/$(LLVM_SRC_DIR)/julia-patches.patch-applied: $(BUILDDIR)/julia-patches.patch $(SRCCACHE)/$(LLVM_SRC_DIR)/source-extracted - cd $(SRCCACHE)/$(LLVM_SRC_DIR) && patch -p1 < $(realpath $<) + cd $(SRCCACHE)/$(LLVM_SRC_DIR) && patch -p1 -f < $(realpath $<) echo 1 > $@ # Require application of Julia's patchset before configuring LLVM. diff --git a/deps/patches/gmp-more_alloc_overflow.patch b/deps/patches/gmp-more_alloc_overflow.patch index 09d07d7dbd8d5..597f0d52d73e7 100644 --- a/deps/patches/gmp-more_alloc_overflow.patch +++ b/deps/patches/gmp-more_alloc_overflow.patch @@ -1,6 +1,6 @@ -diff -ur gmp-6.2.1.orig/mpz/n_pow_ui.c gmp-6.2.1/mpz/n_pow_ui.c ---- gmp-6.2.1.orig/mpz/n_pow_ui.c 2023-09-08 11:41:16.620551175 +0200 -+++ gmp-6.2.1/mpz/n_pow_ui.c 2023-09-08 12:49:29.650492180 +0200 +diff -ur a/mpz/n_pow_ui.c b/mpz/n_pow_ui.c +--- a/mpz/n_pow_ui.c ++++ b/mpz/n_pow_ui.c @@ -220,8 +220,7 @@ umul_ppmm (ovfl, rtwos_bits, e, btwos); if (ovfl) @@ -21,10 +21,10 @@ diff -ur gmp-6.2.1.orig/mpz/n_pow_ui.c gmp-6.2.1/mpz/n_pow_ui.c } ralloc = ralloc / GMP_NUMB_BITS + 5; -diff -ur gmp-6.2.1.orig/tal-reent.c gmp-6.2.1/tal-reent.c ---- gmp-6.2.1.orig/tal-reent.c 2020-11-14 19:45:09.000000000 +0100 -+++ gmp-6.2.1/tal-reent.c 2023-09-08 12:10:34.061357613 +0200 -@@ -61,6 +61,11 @@ +diff -ur a/tal-reent.c b/tal-reent.c +--- a/tal-reent.c ++++ b/tal-reent.c +@@ -61,6 +61,10 @@ total_size = size + HSIZ; p = __GMP_ALLOCATE_FUNC_TYPE (total_size, char); From f9ef654b6393e54ad6284d36a32f1fc56af17b05 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Wed, 20 Sep 2023 12:58:54 +0900 Subject: [PATCH 135/413] inference: handle `Vararg` in `abstract_call_unionall` for `argtypes` computed by `abstract_apply` (#51393) This commit adds special handling for `Vararg` types that may appear at the end of `argtypes`, as computed by `abstract_apply`. Even though PR within the abstract state, they can still be part of `argtypes`. As a result, this kind of special handling is still necessary. It remains an open question whether we can refactor `abstract_apply` to prevent `Vararg`s from appearing in `argtypes` in the first place. --- base/compiler/abstractinterpretation.jl | 7 ++++++- test/compiler/inference.jl | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 973c7dc6f879b..f256f5438bb90 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -1874,7 +1874,12 @@ function abstract_call_unionall(interp::AbstractInterpreter, argtypes::Vector{An a2 = argtypes[2] a3 = argtypes[3] ⊑ᵢ = ⊑(typeinf_lattice(interp)) - nothrow = a2 ⊑ᵢ TypeVar && (a3 ⊑ᵢ Type || a3 ⊑ᵢ TypeVar) + if isvarargtype(a3) + a3 = unwrapva(a3) + nothrow = false + else + nothrow = a2 ⊑ᵢ TypeVar && (a3 ⊑ᵢ Type || a3 ⊑ᵢ TypeVar) + end if isa(a3, Const) body = a3.val elseif isType(a3) diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index 8b980f1fdb17c..25190fe0c16ff 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -5,7 +5,7 @@ import Core.Compiler: Const, Conditional, ⊑, ReturnNode, GotoIfNot isdispatchelem(@nospecialize x) = !isa(x, Type) || Core.Compiler.isdispatchelem(x) using Random, Core.IR -using InteractiveUtils: code_llvm +using InteractiveUtils include("irutils.jl") @@ -5101,3 +5101,8 @@ end |> only === Val{5} @test fully_eliminated() do length(continue_const_prop(1, 5)) end + +# https://github.com/JuliaLang/julia/issues/51310 +@test code_typed() do + b{c} = d... +end |> only |> first isa Core.CodeInfo From ae8f9ad5b8c5f5b0c217d99e83657405dbeb1913 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Fri, 22 Sep 2023 02:28:46 +0900 Subject: [PATCH 136/413] inference: follow up the `Vararg` fix in `abstract_call_unionall` (#51403) --- base/compiler/abstractinterpretation.jl | 66 ++++++++++++++----------- test/compiler/inference.jl | 8 +++ 2 files changed, 44 insertions(+), 30 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index f256f5438bb90..11d81dc3d0935 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -1869,44 +1869,50 @@ function abstract_call_builtin(interp::AbstractInterpreter, f::Builtin, (; fargs end function abstract_call_unionall(interp::AbstractInterpreter, argtypes::Vector{Any}) - if length(argtypes) == 3 - canconst = true + na = length(argtypes) + if isvarargtype(argtypes[end]) + if na ≤ 2 + return CallMeta(Any, EFFECTS_THROWS, NoCallInfo()) + elseif na > 4 + return CallMeta(Bottom, EFFECTS_THROWS, NoCallInfo()) + end + a2 = argtypes[2] + a3 = unwrapva(argtypes[3]) + nothrow = false + elseif na == 3 a2 = argtypes[2] a3 = argtypes[3] ⊑ᵢ = ⊑(typeinf_lattice(interp)) - if isvarargtype(a3) - a3 = unwrapva(a3) - nothrow = false - else - nothrow = a2 ⊑ᵢ TypeVar && (a3 ⊑ᵢ Type || a3 ⊑ᵢ TypeVar) - end - if isa(a3, Const) - body = a3.val - elseif isType(a3) - body = a3.parameters[1] + nothrow = a2 ⊑ᵢ TypeVar && (a3 ⊑ᵢ Type || a3 ⊑ᵢ TypeVar) + else + return CallMeta(Bottom, EFFECTS_THROWS, NoCallInfo()) + end + canconst = true + if isa(a3, Const) + body = a3.val + elseif isType(a3) + body = a3.parameters[1] + canconst = false + else + return CallMeta(Any, Effects(EFFECTS_TOTAL; nothrow), NoCallInfo()) + end + if !(isa(body, Type) || isa(body, TypeVar)) + return CallMeta(Any, EFFECTS_THROWS, NoCallInfo()) + end + if has_free_typevars(body) + if isa(a2, Const) + tv = a2.val + elseif isa(a2, PartialTypeVar) + tv = a2.tv canconst = false else - return CallMeta(Any, Effects(EFFECTS_TOTAL; nothrow), NoCallInfo()) - end - if !(isa(body, Type) || isa(body, TypeVar)) return CallMeta(Any, EFFECTS_THROWS, NoCallInfo()) end - if has_free_typevars(body) - if isa(a2, Const) - tv = a2.val - elseif isa(a2, PartialTypeVar) - tv = a2.tv - canconst = false - else - return CallMeta(Any, EFFECTS_THROWS, NoCallInfo()) - end - isa(tv, TypeVar) || return CallMeta(Any, EFFECTS_THROWS, NoCallInfo()) - body = UnionAll(tv, body) - end - ret = canconst ? Const(body) : Type{body} - return CallMeta(ret, Effects(EFFECTS_TOTAL; nothrow), NoCallInfo()) + isa(tv, TypeVar) || return CallMeta(Any, EFFECTS_THROWS, NoCallInfo()) + body = UnionAll(tv, body) end - return CallMeta(Bottom, EFFECTS_THROWS, NoCallInfo()) + ret = canconst ? Const(body) : Type{body} + return CallMeta(ret, Effects(EFFECTS_TOTAL; nothrow), NoCallInfo()) end function abstract_invoke(interp::AbstractInterpreter, (; fargs, argtypes)::ArgInfo, si::StmtInfo, sv::AbsIntState) diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index 25190fe0c16ff..d767b2cfe3eb3 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -5106,3 +5106,11 @@ end @test code_typed() do b{c} = d... end |> only |> first isa Core.CodeInfo + +abstract_call_unionall_vararg(some::Some{Any}) = UnionAll(some.value...) +@test only(Base.return_types(abstract_call_unionall_vararg)) !== Union{} +let TV = TypeVar(:T) + t = Vector{TV} + some = Some{Any}((TV, t)) + @test abstract_call_unionall_vararg(some) isa UnionAll +end From e084a4013a3b8e1944dac199a5a92c2035cefffe Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Tue, 26 Sep 2023 14:28:20 -0300 Subject: [PATCH 137/413] Check if malloc has succeeded before updating GC counters (#51247) --- src/gc.c | 66 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 36 insertions(+), 30 deletions(-) diff --git a/src/gc.c b/src/gc.c index 7d847195dce8c..1984c92ec3c14 100644 --- a/src/gc.c +++ b/src/gc.c @@ -3639,7 +3639,8 @@ JL_DLLEXPORT void *jl_gc_counted_malloc(size_t sz) { jl_gcframe_t **pgcstack = jl_get_pgcstack(); jl_task_t *ct = jl_current_task; - if (pgcstack != NULL && ct->world_age) { + void *data = malloc(sz); + if (data != NULL && pgcstack != NULL && ct->world_age) { jl_ptls_t ptls = ct->ptls; maybe_collect(ptls); jl_atomic_store_relaxed(&ptls->gc_num.allocd, @@ -3654,14 +3655,15 @@ JL_DLLEXPORT void *jl_gc_counted_malloc(size_t sz) jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); } } - return malloc(sz); + return data; } JL_DLLEXPORT void *jl_gc_counted_calloc(size_t nm, size_t sz) { jl_gcframe_t **pgcstack = jl_get_pgcstack(); jl_task_t *ct = jl_current_task; - if (pgcstack != NULL && ct->world_age) { + void *data = calloc(nm, sz); + if (data != NULL && pgcstack != NULL && ct->world_age) { jl_ptls_t ptls = ct->ptls; maybe_collect(ptls); jl_atomic_store_relaxed(&ptls->gc_num.allocd, @@ -3676,7 +3678,7 @@ JL_DLLEXPORT void *jl_gc_counted_calloc(size_t nm, size_t sz) jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); } } - return calloc(nm, sz); + return data; } JL_DLLEXPORT void jl_gc_counted_free_with_size(void *p, size_t sz) @@ -3700,7 +3702,8 @@ JL_DLLEXPORT void *jl_gc_counted_realloc_with_old_size(void *p, size_t old, size { jl_gcframe_t **pgcstack = jl_get_pgcstack(); jl_task_t *ct = jl_current_task; - if (pgcstack != NULL && ct->world_age) { + void *data = realloc(p, sz); + if (data != NULL && pgcstack != NULL && ct->world_age) { jl_ptls_t ptls = ct->ptls; maybe_collect(ptls); if (!(sz < old)) @@ -3730,7 +3733,7 @@ JL_DLLEXPORT void *jl_gc_counted_realloc_with_old_size(void *p, size_t old, size } } } - return realloc(p, sz); + return data; } // allocation wrappers that save the size of allocations, to allow using @@ -3799,6 +3802,15 @@ JL_DLLEXPORT void *jl_gc_managed_malloc(size_t sz) size_t allocsz = LLT_ALIGN(sz, JL_CACHE_BYTE_ALIGNMENT); if (allocsz < sz) // overflow in adding offs, size was "negative" jl_throw(jl_memory_exception); + + int last_errno = errno; +#ifdef _OS_WINDOWS_ + DWORD last_error = GetLastError(); +#endif + void *b = malloc_cache_align(allocsz); + if (b == NULL) + jl_throw(jl_memory_exception); + jl_atomic_store_relaxed(&ptls->gc_num.allocd, jl_atomic_load_relaxed(&ptls->gc_num.allocd) + allocsz); jl_atomic_store_relaxed(&ptls->gc_num.malloc, @@ -3810,13 +3822,6 @@ JL_DLLEXPORT void *jl_gc_managed_malloc(size_t sz) jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + allocsz); jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); } - int last_errno = errno; -#ifdef _OS_WINDOWS_ - DWORD last_error = GetLastError(); -#endif - void *b = malloc_cache_align(allocsz); - if (b == NULL) - jl_throw(jl_memory_exception); #ifdef _OS_WINDOWS_ SetLastError(last_error); #endif @@ -3831,12 +3836,28 @@ static void *gc_managed_realloc_(jl_ptls_t ptls, void *d, size_t sz, size_t olds { if (can_collect) maybe_collect(ptls); - + int is_old_marked = jl_astaggedvalue(owner)->bits.gc == GC_OLD_MARKED; size_t allocsz = LLT_ALIGN(sz, JL_CACHE_BYTE_ALIGNMENT); if (allocsz < sz) // overflow in adding offs, size was "negative" jl_throw(jl_memory_exception); - if (jl_astaggedvalue(owner)->bits.gc == GC_OLD_MARKED) { + int last_errno = errno; +#ifdef _OS_WINDOWS_ + DWORD last_error = GetLastError(); +#endif + void *b; + if (isaligned) + b = realloc_cache_align(d, allocsz, oldsz); + else + b = realloc(d, allocsz); + if (b == NULL) + jl_throw(jl_memory_exception); +#ifdef _OS_WINDOWS_ + SetLastError(last_error); +#endif + errno = last_errno; + // gc_managed_realloc_ is currently used exclusively for resizing array buffers. + if (is_old_marked) { ptls->gc_cache.perm_scanned_bytes += allocsz - oldsz; inc_live_bytes(allocsz - oldsz); } @@ -3867,21 +3888,6 @@ static void *gc_managed_realloc_(jl_ptls_t ptls, void *d, size_t sz, size_t olds } } - int last_errno = errno; -#ifdef _OS_WINDOWS_ - DWORD last_error = GetLastError(); -#endif - void *b; - if (isaligned) - b = realloc_cache_align(d, allocsz, oldsz); - else - b = realloc(d, allocsz); - if (b == NULL) - jl_throw(jl_memory_exception); -#ifdef _OS_WINDOWS_ - SetLastError(last_error); -#endif - errno = last_errno; maybe_record_alloc_to_profile((jl_value_t*)b, sz, jl_gc_unknown_type_tag); return b; } From 404750f8586d77a7d1832e0dfb1b1931fcf191ac Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 3 Oct 2023 14:53:42 +0200 Subject: [PATCH 138/413] release-1.10: set VERSION to 1.10.0-beta3 (#51542) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 927070056a8c5..d15a9aa3a227f 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.0-beta2 +1.10.0-beta3 From 9c4cedccd338d4c75f5a3b032e3c9b94e524bdf1 Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Sat, 19 Aug 2023 21:36:52 -0400 Subject: [PATCH 139/413] Use rr-safe `nopl; rdtsc` sequence (#50975) When running under `rr`, it needs to patch out `rdtsc` to record the values returned. If this is not possible, `rr` falls back to an expensive signal-based emulation. As of rr master, a specific `nopl; rdtsc` sequence may be used to guarantee that `rdtsc` patching is always possible. Use this sequence for uses of rdtsc in our runtime. (cherry picked from commit ce3f97cd3c24f8e58e57f1a6112dffb5a5f6bf53) --- src/julia_internal.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/julia_internal.h b/src/julia_internal.h index cf65521770681..3e4c01365a2fc 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -208,8 +208,17 @@ JL_DLLEXPORT void jl_unlock_profile_wr(void) JL_NOTSAFEPOINT JL_NOTSAFEPOINT_LEA static inline uint64_t cycleclock(void) JL_NOTSAFEPOINT { #if defined(_CPU_X86_64_) + // This is nopl 0(%rax, %rax, 1), but assembler are incosistent about whether + // they emit that as a 4 or 5 byte sequence and we need to be guaranteed to use + // the 5 byte one. +#define NOP5_OVERRIDE_NOP ".byte 0x0f, 0x1f, 0x44, 0x00, 0x00\n\t" uint64_t low, high; - __asm__ volatile("rdtsc" : "=a"(low), "=d"(high)); + // This instruction sequence is promised by rr to be patchable. rr can usually + // also patch `rdtsc` in regular code, but without the preceeding nop, there could + // be an interfering branch into the middle of rr's patch region. Using this + // sequence prevents a massive rr-induced slowdown if the compiler happens to emit + // an unlucky pattern. See https://github.com/rr-debugger/rr/pull/3580. + __asm__ volatile(NOP5_OVERRIDE_NOP "rdtsc" : "=a"(low), "=d"(high)); return (high << 32) | low; #elif defined(_CPU_X86_) int64_t ret; From b248b6b19ed18d60431534f813510d7e01a2163c Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Thu, 14 Sep 2023 17:13:21 -0300 Subject: [PATCH 140/413] Avoid infinite loop when doing SIGTRAP in arm64-apple (#51284) The guard instruction for unreachables and other crashes in aarch64 is `brk`, in macos there isn't a distinction between a brk for a breakpoint and one for a crash, as an attempt we check the value of `pc` when the signal is triggered, if it is `brk #0x1` we say that it is a crash and go into the sigdie_handler. We should probably do the same in aarch64 linux, though I haven't dug too deep into what values it uses for traps, and if what compiler used matters, on apple I assumed we use clang/LLVM It might be possible to test this by calling some inline assembly. This means that something like https://github.com/JuliaLang/julia/issues/51267 actually crashes with ```c [16908] signal (5): Trace/BPT trap: 5 in expression starting at /Users/gabrielbaraldi/julia/test.jl:2 _collect at ./array.jl:768 collect at ./array.jl:757 top-level scope at /Users/gabrielbaraldi/julia/test.jl:5 _jl_invoke at /Users/gabrielbaraldi/julia/src/gf.c:2892 jl_toplevel_eval_flex at /Users/gabrielbaraldi/julia/src/toplevel.c:925 jl_toplevel_eval_flex at /Users/gabrielbaraldi/julia/src/toplevel.c:877 ijl_toplevel_eval at /Users/gabrielbaraldi/julia/src/toplevel.c:943 [inlined] ijl_toplevel_eval_in at /Users/gabrielbaraldi/julia/src/toplevel.c:985 eval at ./boot.jl:383 [inlined] include_string at ./loading.jl:2070 _jl_invoke at /Users/gabrielbaraldi/julia/src/gf.c:2873 ijl_apply_generic at /Users/gabrielbaraldi/julia/src/gf.c:3074 _include at ./loading.jl:2130 include at ./Base.jl:494 jfptr_include_46486 at /Users/gabrielbaraldi/julia/usr/lib/julia/sys.dylib (unknown line) _jl_invoke at /Users/gabrielbaraldi/julia/src/gf.c:2873 ijl_apply_generic at /Users/gabrielbaraldi/julia/src/gf.c:3074 exec_options at ./client.jl:317 _start at ./client.jl:552 jfptr__start_83179 at /Users/gabrielbaraldi/julia/usr/lib/julia/sys.dylib (unknown line) _jl_invoke at /Users/gabrielbaraldi/julia/src/gf.c:2873 ijl_apply_generic at /Users/gabrielbaraldi/julia/src/gf.c:3074 jl_apply at /Users/gabrielbaraldi/julia/src/./julia.h:1970 [inlined] true_main at /Users/gabrielbaraldi/julia/src/jlapi.c:582 jl_repl_entrypoint at /Users/gabrielbaraldi/julia/src/jlapi.c:731 Allocations: 570978 (Pool: 570031; Big: 947); GC: 1 fish: Job 1, './julia test.jl' terminated by signal SIGTRAP (Trace or breakpoint trap) ``` instead of hanging silently --------- Co-authored-by: Jameson Nash (cherry picked from commit d51ad06f664b3439b4aee51b5cd5edd6b9d53c69) --- src/signals-unix.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/signals-unix.c b/src/signals-unix.c index 4c21d25d3622c..b2056947e2b8a 100644 --- a/src/signals-unix.c +++ b/src/signals-unix.c @@ -994,6 +994,19 @@ static void sigint_handler(int sig) jl_sigint_passed = 1; } +#if defined(_OS_DARWIN_) && defined(_CPU_AARCH64_) +static void sigtrap_handler(int sig, siginfo_t *info, void *context) +{ + uintptr_t pc = ((ucontext_t*)context)->uc_mcontext->__ss.__pc; // TODO: Do this in linux as well + uint32_t* code = (uint32_t*)(pc); // https://gcc.gnu.org/legacy-ml/gcc-patches/2013-11/msg02228.html + if (*code == 0xd4200020) { // brk #0x1 which is what LLVM defines as trap + signal(sig, SIG_DFL); + sig = SIGILL; // redefine this as as an "unreachable reached" error message + sigdie_handler(sig, info, context); + } +} +#endif + void jl_install_default_signal_handlers(void) { struct sigaction actf; @@ -1004,6 +1017,20 @@ void jl_install_default_signal_handlers(void) if (sigaction(SIGFPE, &actf, NULL) < 0) { jl_errorf("fatal error: sigaction: %s", strerror(errno)); } +#if defined(_OS_DARWIN_) && defined(_CPU_AARCH64_) + struct sigaction acttrap; + memset(&acttrap, 0, sizeof(struct sigaction)); + sigemptyset(&acttrap.sa_mask); + acttrap.sa_sigaction = sigtrap_handler; + acttrap.sa_flags = SA_ONSTACK | SA_SIGINFO; + if (sigaction(SIGTRAP, &acttrap, NULL) < 0) { + jl_errorf("fatal error: sigaction: %s", strerror(errno)); + } +#else + if (signal(SIGTRAP, SIG_IGN) == SIG_ERR) { + jl_error("fatal error: Couldn't set SIGTRAP"); + } +#endif struct sigaction actint; memset(&actint, 0, sizeof(struct sigaction)); sigemptyset(&actint.sa_mask); @@ -1015,9 +1042,6 @@ void jl_install_default_signal_handlers(void) if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) { jl_error("fatal error: Couldn't set SIGPIPE"); } - if (signal(SIGTRAP, SIG_IGN) == SIG_ERR) { - jl_error("fatal error: Couldn't set SIGTRAP"); - } #if defined(HAVE_MACH) allocate_mach_handler(); From 4f6a4f47c2ba0a2114e4c4ab9691f947aec2fbb7 Mon Sep 17 00:00:00 2001 From: Nathan Zimmerberg <39104088+nhz2@users.noreply.github.com> Date: Fri, 15 Sep 2023 18:28:26 -0400 Subject: [PATCH 141/413] [Random] Add s4 field to Xoshiro type (#51332) This PR adds an optional field to the existing `Xoshiro` struct to be able to faithfully copy the task-local RNG state. Fixes #51255 Redo of #51271 Background context: #49110 added an additional state to the task-local RNG. However, before this PR `copy(default_rng())` did not include this extra state, causing subtle errors in `Test` where `copy(default_rng())` is assumed to contain the full task-local RNG state. (cherry picked from commit 41b41abb3ce87dc22fca70475d8a46e19feba4de) --- stdlib/Random/src/Xoshiro.jl | 45 ++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/stdlib/Random/src/Xoshiro.jl b/stdlib/Random/src/Xoshiro.jl index 3be276ad23754..a25e2c1077e04 100644 --- a/stdlib/Random/src/Xoshiro.jl +++ b/stdlib/Random/src/Xoshiro.jl @@ -48,28 +48,37 @@ mutable struct Xoshiro <: AbstractRNG s1::UInt64 s2::UInt64 s3::UInt64 + s4::UInt64 # internal splitmix state - Xoshiro(s0::Integer, s1::Integer, s2::Integer, s3::Integer) = new(s0, s1, s2, s3) + Xoshiro(s0::Integer, s1::Integer, s2::Integer, s3::Integer, s4::Integer) = new(s0, s1, s2, s3, s4) + Xoshiro(s0::UInt64, s1::UInt64, s2::UInt64, s3::UInt64) = new(s0, s1, s2, s3, 1s0 + 3s1 + 5s2 + 7s3) Xoshiro(seed=nothing) = seed!(new(), seed) end -function setstate!(x::Xoshiro, s0::UInt64, s1::UInt64, s2::UInt64, s3::UInt64) +Xoshiro(s0::Integer, s1::Integer, s2::Integer, s3::Integer) = Xoshiro(UInt64(s0), UInt64(s1), UInt64(s2), UInt64(s3)) + +function setstate!( + x::Xoshiro, + s0::UInt64, s1::UInt64, s2::UInt64, s3::UInt64, # xoshiro256 state + s4::UInt64, # internal splitmix state +) x.s0 = s0 x.s1 = s1 x.s2 = s2 x.s3 = s3 + x.s4 = s4 x end -copy(rng::Xoshiro) = Xoshiro(rng.s0, rng.s1, rng.s2, rng.s3) +copy(rng::Xoshiro) = Xoshiro(rng.s0, rng.s1, rng.s2, rng.s3, rng.s4) function copy!(dst::Xoshiro, src::Xoshiro) - dst.s0, dst.s1, dst.s2, dst.s3 = src.s0, src.s1, src.s2, src.s3 + dst.s0, dst.s1, dst.s2, dst.s3, dst.s4 = src.s0, src.s1, src.s2, src.s3, src.s4 dst end function ==(a::Xoshiro, b::Xoshiro) - a.s0 == b.s0 && a.s1 == b.s1 && a.s2 == b.s2 && a.s3 == b.s3 + a.s0 == b.s0 && a.s1 == b.s1 && a.s2 == b.s2 && a.s3 == b.s3 && a.s4 == b.s4 end rng_native_52(::Xoshiro) = UInt64 @@ -116,7 +125,7 @@ rng_native_52(::TaskLocalRNG) = UInt64 function setstate!( x::TaskLocalRNG, s0::UInt64, s1::UInt64, s2::UInt64, s3::UInt64, # xoshiro256 state - s4::UInt64 = 1s0 + 3s1 + 5s2 + 7s3, # internal splitmix state + s4::UInt64, # internal splitmix state ) t = current_task() t.rngState0 = s0 @@ -148,14 +157,20 @@ end function seed!(rng::Union{TaskLocalRNG,Xoshiro}) # as we get good randomness from RandomDevice, we can skip hashing rd = RandomDevice() - setstate!(rng, rand(rd, UInt64), rand(rd, UInt64), rand(rd, UInt64), rand(rd, UInt64)) + s0 = rand(rd, UInt64) + s1 = rand(rd, UInt64) + s2 = rand(rd, UInt64) + s3 = rand(rd, UInt64) + s4 = 1s0 + 3s1 + 5s2 + 7s3 + setstate!(rng, s0, s1, s2, s3, s4) end function seed!(rng::Union{TaskLocalRNG,Xoshiro}, seed::Union{Vector{UInt32}, Vector{UInt64}}) c = SHA.SHA2_256_CTX() SHA.update!(c, reinterpret(UInt8, seed)) s0, s1, s2, s3 = reinterpret(UInt64, SHA.digest!(c)) - setstate!(rng, s0, s1, s2, s3) + s4 = 1s0 + 3s1 + 5s2 + 7s3 + setstate!(rng, s0, s1, s2, s3, s4) end seed!(rng::Union{TaskLocalRNG, Xoshiro}, seed::Integer) = seed!(rng, make_seed(seed)) @@ -178,24 +193,30 @@ end function copy(rng::TaskLocalRNG) t = current_task() - Xoshiro(t.rngState0, t.rngState1, t.rngState2, t.rngState3) + Xoshiro(t.rngState0, t.rngState1, t.rngState2, t.rngState3, t.rngState4) end function copy!(dst::TaskLocalRNG, src::Xoshiro) t = current_task() - setstate!(dst, src.s0, src.s1, src.s2, src.s3) + setstate!(dst, src.s0, src.s1, src.s2, src.s3, src.s4) return dst end function copy!(dst::Xoshiro, src::TaskLocalRNG) t = current_task() - setstate!(dst, t.rngState0, t.rngState1, t.rngState2, t.rngState3) + setstate!(dst, t.rngState0, t.rngState1, t.rngState2, t.rngState3, t.rngState4) return dst end function ==(a::Xoshiro, b::TaskLocalRNG) t = current_task() - a.s0 == t.rngState0 && a.s1 == t.rngState1 && a.s2 == t.rngState2 && a.s3 == t.rngState3 + ( + a.s0 == t.rngState0 && + a.s1 == t.rngState1 && + a.s2 == t.rngState2 && + a.s3 == t.rngState3 && + a.s4 == t.rngState4 + ) end ==(a::TaskLocalRNG, b::Xoshiro) = b == a From 0c39aef634ba4afab029f00e5c704031ca2a0aa0 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Wed, 20 Sep 2023 14:08:52 +0200 Subject: [PATCH 142/413] call Pkg precompile hook in latest world (#51397) Fixes https://github.com/JuliaLang/julia/issues/51280. (cherry picked from commit c22adc04994518e198d840ae5da9ebd89bb41451) --- base/loading.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/loading.jl b/base/loading.jl index dd7038845f4f8..ef0d5e4bf6f5f 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -1954,7 +1954,7 @@ function _require(pkg::PkgId, env=nothing) pkg_precompile_attempted = true unlock(require_lock) try - PKG_PRECOMPILE_HOOK[](pkg.name, _from_loading = true) + @invokelatest PKG_PRECOMPILE_HOOK[](pkg.name, _from_loading = true) finally lock(require_lock) end From 77b74c3ff7df1e1b0bcdb2ae1552229fff2d30ed Mon Sep 17 00:00:00 2001 From: Nicholas Bauer Date: Thu, 28 Sep 2023 09:47:25 -0400 Subject: [PATCH 143/413] Remove fallback that assigns a module to inlined frames. (#51405) The work I did in #41099 introduced code which, if method information could not be found for an inlined frame, would fall back to use the module of the next-higher stack frame. This often worked there because the only frames that would not be assigned a module at this point would be e.g., `macro expansion` frames. However, due to the performance impact of the way method roots are currently encoded, the extra method roots were removed in #50546. The result is that inlined frames were being assigned a potentially incorrect module, rather than being left blank. Example: ``` julia> @btime plot([1 2 3], seriestype = :blah) ... [13] #invokelatest#2 @ BenchmarkTools ./essentials.jl:901 [inlined] [14] invokelatest @ BenchmarkTools ./essentials.jl:896 [inlined] ... ``` (cherry picked from commit ed891d6751def90f449e2f37a079514a2089a2fb) --- base/stacktraces.jl | 1 - 1 file changed, 1 deletion(-) diff --git a/base/stacktraces.jl b/base/stacktraces.jl index 9c942814eefad..bb70b7ea1c099 100644 --- a/base/stacktraces.jl +++ b/base/stacktraces.jl @@ -206,7 +206,6 @@ Base.@constprop :none function lookup(pointer::Ptr{Cvoid}) elseif miroots !== nothing linfo = lookup_inline_frame_info(func, file, miroots) end - linfo = linfo === nothing ? parentmodule(res[i + 1]) : linfo # e.g. `macro expansion` end res[i] = StackFrame(func, file, linenum, linfo, info[5]::Bool, info[6]::Bool, pointer) end From 765c1af13bcc6dd6387c4be9556202f617e65c08 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Thu, 28 Sep 2023 15:57:19 -0400 Subject: [PATCH 144/413] Throw clearer ArgumentError for strip with two string args (#51491) (cherry picked from commit 66fe51f0ad9531fa782c4dece0669076456f396c) --- base/strings/util.jl | 4 ++++ test/strings/util.jl | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/base/strings/util.jl b/base/strings/util.jl index c77d45255a735..bd4da03ce1571 100644 --- a/base/strings/util.jl +++ b/base/strings/util.jl @@ -369,6 +369,7 @@ function lstrip(f, s::AbstractString) end lstrip(s::AbstractString) = lstrip(isspace, s) lstrip(s::AbstractString, chars::Chars) = lstrip(in(chars), s) +lstrip(::AbstractString, ::AbstractString) = throw(ArgumentError("Both arguments are strings. The second argument should be a `Char` or collection of `Char`s")) """ rstrip([pred=isspace,] str::AbstractString) -> SubString @@ -402,6 +403,8 @@ function rstrip(f, s::AbstractString) end rstrip(s::AbstractString) = rstrip(isspace, s) rstrip(s::AbstractString, chars::Chars) = rstrip(in(chars), s) +rstrip(::AbstractString, ::AbstractString) = throw(ArgumentError("Both arguments are strings. The second argument should be a `Char` or collection of `Char`s")) + """ strip([pred=isspace,] str::AbstractString) -> SubString @@ -429,6 +432,7 @@ julia> strip("{3, 5}\\n", ['{', '}', '\\n']) """ strip(s::AbstractString) = lstrip(rstrip(s)) strip(s::AbstractString, chars::Chars) = lstrip(rstrip(s, chars), chars) +strip(::AbstractString, ::AbstractString) = throw(ArgumentError("Both arguments are strings. The second argument should be a `Char` or collection of `Char`s")) strip(f, s::AbstractString) = lstrip(f, rstrip(f, s)) ## string padding functions ## diff --git a/test/strings/util.jl b/test/strings/util.jl index 8b58c2f36d8c4..0ad958eebb7f9 100644 --- a/test/strings/util.jl +++ b/test/strings/util.jl @@ -89,6 +89,10 @@ end @test rstrip(isnumeric, "abc0123") == "abc" @test lstrip("ello", ['e','o']) == "llo" @test rstrip("ello", ['e','o']) == "ell" + + @test_throws ArgumentError strip("", "") + @test_throws ArgumentError lstrip("", "") + @test_throws ArgumentError rstrip("", "") end @testset "partition" begin From 4dc08dcc93dd305907bbdff6717ad3feb4e958b5 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Sat, 30 Sep 2023 17:12:35 -0400 Subject: [PATCH 145/413] fix `_tryonce_download_from_cache` (busybox.exe download error) (#51531) (cherry picked from commit ca862df7bfc534d22d4d39d265d1f74d59c1ab77) --- test/spawn.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/spawn.jl b/test/spawn.jl index 0241c65573886..3fdfa794ff39e 100644 --- a/test/spawn.jl +++ b/test/spawn.jl @@ -22,7 +22,7 @@ lscmd = `ls` havebb = false function _tryonce_download_from_cache(desired_url::AbstractString) - cache_url = "https://cache.julialang.org/foo/$(desired_url)" + cache_url = "https://cache.julialang.org/$(desired_url)" cache_output_filename = joinpath(mktempdir(), "myfile") cache_response = Downloads.request( cache_url; From 0e9adddd33d7a1365125d333cd764dd080a8a5fd Mon Sep 17 00:00:00 2001 From: Jakob Nybo Nissen Date: Mon, 2 Oct 2023 13:13:24 +0200 Subject: [PATCH 146/413] Fix string index error in tab completion code, fixes #51540 (#51541) (cherry picked from commit 6ce15fce1cf92bd2d86d04ceccd501a383656b81) --- stdlib/REPL/src/REPLCompletions.jl | 2 +- stdlib/REPL/test/replcompletions.jl | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/stdlib/REPL/src/REPLCompletions.jl b/stdlib/REPL/src/REPLCompletions.jl index 20d26953eb22b..57797583de75f 100644 --- a/stdlib/REPL/src/REPLCompletions.jl +++ b/stdlib/REPL/src/REPLCompletions.jl @@ -943,7 +943,7 @@ function complete_identifiers!(suggestions::Vector{Completion}, @nospecialize(ff ex = nothing comp_keywords && append!(suggestions, complete_keyword(name)) if dotpos > 1 && string[dotpos] == '.' - s = string[1:dotpos-1] + s = string[1:prevind(string, dotpos)] # First see if the whole string up to `pos` is a valid expression. If so, use it. ex = Meta.parse(s, raise=false, depwarn=false) if isexpr(ex, :incomplete) diff --git a/stdlib/REPL/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl index b2199e10bef55..4c777a78cf593 100644 --- a/stdlib/REPL/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -23,6 +23,8 @@ let ex = quote end type_test = Test_x(Test_y(1)) (::Test_y)() = "", "" + unicode_αβγ = Test_y(1) + module CompletionFoo2 end @@ -253,6 +255,11 @@ let s = "Main.CompletionFoo.type_test.x" @test s[r] == "x" end +let s = "Main.CompletionFoo.unicode_αβγ.y" + c, r = test_complete(s) + @test "yy" in c +end + let s = "Main.CompletionFoo.bar.no_val_available" c, r = test_complete(s) @test length(c)==0 From e1f1cc8f71eb64f25ff138eaa2cbf9d6604d60b4 Mon Sep 17 00:00:00 2001 From: pchintalapudi <34727397+pchintalapudi@users.noreply.github.com> Date: Mon, 2 Oct 2023 12:42:23 +0000 Subject: [PATCH 147/413] Don't mark nonlocal symbols as hidden (#51530) Co-authored-by: Valentin Churavy (cherry picked from commit ac8246fa60b9b51b80b5d553d9e56d22e41d3206) --- src/aotcompile.cpp | 8 ++++++-- src/codegen.cpp | 4 ++++ src/staticdata.c | 12 ++++++------ 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index 05088394500c1..a1a8a40a5ce55 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -835,8 +835,12 @@ static SmallVector partitionModule(Module &M, unsigned threads) { continue; if (!canPartition(G)) continue; - G.setLinkage(GlobalValue::ExternalLinkage); - G.setVisibility(GlobalValue::HiddenVisibility); + // Currently ccallable global aliases have extern linkage, we only want to make the + // internally linked functions/global variables extern+hidden + if (G.hasLocalLinkage()) { + G.setLinkage(GlobalValue::ExternalLinkage); + G.setVisibility(GlobalValue::HiddenVisibility); + } if (auto F = dyn_cast(&G)) { partitioner.make(&G, getFunctionWeight(*F).weight); } else { diff --git a/src/codegen.cpp b/src/codegen.cpp index f72c2ae2056b9..9dc671dc0ea97 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -6801,6 +6801,10 @@ const char *jl_generate_ccallable(LLVMOrcThreadSafeModuleRef llvmmod, void *sysi int found = jl_dlsym(sysimg_handle, name, &addr, 0); if (found) add_named_global(name, addr); + else { + err = jl_get_exceptionf(jl_errorexception_type, "%s not found in sysimg", name); + jl_throw(err); + } } else { jl_method_instance_t *lam = jl_get_specialization1((jl_tupletype_t*)sigt, world, &min_valid, &max_valid, 0); diff --git a/src/staticdata.c b/src/staticdata.c index a974d98a39835..31e7a4c812b1c 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -3371,7 +3371,7 @@ static jl_value_t *jl_validate_cache_file(ios_t *f, jl_array_t *depmods, uint64_ } // TODO?: refactor to make it easier to create the "package inspector" -static jl_value_t *jl_restore_package_image_from_stream(ios_t *f, jl_image_t *image, jl_array_t *depmods, int completeinfo, const char *pkgname, bool needs_permalloc) +static jl_value_t *jl_restore_package_image_from_stream(void* pkgimage_handle, ios_t *f, jl_image_t *image, jl_array_t *depmods, int completeinfo, const char *pkgname, bool needs_permalloc) { JL_TIMING(LOAD_IMAGE, LOAD_Pkgimg); jl_timing_printf(JL_TIMING_DEFAULT_BLOCK, pkgname); @@ -3426,7 +3426,7 @@ static jl_value_t *jl_restore_package_image_from_stream(ios_t *f, jl_image_t *im size_t world = jl_atomic_load_acquire(&jl_world_counter); jl_insert_backedges((jl_array_t*)edges, (jl_array_t*)ext_targets, (jl_array_t*)new_specializations, world); // restore external backedges (needs to be last) // reinit ccallables - jl_reinit_ccallable(&ccallable_list, base, NULL); + jl_reinit_ccallable(&ccallable_list, base, pkgimage_handle); arraylist_free(&ccallable_list); if (completeinfo) { @@ -3457,11 +3457,11 @@ static void jl_restore_system_image_from_stream(ios_t *f, jl_image_t *image, uin jl_restore_system_image_from_stream_(f, image, NULL, checksum | ((uint64_t)0xfdfcfbfa << 32), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); } -JL_DLLEXPORT jl_value_t *jl_restore_incremental_from_buf(const char *buf, jl_image_t *image, size_t sz, jl_array_t *depmods, int completeinfo, const char *pkgname, bool needs_permalloc) +JL_DLLEXPORT jl_value_t *jl_restore_incremental_from_buf(void* pkgimage_handle, const char *buf, jl_image_t *image, size_t sz, jl_array_t *depmods, int completeinfo, const char *pkgname, bool needs_permalloc) { ios_t f; ios_static_buffer(&f, (char*)buf, sz); - jl_value_t *ret = jl_restore_package_image_from_stream(&f, image, depmods, completeinfo, pkgname, needs_permalloc); + jl_value_t *ret = jl_restore_package_image_from_stream(pkgimage_handle, &f, image, depmods, completeinfo, pkgname, needs_permalloc); ios_close(&f); return ret; } @@ -3474,7 +3474,7 @@ JL_DLLEXPORT jl_value_t *jl_restore_incremental(const char *fname, jl_array_t *d "Cache file \"%s\" not found.\n", fname); } jl_image_t pkgimage = {}; - jl_value_t *ret = jl_restore_package_image_from_stream(&f, &pkgimage, depmods, completeinfo, pkgname, true); + jl_value_t *ret = jl_restore_package_image_from_stream(NULL, &f, &pkgimage, depmods, completeinfo, pkgname, true); ios_close(&f); return ret; } @@ -3545,7 +3545,7 @@ JL_DLLEXPORT jl_value_t *jl_restore_package_image_from_file(const char *fname, j jl_image_t pkgimage = jl_init_processor_pkgimg(pkgimg_handle); - jl_value_t* mod = jl_restore_incremental_from_buf(pkgimg_data, &pkgimage, *plen, depmods, completeinfo, pkgname, false); + jl_value_t* mod = jl_restore_incremental_from_buf(pkgimg_handle, pkgimg_data, &pkgimage, *plen, depmods, completeinfo, pkgname, false); return mod; } From 37a1b6fb53f43be2ab5c77729377dc52f33dd941 Mon Sep 17 00:00:00 2001 From: Rafael Fourquet Date: Fri, 22 Sep 2023 15:57:37 +0200 Subject: [PATCH 148/413] make `hash(::Xoshiro)` compatible with `==` (#51376) --- stdlib/Random/src/Xoshiro.jl | 8 ++++++ stdlib/Random/test/runtests.jl | 51 ++++++++++++++++++++++------------ 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/stdlib/Random/src/Xoshiro.jl b/stdlib/Random/src/Xoshiro.jl index a25e2c1077e04..cb050f9c56b5a 100644 --- a/stdlib/Random/src/Xoshiro.jl +++ b/stdlib/Random/src/Xoshiro.jl @@ -81,6 +81,8 @@ function ==(a::Xoshiro, b::Xoshiro) a.s0 == b.s0 && a.s1 == b.s1 && a.s2 == b.s2 && a.s3 == b.s3 && a.s4 == b.s4 end +hash(x::Xoshiro, h::UInt) = hash((x.s0, x.s1, x.s2, x.s3, x.s4), h + 0x49a62c2dda6fa9be % UInt) + rng_native_52(::Xoshiro) = UInt64 @inline function rand(rng::Xoshiro, ::SamplerType{UInt64}) @@ -221,6 +223,12 @@ end ==(a::TaskLocalRNG, b::Xoshiro) = b == a +function hash(x::TaskLocalRNG, h::UInt) + t = current_task() + hash((t.rngState0, t.rngState1, t.rngState2, t.rngState3, t.rngState4), h + 0x49a62c2dda6fa9be % UInt) +end + + # for partial words, use upper bits from Xoshiro rand(r::Union{TaskLocalRNG, Xoshiro}, ::SamplerTrivial{UInt52Raw{UInt64}}) = rand(r, UInt64) >>> 12 diff --git a/stdlib/Random/test/runtests.jl b/stdlib/Random/test/runtests.jl index 3f570d862b743..4fe30a50143d2 100644 --- a/stdlib/Random/test/runtests.jl +++ b/stdlib/Random/test/runtests.jl @@ -594,24 +594,41 @@ guardseed() do Random.seed!(typemax(UInt128)) end -# copy, == and hash -let seed = rand(UInt32, 10) - r = MersenneTwister(seed) - @test r == MersenneTwister(seed) # r.vals should be all zeros - @test hash(r) == hash(MersenneTwister(seed)) - s = copy(r) - @test s == r && s !== r - @test hash(s) == hash(r) - skip, len = rand(0:2000, 2) - for j=1:skip - rand(r) - rand(s) +@testset "copy, == and hash" begin + for RNG = (MersenneTwister, Xoshiro) + seed = rand(UInt32, 10) + r = RNG(seed) + t = RNG(seed) + @test r == t + @test hash(r) == hash(t) + s = copy(r) + @test s == r == t && s !== r + @test hash(s) == hash(r) + skip, len = rand(0:2000, 2) + for j=1:skip + rand(r) + @test r != s + @test hash(r) != hash(s) + rand(s) + end + @test rand(r, len) == rand(s, len) + @test s == r + @test hash(s) == hash(r) + h = rand(UInt) + @test hash(s, h) == hash(r, h) + if RNG == Xoshiro + t = copy(TaskLocalRNG()) + @test hash(t) == hash(TaskLocalRNG()) + @test hash(t, h) == hash(TaskLocalRNG(), h) + x = rand() + @test hash(t) != hash(TaskLocalRNG()) + @test rand(t) == x + @test hash(t) == hash(TaskLocalRNG()) + copy!(TaskLocalRNG(), r) + @test hash(TaskLocalRNG()) == hash(r) + @test TaskLocalRNG() == r + end end - @test rand(r, len) == rand(s, len) - @test s == r - @test hash(s) == hash(r) - h = rand(UInt) - @test hash(s, h) == hash(r, h) end # MersenneTwister initialization with invalid values From 510550b1471803d1c5bb9419d633e6cc9ba1498a Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Tue, 3 Oct 2023 20:24:16 -0400 Subject: [PATCH 149/413] Fix last startup & shutdown precompiles (#51557) (cherry picked from commit f2d1276be8a1d4831addb62376eb19550494d3d1) --- contrib/generate_precompile.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/contrib/generate_precompile.jl b/contrib/generate_precompile.jl index fea4ca6bc1fe3..7ad976e1e0106 100644 --- a/contrib/generate_precompile.jl +++ b/contrib/generate_precompile.jl @@ -28,6 +28,7 @@ const fancyprint = (stdout isa Base.TTY) && Base.get_bool_env("CI", false) !== t ## CTRL_C = '\x03' +CTRL_D = '\x04' CTRL_R = '\x12' UP_ARROW = "\e[A" DOWN_ARROW = "\e[B" @@ -44,6 +45,7 @@ precompile(Tuple{typeof(delete!), Dict{Base.PkgId,Vector{Function}}, Base.PkgId} precompile(Tuple{typeof(push!), Vector{Function}, Function}) # miscellaneous +precompile(Tuple{typeof(Base.exit)}) precompile(Tuple{typeof(Base.require), Base.PkgId}) precompile(Tuple{typeof(Base.recursive_prefs_merge), Base.Dict{String, Any}}) precompile(Tuple{typeof(Base.recursive_prefs_merge), Base.Dict{String, Any}, Base.Dict{String, Any}, Vararg{Base.Dict{String, Any}}}) @@ -373,7 +375,7 @@ generate_precompile_statements() = try # Make sure `ansi_enablecursor` is printe end end end - write(ptm, "exit()\n") + write(ptm, "$CTRL_D") wait(tee) success(p) || Base.pipeline_error(p) close(ptm) From 8cb319795448063df78d897839f7602952808a95 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Fri, 15 Sep 2023 14:02:41 -0400 Subject: [PATCH 150/413] complete false & true more generally as vals (#51326) (cherry picked from commit e85f0a5a718f68e581b07eb60fd0d8203b0cd0da) --- stdlib/REPL/src/REPLCompletions.jl | 41 ++++++++++++++++++++--------- stdlib/REPL/test/replcompletions.jl | 9 +++++++ 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/stdlib/REPL/src/REPLCompletions.jl b/stdlib/REPL/src/REPLCompletions.jl index 57797583de75f..a6cb12ab05211 100644 --- a/stdlib/REPL/src/REPLCompletions.jl +++ b/stdlib/REPL/src/REPLCompletions.jl @@ -19,6 +19,10 @@ struct KeywordCompletion <: Completion keyword::String end +struct KeyvalCompletion <: Completion + keyval::String +end + struct PathCompletion <: Completion path::String end @@ -99,6 +103,7 @@ end _completion_text(c::TextCompletion) = c.text _completion_text(c::KeywordCompletion) = c.keyword +_completion_text(c::KeyvalCompletion) = c.keyval _completion_text(c::PathCompletion) = c.path _completion_text(c::ModuleCompletion) = c.mod _completion_text(c::PackageCompletion) = c.package @@ -213,24 +218,30 @@ function complete_symbol(@nospecialize(ex), name::String, @nospecialize(ffunc), suggestions end +function complete_from_list(T::Type, list::Vector{String}, s::Union{String,SubString{String}}) + r = searchsorted(list, s) + i = first(r) + n = length(list) + while i <= n && startswith(list[i],s) + r = first(r):i + i += 1 + end + Completion[T(kw) for kw in list[r]] +end + const sorted_keywords = [ "abstract type", "baremodule", "begin", "break", "catch", "ccall", - "const", "continue", "do", "else", "elseif", "end", "export", "false", + "const", "continue", "do", "else", "elseif", "end", "export", "finally", "for", "function", "global", "if", "import", "let", "local", "macro", "module", "mutable struct", "primitive type", "quote", "return", "struct", - "true", "try", "using", "while"] + "try", "using", "while"] -function complete_keyword(s::Union{String,SubString{String}}) - r = searchsorted(sorted_keywords, s) - i = first(r) - n = length(sorted_keywords) - while i <= n && startswith(sorted_keywords[i],s) - r = first(r):i - i += 1 - end - Completion[KeywordCompletion(kw) for kw in sorted_keywords[r]] -end +complete_keyword(s::Union{String,SubString{String}}) = complete_from_list(KeywordCompletion, sorted_keywords, s) + +const sorted_keyvals = ["false", "true"] + +complete_keyval(s::Union{String,SubString{String}}) = complete_from_list(KeyvalCompletion, sorted_keyvals, s) function complete_path(path::AbstractString, pos::Int; use_envpath=false, shell_escape=false, @@ -919,6 +930,7 @@ function complete_keyword_argument(partial, last_idx, context_module) suggestions = Completion[KeywordArgumentCompletion(kwarg) for kwarg in kwargs] append!(suggestions, complete_symbol(nothing, last_word, Returns(true), context_module)) + append!(suggestions, complete_keyval(last_word)) return sort!(suggestions, by=completion_text), wordrange end @@ -941,7 +953,10 @@ end function complete_identifiers!(suggestions::Vector{Completion}, @nospecialize(ffunc::Function), context_module::Module, string::String, name::String, pos::Int, dotpos::Int, startpos::Int, comp_keywords=false) ex = nothing - comp_keywords && append!(suggestions, complete_keyword(name)) + if comp_keywords + append!(suggestions, complete_keyword(name)) + append!(suggestions, complete_keyval(name)) + end if dotpos > 1 && string[dotpos] == '.' s = string[1:prevind(string, dotpos)] # First see if the whole string up to `pos` is a valid expression. If so, use it. diff --git a/stdlib/REPL/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl index 4c777a78cf593..501193b15e2f4 100644 --- a/stdlib/REPL/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -1880,3 +1880,12 @@ let s = "`abc`.e" # (completions for the fields of `Cmd`) @test c == Any["env", "exec"] end + +Issue49892(x) = x +let s = "Issue49892(fal" + c, r, res = test_complete_context(s, @__MODULE__) + @test res + for n in ("false", "falses") + @test n in c + end +end From ddec9e4530742aae8c904b478f3c5e15679455e7 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Wed, 4 Oct 2023 09:53:51 -0400 Subject: [PATCH 151/413] Revert "Don't mark nonlocal symbols as hidden (#51530)" This reverts commit e1f1cc8f71eb64f25ff138eaa2cbf9d6604d60b4. --- src/aotcompile.cpp | 8 ++------ src/codegen.cpp | 4 ---- src/staticdata.c | 12 ++++++------ 3 files changed, 8 insertions(+), 16 deletions(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index a1a8a40a5ce55..05088394500c1 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -835,12 +835,8 @@ static SmallVector partitionModule(Module &M, unsigned threads) { continue; if (!canPartition(G)) continue; - // Currently ccallable global aliases have extern linkage, we only want to make the - // internally linked functions/global variables extern+hidden - if (G.hasLocalLinkage()) { - G.setLinkage(GlobalValue::ExternalLinkage); - G.setVisibility(GlobalValue::HiddenVisibility); - } + G.setLinkage(GlobalValue::ExternalLinkage); + G.setVisibility(GlobalValue::HiddenVisibility); if (auto F = dyn_cast(&G)) { partitioner.make(&G, getFunctionWeight(*F).weight); } else { diff --git a/src/codegen.cpp b/src/codegen.cpp index 9dc671dc0ea97..f72c2ae2056b9 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -6801,10 +6801,6 @@ const char *jl_generate_ccallable(LLVMOrcThreadSafeModuleRef llvmmod, void *sysi int found = jl_dlsym(sysimg_handle, name, &addr, 0); if (found) add_named_global(name, addr); - else { - err = jl_get_exceptionf(jl_errorexception_type, "%s not found in sysimg", name); - jl_throw(err); - } } else { jl_method_instance_t *lam = jl_get_specialization1((jl_tupletype_t*)sigt, world, &min_valid, &max_valid, 0); diff --git a/src/staticdata.c b/src/staticdata.c index 31e7a4c812b1c..a974d98a39835 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -3371,7 +3371,7 @@ static jl_value_t *jl_validate_cache_file(ios_t *f, jl_array_t *depmods, uint64_ } // TODO?: refactor to make it easier to create the "package inspector" -static jl_value_t *jl_restore_package_image_from_stream(void* pkgimage_handle, ios_t *f, jl_image_t *image, jl_array_t *depmods, int completeinfo, const char *pkgname, bool needs_permalloc) +static jl_value_t *jl_restore_package_image_from_stream(ios_t *f, jl_image_t *image, jl_array_t *depmods, int completeinfo, const char *pkgname, bool needs_permalloc) { JL_TIMING(LOAD_IMAGE, LOAD_Pkgimg); jl_timing_printf(JL_TIMING_DEFAULT_BLOCK, pkgname); @@ -3426,7 +3426,7 @@ static jl_value_t *jl_restore_package_image_from_stream(void* pkgimage_handle, i size_t world = jl_atomic_load_acquire(&jl_world_counter); jl_insert_backedges((jl_array_t*)edges, (jl_array_t*)ext_targets, (jl_array_t*)new_specializations, world); // restore external backedges (needs to be last) // reinit ccallables - jl_reinit_ccallable(&ccallable_list, base, pkgimage_handle); + jl_reinit_ccallable(&ccallable_list, base, NULL); arraylist_free(&ccallable_list); if (completeinfo) { @@ -3457,11 +3457,11 @@ static void jl_restore_system_image_from_stream(ios_t *f, jl_image_t *image, uin jl_restore_system_image_from_stream_(f, image, NULL, checksum | ((uint64_t)0xfdfcfbfa << 32), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); } -JL_DLLEXPORT jl_value_t *jl_restore_incremental_from_buf(void* pkgimage_handle, const char *buf, jl_image_t *image, size_t sz, jl_array_t *depmods, int completeinfo, const char *pkgname, bool needs_permalloc) +JL_DLLEXPORT jl_value_t *jl_restore_incremental_from_buf(const char *buf, jl_image_t *image, size_t sz, jl_array_t *depmods, int completeinfo, const char *pkgname, bool needs_permalloc) { ios_t f; ios_static_buffer(&f, (char*)buf, sz); - jl_value_t *ret = jl_restore_package_image_from_stream(pkgimage_handle, &f, image, depmods, completeinfo, pkgname, needs_permalloc); + jl_value_t *ret = jl_restore_package_image_from_stream(&f, image, depmods, completeinfo, pkgname, needs_permalloc); ios_close(&f); return ret; } @@ -3474,7 +3474,7 @@ JL_DLLEXPORT jl_value_t *jl_restore_incremental(const char *fname, jl_array_t *d "Cache file \"%s\" not found.\n", fname); } jl_image_t pkgimage = {}; - jl_value_t *ret = jl_restore_package_image_from_stream(NULL, &f, &pkgimage, depmods, completeinfo, pkgname, true); + jl_value_t *ret = jl_restore_package_image_from_stream(&f, &pkgimage, depmods, completeinfo, pkgname, true); ios_close(&f); return ret; } @@ -3545,7 +3545,7 @@ JL_DLLEXPORT jl_value_t *jl_restore_package_image_from_file(const char *fname, j jl_image_t pkgimage = jl_init_processor_pkgimg(pkgimg_handle); - jl_value_t* mod = jl_restore_incremental_from_buf(pkgimg_handle, pkgimg_data, &pkgimage, *plen, depmods, completeinfo, pkgname, false); + jl_value_t* mod = jl_restore_incremental_from_buf(pkgimg_data, &pkgimage, *plen, depmods, completeinfo, pkgname, false); return mod; } From 674f440b1ab98da6796b9f3cdf7b5ea6a775d4df Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 5 Oct 2023 01:30:14 -0400 Subject: [PATCH 152/413] avoid limiting Type{Any} to Type (#51512) Fix #51510 (cherry picked from commit 25f510a34523922f45f9d676d156123959a29f47) --- base/compiler/typelimits.jl | 2 +- test/compiler/inference.jl | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/base/compiler/typelimits.jl b/base/compiler/typelimits.jl index 4552c4f815337..09372b2dc9613 100644 --- a/base/compiler/typelimits.jl +++ b/base/compiler/typelimits.jl @@ -135,8 +135,8 @@ function _limit_type_size(@nospecialize(t), @nospecialize(c), sources::SimpleVec ct = Union{} end Qt = __limit_type_size(tt, ct, sources, depth + 1, 0) - Qt === Any && return Type Qt === tt && return t + Qt === Any && return Type # Can't form Type{<:Qt} just yet, without first make sure we limited the depth # enough, since this moves Qt outside of Type for is_derived_type_from_any Qt = __limit_type_size(tt, ct, sources, depth + 2, 0) diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index d767b2cfe3eb3..dc46bc2495c7f 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -121,6 +121,11 @@ end @test Core.Compiler.limit_type_size(Type{Union{Int,Type{Int}}}, Type{Type{Int}}, Union{}, 0, 0) == Type +@test Core.Compiler.limit_type_size(Type{Any}, Union{}, Union{}, 0, 0) == + Core.Compiler.limit_type_size(Type{Any}, Any, Union{}, 0, 0) == + Core.Compiler.limit_type_size(Type{Any}, Type, Union{}, 0, 0) == + Type{Any} + # issue #43296 #43296 struct C43296{t,I} end r43296(b) = r43296(typeof(b)) From 1e95bf8be02ee858d707c7346c53bab7d787a422 Mon Sep 17 00:00:00 2001 From: Oscar Smith Date: Thu, 5 Oct 2023 08:29:49 -0400 Subject: [PATCH 153/413] reset `maxprobe` on `empty!` (#51595) As pointed out in https://github.com/JuliaLang/julia/issues/51594#issuecomment-1747781744, this is necessary for the assertion added in https://github.com/JuliaLang/julia/pull/49447 to be valid. Fix #51594 (cherry picked from commit c18e48559ce471e30a14ffd96eafd3ee6600552e) --- base/dict.jl | 2 ++ test/dict.jl | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/base/dict.jl b/base/dict.jl index 8a78c1fa8da45..68423482f21b7 100644 --- a/base/dict.jl +++ b/base/dict.jl @@ -176,6 +176,7 @@ end resize!(h.keys, newsz) resize!(h.vals, newsz) h.ndel = 0 + h.maxprobe = 0 return h end @@ -251,6 +252,7 @@ function empty!(h::Dict{K,V}) where V where K resize!(h.vals, sz) h.ndel = 0 h.count = 0 + h.maxprobe = 0 h.age += 1 h.idxfloor = sz return h diff --git a/test/dict.jl b/test/dict.jl index 6a47c3c6eea8b..c935ae1be5dac 100644 --- a/test/dict.jl +++ b/test/dict.jl @@ -1371,3 +1371,24 @@ for T in (Int, Float64, String, Symbol) @test !Core.Compiler.is_nothrow(Base.infer_effects(getindex, (Dict{T,Any}, T))) @test Core.Compiler.is_terminates(Base.infer_effects(getindex, (Dict{T,Any}, T))) end + +struct BadHash + i::Int +end +Base.hash(::BadHash, ::UInt)=UInt(1) +@testset "maxprobe reset #51595" begin + d = Dict(BadHash(i)=>nothing for i in 1:20) + empty!(d) + sizehint!(d, 0) + @test d.maxprobe < length(d.keys) + d[BadHash(1)]=nothing + @test !(BadHash(2) in keys(d)) + d = Dict(BadHash(i)=>nothing for i in 1:20) + for _ in 1:20 + pop!(d) + end + sizehint!(d, 0) + @test d.maxprobe < length(d.keys) + d[BadHash(1)]=nothing + @test !(BadHash(2) in keys(d)) +end From 8c387e3b2f5cf904f3ae3b3fb82bfcee16b1fda4 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Thu, 5 Oct 2023 18:22:47 +0530 Subject: [PATCH 154/413] Aggressive constprop in LinearAlgebra.wrap (#51582) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This helps with type-stability, as the flag `tA` is usually known from the type of the matrix. On master, ```julia julia> f(A) = LinearAlgebra.wrap(A, 'N') f (generic function with 1 method) julia> @code_typed f([1;;]) CodeInfo( 1 ─ %1 = invoke LinearAlgebra.wrap(A::Matrix{Int64}, 'N'::Char)::Union{Adjoint{Int64, Matrix{Int64}}, Hermitian{Int64, Matrix{Int64}}, Symmetric{Int64, Matrix{Int64}}, Transpose{Int64, Matrix{Int64}}, Matrix{Int64}} └── return %1 ) => Union{Adjoint{Int64, Matrix{Int64}}, Hermitian{Int64, Matrix{Int64}}, Symmetric{Int64, Matrix{Int64}}, Transpose{Int64, Matrix{Int64}}, Matrix{Int64}} ``` This PR ```julia julia> @code_typed f([1;;]) CodeInfo( 1 ─ return A ) => Matrix{Int64} ``` (cherry picked from commit 0fd7f72109a8741720650f72ca41b10d95e9e39e) --- stdlib/LinearAlgebra/src/LinearAlgebra.jl | 2 +- stdlib/LinearAlgebra/test/matmul.jl | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/stdlib/LinearAlgebra/src/LinearAlgebra.jl b/stdlib/LinearAlgebra/src/LinearAlgebra.jl index 386de771d666f..85ba1d2770ba7 100644 --- a/stdlib/LinearAlgebra/src/LinearAlgebra.jl +++ b/stdlib/LinearAlgebra/src/LinearAlgebra.jl @@ -465,7 +465,7 @@ wrapper_char(A::Hermitian) = A.uplo == 'U' ? 'H' : 'h' wrapper_char(A::Hermitian{<:Real}) = A.uplo == 'U' ? 'S' : 's' wrapper_char(A::Symmetric) = A.uplo == 'U' ? 'S' : 's' -function wrap(A::AbstractVecOrMat, tA::AbstractChar) +Base.@constprop :aggressive function wrap(A::AbstractVecOrMat, tA::AbstractChar) if tA == 'N' return A elseif tA == 'T' diff --git a/stdlib/LinearAlgebra/test/matmul.jl b/stdlib/LinearAlgebra/test/matmul.jl index e6000a4b24e2d..86606654e911a 100644 --- a/stdlib/LinearAlgebra/test/matmul.jl +++ b/stdlib/LinearAlgebra/test/matmul.jl @@ -17,6 +17,14 @@ mul_wrappers = [ m -> adjoint(m), m -> transpose(m)] +@testset "wrap" begin + f(A) = LinearAlgebra.wrap(A, 'N') + A = ones(1,1) + @test @inferred(f(A)) === A + g(A) = LinearAlgebra.wrap(A, 'T') + @test @inferred(g(A)) === transpose(A) +end + @testset "matrices with zero dimensions" begin for (dimsA, dimsB, dimsC) in ( ((0, 5), (5, 3), (0, 3)), From b3898c34561353aac16826c96624f80cb6cd43cc Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Thu, 5 Oct 2023 11:04:23 -0300 Subject: [PATCH 155/413] correctly track element pointer in heap snapshot (#51592) Fixes https://github.com/JuliaLang/julia/issues/51576 on a simple snapshot I collected on my machine. (cherry picked from commit 5bdc1b34cf29db9261a540faecea97ebd941885f) --- src/gc.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/gc.c b/src/gc.c index 1984c92ec3c14..8969969ab66f5 100644 --- a/src/gc.c +++ b/src/gc.c @@ -1975,7 +1975,8 @@ STATIC_INLINE void gc_mark_objarray(jl_ptls_t ptls, jl_value_t *obj_parent, jl_v // the first young object before starting this chunk // (this also would be valid for young objects, but probably less beneficial) for (; obj_begin < obj_end; obj_begin += step) { - new_obj = *obj_begin; + jl_value_t **slot = obj_begin; + new_obj = *slot; if (new_obj != NULL) { verify_parent2("obj array", obj_parent, obj_begin, "elem(%d)", gc_slot_to_arrayidx(obj_parent, obj_begin)); @@ -1984,7 +1985,7 @@ STATIC_INLINE void gc_mark_objarray(jl_ptls_t ptls, jl_value_t *obj_parent, jl_v nptr |= 1; if (!gc_marked(o->header)) break; - gc_heap_snapshot_record_array_edge(obj_parent, &new_obj); + gc_heap_snapshot_record_array_edge(obj_parent, slot); } } } @@ -2006,13 +2007,14 @@ STATIC_INLINE void gc_mark_objarray(jl_ptls_t ptls, jl_value_t *obj_parent, jl_v } } for (; obj_begin < scan_end; obj_begin += step) { + jl_value_t **slot = obj_begin; new_obj = *obj_begin; if (new_obj != NULL) { verify_parent2("obj array", obj_parent, obj_begin, "elem(%d)", gc_slot_to_arrayidx(obj_parent, obj_begin)); gc_assert_parent_validity(obj_parent, new_obj); gc_try_claim_and_push(mq, new_obj, &nptr); - gc_heap_snapshot_record_array_edge(obj_parent, &new_obj); + gc_heap_snapshot_record_array_edge(obj_parent, slot); } } if (too_big) { @@ -2043,7 +2045,8 @@ STATIC_INLINE void gc_mark_array8(jl_ptls_t ptls, jl_value_t *ary8_parent, jl_va for (; ary8_begin < ary8_end; ary8_begin += elsize) { int early_end = 0; for (uint8_t *pindex = elem_begin; pindex < elem_end; pindex++) { - new_obj = ary8_begin[*pindex]; + jl_value_t **slot = &ary8_begin[*pindex]; + new_obj = *slot; if (new_obj != NULL) { verify_parent2("array", ary8_parent, &new_obj, "elem(%d)", gc_slot_to_arrayidx(ary8_parent, ary8_begin)); @@ -2054,7 +2057,7 @@ STATIC_INLINE void gc_mark_array8(jl_ptls_t ptls, jl_value_t *ary8_parent, jl_va early_end = 1; break; } - gc_heap_snapshot_record_array_edge(ary8_parent, &new_obj); + gc_heap_snapshot_record_array_edge(ary8_parent, slot); } } if (early_end) @@ -2080,13 +2083,14 @@ STATIC_INLINE void gc_mark_array8(jl_ptls_t ptls, jl_value_t *ary8_parent, jl_va } for (; ary8_begin < ary8_end; ary8_begin += elsize) { for (uint8_t *pindex = elem_begin; pindex < elem_end; pindex++) { - new_obj = ary8_begin[*pindex]; + jl_value_t **slot = &ary8_begin[*pindex]; + new_obj = *slot; if (new_obj != NULL) { verify_parent2("array", ary8_parent, &new_obj, "elem(%d)", gc_slot_to_arrayidx(ary8_parent, ary8_begin)); gc_assert_parent_validity(ary8_parent, new_obj); gc_try_claim_and_push(mq, new_obj, &nptr); - gc_heap_snapshot_record_array_edge(ary8_parent, &new_obj); + gc_heap_snapshot_record_array_edge(ary8_parent, slot); } } } @@ -2118,7 +2122,8 @@ STATIC_INLINE void gc_mark_array16(jl_ptls_t ptls, jl_value_t *ary16_parent, jl_ for (; ary16_begin < ary16_end; ary16_begin += elsize) { int early_end = 0; for (uint16_t *pindex = elem_begin; pindex < elem_end; pindex++) { - new_obj = ary16_begin[*pindex]; + jl_value_t **slot = &ary16_begin[*pindex]; + new_obj = *slot; if (new_obj != NULL) { verify_parent2("array", ary16_parent, &new_obj, "elem(%d)", gc_slot_to_arrayidx(ary16_parent, ary16_begin)); @@ -2129,7 +2134,7 @@ STATIC_INLINE void gc_mark_array16(jl_ptls_t ptls, jl_value_t *ary16_parent, jl_ early_end = 1; break; } - gc_heap_snapshot_record_array_edge(ary16_parent, &new_obj); + gc_heap_snapshot_record_array_edge(ary16_parent, slot); } } if (early_end) @@ -2155,13 +2160,14 @@ STATIC_INLINE void gc_mark_array16(jl_ptls_t ptls, jl_value_t *ary16_parent, jl_ } for (; ary16_begin < scan_end; ary16_begin += elsize) { for (uint16_t *pindex = elem_begin; pindex < elem_end; pindex++) { - new_obj = ary16_begin[*pindex]; + jl_value_t **slot = &ary16_begin[*pindex]; + new_obj = *slot; if (new_obj != NULL) { verify_parent2("array", ary16_parent, &new_obj, "elem(%d)", gc_slot_to_arrayidx(ary16_parent, ary16_begin)); gc_assert_parent_validity(ary16_parent, new_obj); gc_try_claim_and_push(mq, new_obj, &nptr); - gc_heap_snapshot_record_array_edge(ary16_parent, &new_obj); + gc_heap_snapshot_record_array_edge(ary16_parent, slot); } } } From 2523d15dfc791231b960198c7b43fc11e2a9931e Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Wed, 4 Oct 2023 17:16:41 -0400 Subject: [PATCH 156/413] fix annotations on `sym_in` (#51573) This seems to be the right combination of annotations to fix both #50562 and an inference regression in PropertyDicts.jl on the 1.10 release branch. When backported the `@noinline` should be restored for 1.10. (cherry picked from commit f7e8f924f524b102ce8bb50e6662ca9b16e02c30) --- base/tuple.jl | 5 +++-- test/namedtuple.jl | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/base/tuple.jl b/base/tuple.jl index ae5de41586848..518641de1c143 100644 --- a/base/tuple.jl +++ b/base/tuple.jl @@ -606,14 +606,15 @@ any(x::Tuple{Bool, Bool}) = x[1]|x[2] any(x::Tuple{Bool, Bool, Bool}) = x[1]|x[2]|x[3] # a version of `in` esp. for NamedTuple, to make it pure, and not compiled for each tuple length -function sym_in(x::Symbol, @nospecialize itr::Tuple{Vararg{Symbol}}) +function sym_in(x::Symbol, itr::Tuple{Vararg{Symbol}}) + @noinline @_total_meta for y in itr y === x && return true end return false end -in(x::Symbol, @nospecialize itr::Tuple{Vararg{Symbol}}) = sym_in(x, itr) +in(x::Symbol, itr::Tuple{Vararg{Symbol}}) = sym_in(x, itr) """ diff --git a/test/namedtuple.jl b/test/namedtuple.jl index eb3846c8cbffd..0e9648dbcb9c0 100644 --- a/test/namedtuple.jl +++ b/test/namedtuple.jl @@ -394,3 +394,23 @@ let a = Base.NamedTuple{(:a, :b), Tuple{Any, Any}}((1, 2)), b = Base.NamedTuple{ @test typeof(Base.merge(a, b)) == Base.NamedTuple{(:a, :b), Tuple{Any, Float64}} @test typeof(Base.structdiff(a, b)) == Base.NamedTuple{(:a,), Tuple{Any}} end + +function mergewith51009(combine, a::NamedTuple{an}, b::NamedTuple{bn}) where {an, bn} + names = Base.merge_names(an, bn) + NamedTuple{names}(ntuple(Val{nfields(names)}()) do i + n = getfield(names, i) + if Base.sym_in(n, an) + if Base.sym_in(n, bn) + combine(getfield(a, n), getfield(b, n)) + else + getfield(a, n) + end + else + getfield(b, n) + end + end) +end +let c = (a=1, b=2), + d = (b=3, c=(d=1,)) + @test @inferred(mergewith51009((x,y)->y, c, d)) === (a = 1, b = 3, c = (d = 1,)) +end From 45461be8156251c37191df657e4356d92b1912e7 Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Tue, 10 Oct 2023 21:07:03 -0400 Subject: [PATCH 157/413] =?UTF-8?q?=F0=9F=A4=96=20[release-1.10]=20Bump=20?= =?UTF-8?q?the=20Pkg=20stdlib=20from=20484bc3ec0=20to=209261a54d3=20(#5166?= =?UTF-8?q?4)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Dilum Aluthge Fix Pkg.precompile ext races (#3645) --- .../Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/md5 | 1 - .../Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/sha512 | 1 - .../Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/md5 | 1 + .../Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/sha512 | 1 + stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/sha512 create mode 100644 deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/md5 create mode 100644 deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/sha512 diff --git a/deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/md5 b/deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/md5 deleted file mode 100644 index 2deaaffefaee3..0000000000000 --- a/deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -6325a13a4b6925907528131f19076e86 diff --git a/deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/sha512 b/deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/sha512 deleted file mode 100644 index d8c8a9d320f71..0000000000000 --- a/deps/checksums/Pkg-484bc3ec08a77b71693e2c6aa502a96f0d8ae31f.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -3c0f55fed47c6e99f471a8d666d6c3347f6ebffd8b41be3134b942e9b315f4ad7f5229a7151e4dea4741d93d2d639213ece32479db5016236e7dab8aa80db92b diff --git a/deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/md5 b/deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/md5 new file mode 100644 index 0000000000000..82bb339b85d7b --- /dev/null +++ b/deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/md5 @@ -0,0 +1 @@ +c5e39338f3fa7bb37694a36b179f388a diff --git a/deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/sha512 b/deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/sha512 new file mode 100644 index 0000000000000..5b44edb1a6f7b --- /dev/null +++ b/deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/sha512 @@ -0,0 +1 @@ +78640eed1615523d1e289f6a79eb3e0f4152aa40cb9878663888b4a00a50647908472ed70abd657896491a92526de2fe38759bc87caab9e53856056dfe4b8510 diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 61511df893558..46843b84bda97 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = 484bc3ec08a77b71693e2c6aa502a96f0d8ae31f +PKG_SHA1 = 9261a54d360bd9f7e49ce60faa7318c2057348b1 PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From d117058fa50c1a46111ae8955461dda13409c896 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Wed, 11 Oct 2023 14:41:30 +0200 Subject: [PATCH 158/413] [LibCURL_jll] Upgrade to v8.4.0 (#51667) (cherry picked from commit abf5d9e8062dd338e55962f411d2e24652e20015) --- deps/checksums/curl | 68 ++++++++++++++++----------------- deps/curl.version | 2 +- stdlib/LibCURL_jll/Project.toml | 2 +- 3 files changed, 36 insertions(+), 36 deletions(-) diff --git a/deps/checksums/curl b/deps/checksums/curl index a00275ccdde4d..a6eeccca3833c 100644 --- a/deps/checksums/curl +++ b/deps/checksums/curl @@ -1,36 +1,36 @@ LibCURL-a65b64f6eabc932f63c2c0a4a5fb5d75f3e688d0.tar.gz/md5/e8c53aa3fb963c80921787d5d565eb2c LibCURL-a65b64f6eabc932f63c2c0a4a5fb5d75f3e688d0.tar.gz/sha512/8e442ea834299df9c02acb87226c121395ad8e550025ac5ee1103df09c6ff43817e9e48dd1bcbc92c80331ef3ddff531962430269115179acbec2bab2de5b011 -LibCURL.v8.0.1+1.aarch64-apple-darwin.tar.gz/md5/f697b4391608c2916ef159187e0d0b29 -LibCURL.v8.0.1+1.aarch64-apple-darwin.tar.gz/sha512/41da87eed77ffac391a60a4af7fdc707f117affebe54960eaf43e3077440ce17d95fbe0f47de41bb1456e222e7a126d687fa0beb26cf98713b3472e9b3ba9e57 -LibCURL.v8.0.1+1.aarch64-linux-gnu.tar.gz/md5/710e50aaf42370a38fa8f920b5d056f3 -LibCURL.v8.0.1+1.aarch64-linux-gnu.tar.gz/sha512/4e0db50a9022c4adacf37c60f6bf1312018bef2f6427064bfe90aca31e20e9e3242efaea7e488f5a2ffca1f123ae1de651c73257b2038ec786061b07dc30c2cc -LibCURL.v8.0.1+1.aarch64-linux-musl.tar.gz/md5/b2b5a812aecbfc5ba98f1a30d48f3fd1 -LibCURL.v8.0.1+1.aarch64-linux-musl.tar.gz/sha512/38cfe9e0bb7e6f5723fab27ed8f51d80c8a3919510ebd6eec65025e649b55a4efed7033aa82e962110c3c5d07b8367a7ba310b8afeb5b98268af6a1e197eb122 -LibCURL.v8.0.1+1.armv6l-linux-gnueabihf.tar.gz/md5/ccb09d04429ad300a2b3a83edb8becaf -LibCURL.v8.0.1+1.armv6l-linux-gnueabihf.tar.gz/sha512/cde5303869670866568cdbd53196f874ee754f030b76720ba334915d987b2cfb4a8ef0c5dabc43e7fd517be96ba5225f69e23129049501902bcdbc2333ecefd3 -LibCURL.v8.0.1+1.armv6l-linux-musleabihf.tar.gz/md5/a326606b34caebd8feb3bab402eac1ea -LibCURL.v8.0.1+1.armv6l-linux-musleabihf.tar.gz/sha512/94a7159ba74184eaf6c26bf3ec0fe11fc44923507bb4fae3e3bbb401099ed2f2b1016046005a43e5066402517dd98ad815c4fbf27e718289c42453a781b1ae90 -LibCURL.v8.0.1+1.armv7l-linux-gnueabihf.tar.gz/md5/bfba4cd2a3bf49e8c3ef2964e9c8a904 -LibCURL.v8.0.1+1.armv7l-linux-gnueabihf.tar.gz/sha512/b3277858e67cbfcfca02bb62493c169e4317a541289435d9f849ee58d54763251ff38d69f87f24da9f5b5cff7bce50e8fe539519fce65c0bf0b23f7fbe5d4921 -LibCURL.v8.0.1+1.armv7l-linux-musleabihf.tar.gz/md5/f229ffb2993da2c8d0e032a540966145 -LibCURL.v8.0.1+1.armv7l-linux-musleabihf.tar.gz/sha512/129f3e77a6155f5cbd38aa7196b641e5dfbe03babbb0b64e2677ce040710bf1586f1d7bc0e511b0172eeb17e79edcade094420bd19872688c2a0217f5133ee9e -LibCURL.v8.0.1+1.i686-linux-gnu.tar.gz/md5/c1000a39b9a7411b1fc32f9a5f44348a -LibCURL.v8.0.1+1.i686-linux-gnu.tar.gz/sha512/ed015c5a62eebee0191a6910d97446f6af9fc6871b7a4213fe05c33ef4694801082a84bfffc25e2c575d497934910ff50260540c7fa0df90c25dbe1e2241386f -LibCURL.v8.0.1+1.i686-linux-musl.tar.gz/md5/270bab5961328c8ed95d20e7a4578fbf -LibCURL.v8.0.1+1.i686-linux-musl.tar.gz/sha512/f24c0deae950479d176de47c27b0a73f6059319c9d66d3b868172558cc03e4e20ce31d86fc9ecaf07fb51640f37da4b8fe1c67e5f0c79ec97d604675d0ceac00 -LibCURL.v8.0.1+1.i686-w64-mingw32.tar.gz/md5/9d1cdb92455130345833c92f572e7877 -LibCURL.v8.0.1+1.i686-w64-mingw32.tar.gz/sha512/1d9d0eff49d85cbf3f6c0be478f3d01a828ea080b475e28154987ea3815c327bf13630e6805cee9cf9b0bf328d4d875bb8727ce6c119c3eeaa3c5375dffe6dc6 -LibCURL.v8.0.1+1.powerpc64le-linux-gnu.tar.gz/md5/8918b54901051222e07af43fb33b93cf -LibCURL.v8.0.1+1.powerpc64le-linux-gnu.tar.gz/sha512/f147c1c26f4fb6a8d04b3146fbe45efc2f13b425d432995b63d12995d3daa8d36d2107e490a6c62d7851fb31ee837f4beab52e61df6dc8fab1d22aa2f00fb1fb -LibCURL.v8.0.1+1.x86_64-apple-darwin.tar.gz/md5/10a19a4f428951adbca7cfee91406498 -LibCURL.v8.0.1+1.x86_64-apple-darwin.tar.gz/sha512/28ddbad4310ed886c65edf28ccf01a5aba77fe11784740600aaec2aaa5c10c5e5915e297a4d72dd85bbc5304bb2027f5d18b95f13868b4bb1353fafed7bce4e0 -LibCURL.v8.0.1+1.x86_64-linux-gnu.tar.gz/md5/0c2a633d3ab15df3369018b608488e8d -LibCURL.v8.0.1+1.x86_64-linux-gnu.tar.gz/sha512/59d13e33fbb2705996e567fa12fd5216d262b929003c2e59ab4c61a1d15641430e0e6173d1e14ed54811fc466c2a97826701c9356d16a6a8ce8e6f685193a904 -LibCURL.v8.0.1+1.x86_64-linux-musl.tar.gz/md5/2387b901f2a5bbb3b837d30a62838960 -LibCURL.v8.0.1+1.x86_64-linux-musl.tar.gz/sha512/93da418d402f8fb1d7074b9951c9378c6becb9c1f07bed18f700351fd2b5da9849da46b735bf7c6dd8380df5c3286ec90068866d1006d312f2181d710afec028 -LibCURL.v8.0.1+1.x86_64-unknown-freebsd.tar.gz/md5/90fec1618ec5bd774f241f6076faa896 -LibCURL.v8.0.1+1.x86_64-unknown-freebsd.tar.gz/sha512/fd83752fb0bf9200f44f3a3b4f01cf649d352abc0c750e5aef19bd9bfd128300df3977f4ad2f614222cd1cc8f4d39a0dc33376ed34543b55d74bd109db0f9071 -LibCURL.v8.0.1+1.x86_64-w64-mingw32.tar.gz/md5/db973bbb7961678a139087e911c37f3c -LibCURL.v8.0.1+1.x86_64-w64-mingw32.tar.gz/sha512/700cb1ad207a62ba0997fc625fdb3595eee859c6eb88242f3fd9269c2035d24aef36f3fff610fa37ecc783ecf88a5f65fd29a492338b54649bb930611672db5c -curl-8.0.1.tar.bz2/md5/b2e694208b4891d7396d118712148ff3 -curl-8.0.1.tar.bz2/sha512/24e84e922612ebf19341525c5f12f36e730cd21a5279cbea6421742d1ba61e5fa404f2add2e71d64e5692a1feabfa92c5a5d56501f161d1e157718fee467e0a5 +LibCURL.v8.4.0+0.aarch64-apple-darwin.tar.gz/md5/7e1b8b96f4f38cd775c1be5bfd4d9b14 +LibCURL.v8.4.0+0.aarch64-apple-darwin.tar.gz/sha512/598c8418731770387f9d1b489eb0794978c4b98c9098f2c9b024fe758e6550ff82202fa4c911a6029ac39a9d395f1dccb9b5539dac788c29a85e79c958ab3bf9 +LibCURL.v8.4.0+0.aarch64-linux-gnu.tar.gz/md5/c8ef2231800a5ad488e2952e14a48710 +LibCURL.v8.4.0+0.aarch64-linux-gnu.tar.gz/sha512/1cc786ce4836e6ae904685bb44e47354eabf66dd82229d84cbeaa0d5b549900b77b68f878d915f04049c4f4118e5849262a6706fa9fac845b8a976e02140dea2 +LibCURL.v8.4.0+0.aarch64-linux-musl.tar.gz/md5/7fdc14704e467d7d9d71b54d48f690f4 +LibCURL.v8.4.0+0.aarch64-linux-musl.tar.gz/sha512/1af938d244e141c6ad77844c115afbff0ab75145e4e1422cf1444226ec0183a7449040c4a86c3dfb445820377278567427f8df77823a5ae0bede705a9b01335e +LibCURL.v8.4.0+0.armv6l-linux-gnueabihf.tar.gz/md5/77534d50dbb631146c85b6f2b92c7f84 +LibCURL.v8.4.0+0.armv6l-linux-gnueabihf.tar.gz/sha512/b7a4294ae8f7d24b5dcc10df52d76dd35ca1b4d0dc955307968f6f1a6a2edef194d134bcf6891a960d63e8763b1bc2738786db84393183210730d4d2d486dcdb +LibCURL.v8.4.0+0.armv6l-linux-musleabihf.tar.gz/md5/35e4dee0f70564d3d16d2dd8ef7c2c5d +LibCURL.v8.4.0+0.armv6l-linux-musleabihf.tar.gz/sha512/e9292a6dc52be228919a9af2b1e73a6968af843d508ffb216ae956a651822ddc1bcbb9fce495da05a11ffb9211903462f7504aa5da78f19f4db5c63c80fc9baf +LibCURL.v8.4.0+0.armv7l-linux-gnueabihf.tar.gz/md5/dbb847d7f7162b4a2ea5395eca8d7c30 +LibCURL.v8.4.0+0.armv7l-linux-gnueabihf.tar.gz/sha512/3a2c2779392eb19fe9202397688466fc05813a8e35ea6bf85d628e802759c97fae346939902e897313914ce2b38dcfabe0775be6a4a1b1d4264a327687d6a2f3 +LibCURL.v8.4.0+0.armv7l-linux-musleabihf.tar.gz/md5/f9e9557080e09fda47c92f14d5c89de4 +LibCURL.v8.4.0+0.armv7l-linux-musleabihf.tar.gz/sha512/603821f647d17daa1d731a63c7fff35b756b052ee53b6c86d9f35582356d57914336f8b9bb44567f10b437b2c0c677177959ae691e0244bab1262818eb61aa1e +LibCURL.v8.4.0+0.i686-linux-gnu.tar.gz/md5/eabf3f3392cf8717782c2cb1c1b71478 +LibCURL.v8.4.0+0.i686-linux-gnu.tar.gz/sha512/9584f28cf8f72a6e15afb96a2c27d82b74a12042311c07aecb61732fd6525227f082d448b81950a67c6cc880b39c0921cf039e97bf0bdd4329e2196de42ec81e +LibCURL.v8.4.0+0.i686-linux-musl.tar.gz/md5/dceef0a3aa971e3b7e3db44b5de159d1 +LibCURL.v8.4.0+0.i686-linux-musl.tar.gz/sha512/483dfe8a3b4589e59794b3b4efba1e60baf9fb45efad6c0b1b9626ad6e492fd803fda3f99545303a32749010df5b9bb89faf608d57eb4fee4c3f387d0b197a5e +LibCURL.v8.4.0+0.i686-w64-mingw32.tar.gz/md5/2a0a87e126ebaf7bcaff746e30f6905f +LibCURL.v8.4.0+0.i686-w64-mingw32.tar.gz/sha512/5a2867e8ac27a82e30bb88ea4c3f52faddfbd0b199f25dbef3a77a47be16a4b9299883fc84d50ce965aa2d01d473310b4cbc28c60dad3602f2ee6b56345ea6a5 +LibCURL.v8.4.0+0.powerpc64le-linux-gnu.tar.gz/md5/1f532601778a4dcf9932681e0e47833e +LibCURL.v8.4.0+0.powerpc64le-linux-gnu.tar.gz/sha512/6ddf56c44124e682eda9cedacb8893ada1e07b6a2cb10fd301afc04b3d1c981b25129b2495efb4d5e37784ee2bb5e47da13be9c2f367ff397a8ce7122136f6e2 +LibCURL.v8.4.0+0.x86_64-apple-darwin.tar.gz/md5/d7c9ab15d9739df8fb4329c0bb2546f6 +LibCURL.v8.4.0+0.x86_64-apple-darwin.tar.gz/sha512/5d5f17534053504dbc3c0b1251f329358bac60c14b734f6b82b4321f96f944b1733254cfd7489504c41d3d2cda5ae991e6cb4f9fa864990a6660cb4464f14530 +LibCURL.v8.4.0+0.x86_64-linux-gnu.tar.gz/md5/f8697c76204df4ac5a04608b6a480f3b +LibCURL.v8.4.0+0.x86_64-linux-gnu.tar.gz/sha512/ed583b6abc52f6b5a8ee0c93a4e9b877d2830eb131117ac17da044d2fadb218bc293ec6c625a526583aea01f41994a3f9bb5ed5b4263838bab8c251c672b8160 +LibCURL.v8.4.0+0.x86_64-linux-musl.tar.gz/md5/fcb9be4148376414f94d3ddb54f42d12 +LibCURL.v8.4.0+0.x86_64-linux-musl.tar.gz/sha512/8e53219d68fdb4c412de8a19f53572dbd74dc35bba3c6f3c5aab622f05aa76a28e386201d9dd1c78d37d0ea636bb43ad98d1e19599480ba307cc45098600818a +LibCURL.v8.4.0+0.x86_64-unknown-freebsd.tar.gz/md5/aa4b18c0b8be4be432e24c9cc88670da +LibCURL.v8.4.0+0.x86_64-unknown-freebsd.tar.gz/sha512/69548673aec3d199a0514ae0e90d6f8700ace47579631522a93ea351151af258127f3bd1fc82f110f22ac6b7c3eab884665773d99842dfc56fa94040a69f1043 +LibCURL.v8.4.0+0.x86_64-w64-mingw32.tar.gz/md5/b477d32139cef0e810e88ceed68b322c +LibCURL.v8.4.0+0.x86_64-w64-mingw32.tar.gz/sha512/3035a1e9af9eda70018ef56a5a620d5b07b46f63739e0f2e028518c6144577d51a9f9a9e76ed1bf28ee4a5811ea4f502ddeab46694432e441e0151056d5c7e6d +curl-8.4.0.tar.bz2/md5/1a61fde1fe5c7db5c29c1196435188a5 +curl-8.4.0.tar.bz2/sha512/27a27c5427acce3501833ac37125daaa03c90165692252115329c820a5a6396cdc79c11d12fe962af37a329549c2051addce3c91e8a8bc3ce3a48cb09d860086 diff --git a/deps/curl.version b/deps/curl.version index f704bc2bebc61..288347a9935ed 100644 --- a/deps/curl.version +++ b/deps/curl.version @@ -3,4 +3,4 @@ CURL_JLL_NAME := LibCURL ## source build -CURL_VER := 8.0.1 +CURL_VER := 8.4.0 diff --git a/stdlib/LibCURL_jll/Project.toml b/stdlib/LibCURL_jll/Project.toml index b4f979b4815ca..aa84637e0dc82 100644 --- a/stdlib/LibCURL_jll/Project.toml +++ b/stdlib/LibCURL_jll/Project.toml @@ -1,6 +1,6 @@ name = "LibCURL_jll" uuid = "deac9b47-8bc7-5906-a0fe-35ac56dc84c0" -version = "8.0.1+1" +version = "8.4.0+0" [deps] LibSSH2_jll = "29816b5a-b9ab-546f-933c-edad1886dfa8" From 110e9baf534f746216c413efbd061f55bf673912 Mon Sep 17 00:00:00 2001 From: Lionel Zoubritzky Date: Thu, 12 Oct 2023 13:15:22 +0200 Subject: [PATCH 159/413] Handle infix operators in REPL completion (#51366) Fix https://github.com/JuliaLang/julia/issues/51194 This PR fixes a regression introduced in https://github.com/JuliaLang/julia/pull/49294, so I believe it should be backported to v1.10. In the current code, completion of `qux(foo, bar.` is detected by parsing `foo(qux, bar` as an incomplete expression, and then looking for the sub-expression to complete (here, `bar.`). This approach fails however for infix calls, since completing `foo + bar.` starts by parsing `foo + bar`, which is a complete call expression, and so the code behaves as if completing `(foo + bar).` instead of `bar.`. This leads to the current problematic behaviour: ```julia julia> Complex(1, 3) + (4//5).#TAB im re ``` which would be correct for `(Complex(1, 3) + (4//5)).#TAB`, but here we expect ```julia julia> Complex(1, 3) + (4//5).#TAB den num ``` This PR fixes that by trying to detect infix calls. In the long term, all this ad-hoc and probably somewhat wrong string processing should be replaced by proper use of `JuliaSyntax` (as mentioned in https://github.com/JuliaLang/julia/pull/49294#issue-1659443492, https://github.com/JuliaLang/julia/issues/50817#issuecomment-1668773346 and probably other places), but for now at least this fixes the regression. (cherry picked from commit e949236f29347f3e57a1a3a7d5ec656872ad8347) --- stdlib/REPL/src/REPLCompletions.jl | 11 +++++++++++ stdlib/REPL/test/replcompletions.jl | 15 +++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/stdlib/REPL/src/REPLCompletions.jl b/stdlib/REPL/src/REPLCompletions.jl index a6cb12ab05211..debe568b25f64 100644 --- a/stdlib/REPL/src/REPLCompletions.jl +++ b/stdlib/REPL/src/REPLCompletions.jl @@ -997,6 +997,17 @@ function complete_identifiers!(suggestions::Vector{Completion}, @nospecialize(ff ex = Meta.parse(lookup_name, raise=false, depwarn=false) end isexpr(ex, :incomplete) && (ex = nothing) + elseif isexpr(ex, :call) && length(ex.args) > 1 + isinfix = s[end] != ')' + # A complete call expression that does not finish with ')' is an infix call. + if !isinfix + # Handle infix call argument completion of the form bar + foo(qux). + frange, end_of_identifier = find_start_brace(@view s[1:prevind(s, end)]) + isinfix = Meta.parse(@view(s[frange[1]:end]), raise=false, depwarn=false) == ex.args[end] + end + if isinfix + ex = ex.args[end] + end end end append!(suggestions, complete_symbol(ex, name, ffunc, context_module)) diff --git a/stdlib/REPL/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl index 501193b15e2f4..c5a2d1c8e006e 100644 --- a/stdlib/REPL/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -25,6 +25,7 @@ let ex = quote (::Test_y)() = "", "" unicode_αβγ = Test_y(1) + Base.:(+)(x::Test_x, y::Test_y) = Test_x(Test_y(x.xx.yy + y.yy)) module CompletionFoo2 end @@ -1889,3 +1890,17 @@ let s = "Issue49892(fal" @test n in c end end + +# issue #51194 +for (s, compl) in (("2*CompletionFoo.nam", "named"), + (":a isa CompletionFoo.test!1", "test!12"), + ("-CompletionFoo.Test_y(3).", "yy"), + ("99 ⨷⁻ᵨ⁷ CompletionFoo.type_test.", "xx"), + ("CompletionFoo.type_test + CompletionFoo.Test_y(2).", "yy"), + ("(CompletionFoo.type_test + CompletionFoo.Test_y(2)).", "xx"), + ("CompletionFoo.type_test + CompletionFoo.unicode_αβγ.", "yy"), + ("(CompletionFoo.type_test + CompletionFoo.unicode_αβγ).", "xx"), + ("foo'CompletionFoo.test!1", "test!12")) + c, r = test_complete(s) + @test only(c) == compl +end From d4809e5b773c93e34c171302f5f7ae7edc7b6b24 Mon Sep 17 00:00:00 2001 From: "Viral B. Shah" Date: Mon, 16 Oct 2023 16:16:08 -0400 Subject: [PATCH 160/413] Upgrade SuiteSparse to 7.2.1 --- .../md5 | 1 + .../sha512 | 1 + .../md5 | 1 + .../sha512 | 1 + deps/checksums/suitesparse | 70 +++++++++---------- deps/libsuitesparse.mk | 2 +- deps/libsuitesparse.version | 5 +- stdlib/SuiteSparse_jll/Project.toml | 4 +- 8 files changed, 43 insertions(+), 42 deletions(-) create mode 100644 deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/md5 create mode 100644 deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/sha512 create mode 100644 deps/checksums/SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/md5 create mode 100644 deps/checksums/SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/sha512 diff --git a/deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/md5 b/deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/md5 new file mode 100644 index 0000000000000..12314ebe27beb --- /dev/null +++ b/deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/md5 @@ -0,0 +1 @@ +6427ffc68076c0555b0d3a02eaf88160 diff --git a/deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/sha512 b/deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/sha512 new file mode 100644 index 0000000000000..5c7602b6707cc --- /dev/null +++ b/deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/sha512 @@ -0,0 +1 @@ +7a4c6dae45b739bb1b22c53c8b2b32fc765995767580338218a99f671749bbd5c5d9b61f45718c3b80e153b524737501141481ede2a6f24856de1c028f07ad3a diff --git a/deps/checksums/SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/md5 b/deps/checksums/SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/md5 new file mode 100644 index 0000000000000..2f81a0d9191b5 --- /dev/null +++ b/deps/checksums/SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/md5 @@ -0,0 +1 @@ +46541001073d1c3c85e18d910f8308f3 diff --git a/deps/checksums/SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/sha512 b/deps/checksums/SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/sha512 new file mode 100644 index 0000000000000..e2eb44845e276 --- /dev/null +++ b/deps/checksums/SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/sha512 @@ -0,0 +1 @@ +f7470a447b934ca9315e216a07b97e363f11bc93186f9aa057b20b2d05092c58ae4f1b733de362de4a0730861c00be4ca5588d0b3ba65f018c1798b9122b9672 diff --git a/deps/checksums/suitesparse b/deps/checksums/suitesparse index ad571d8be1f28..7578826fe3f0e 100644 --- a/deps/checksums/suitesparse +++ b/deps/checksums/suitesparse @@ -1,36 +1,34 @@ -SuiteSparse-7.2.0.tar.gz/md5/a751b1161f03eb6bd8bd7b9c9be74b67 -SuiteSparse-7.2.0.tar.gz/sha512/62fc796a77f2a8c95cd688a4fa0e39c19d7ccfafde7a6623d62ca6928cee68ac9863a0f721959a1d5a07e62888ab621a4b1cb4f63371f4ac10f4ffe513241340 -SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/md5/46541001073d1c3c85e18d910f8308f3 -SuiteSparse-e8285dd13a6d5b5cf52d8124793fc4d622d07554.tar.gz/sha512/f7470a447b934ca9315e216a07b97e363f11bc93186f9aa057b20b2d05092c58ae4f1b733de362de4a0730861c00be4ca5588d0b3ba65f018c1798b9122b9672 -SuiteSparse.v7.2.0+1.aarch64-apple-darwin.tar.gz/md5/1a10261e5bed293a66849c7a50605a1c -SuiteSparse.v7.2.0+1.aarch64-apple-darwin.tar.gz/sha512/11ecce872aac1f30a3d4ce870920ebb03c7828d0fd740c3789d3f65c3f91ed3682372e9807b0593e2850ae9024450306451ee2e03866afee16b4169e4b5de1c6 -SuiteSparse.v7.2.0+1.aarch64-linux-gnu.tar.gz/md5/65e2e7ae54e94e00b306d17a1d08ed34 -SuiteSparse.v7.2.0+1.aarch64-linux-gnu.tar.gz/sha512/7714598448c6f98a7d931822f9ddb661a903342d4c8384648c1b7457511794ff95ad64266c9377a4a5856dcb1fb8864cb05eab1c7787fca58802473270313570 -SuiteSparse.v7.2.0+1.aarch64-linux-musl.tar.gz/md5/95eb68e02c04d075d6ecc974c3b44457 -SuiteSparse.v7.2.0+1.aarch64-linux-musl.tar.gz/sha512/1d7835106cd5baef701a3b670778a757d97ab9933f7da909e1e5521150f7e44bee30cf4dc7c1e9f57731366db0fca1b91d1cdfddbc53b7cc7457ca11534be6d7 -SuiteSparse.v7.2.0+1.armv6l-linux-gnueabihf.tar.gz/md5/5f627cc9c9d4d70e2f0d749e09926b1a -SuiteSparse.v7.2.0+1.armv6l-linux-gnueabihf.tar.gz/sha512/5ae4b79b418b45d954bfb578ac384afd6fff10a602d16d8b503997ba15251a7db0e12da66061ffd27c23b7459ff56b4a5d200c7c8aaa4a33c608a88752535c15 -SuiteSparse.v7.2.0+1.armv6l-linux-musleabihf.tar.gz/md5/61b5ee7e2b50665caf15e7c4f7353048 -SuiteSparse.v7.2.0+1.armv6l-linux-musleabihf.tar.gz/sha512/854c0165bceeb8202aeeaa16e6ba1f643e8cb9bf0561816cf2c44d1c7334ba7c376ee9e9085316439ca7e27dd4e37814f4916382096a5889c6bb656d22a7fb8d -SuiteSparse.v7.2.0+1.armv7l-linux-gnueabihf.tar.gz/md5/618b9687ce30e630a52f72a8f34cfb9f -SuiteSparse.v7.2.0+1.armv7l-linux-gnueabihf.tar.gz/sha512/add77a8842faf6515d94dc1d000784247d13f0211a9bb3f98edbc65b5f8994c0101940875fa050ca7a4605aaf33ec14daeaaf6b837673b3b4c600d4c5c0f4876 -SuiteSparse.v7.2.0+1.armv7l-linux-musleabihf.tar.gz/md5/b84d7f98b953772517689478d6bfc121 -SuiteSparse.v7.2.0+1.armv7l-linux-musleabihf.tar.gz/sha512/2c461eb23194bf61d3166abd8eb308dc643d865ff07466a88a580aa5a040f3c4fbfeadf7c78e1a3ce737fe0602909ff2b25be439741d36a780a260ccfdc6ed83 -SuiteSparse.v7.2.0+1.i686-linux-gnu.tar.gz/md5/3a38deddb5c1952584782378892d9579 -SuiteSparse.v7.2.0+1.i686-linux-gnu.tar.gz/sha512/5d6a9090c1c275c2bdcdc8d510c6372913109c1a775819354922c0d0afc2bc13a27950ed0e8cb8e05bc94d245220e322d93879054e5082814b7796b305981987 -SuiteSparse.v7.2.0+1.i686-linux-musl.tar.gz/md5/8076c50a73ab08ce0b9374956c2dbf29 -SuiteSparse.v7.2.0+1.i686-linux-musl.tar.gz/sha512/e54bcfe7eb9b266514a35a3c48676b7a792b59830e44bfcd5dfcf35be790f534cc31bd2e63ce4da1a22fcb3b0afb0ebebcc94f0e596806d6e832c3f68195cc5b -SuiteSparse.v7.2.0+1.i686-w64-mingw32.tar.gz/md5/45ac2448ac7a1a9c67114ea58e8ceacf -SuiteSparse.v7.2.0+1.i686-w64-mingw32.tar.gz/sha512/ed65a4071144c0096dfa768f26fd6216d4554c606a981658675d42f201865032972d9ce252dca5dc8a4a7ab0e33411c77bba9287e8013bdb0907ed6cb63d576f -SuiteSparse.v7.2.0+1.powerpc64le-linux-gnu.tar.gz/md5/64845ee8bb2f3f44a0837297e47e412d -SuiteSparse.v7.2.0+1.powerpc64le-linux-gnu.tar.gz/sha512/5f935e497db4ebbcdfb96603a7ee9c6c520d7f4df04f65952305ceff4271ab637079e9144b98044c5f159b4bed0963df8c95ed1578d2828f1a2356e6d34d7042 -SuiteSparse.v7.2.0+1.x86_64-apple-darwin.tar.gz/md5/fb8b00d4ca63004fe8ab8c159128e01f -SuiteSparse.v7.2.0+1.x86_64-apple-darwin.tar.gz/sha512/bcfb18c11be4b1147ff857e2ad0c881c9fc4ae16db8e88fb6e7e0448418c1fc4bff9ea8f1e6aa7202c277273c44c1afb3cc6c2bfcaa0735c7c09052f033248c7 -SuiteSparse.v7.2.0+1.x86_64-linux-gnu.tar.gz/md5/043594ee1cb90fd47b36acfa829fffb8 -SuiteSparse.v7.2.0+1.x86_64-linux-gnu.tar.gz/sha512/6a5bb3c85bb7e97b915f7dd40e8be1ed1bbbd5c756ef510deaecc8505b95bd42f3662f82e25c80055947060e0429e2ce427d4ff67b434acbe28d46b88279c65f -SuiteSparse.v7.2.0+1.x86_64-linux-musl.tar.gz/md5/67c6d3a7fd8635a43bd86b2b1e986978 -SuiteSparse.v7.2.0+1.x86_64-linux-musl.tar.gz/sha512/d46be3f60102fc69707c3e7cc3d693c7ecb4d4307c636afde61e5fab3c46fcf32564716a11d2cfe47b4e541422d5b6e13fbcc3e8749764527b4f4132e8ce17fc -SuiteSparse.v7.2.0+1.x86_64-unknown-freebsd.tar.gz/md5/124057f8455c9710fd1e6b4b4b469fb0 -SuiteSparse.v7.2.0+1.x86_64-unknown-freebsd.tar.gz/sha512/da0e56a8b1cf3967275cb64aea0b939d8982392f9ca1c3b268607e37c0b9bebbd456172c507c6dc2293989a0fe8df04ba1fea67442a4bb738cc8d894bea457a5 -SuiteSparse.v7.2.0+1.x86_64-w64-mingw32.tar.gz/md5/0f99c67d25c0fdd0f3c3e11f18925c43 -SuiteSparse.v7.2.0+1.x86_64-w64-mingw32.tar.gz/sha512/32fcd894cb4197970aa311f7bd12ccb91df7bbe27e389e793a2d3565c9c5c36c751f6dfa37e155cd2c2245be52f0a872dba032b78dc45c45d3fd7d7f2eeb773e +SuiteSparse-7.2.1.tar.gz/md5/c341b4b2943b6d99ec147dc36ae64d51 +SuiteSparse-7.2.1.tar.gz/sha512/6385b699d2f109e8473bb58e95705671b8a5c2f1b281d17bba9f396a94b2e783700c4c64f4ab9495a4a64e23ba279052616054045783b4b8c8eb28a8f4f6be28 +SuiteSparse.v7.2.1+1.aarch64-apple-darwin.tar.gz/md5/1bd9c850b5bb6de56f4dfd0633ce7a6c +SuiteSparse.v7.2.1+1.aarch64-apple-darwin.tar.gz/sha512/f0e932fa2b6d2843fd75c1e151b8304ed2521b679c732301877495d9a2437ec693ba0ebaaf52cb3a4f5c01bcd8c972a27b1080071c9c77462901fa4dec7de787 +SuiteSparse.v7.2.1+1.aarch64-linux-gnu.tar.gz/md5/ff52a5ef6546bbea2ce2d73db2821522 +SuiteSparse.v7.2.1+1.aarch64-linux-gnu.tar.gz/sha512/f5c2a54e40b36fc0489140397e6324bbd1050a87949fd9be3837012825c3becbef66258d28c286d0c45b0447361b2ddf736370402ed928b909e0fb7c5f4ee69c +SuiteSparse.v7.2.1+1.aarch64-linux-musl.tar.gz/md5/2baa4103f4070f66d6278fc001317372 +SuiteSparse.v7.2.1+1.aarch64-linux-musl.tar.gz/sha512/17bc9b020850d9cc652d49987c3faa57204ed3beecd04ea812fd03b4f60f541ba7b250fa70c801a8ec3c440f3562a4771a3742299f0d4eb770e58010c43a3823 +SuiteSparse.v7.2.1+1.armv6l-linux-gnueabihf.tar.gz/md5/cdc1c60e50f6551a52e57ac71440564a +SuiteSparse.v7.2.1+1.armv6l-linux-gnueabihf.tar.gz/sha512/9209f86ac97c061755169412565055847be4890140a389a92468297507cee240219d910bbcef94c52926771a4152762cfa05cfa33c26d31351d68265e5719bd3 +SuiteSparse.v7.2.1+1.armv6l-linux-musleabihf.tar.gz/md5/cd5e177e660d793426e4c4aeb2f9269c +SuiteSparse.v7.2.1+1.armv6l-linux-musleabihf.tar.gz/sha512/a8a5ca739999a16336b2c98ec88873e00349720b5d966d643d5665338b1f9c8077352d87fac41a165cb65793ae5fb686e954b3eaa3f751aa8d002388a0ce6a13 +SuiteSparse.v7.2.1+1.armv7l-linux-gnueabihf.tar.gz/md5/eb43136009b370e93c6ab4c1b0eec40c +SuiteSparse.v7.2.1+1.armv7l-linux-gnueabihf.tar.gz/sha512/e20a308911a36037c9b6da3c060f8624b1ff84b0e23cbd62189f62e989f6a5307b07a6286d95459e0886a8d16fd59ad5a34607dd2c644f7bedc786dd6567670c +SuiteSparse.v7.2.1+1.armv7l-linux-musleabihf.tar.gz/md5/19f9246fc6c8bd2c7a4d2df498725abe +SuiteSparse.v7.2.1+1.armv7l-linux-musleabihf.tar.gz/sha512/d2cba310fe33ddb11d9ada37ce04905dfc3f058a1cbf7b53ca1dc31c2c51bcf930a4976c39d55bfdacb19195ff772acb1c6876238640a6ed6277777934a8b53f +SuiteSparse.v7.2.1+1.i686-linux-gnu.tar.gz/md5/8ff91e530528c8761411b8d9be56d1f0 +SuiteSparse.v7.2.1+1.i686-linux-gnu.tar.gz/sha512/42bd937fb1c476164b923b5093d3df3fc3cdd4e3bc148616ba48027d4616479d674a4c8f7291cf7004a43834508b459630f4cafbd90850d10402d53faa34e714 +SuiteSparse.v7.2.1+1.i686-linux-musl.tar.gz/md5/49bc8f22a227748680734d89f64a4cf7 +SuiteSparse.v7.2.1+1.i686-linux-musl.tar.gz/sha512/b78b84d330a8f22e7d9fdd72fe621e9830c1afd908946d4101705f05546aa892b2f5ef87988dec39ccd81cbe4dbeb95adc277d096d60e106485c5b6f81cf4403 +SuiteSparse.v7.2.1+1.i686-w64-mingw32.tar.gz/md5/cd593a3c801ba72bf6d77788c7ca06b9 +SuiteSparse.v7.2.1+1.i686-w64-mingw32.tar.gz/sha512/0b49795ed5cb773a5930d305e65d53ff35ff1d1ee0a84e8762f56ca442c2421752b50b667646fd6a977c0684c2214996011f405ff1c7fd6eeaf16d08262d7d05 +SuiteSparse.v7.2.1+1.powerpc64le-linux-gnu.tar.gz/md5/3858c87b8f62844520ff61c72d7b5a25 +SuiteSparse.v7.2.1+1.powerpc64le-linux-gnu.tar.gz/sha512/ea505fe14155ee69a715339fe7075603c04458d5c7f65fecb92bea69a86117b1d21da75dab832ac0f6cc9aa64bfa6d7f50cb679fefa9ec5b4d4d8826d3137ff9 +SuiteSparse.v7.2.1+1.x86_64-apple-darwin.tar.gz/md5/241dec5338e04fbf6084cec90bbd2f76 +SuiteSparse.v7.2.1+1.x86_64-apple-darwin.tar.gz/sha512/8477d2102be709aa2f74325df91aab4f9c894c8f516cd17d3780aab66bcbf920fa5771fa7e130a63793f94b99c6cfc4db6ab22e6a33a55670e25e36472770d59 +SuiteSparse.v7.2.1+1.x86_64-linux-gnu.tar.gz/md5/c6b6fa99a21a9000892d51b821f304a7 +SuiteSparse.v7.2.1+1.x86_64-linux-gnu.tar.gz/sha512/ad2e1200d0418c531758672b64e849c81cfe74ca73cff0e1a47797e73dbc4675c9a2ec855af628dddef58b135412d06fa18c15565c94de5e1e6d15e3b150ecbd +SuiteSparse.v7.2.1+1.x86_64-linux-musl.tar.gz/md5/6c14129471a9c92464d36ae00f4c5a08 +SuiteSparse.v7.2.1+1.x86_64-linux-musl.tar.gz/sha512/e9051ceb7d551019deb16480b493d1ac5b622fe86c7e19b1023eb12af28d42f25e911e1e44870c35849d8f95d78e8e28c38699cde1fab250dac32818ebc58a2b +SuiteSparse.v7.2.1+1.x86_64-unknown-freebsd.tar.gz/md5/ab0f6a9b7789f21aba5ea10659b03ed3 +SuiteSparse.v7.2.1+1.x86_64-unknown-freebsd.tar.gz/sha512/cc9136bfda474914107e68f97a200d46f81a1f36ea51c4e482ef04e818d3ac10d14b2895eef59b2570f6115261e987bd076dd8f9be0e6d2dc77931d3257db142 +SuiteSparse.v7.2.1+1.x86_64-w64-mingw32.tar.gz/md5/e804d9ed593d739326865dc1f60d5800 +SuiteSparse.v7.2.1+1.x86_64-w64-mingw32.tar.gz/sha512/20c9ac62cd41b19e0b9605c8f9a8bece9089f7f69e2cf57ace3058215acefe8cf9ce39d3c05010223443bfc45b1efb8391be677a1b5e9a59bbdfe89f89553f71 diff --git a/deps/libsuitesparse.mk b/deps/libsuitesparse.mk index e547030c16a08..4d5122ee87cf7 100644 --- a/deps/libsuitesparse.mk +++ b/deps/libsuitesparse.mk @@ -29,7 +29,7 @@ LIBSUITESPARSE_CMAKE_FLAGS += -DCMAKE_INSTALL_RPATH="\$$ORIGIN" endif $(SRCCACHE)/SuiteSparse-$(LIBSUITESPARSE_VER).tar.gz: | $(SRCCACHE) - $(JLDOWNLOAD) $@ https://github.com/Wimmerer/SuiteSparse/archive/v$(LIBSUITESPARSE_VER).tar.gz + $(JLDOWNLOAD) $@ https://github.com/DrTimothyAldenDavis/SuiteSparse/archive/v$(LIBSUITESPARSE_VER).tar.gz $(BUILDDIR)/SuiteSparse-$(LIBSUITESPARSE_VER)/source-extracted: $(SRCCACHE)/SuiteSparse-$(LIBSUITESPARSE_VER).tar.gz $(JLCHECKSUM) $< diff --git a/deps/libsuitesparse.version b/deps/libsuitesparse.version index 867e52304477c..eea10d4f2beb8 100644 --- a/deps/libsuitesparse.version +++ b/deps/libsuitesparse.version @@ -2,6 +2,5 @@ LIBSUITESPARSE_JLL_NAME := SuiteSparse ## source build -LIBSUITESPARSE_VER := 7.2.0 -LIBSUITESPARSE_BRANCH=guard-CXX_Standard -LIBSUITESPARSE_SHA1=1b4edf467637dbf33a26eee9a6c20afa40c7c5ea +LIBSUITESPARSE_VER := 7.2.1 +LIBSUITESPARSE_SHA1=d6c84f7416eaee0d23d61c6c49ad1b73235d2ea2 diff --git a/stdlib/SuiteSparse_jll/Project.toml b/stdlib/SuiteSparse_jll/Project.toml index 6c23952e5c6b6..ccd1d06d9a7bb 100644 --- a/stdlib/SuiteSparse_jll/Project.toml +++ b/stdlib/SuiteSparse_jll/Project.toml @@ -1,6 +1,6 @@ name = "SuiteSparse_jll" uuid = "bea87d4a-7f5b-5778-9afe-8cc45184846c" -version = "7.2.0+1" +version = "7.2.1+1" [deps] libblastrampoline_jll = "8e850b90-86db-534c-a0d3-1478176c7d93" @@ -9,7 +9,7 @@ Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" Artifacts = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" [compat] -julia = "1.9" +julia = "1.10" [extras] Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" From 3b9771507a29f02a0477de5de88805ecfa197dbb Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Fri, 20 Oct 2023 17:43:29 -0300 Subject: [PATCH 161/413] Test for reverting back to 1.8 GC heuristics (#51661) The 1.10 GC heuristics introduced in https://github.com/JuliaLang/julia/pull/50144 have been a source of concerning issues such as https://github.com/JuliaLang/julia/issues/50705 and https://github.com/JuliaLang/julia/issues/51601. The PR also doesn't correctly implement the paper on which it's based, as discussed in https://github.com/JuliaLang/julia/issues/51498. Test whether the 1.8 GC heuristics are a viable option. --- src/gc-debug.c | 35 +----- src/gc-pages.c | 4 - src/gc.c | 251 +++++++++++++------------------------------- src/gc.h | 11 +- src/julia_threads.h | 4 +- 5 files changed, 77 insertions(+), 228 deletions(-) diff --git a/src/gc-debug.c b/src/gc-debug.c index 23d1ca8f5f884..3f0f3368533a4 100644 --- a/src/gc-debug.c +++ b/src/gc-debug.c @@ -953,29 +953,6 @@ void gc_time_sweep_pause(uint64_t gc_end_t, int64_t actual_allocd, jl_ns2ms(gc_postmark_end - gc_premark_end), sweep_full ? "full" : "quick", -gc_num.allocd / 1024); } - -void gc_time_summary(int sweep_full, uint64_t start, uint64_t end, - uint64_t freed, uint64_t live, uint64_t interval, - uint64_t pause, uint64_t ttsp, uint64_t mark, - uint64_t sweep) -{ - if (sweep_full > 0) - jl_safe_printf("TS: %" PRIu64 " Major collection: estimate freed = %" PRIu64 - " live = %" PRIu64 "m new interval = %" PRIu64 - "m time = %" PRIu64 "ms ttsp = %" PRIu64 "us mark time = %" - PRIu64 "ms sweep time = %" PRIu64 "ms \n", - end, freed, live/1024/1024, - interval/1024/1024, pause/1000000, ttsp, - mark/1000000,sweep/1000000); - else - jl_safe_printf("TS: %" PRIu64 " Minor collection: estimate freed = %" PRIu64 - " live = %" PRIu64 "m new interval = %" PRIu64 "m pause time = %" - PRIu64 "ms ttsp = %" PRIu64 "us mark time = %" PRIu64 - "ms sweep time = %" PRIu64 "ms \n", - end, freed, live/1024/1024, - interval/1024/1024, pause/1000000, ttsp, - mark/1000000,sweep/1000000); -} #endif void jl_gc_debug_init(void) @@ -1219,7 +1196,7 @@ JL_DLLEXPORT void jl_enable_gc_logging(int enable) { gc_logging_enabled = enable; } -void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect, int64_t live_bytes) JL_NOTSAFEPOINT { +void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect) JL_NOTSAFEPOINT { if (!gc_logging_enabled) { return; } @@ -1228,16 +1205,6 @@ void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect full ? "full" : "incr", recollect ? "recollect" : "" ); - - jl_safe_printf("Heap stats: bytes_mapped %.2f MB, bytes_resident %.2f MB,\nheap_size %.2f MB, heap_target %.2f MB, Fragmentation %.3f\n", - jl_atomic_load_relaxed(&gc_heap_stats.bytes_mapped)/(double)(1<<20), - jl_atomic_load_relaxed(&gc_heap_stats.bytes_resident)/(double)(1<<20), - // live_bytes/(double)(1<<20), live byes tracking is not accurate. - jl_atomic_load_relaxed(&gc_heap_stats.heap_size)/(double)(1<<20), - jl_atomic_load_relaxed(&gc_heap_stats.heap_target)/(double)(1<<20), - (double)live_bytes/(double)jl_atomic_load_relaxed(&gc_heap_stats.heap_size) - ); - // Should fragmentation use bytes_resident instead of heap_size? } #ifdef __cplusplus diff --git a/src/gc-pages.c b/src/gc-pages.c index 8d596f4a815ca..682e76611f5d9 100644 --- a/src/gc-pages.c +++ b/src/gc-pages.c @@ -52,8 +52,6 @@ char *jl_gc_try_alloc_pages_(int pg_cnt) JL_NOTSAFEPOINT // round data pointer up to the nearest gc_page_data-aligned // boundary if mmap didn't already do so. mem = (char*)gc_page_data(mem + GC_PAGE_SZ - 1); - jl_atomic_fetch_add_relaxed(&gc_heap_stats.bytes_mapped, pages_sz); - jl_atomic_fetch_add_relaxed(&gc_heap_stats.bytes_resident, pages_sz); return mem; } @@ -117,7 +115,6 @@ NOINLINE jl_gc_pagemeta_t *jl_gc_alloc_page(void) JL_NOTSAFEPOINT // try to get page from `pool_freed` meta = pop_lf_page_metadata_back(&global_page_pool_freed); if (meta != NULL) { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.bytes_resident, GC_PAGE_SZ); gc_alloc_map_set(meta->data, GC_PAGE_ALLOCATED); goto exit; } @@ -191,7 +188,6 @@ void jl_gc_free_page(jl_gc_pagemeta_t *pg) JL_NOTSAFEPOINT madvise(p, decommit_size, MADV_DONTNEED); #endif msan_unpoison(p, decommit_size); - jl_atomic_fetch_add_relaxed(&gc_heap_stats.bytes_resident, -decommit_size); } #ifdef __cplusplus diff --git a/src/gc.c b/src/gc.c index 8969969ab66f5..8e37fa95a6cfc 100644 --- a/src/gc.c +++ b/src/gc.c @@ -189,7 +189,6 @@ jl_gc_num_t gc_num = {0}; static size_t last_long_collect_interval; int gc_n_threads; jl_ptls_t* gc_all_tls_states; -gc_heapstatus_t gc_heap_stats = {0}; int next_sweep_full = 0; const uint64_t _jl_buff_tag[3] = {0x4eadc0004eadc000ull, 0x4eadc0004eadc000ull, 0x4eadc0004eadc000ull}; // aka 0xHEADER00 JL_DLLEXPORT uintptr_t jl_get_buff_tag(void) @@ -678,27 +677,21 @@ static int64_t last_gc_total_bytes = 0; #ifdef _P64 typedef uint64_t memsize_t; static const size_t default_collect_interval = 5600 * 1024 * sizeof(void*); +static const size_t max_collect_interval = 1250000000UL; static size_t total_mem; // We expose this to the user/ci as jl_gc_set_max_memory static memsize_t max_total_memory = (memsize_t) 2 * 1024 * 1024 * 1024 * 1024 * 1024; #else typedef uint32_t memsize_t; static const size_t default_collect_interval = 3200 * 1024 * sizeof(void*); +static const size_t max_collect_interval = 500000000UL; // Work really hard to stay within 2GB // Alternative is to risk running out of address space // on 32 bit architectures. #define MAX32HEAP 1536 * 1024 * 1024 static memsize_t max_total_memory = (memsize_t) MAX32HEAP; #endif -// heuristic stuff for https://dl.acm.org/doi/10.1145/3563323 -static uint64_t old_pause_time = 0; -static uint64_t old_mut_time = 0; -static uint64_t old_heap_size = 0; -static uint64_t old_alloc_diff = 0; -static uint64_t old_freed_diff = 0; static uint64_t gc_end_time = 0; -static int thrash_counter = 0; -static int thrashing = 0; // global variables for GC stats // Resetting the object to a young object, this is used when marking the @@ -755,8 +748,9 @@ int under_pressure = 0; // Full collection heuristics static int64_t live_bytes = 0; static int64_t promoted_bytes = 0; +static int64_t last_full_live = 0; // live_bytes after last full collection static int64_t last_live_bytes = 0; // live_bytes at last collection -static int64_t t_start = 0; // Time GC starts; +static int64_t grown_heap_age = 0; // # of collects since live_bytes grew and remained #ifdef __GLIBC__ // maxrss at last malloc_trim static int64_t last_trim_maxrss = 0; @@ -937,7 +931,7 @@ void gc_setmark_buf(jl_ptls_t ptls, void *o, uint8_t mark_mode, size_t minsz) JL STATIC_INLINE void maybe_collect(jl_ptls_t ptls) { - if (jl_atomic_load_relaxed(&gc_heap_stats.heap_size) >= jl_atomic_load_relaxed(&gc_heap_stats.heap_target) || jl_gc_debug_check_other()) { + if (jl_atomic_load_relaxed(&ptls->gc_num.allocd) >= 0 || jl_gc_debug_check_other()) { jl_gc_collect(JL_GC_AUTO); } else { @@ -1026,13 +1020,6 @@ STATIC_INLINE jl_value_t *jl_gc_big_alloc_inner(jl_ptls_t ptls, size_t sz) jl_atomic_load_relaxed(&ptls->gc_num.allocd) + allocsz); jl_atomic_store_relaxed(&ptls->gc_num.bigalloc, jl_atomic_load_relaxed(&ptls->gc_num.bigalloc) + 1); - uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); - if (alloc_acc + allocsz < 16*1024) - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + allocsz); - else { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + allocsz); - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); - } #ifdef MEMDEBUG memset(v, 0xee, allocsz); #endif @@ -1078,8 +1065,6 @@ static bigval_t **sweep_big_list(int sweep_full, bigval_t **pv) JL_NOTSAFEPOINT if (nxt) nxt->prev = pv; gc_num.freed += v->sz&~3; - jl_atomic_store_relaxed(&gc_heap_stats.heap_size, - jl_atomic_load_relaxed(&gc_heap_stats.heap_size) - (v->sz&~3)); #ifdef MEMDEBUG memset(v, 0xbb, v->sz&~3); #endif @@ -1139,13 +1124,6 @@ void jl_gc_count_allocd(size_t sz) JL_NOTSAFEPOINT jl_ptls_t ptls = jl_current_task->ptls; jl_atomic_store_relaxed(&ptls->gc_num.allocd, jl_atomic_load_relaxed(&ptls->gc_num.allocd) + sz); - uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); - if (alloc_acc + sz < 16*1024) - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + sz); - else { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + sz); - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); - } } static void combine_thread_gc_counts(jl_gc_num_t *dest) JL_NOTSAFEPOINT @@ -1158,16 +1136,12 @@ static void combine_thread_gc_counts(jl_gc_num_t *dest) JL_NOTSAFEPOINT jl_ptls_t ptls = gc_all_tls_states[i]; if (ptls) { dest->allocd += (jl_atomic_load_relaxed(&ptls->gc_num.allocd) + gc_num.interval); + dest->freed += jl_atomic_load_relaxed(&ptls->gc_num.freed); dest->malloc += jl_atomic_load_relaxed(&ptls->gc_num.malloc); dest->realloc += jl_atomic_load_relaxed(&ptls->gc_num.realloc); dest->poolalloc += jl_atomic_load_relaxed(&ptls->gc_num.poolalloc); dest->bigalloc += jl_atomic_load_relaxed(&ptls->gc_num.bigalloc); - uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); - uint64_t free_acc = jl_atomic_load_relaxed(&ptls->gc_num.free_acc); - dest->freed += jl_atomic_load_relaxed(&ptls->gc_num.free_acc); - jl_atomic_store_relaxed(&gc_heap_stats.heap_size, alloc_acc - free_acc + jl_atomic_load_relaxed(&gc_heap_stats.heap_size)); - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); - jl_atomic_store_relaxed(&ptls->gc_num.free_acc, 0); + dest->freecall += jl_atomic_load_relaxed(&ptls->gc_num.freecall); } } } @@ -1224,8 +1198,6 @@ static void jl_gc_free_array(jl_array_t *a) JL_NOTSAFEPOINT jl_free_aligned(d); else free(d); - jl_atomic_store_relaxed(&gc_heap_stats.heap_size, - jl_atomic_load_relaxed(&gc_heap_stats.heap_size) - jl_array_nbytes(a)); gc_num.freed += jl_array_nbytes(a); gc_num.freecall++; } @@ -1300,7 +1272,6 @@ static NOINLINE jl_taggedvalue_t *gc_add_page(jl_gc_pool_t *p) JL_NOTSAFEPOINT set_page_metadata(pg); push_page_metadata_back(&ptls->page_metadata_allocd, pg); jl_taggedvalue_t *fl = gc_reset_page(ptls, p, pg); - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, GC_PAGE_SZ); p->newpages = fl; return fl; } @@ -1495,10 +1466,8 @@ static jl_taggedvalue_t **gc_sweep_page(jl_gc_pool_t *p, jl_gc_pagemeta_t **allo else if (freed_lazily) { gc_alloc_map_set(pg->data, GC_PAGE_LAZILY_FREED); push_page_metadata_back(lazily_freed, pg); - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -GC_PAGE_SZ); } else { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -GC_PAGE_SZ); #ifdef _P64 // only enable concurrent sweeping on 64bit if (jl_n_sweepthreads == 0) { jl_gc_free_page(pg); @@ -3138,8 +3107,6 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) jl_gc_markqueue_t *mq = &ptls->mark_queue; uint64_t gc_start_time = jl_hrtime(); - uint64_t mutator_time = gc_start_time - gc_end_time; - uint64_t before_free_heap_size = jl_atomic_load_relaxed(&gc_heap_stats.heap_size); int64_t last_perm_scanned_bytes = perm_scanned_bytes; uint64_t start_mark_time = jl_hrtime(); JL_PROBE_GC_MARK_BEGIN(); @@ -3230,12 +3197,16 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) uint64_t mark_time = end_mark_time - start_mark_time; gc_num.mark_time = mark_time; gc_num.total_mark_time += mark_time; + int64_t actual_allocd = gc_num.allocd; gc_settime_postmark_end(); // marking is over // Flush everything in mark cache gc_sync_all_caches_nolock(ptls); + int64_t live_sz_ub = live_bytes + actual_allocd; + int64_t live_sz_est = scanned_bytes + perm_scanned_bytes; + int64_t estimate_freed = live_sz_ub - live_sz_est; gc_verify(ptls); gc_stats_all_pool(); @@ -3246,16 +3217,53 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) if (!prev_sweep_full) promoted_bytes += perm_scanned_bytes - last_perm_scanned_bytes; // 5. next collection decision - int remset_nptr = 0; - int sweep_full = next_sweep_full; - int recollect = 0; + int not_freed_enough = (collection == JL_GC_AUTO) && estimate_freed < (7*(actual_allocd/10)); + int nptr = 0; assert(gc_n_threads); for (int i = 0; i < gc_n_threads; i++) { jl_ptls_t ptls2 = gc_all_tls_states[i]; if (ptls2 != NULL) - remset_nptr += ptls2->heap.remset_nptr; + nptr += ptls2->heap.remset_nptr; + } + int large_frontier = nptr*sizeof(void*) >= default_collect_interval; // many pointers in the intergen frontier => "quick" mark is not quick + // trigger a full collection if the number of live bytes doubles since the last full + // collection and then remains at least that high for a while. + if (grown_heap_age == 0) { + if (live_bytes > 2 * last_full_live) + grown_heap_age = 1; + } + else if (live_bytes >= last_live_bytes) { + grown_heap_age++; + } + int sweep_full = 0; + int recollect = 0; + if ((large_frontier || + ((not_freed_enough || promoted_bytes >= gc_num.interval) && + (promoted_bytes >= default_collect_interval || prev_sweep_full)) || + grown_heap_age > 1) && gc_num.pause > 1) { + sweep_full = 1; + } + // update heuristics only if this GC was automatically triggered + if (collection == JL_GC_AUTO) { + if (sweep_full) { + if (large_frontier) + gc_num.interval = last_long_collect_interval; + if (not_freed_enough || large_frontier) { + if (gc_num.interval <= 2*(max_collect_interval/5)) { + gc_num.interval = 5 * (gc_num.interval / 2); + } + } + last_long_collect_interval = gc_num.interval; + } + else { + // reset interval to default, or at least half of live_bytes + int64_t half = live_bytes/2; + if (default_collect_interval < half && half <= max_collect_interval) + gc_num.interval = half; + else + gc_num.interval = default_collect_interval; + } } - (void)remset_nptr; //Use this information for something? // If the live data outgrows the suggested max_total_memory @@ -3309,56 +3317,6 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) gc_num.last_full_sweep = gc_end_time; } - size_t heap_size = jl_atomic_load_relaxed(&gc_heap_stats.heap_size); - double target_allocs = 0.0; - double min_interval = default_collect_interval; - if (collection == JL_GC_AUTO) { - uint64_t alloc_diff = before_free_heap_size - old_heap_size; - uint64_t freed_diff = before_free_heap_size - heap_size; - double alloc_smooth_factor = 0.95; - double collect_smooth_factor = 0.5; - double tuning_factor = 0.03; - double alloc_mem = jl_gc_smooth(old_alloc_diff, alloc_diff, alloc_smooth_factor); - double alloc_time = jl_gc_smooth(old_mut_time, mutator_time + sweep_time, alloc_smooth_factor); // Charge sweeping to the mutator - double gc_mem = jl_gc_smooth(old_freed_diff, freed_diff, collect_smooth_factor); - double gc_time = jl_gc_smooth(old_pause_time, pause - sweep_time, collect_smooth_factor); - old_alloc_diff = alloc_diff; - old_mut_time = mutator_time; - old_freed_diff = freed_diff; - old_pause_time = pause; - old_heap_size = heap_size; // TODO: Update these values dynamically instead of just during the GC - if (gc_time > alloc_time * 95 && !(thrash_counter < 4)) - thrash_counter += 1; - else if (thrash_counter > 0) - thrash_counter -= 1; - if (alloc_mem != 0 && alloc_time != 0 && gc_mem != 0 && gc_time != 0 ) { - double alloc_rate = alloc_mem/alloc_time; - double gc_rate = gc_mem/gc_time; - target_allocs = sqrt(((double)heap_size/min_interval * alloc_rate)/(gc_rate * tuning_factor)); // work on multiples of min interval - } - } - if (thrashing == 0 && thrash_counter >= 3) - thrashing = 1; - else if (thrashing == 1 && thrash_counter <= 2) - thrashing = 0; // maybe we should report this to the user or error out? - - int bad_result = (target_allocs*min_interval + heap_size) > 2 * jl_atomic_load_relaxed(&gc_heap_stats.heap_target); // Don't follow through on a bad decision - if (target_allocs == 0.0 || thrashing || bad_result) // If we are thrashing go back to default - target_allocs = 2*sqrt((double)heap_size/min_interval); - uint64_t target_heap = (uint64_t)target_allocs*min_interval + heap_size; - if (target_heap > max_total_memory && !thrashing) // Allow it to go over if we are thrashing if we die we die - target_heap = max_total_memory; - else if (target_heap < default_collect_interval) - target_heap = default_collect_interval; - jl_atomic_store_relaxed(&gc_heap_stats.heap_target, target_heap); - - double old_ratio = (double)promoted_bytes/(double)heap_size; - if (heap_size > max_total_memory * 0.8 || old_ratio > 0.15) - next_sweep_full = 1; - else - next_sweep_full = 0; - if (heap_size > max_total_memory * 0.8 || thrashing) - under_pressure = 1; // sweeping is over // 7. if it is a quick sweep, put back the remembered objects in queued state // so that we don't trigger the barrier again on them. @@ -3390,28 +3348,32 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) } #endif - _report_gc_finished(pause, gc_num.freed, sweep_full, recollect, live_bytes); + _report_gc_finished(pause, gc_num.freed, sweep_full, recollect); + + gc_final_pause_end(gc_start_time, gc_end_time); + gc_time_sweep_pause(gc_end_time, actual_allocd, live_bytes, + estimate_freed, sweep_full); + gc_num.full_sweep += sweep_full; uint64_t max_memory = last_live_bytes + gc_num.allocd; if (max_memory > gc_num.max_memory) { gc_num.max_memory = max_memory; } - gc_final_pause_end(gc_start_time, gc_end_time); - gc_time_sweep_pause(gc_end_time, allocd, live_bytes, - estimate_freed, sweep_full); - gc_num.full_sweep += sweep_full; + + gc_num.allocd = 0; last_live_bytes = live_bytes; - live_bytes += -gc_num.freed + gc_num.allocd; + live_bytes += -gc_num.freed + actual_allocd; jl_timing_counter_dec(JL_TIMING_COUNTER_HeapSize, gc_num.freed); - gc_time_summary(sweep_full, t_start, gc_end_time, gc_num.freed, live_bytes, gc_num.interval, pause, gc_num.time_to_safepoint, gc_num.mark_time, gc_num.sweep_time); - + if (prev_sweep_full) { + last_full_live = live_bytes; + grown_heap_age = 0; + } prev_sweep_full = sweep_full; gc_num.pause += !recollect; gc_num.total_time += pause; - gc_num.allocd = 0; gc_num.freed = 0; if (pause > gc_num.max_pause) { gc_num.max_pause = pause; @@ -3597,7 +3559,6 @@ void jl_gc_init(void) arraylist_new(&finalizer_list_marked, 0); arraylist_new(&to_finalize, 0); - jl_atomic_store_relaxed(&gc_heap_stats.heap_target, default_collect_interval); gc_num.interval = default_collect_interval; last_long_collect_interval = default_collect_interval; gc_num.allocd = 0; @@ -3612,8 +3573,6 @@ void jl_gc_init(void) #endif if (jl_options.heap_size_hint) jl_gc_set_max_memory(jl_options.heap_size_hint - 250*1024*1024); - - t_start = jl_hrtime(); } JL_DLLEXPORT void jl_gc_set_max_memory(uint64_t max_mem) @@ -3653,13 +3612,6 @@ JL_DLLEXPORT void *jl_gc_counted_malloc(size_t sz) jl_atomic_load_relaxed(&ptls->gc_num.allocd) + sz); jl_atomic_store_relaxed(&ptls->gc_num.malloc, jl_atomic_load_relaxed(&ptls->gc_num.malloc) + 1); - uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); - if (alloc_acc + sz < 16*1024) - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + sz); - else { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + sz); - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); - } } return data; } @@ -3676,13 +3628,6 @@ JL_DLLEXPORT void *jl_gc_counted_calloc(size_t nm, size_t sz) jl_atomic_load_relaxed(&ptls->gc_num.allocd) + nm*sz); jl_atomic_store_relaxed(&ptls->gc_num.malloc, jl_atomic_load_relaxed(&ptls->gc_num.malloc) + 1); - uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); - if (alloc_acc + sz < 16*1024) - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + sz * nm); - else { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + sz * nm); - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); - } } return data; } @@ -3694,13 +3639,10 @@ JL_DLLEXPORT void jl_gc_counted_free_with_size(void *p, size_t sz) free(p); if (pgcstack != NULL && ct->world_age) { jl_ptls_t ptls = ct->ptls; - uint64_t free_acc = jl_atomic_load_relaxed(&ptls->gc_num.free_acc); - if (free_acc + sz < 16*1024) - jl_atomic_store_relaxed(&ptls->gc_num.free_acc, free_acc + sz); - else { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -(free_acc + sz)); - jl_atomic_store_relaxed(&ptls->gc_num.free_acc, 0); - } + jl_atomic_store_relaxed(&ptls->gc_num.freed, + jl_atomic_load_relaxed(&ptls->gc_num.freed) + sz); + jl_atomic_store_relaxed(&ptls->gc_num.freecall, + jl_atomic_load_relaxed(&ptls->gc_num.freecall) + 1); } } @@ -3717,27 +3659,6 @@ JL_DLLEXPORT void *jl_gc_counted_realloc_with_old_size(void *p, size_t old, size jl_atomic_load_relaxed(&ptls->gc_num.allocd) + (sz - old)); jl_atomic_store_relaxed(&ptls->gc_num.realloc, jl_atomic_load_relaxed(&ptls->gc_num.realloc) + 1); - - int64_t diff = sz - old; - if (diff < 0) { - diff = -diff; - uint64_t free_acc = jl_atomic_load_relaxed(&ptls->gc_num.free_acc); - if (free_acc + diff < 16*1024) - jl_atomic_store_relaxed(&ptls->gc_num.free_acc, free_acc + diff); - else { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -(free_acc + diff)); - jl_atomic_store_relaxed(&ptls->gc_num.free_acc, 0); - } - } - else { - uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); - if (alloc_acc + diff < 16*1024) - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + diff); - else { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + diff); - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); - } - } } return data; } @@ -3821,13 +3742,6 @@ JL_DLLEXPORT void *jl_gc_managed_malloc(size_t sz) jl_atomic_load_relaxed(&ptls->gc_num.allocd) + allocsz); jl_atomic_store_relaxed(&ptls->gc_num.malloc, jl_atomic_load_relaxed(&ptls->gc_num.malloc) + 1); - uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); - if (alloc_acc + allocsz < 16*1024) - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + allocsz); - else { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + allocsz); - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); - } #ifdef _OS_WINDOWS_ SetLastError(last_error); #endif @@ -3872,29 +3786,9 @@ static void *gc_managed_realloc_(jl_ptls_t ptls, void *d, size_t sz, size_t olds jl_atomic_load_relaxed(&ptls->gc_num.allocd) + (allocsz - oldsz)); jl_atomic_store_relaxed(&ptls->gc_num.realloc, jl_atomic_load_relaxed(&ptls->gc_num.realloc) + 1); - - int64_t diff = allocsz - oldsz; - if (diff < 0) { - diff = -diff; - uint64_t free_acc = jl_atomic_load_relaxed(&ptls->gc_num.free_acc); - if (free_acc + diff < 16*1024) - jl_atomic_store_relaxed(&ptls->gc_num.free_acc, free_acc + diff); - else { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, -(free_acc + diff)); - jl_atomic_store_relaxed(&ptls->gc_num.free_acc, 0); - } + if (allocsz > oldsz) { + maybe_record_alloc_to_profile((jl_value_t*)b, allocsz - oldsz, (jl_datatype_t*)jl_buff_tag); } - else { - uint64_t alloc_acc = jl_atomic_load_relaxed(&ptls->gc_num.alloc_acc); - if (alloc_acc + diff < 16*1024) - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, alloc_acc + diff); - else { - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size, alloc_acc + diff); - jl_atomic_store_relaxed(&ptls->gc_num.alloc_acc, 0); - } - } - - maybe_record_alloc_to_profile((jl_value_t*)b, sz, jl_gc_unknown_type_tag); return b; } @@ -3967,7 +3861,6 @@ static void *gc_perm_alloc_large(size_t sz, int zero, unsigned align, unsigned o #ifdef _OS_WINDOWS_ SetLastError(last_error); #endif - jl_atomic_fetch_add_relaxed(&gc_heap_stats.heap_size,sz); errno = last_errno; jl_may_leak(base); assert(align > 0); diff --git a/src/gc.h b/src/gc.h index 4bfe5dc328e9d..a00157c0d34ba 100644 --- a/src/gc.h +++ b/src/gc.h @@ -258,13 +258,6 @@ typedef struct { pagetable1_t *meta1[REGION2_PG_COUNT]; } pagetable_t; -typedef struct { - _Atomic(size_t) bytes_mapped; - _Atomic(size_t) bytes_resident; - _Atomic(size_t) heap_size; - _Atomic(size_t) heap_target; -} gc_heapstatus_t; - #define GC_PAGE_UNMAPPED 0 #define GC_PAGE_ALLOCATED 1 #define GC_PAGE_LAZILY_FREED 2 @@ -382,7 +375,6 @@ extern int64_t lazy_freed_pages; extern int gc_first_tid; extern int gc_n_threads; extern jl_ptls_t* gc_all_tls_states; -extern gc_heapstatus_t gc_heap_stats; STATIC_INLINE bigval_t *bigval_header(jl_taggedvalue_t *o) JL_NOTSAFEPOINT { @@ -646,7 +638,8 @@ void gc_count_pool(void); size_t jl_array_nbytes(jl_array_t *a) JL_NOTSAFEPOINT; JL_DLLEXPORT void jl_enable_gc_logging(int enable); -void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect, int64_t live_bytes) JL_NOTSAFEPOINT; +JL_DLLEXPORT uint32_t jl_get_num_stack_mappings(void); +void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect) JL_NOTSAFEPOINT; #ifdef __cplusplus } diff --git a/src/julia_threads.h b/src/julia_threads.h index d4cbb88e619ba..f4c235243e684 100644 --- a/src/julia_threads.h +++ b/src/julia_threads.h @@ -130,12 +130,12 @@ typedef struct { typedef struct { _Atomic(int64_t) allocd; + _Atomic(int64_t) freed; _Atomic(uint64_t) malloc; _Atomic(uint64_t) realloc; _Atomic(uint64_t) poolalloc; _Atomic(uint64_t) bigalloc; - _Atomic(int64_t) free_acc; - _Atomic(uint64_t) alloc_acc; + _Atomic(uint64_t) freecall; } jl_thread_gc_num_t; typedef struct { From f2c447d7c7f53b68b96234fc6b6281c0d7375138 Mon Sep 17 00:00:00 2001 From: KristofferC Date: Mon, 23 Oct 2023 12:26:40 +0200 Subject: [PATCH 162/413] bump SparseArrays to latest release-1.10 --- .../md5 | 1 - .../sha512 | 1 - .../md5 | 1 + .../sha512 | 1 + stdlib/SparseArrays.version | 4 ++-- 5 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 delete mode 100644 deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 create mode 100644 deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/md5 create mode 100644 deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/sha512 diff --git a/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 b/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 deleted file mode 100644 index 6509fe3ef2766..0000000000000 --- a/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -b2ddca51d8d39c2869555229575451f2 diff --git a/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 b/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 deleted file mode 100644 index 2855286b87ab3..0000000000000 --- a/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -cff167088056690a7c7453326bc1ad0ca0fcff9ffda85ebfd943ebad9684fc8134b0cda18dd70d8550de35493c6d9579b2fb51090b1c9718fa4290008c6d5f3f diff --git a/deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/md5 b/deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/md5 new file mode 100644 index 0000000000000..ce30b3e199269 --- /dev/null +++ b/deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/md5 @@ -0,0 +1 @@ +7344619653c2d5a15ffd8a5ffceccd97 diff --git a/deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/sha512 b/deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/sha512 new file mode 100644 index 0000000000000..b47df53eb7540 --- /dev/null +++ b/deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/sha512 @@ -0,0 +1 @@ +611a6b6ae1027ddfb79dbb4c7b6e8b5962dcc8972156acdcf91a36d687ac236b53d37c74b70d298bb392aa5dc4186ea0cc55ddb3630a1945203f06e58240972a diff --git a/stdlib/SparseArrays.version b/stdlib/SparseArrays.version index 295400bbd3b57..782ca3584e88e 100644 --- a/stdlib/SparseArrays.version +++ b/stdlib/SparseArrays.version @@ -1,4 +1,4 @@ -SPARSEARRAYS_BRANCH = main -SPARSEARRAYS_SHA1 = 99c99b4521eb19a7973643d1aa4d7b1e4d50a6db +SPARSEARRAYS_BRANCH = release-1.10 +SPARSEARRAYS_SHA1 = d8aae6daa0943d719b4f6dfb0e906193b65928fa SPARSEARRAYS_GIT_URL := https://github.com/JuliaSparse/SparseArrays.jl.git SPARSEARRAYS_TAR_URL = https://api.github.com/repos/JuliaSparse/SparseArrays.jl/tarball/$1 From 4d3022ea6098a4382be7775c0de0f1df88b9d1f6 Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Wed, 27 Sep 2023 21:57:54 +0200 Subject: [PATCH 163/413] Handle `AbstractQ` in concatenation (#51132) Handling `AbstractQ`s in concatenation got lost in the overhaul. This brings it back (though it seemed to not be used anywhere), and even better: pre-1.9 `Q`s where handled via `AbstractMatrix` fallbacks, so elementwise. Now, it first materializes the matrix, and then copies to the right place in the destination array. (cherry picked from commit 50146b2dd27e8f3bc54367427a70cd96f74ada45) --- base/abstractarray.jl | 9 +- stdlib/LinearAlgebra/src/abstractq.jl | 11 +++ stdlib/LinearAlgebra/src/special.jl | 110 +++++++++++++++++++++ stdlib/LinearAlgebra/src/uniformscaling.jl | 108 -------------------- stdlib/LinearAlgebra/test/special.jl | 5 +- 5 files changed, 128 insertions(+), 115 deletions(-) diff --git a/base/abstractarray.jl b/base/abstractarray.jl index 8f1274d960e41..6f9823a5be5d7 100644 --- a/base/abstractarray.jl +++ b/base/abstractarray.jl @@ -1811,17 +1811,16 @@ function __cat_offset1!(A, shape, catdims, offsets, x) inds = ntuple(length(offsets)) do i (i <= length(catdims) && catdims[i]) ? offsets[i] .+ cat_indices(x, i) : 1:shape[i] end - if x isa AbstractArray - A[inds...] = x - else - fill!(view(A, inds...), x) - end + _copy_or_fill!(A, inds, x) newoffsets = ntuple(length(offsets)) do i (i <= length(catdims) && catdims[i]) ? offsets[i] + cat_size(x, i) : offsets[i] end return newoffsets end +_copy_or_fill!(A, inds, x) = fill!(view(A, inds...), x) +_copy_or_fill!(A, inds, x::AbstractArray) = (A[inds...] = x) + """ vcat(A...) diff --git a/stdlib/LinearAlgebra/src/abstractq.jl b/stdlib/LinearAlgebra/src/abstractq.jl index 93358d052d50b..2aa333beef2b2 100644 --- a/stdlib/LinearAlgebra/src/abstractq.jl +++ b/stdlib/LinearAlgebra/src/abstractq.jl @@ -8,6 +8,7 @@ end parent(adjQ::AdjointQ) = adjQ.Q eltype(::Type{<:AbstractQ{T}}) where {T} = T +Base.eltypeof(Q::AbstractQ) = eltype(Q) ndims(::AbstractQ) = 2 # inversion/adjoint/transpose @@ -129,6 +130,16 @@ function copyto!(dest::PermutedDimsArray{T,2,perm}, src::AbstractQ) where {T,per end return dest end +# used in concatenations: Base.__cat_offset1! +Base._copy_or_fill!(A, inds, Q::AbstractQ) = (A[inds...] = collect(Q)) +# overloads of helper functions +Base.cat_size(A::AbstractQ) = size(A) +Base.cat_size(A::AbstractQ, d) = size(A, d) +Base.cat_length(a::AbstractQ) = prod(size(a)) +Base.cat_ndims(a::AbstractQ) = ndims(a) +Base.cat_indices(A::AbstractQ, d) = axes(A, d) +Base.cat_similar(A::AbstractQ, T::Type, shape::Tuple) = Array{T}(undef, shape) +Base.cat_similar(A::AbstractQ, T::Type, shape::Vector) = Array{T}(undef, shape...) function show(io::IO, ::MIME{Symbol("text/plain")}, Q::AbstractQ) print(io, Base.dims2string(size(Q)), ' ', summary(Q)) diff --git a/stdlib/LinearAlgebra/src/special.jl b/stdlib/LinearAlgebra/src/special.jl index 885f29fa1417b..d028fe43e6338 100644 --- a/stdlib/LinearAlgebra/src/special.jl +++ b/stdlib/LinearAlgebra/src/special.jl @@ -336,6 +336,116 @@ const _SpecialArrays = Union{} promote_to_array_type(::Tuple) = Matrix +# promote_to_arrays(n,k, T, A...) promotes any UniformScaling matrices +# in A to matrices of type T and sizes given by n[k:end]. n is an array +# so that the same promotion code can be used for hvcat. We pass the type T +# so that we can re-use this code for sparse-matrix hcat etcetera. +promote_to_arrays_(n::Int, ::Type, a::Number) = a +promote_to_arrays_(n::Int, ::Type{Matrix}, J::UniformScaling{T}) where {T} = Matrix(J, n, n) +promote_to_arrays_(n::Int, ::Type, A::AbstractArray) = A +promote_to_arrays_(n::Int, ::Type, A::AbstractQ) = collect(A) +promote_to_arrays(n,k, ::Type) = () +promote_to_arrays(n,k, ::Type{T}, A) where {T} = (promote_to_arrays_(n[k], T, A),) +promote_to_arrays(n,k, ::Type{T}, A, B) where {T} = + (promote_to_arrays_(n[k], T, A), promote_to_arrays_(n[k+1], T, B)) +promote_to_arrays(n,k, ::Type{T}, A, B, C) where {T} = + (promote_to_arrays_(n[k], T, A), promote_to_arrays_(n[k+1], T, B), promote_to_arrays_(n[k+2], T, C)) +promote_to_arrays(n,k, ::Type{T}, A, B, Cs...) where {T} = + (promote_to_arrays_(n[k], T, A), promote_to_arrays_(n[k+1], T, B), promote_to_arrays(n,k+2, T, Cs...)...) + +_us2number(A) = A +_us2number(J::UniformScaling) = J.λ + +for (f, _f, dim, name) in ((:hcat, :_hcat, 1, "rows"), (:vcat, :_vcat, 2, "cols")) + @eval begin + @inline $f(A::Union{AbstractArray,AbstractQ,UniformScaling}...) = $_f(A...) + # if there's a Number present, J::UniformScaling must be 1x1-dimensional + @inline $f(A::Union{AbstractArray,AbstractQ,UniformScaling,Number}...) = $f(map(_us2number, A)...) + function $_f(A::Union{AbstractArray,AbstractQ,UniformScaling,Number}...; array_type = promote_to_array_type(A)) + n = -1 + for a in A + if !isa(a, UniformScaling) + require_one_based_indexing(a) + na = size(a,$dim) + n >= 0 && n != na && + throw(DimensionMismatch(string("number of ", $name, + " of each array must match (got ", n, " and ", na, ")"))) + n = na + end + end + n == -1 && throw(ArgumentError($("$f of only UniformScaling objects cannot determine the matrix size"))) + return cat(promote_to_arrays(fill(n, length(A)), 1, array_type, A...)..., dims=Val(3-$dim)) + end + end +end + +hvcat(rows::Tuple{Vararg{Int}}, A::Union{AbstractArray,AbstractQ,UniformScaling}...) = _hvcat(rows, A...) +hvcat(rows::Tuple{Vararg{Int}}, A::Union{AbstractArray,AbstractQ,UniformScaling,Number}...) = _hvcat(rows, A...) +function _hvcat(rows::Tuple{Vararg{Int}}, A::Union{AbstractArray,AbstractQ,UniformScaling,Number}...; array_type = promote_to_array_type(A)) + require_one_based_indexing(A...) + nr = length(rows) + sum(rows) == length(A) || throw(ArgumentError("mismatch between row sizes and number of arguments")) + n = fill(-1, length(A)) + needcols = false # whether we also need to infer some sizes from the column count + j = 0 + for i = 1:nr # infer UniformScaling sizes from row counts, if possible: + ni = -1 # number of rows in this block-row, -1 indicates unknown + for k = 1:rows[i] + if !isa(A[j+k], UniformScaling) + na = size(A[j+k], 1) + ni >= 0 && ni != na && + throw(DimensionMismatch("mismatch in number of rows")) + ni = na + end + end + if ni >= 0 + for k = 1:rows[i] + n[j+k] = ni + end + else # row consisted only of UniformScaling objects + needcols = true + end + j += rows[i] + end + if needcols # some sizes still unknown, try to infer from column count + nc = -1 + j = 0 + for i = 1:nr + nci = 0 + rows[i] > 0 && n[j+1] == -1 && (j += rows[i]; continue) + for k = 1:rows[i] + nci += isa(A[j+k], UniformScaling) ? n[j+k] : size(A[j+k], 2) + end + nc >= 0 && nc != nci && throw(DimensionMismatch("mismatch in number of columns")) + nc = nci + j += rows[i] + end + nc == -1 && throw(ArgumentError("sizes of UniformScalings could not be inferred")) + j = 0 + for i = 1:nr + if rows[i] > 0 && n[j+1] == -1 # this row consists entirely of UniformScalings + nci, r = divrem(nc, rows[i]) + r != 0 && throw(DimensionMismatch("indivisible UniformScaling sizes")) + for k = 1:rows[i] + n[j+k] = nci + end + end + j += rows[i] + end + end + Amat = promote_to_arrays(n, 1, array_type, A...) + # We have two methods for promote_to_array_type, one returning Matrix and + # another one returning SparseMatrixCSC (in SparseArrays.jl). In the dense + # case, we cannot call hvcat for the promoted UniformScalings because this + # causes a stack overflow. In the sparse case, however, we cannot call + # typed_hvcat because we need a sparse output. + if array_type == Matrix + return typed_hvcat(promote_eltype(Amat...), rows, Amat...) + else + return hvcat(rows, Amat...) + end +end + # factorizations function cholesky(S::RealHermSymComplexHerm{<:Real,<:SymTridiagonal}, ::NoPivot = NoPivot(); check::Bool = true) T = choltype(eltype(S)) diff --git a/stdlib/LinearAlgebra/src/uniformscaling.jl b/stdlib/LinearAlgebra/src/uniformscaling.jl index 0b3168113acf7..b014472a9cec2 100644 --- a/stdlib/LinearAlgebra/src/uniformscaling.jl +++ b/stdlib/LinearAlgebra/src/uniformscaling.jl @@ -402,114 +402,6 @@ function cond(J::UniformScaling{T}) where T return J.λ ≠ zero(T) ? onereal : oftype(onereal, Inf) end -# promote_to_arrays(n,k, T, A...) promotes any UniformScaling matrices -# in A to matrices of type T and sizes given by n[k:end]. n is an array -# so that the same promotion code can be used for hvcat. We pass the type T -# so that we can re-use this code for sparse-matrix hcat etcetera. -promote_to_arrays_(n::Int, ::Type, a::Number) = a -promote_to_arrays_(n::Int, ::Type{Matrix}, J::UniformScaling{T}) where {T} = Matrix(J, n, n) -promote_to_arrays_(n::Int, ::Type, A::AbstractArray) = A -promote_to_arrays(n,k, ::Type) = () -promote_to_arrays(n,k, ::Type{T}, A) where {T} = (promote_to_arrays_(n[k], T, A),) -promote_to_arrays(n,k, ::Type{T}, A, B) where {T} = - (promote_to_arrays_(n[k], T, A), promote_to_arrays_(n[k+1], T, B)) -promote_to_arrays(n,k, ::Type{T}, A, B, C) where {T} = - (promote_to_arrays_(n[k], T, A), promote_to_arrays_(n[k+1], T, B), promote_to_arrays_(n[k+2], T, C)) -promote_to_arrays(n,k, ::Type{T}, A, B, Cs...) where {T} = - (promote_to_arrays_(n[k], T, A), promote_to_arrays_(n[k+1], T, B), promote_to_arrays(n,k+2, T, Cs...)...) - -_us2number(A) = A -_us2number(J::UniformScaling) = J.λ - -for (f, _f, dim, name) in ((:hcat, :_hcat, 1, "rows"), (:vcat, :_vcat, 2, "cols")) - @eval begin - @inline $f(A::Union{AbstractArray,UniformScaling}...) = $_f(A...) - # if there's a Number present, J::UniformScaling must be 1x1-dimensional - @inline $f(A::Union{AbstractArray,UniformScaling,Number}...) = $f(map(_us2number, A)...) - function $_f(A::Union{AbstractArray,UniformScaling,Number}...; array_type = promote_to_array_type(A)) - n = -1 - for a in A - if !isa(a, UniformScaling) - require_one_based_indexing(a) - na = size(a,$dim) - n >= 0 && n != na && - throw(DimensionMismatch(string("number of ", $name, - " of each array must match (got ", n, " and ", na, ")"))) - n = na - end - end - n == -1 && throw(ArgumentError($("$f of only UniformScaling objects cannot determine the matrix size"))) - return cat(promote_to_arrays(fill(n, length(A)), 1, array_type, A...)..., dims=Val(3-$dim)) - end - end -end - -hvcat(rows::Tuple{Vararg{Int}}, A::Union{AbstractArray,UniformScaling,Number}...) = _hvcat(rows, A...) -function _hvcat(rows::Tuple{Vararg{Int}}, A::Union{AbstractArray,UniformScaling,Number}...; array_type = promote_to_array_type(A)) - require_one_based_indexing(A...) - nr = length(rows) - sum(rows) == length(A) || throw(ArgumentError("mismatch between row sizes and number of arguments")) - n = fill(-1, length(A)) - needcols = false # whether we also need to infer some sizes from the column count - j = 0 - for i = 1:nr # infer UniformScaling sizes from row counts, if possible: - ni = -1 # number of rows in this block-row, -1 indicates unknown - for k = 1:rows[i] - if !isa(A[j+k], UniformScaling) - na = size(A[j+k], 1) - ni >= 0 && ni != na && - throw(DimensionMismatch("mismatch in number of rows")) - ni = na - end - end - if ni >= 0 - for k = 1:rows[i] - n[j+k] = ni - end - else # row consisted only of UniformScaling objects - needcols = true - end - j += rows[i] - end - if needcols # some sizes still unknown, try to infer from column count - nc = -1 - j = 0 - for i = 1:nr - nci = 0 - rows[i] > 0 && n[j+1] == -1 && (j += rows[i]; continue) - for k = 1:rows[i] - nci += isa(A[j+k], UniformScaling) ? n[j+k] : size(A[j+k], 2) - end - nc >= 0 && nc != nci && throw(DimensionMismatch("mismatch in number of columns")) - nc = nci - j += rows[i] - end - nc == -1 && throw(ArgumentError("sizes of UniformScalings could not be inferred")) - j = 0 - for i = 1:nr - if rows[i] > 0 && n[j+1] == -1 # this row consists entirely of UniformScalings - nci, r = divrem(nc, rows[i]) - r != 0 && throw(DimensionMismatch("indivisible UniformScaling sizes")) - for k = 1:rows[i] - n[j+k] = nci - end - end - j += rows[i] - end - end - Amat = promote_to_arrays(n, 1, array_type, A...) - # We have two methods for promote_to_array_type, one returning Matrix and - # another one returning SparseMatrixCSC (in SparseArrays.jl). In the dense - # case, we cannot call hvcat for the promoted UniformScalings because this - # causes a stack overflow. In the sparse case, however, we cannot call - # typed_hvcat because we need a sparse output. - if array_type == Matrix - return typed_hvcat(promote_eltype(Amat...), rows, Amat...) - else - return hvcat(rows, Amat...) - end -end - ## Matrix construction from UniformScaling function Matrix{T}(s::UniformScaling, dims::Dims{2}) where {T} A = zeros(T, dims) diff --git a/stdlib/LinearAlgebra/test/special.jl b/stdlib/LinearAlgebra/test/special.jl index eaa297e05d957..7e96af369e310 100644 --- a/stdlib/LinearAlgebra/test/special.jl +++ b/stdlib/LinearAlgebra/test/special.jl @@ -259,9 +259,10 @@ end bidiagmat = Bidiagonal(1:N, 1:(N-1), :U) tridiagmat = Tridiagonal(1:(N-1), 1:N, 1:(N-1)) symtridiagmat = SymTridiagonal(1:N, 1:(N-1)) - specialmats = (diagmat, bidiagmat, tridiagmat, symtridiagmat) + abstractq = qr(tridiagmat).Q + specialmats = (diagmat, bidiagmat, tridiagmat, symtridiagmat, abstractq, zeros(Int,N,N)) for specialmata in specialmats, specialmatb in specialmats - MA = Matrix(specialmata); MB = Matrix(specialmatb) + MA = collect(specialmata); MB = collect(specialmatb) @test hcat(specialmata, specialmatb) == hcat(MA, MB) @test vcat(specialmata, specialmatb) == vcat(MA, MB) @test hvcat((1,1), specialmata, specialmatb) == hvcat((1,1), MA, MB) From 78b7a21a152227d05854727350449ad9ece38b20 Mon Sep 17 00:00:00 2001 From: Jaakko Ruohio Date: Wed, 11 Oct 2023 16:55:53 +0300 Subject: [PATCH 164/413] Allow tab after key name in TOML.parse (#51622) Fixes https://github.com/JuliaLang/TOML.jl/issues/52 (cherry picked from commit 8180240a5e3cef039e575e425c46334d16c1bf94) --- base/toml_parser.jl | 2 +- stdlib/TOML/test/parse.jl | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/base/toml_parser.jl b/base/toml_parser.jl index 6c4ff6e2a52c0..18166b03e23b3 100644 --- a/base/toml_parser.jl +++ b/base/toml_parser.jl @@ -611,7 +611,7 @@ function _parse_key(l::Parser) else set_marker!(l) if accept_batch(l, isvalid_barekey_char) - if !(peek(l) == '.' || peek(l) == ' ' || peek(l) == ']' || peek(l) == '=') + if !(peek(l) == '.' || iswhitespace(peek(l)) || peek(l) == ']' || peek(l) == '=') c = eat_char(l) return ParserError(ErrInvalidBareKeyCharacter, c) end diff --git a/stdlib/TOML/test/parse.jl b/stdlib/TOML/test/parse.jl index 12f68acbdb5bf..30400344f67cf 100644 --- a/stdlib/TOML/test/parse.jl +++ b/stdlib/TOML/test/parse.jl @@ -14,6 +14,7 @@ using TOML: ParserError TOML.parse(IOBuffer(str)) == TOML.parse(p, str) == TOML.parse(p, SubString(str)) == TOML.parse(p, IOBuffer(str)) == dict + @test TOML.parse("a\t=1") == dict @test_throws ParserError TOML.parse(invalid_str) @test_throws ParserError TOML.parse(SubString(invalid_str)) @test_throws ParserError TOML.parse(IOBuffer(invalid_str)) From 5f8f33b7141957ba0b8b89574018f99ad3eaca15 Mon Sep 17 00:00:00 2001 From: Paul Berg Date: Mon, 16 Oct 2023 02:41:46 +0200 Subject: [PATCH 165/413] Allow using `ReturnNode()` in `@generated` code (#51715) IRTools.jl currently tries to use `ReturnNode()` to model unreachable block terminators but it fails in `find_ssavalue_uses`. This PR adds a check to enable using `ReturnNode()` in untyped code. One other alternative for frontends is to use an instruction known to terminate (`Core.throw`) instead. See https://github.com/FluxML/IRTools.jl/pull/115 for more context. (cherry picked from commit ff03e5116d452d0e6e5970a50c187d468febf594) --- base/compiler/utilities.jl | 1 + test/staged.jl | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/base/compiler/utilities.jl b/base/compiler/utilities.jl index f3c5694535ce6..7c3b19ead54cc 100644 --- a/base/compiler/utilities.jl +++ b/base/compiler/utilities.jl @@ -390,6 +390,7 @@ function find_ssavalue_uses(body::Vector{Any}, nvals::Int) for line in 1:length(body) e = body[line] if isa(e, ReturnNode) + isdefined(e, :val) || continue e = e.val elseif isa(e, GotoIfNot) e = e.cond diff --git a/test/staged.jl b/test/staged.jl index 5204f5f6ca777..76d02c1938e4d 100644 --- a/test/staged.jl +++ b/test/staged.jl @@ -346,3 +346,32 @@ let world = Base.get_world_counter() @test all(lin->lin.method === :sin, src.linetable) @test sin_generated(42) == sin(42) end + +# Allow passing unreachable insts in generated codeinfo +let + dummy() = return + dummy_m = which(dummy, Tuple{}) + + src = Base.uncompressed_ir(dummy_m) + src.code = Any[ + # block 1 + Core.ReturnNode(nothing), + # block 2 + Core.ReturnNode(), + ] + nstmts = length(src.code) + nslots = 1 + src.ssavaluetypes = nstmts + src.codelocs = fill(Int32(1), nstmts) + src.ssaflags = fill(Int32(0), nstmts) + src.slotflags = fill(0, nslots) + src.slottypes = Any[Any] + + @eval function f_unreachable() + $(Expr(:meta, :generated, Returns(src))) + $(Expr(:meta, :generated_only)) + end + + ir, _ = Base.code_ircode(f_unreachable, ()) |> only + @test length(ir.cfg.blocks) == 1 +end From 516725dd7a46bd14703e2d15102df58762fa14fc Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Mon, 16 Oct 2023 09:53:47 -0700 Subject: [PATCH 166/413] Lower Pidfile stale_age multiplier. Add pidfile to cache log message. (#51714) (cherry picked from commit 6ec149f3b19a0d1ba597ee20780856cd5ae31867) --- base/loading.jl | 19 +++++++++------- stdlib/FileWatching/src/pidfile.jl | 21 +++++++++-------- stdlib/FileWatching/test/pidfile.jl | 35 ++++++++++++++++++++--------- 3 files changed, 48 insertions(+), 27 deletions(-) diff --git a/base/loading.jl b/base/loading.jl index ef0d5e4bf6f5f..b3f02a68c2a96 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -2967,14 +2967,17 @@ global parse_pidfile_hook # the same package cannot be precompiled from different projects and/or different preferences at the same time. compilecache_pidfile_path(pkg::PkgId) = compilecache_path(pkg, UInt64(0); project="") * ".pidfile" +const compilecache_pidlock_stale_age = 10 + # Allows processes to wait if another process is precompiling a given source already. -# The lock file mtime will be updated when held every `stale_age/2` seconds. +# The lock file mtime will be updated when held at most every `stale_age/2` seconds, with expected +# variance of 10 seconds or more being infrequent but not unusual. # After `stale_age` seconds beyond the mtime of the lock file, the lock file is deleted and -# precompilation will proceed if -# - the locking process no longer exists -# - the lock is held by another host, since processes cannot be checked remotely -# or after `stale_age * 25` seconds if the process does still exist. -function maybe_cachefile_lock(f, pkg::PkgId, srcpath::String; stale_age=10) +# precompilation will proceed if the locking process no longer exists or after `stale_age * 5` +# seconds if the process does still exist. +# If the lock is held by another host, it will conservatively wait `stale_age * 5` +# seconds since processes cannot be checked remotely +function maybe_cachefile_lock(f, pkg::PkgId, srcpath::String; stale_age=compilecache_pidlock_stale_age) if @isdefined(mkpidlock_hook) && @isdefined(trymkpidlock_hook) && @isdefined(parse_pidfile_hook) pidfile = compilecache_pidfile_path(pkg) cachefile = invokelatest(trymkpidlock_hook, f, pidfile; stale_age) @@ -2982,9 +2985,9 @@ function maybe_cachefile_lock(f, pkg::PkgId, srcpath::String; stale_age=10) pid, hostname, age = invokelatest(parse_pidfile_hook, pidfile) verbosity = isinteractive() ? CoreLogging.Info : CoreLogging.Debug if isempty(hostname) || hostname == gethostname() - @logmsg verbosity "Waiting for another process (pid: $pid) to finish precompiling $pkg" + @logmsg verbosity "Waiting for another process (pid: $pid) to finish precompiling $pkg. Pidfile: $pidfile" else - @logmsg verbosity "Waiting for another machine (hostname: $hostname, pid: $pid) to finish precompiling $pkg" + @logmsg verbosity "Waiting for another machine (hostname: $hostname, pid: $pid) to finish precompiling $pkg. Pidfile: $pidfile" end # wait until the lock is available, but don't actually acquire it # returning nothing indicates a process waited for another diff --git a/stdlib/FileWatching/src/pidfile.jl b/stdlib/FileWatching/src/pidfile.jl index 6d40414e20db2..ada192b2493a0 100644 --- a/stdlib/FileWatching/src/pidfile.jl +++ b/stdlib/FileWatching/src/pidfile.jl @@ -32,7 +32,8 @@ Optional keyword arguments: - `mode`: file access mode (modified by the process umask). Defaults to world-readable. - `poll_interval`: Specify the maximum time to between attempts (if `watch_file` doesn't work) - `stale_age`: Delete an existing pidfile (ignoring the lock) if it is older than this many seconds, based on its mtime. - The file won't be deleted until 25x longer than this if the pid in the file appears that it may be valid. + The file won't be deleted until 5x longer than this if the pid in the file appears that it may be valid. + Or 25x longer if `refresh` is overridden to 0 to disable lock refreshing. By default this is disabled (`stale_age` = 0), but a typical recommended value would be about 3-5x an estimated normal completion time. - `refresh`: Keeps a lock from becoming stale by updating the mtime every interval of time that passes. @@ -63,7 +64,7 @@ mutable struct LockMonitor atdir, atname = splitdir(at) isempty(atdir) && (atdir = pwd()) at = realpath(atdir) * path_separator * atname - fd = open_exclusive(at; stale_age=stale_age, kwopts...) + fd = open_exclusive(at; stale_age, refresh, kwopts...) update = nothing try write_pidfile(fd, pid) @@ -184,15 +185,16 @@ function isvalidpid(hostname::AbstractString, pid::Cuint) end """ - stale_pidfile(path::String, stale_age::Real) :: Bool + stale_pidfile(path::String, stale_age::Real, refresh::Real) :: Bool Helper function for `open_exclusive` for deciding if a pidfile is stale. """ -function stale_pidfile(path::String, stale_age::Real) +function stale_pidfile(path::String, stale_age::Real, refresh::Real) pid, hostname, age = parse_pidfile(path) age < -stale_age && @warn "filesystem time skew detected" path=path + longer_factor = refresh == 0 ? 25 : 5 if age > stale_age - if (age > stale_age * 25) || !isvalidpid(hostname, pid) + if (age > stale_age * longer_factor) || !isvalidpid(hostname, pid) return true end end @@ -219,7 +221,7 @@ struct PidlockedError <: Exception end """ - open_exclusive(path::String; mode, poll_interval, wait, stale_age) :: File + open_exclusive(path::String; mode, poll_interval, wait, stale_age, refresh) :: File Create a new a file for read-write advisory-exclusive access. If `wait` is `false` then error out if the lock files exist @@ -231,13 +233,14 @@ function open_exclusive(path::String; mode::Integer = 0o444 #= read-only =#, poll_interval::Real = 10 #= seconds =#, wait::Bool = true #= return on failure if false =#, - stale_age::Real = 0 #= disabled =#) + stale_age::Real = 0 #= disabled =#, + refresh::Real = stale_age/2) # fast-path: just try to open it file = tryopen_exclusive(path, mode) file === nothing || return file if !wait if file === nothing && stale_age > 0 - if stale_age > 0 && stale_pidfile(path, stale_age) + if stale_age > 0 && stale_pidfile(path, stale_age, refresh) @warn "attempting to remove probably stale pidfile" path=path tryrmopenfile(path) end @@ -263,7 +266,7 @@ function open_exclusive(path::String; file = tryopen_exclusive(path, mode) file === nothing || return file Base.wait(t) # sleep for a bit before trying again - if stale_age > 0 && stale_pidfile(path, stale_age) + if stale_age > 0 && stale_pidfile(path, stale_age, refresh) # if the file seems stale, try to remove it before attempting again # set stale_age to zero so we won't attempt again, even if the attempt fails stale_age -= stale_age diff --git a/stdlib/FileWatching/test/pidfile.jl b/stdlib/FileWatching/test/pidfile.jl index c2cb0c88a1b1e..3464a24175632 100644 --- a/stdlib/FileWatching/test/pidfile.jl +++ b/stdlib/FileWatching/test/pidfile.jl @@ -203,18 +203,33 @@ end @assert !ispath("pidfile") @testset "open_exclusive: break lock" begin - # test for stale_age - t = @elapsed f = open_exclusive("pidfile", poll_interval=3, stale_age=10)::File - try - write_pidfile(f, getpid()) - finally + @testset "using stale_age without lock refreshing" begin + t = @elapsed f = open_exclusive("pidfile", poll_interval=3, stale_age=10, refresh=0)::File + try + write_pidfile(f, getpid()) + finally + close(f) + end + @test t < 2 + t = @elapsed f = open_exclusive("pidfile", poll_interval=3, stale_age=1, refresh=0)::File close(f) + @test 20 < t < 50 + rm("pidfile") + end + + @testset "using stale_age with lock refreshing on (default)" begin + t = @elapsed f = open_exclusive("pidfile", poll_interval=3, stale_age=10)::File + try + write_pidfile(f, getpid()) + finally + close(f) + end + @test t < 2 + t = @elapsed f = open_exclusive("pidfile", poll_interval=3, stale_age=5)::File + close(f) + @test 20 < t < 50 + rm("pidfile") end - @test t < 2 - t = @elapsed f = open_exclusive("pidfile", poll_interval=3, stale_age=1)::File - close(f) - @test 20 < t < 50 - rm("pidfile") t = @elapsed f = open_exclusive("pidfile", poll_interval=3, stale_age=10)::File close(f) From 83297257caa2fcd698676bed8ee6b6367288bcac Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 18 Oct 2023 09:54:22 -0400 Subject: [PATCH 167/413] codegen: fix gc rooting bug (#51744) ccall was not creating roots for the contents of struct values which contained roots on the stack, as expected to align with `GC.@preserve`, and causing many segfaults for #51319 (cherry picked from commit e36f65f0f66c1306574f7ec577479bf381fa088c) --- src/ccall.cpp | 2 +- src/cgutils.cpp | 30 +++++++++++++++++++++--------- src/codegen.cpp | 20 ++++++++------------ test/compiler/codegen.jl | 6 +++--- 4 files changed, 33 insertions(+), 25 deletions(-) diff --git a/src/ccall.cpp b/src/ccall.cpp index 47496a3a91ba6..46834d323925b 100644 --- a/src/ccall.cpp +++ b/src/ccall.cpp @@ -1413,7 +1413,7 @@ static jl_cgval_t emit_ccall(jl_codectx_t &ctx, jl_value_t **args, size_t nargs) if (jl_is_long(argi_root)) continue; jl_cgval_t arg_root = emit_expr(ctx, argi_root); - Value *gc_root = get_gc_root_for(arg_root); + Value *gc_root = get_gc_root_for(ctx, arg_root); if (gc_root) gc_uses.push_back(gc_root); } diff --git a/src/cgutils.cpp b/src/cgutils.cpp index 69f620869df93..7b15ef366777c 100644 --- a/src/cgutils.cpp +++ b/src/cgutils.cpp @@ -305,19 +305,34 @@ static Value *emit_pointer_from_objref(jl_codectx_t &ctx, Value *V) return Call; } -static Value *get_gc_root_for(const jl_cgval_t &x) +static Value *emit_unbox(jl_codectx_t &ctx, Type *to, const jl_cgval_t &x, jl_value_t *jt); +static void emit_unbox_store(jl_codectx_t &ctx, const jl_cgval_t &x, Value* dest, MDNode *tbaa_dest, unsigned alignment, bool isVolatile=false); + +static Value *get_gc_root_for(jl_codectx_t &ctx, const jl_cgval_t &x) { - if (x.Vboxed) + if (x.constant || x.typ == jl_bottom_type) + return nullptr; + if (x.Vboxed) // superset of x.isboxed return x.Vboxed; - if (x.ispointer() && !x.constant) { + assert(!x.isboxed); +#ifndef NDEBUG + if (x.ispointer()) { assert(x.V); if (PointerType *T = dyn_cast(x.V->getType())) { - if (T->getAddressSpace() == AddressSpace::Tracked || - T->getAddressSpace() == AddressSpace::Derived) { - return x.V; + assert(T->getAddressSpace() != AddressSpace::Tracked); + if (T->getAddressSpace() == AddressSpace::Derived) { + // n.b. this IR would not be valid after LLVM-level inlining, + // since codegen does not have a way to determine the whether + // this argument value needs to be re-rooted } } } +#endif + if (jl_is_concrete_immutable(x.typ) && !jl_is_pointerfree(x.typ)) { + Type *T = julia_type_to_llvm(ctx, x.typ); + return emit_unbox(ctx, T, x, x.typ); + } + // nothing here to root, move along return nullptr; } @@ -1795,9 +1810,6 @@ static Value *emit_bounds_check(jl_codectx_t &ctx, const jl_cgval_t &ainfo, jl_v return im1; } -static Value *emit_unbox(jl_codectx_t &ctx, Type *to, const jl_cgval_t &x, jl_value_t *jt); -static void emit_unbox_store(jl_codectx_t &ctx, const jl_cgval_t &x, Value* dest, MDNode *tbaa_dest, unsigned alignment, bool isVolatile=false); - static void emit_write_barrier(jl_codectx_t&, Value*, ArrayRef); static void emit_write_barrier(jl_codectx_t&, Value*, Value*); static void emit_write_multibarrier(jl_codectx_t&, Value*, Value*, jl_value_t*); diff --git a/src/codegen.cpp b/src/codegen.cpp index f72c2ae2056b9..09fc465e93fca 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -3028,9 +3028,12 @@ static Value *emit_bits_compare(jl_codectx_t &ctx, jl_cgval_t arg1, jl_cgval_t a varg2 = emit_pointer_from_objref(ctx, varg2); Value *gc_uses[2]; int nroots = 0; - if ((gc_uses[nroots] = get_gc_root_for(arg1))) + // these roots may seem a bit overkill, but we want to make sure + // that a!=b implies (a,)!=(b,) even if a and b are unused and + // therefore could be freed and then the memory for a reused for b + if ((gc_uses[nroots] = get_gc_root_for(ctx, arg1))) nroots++; - if ((gc_uses[nroots] = get_gc_root_for(arg2))) + if ((gc_uses[nroots] = get_gc_root_for(ctx, arg2))) nroots++; OperandBundleDef OpBundle("jl_roots", makeArrayRef(gc_uses, nroots)); auto answer = ctx.builder.CreateCall(prepare_call(memcmp_func), { @@ -5790,16 +5793,9 @@ static jl_cgval_t emit_expr(jl_codectx_t &ctx, jl_value_t *expr, ssize_t ssaidx_ } std::vector vals; for (size_t i = 0; i < nargs; ++i) { - const jl_cgval_t &ai = argv[i]; - if (ai.constant || ai.typ == jl_bottom_type) - continue; - if (ai.isboxed) { - vals.push_back(ai.Vboxed); - } - else if (jl_is_concrete_immutable(ai.typ) && !jl_is_pointerfree(ai.typ)) { - Type *at = julia_type_to_llvm(ctx, ai.typ); - vals.push_back(emit_unbox(ctx, at, ai, ai.typ)); - } + Value *gc_root = get_gc_root_for(ctx, argv[i]); + if (gc_root) + vals.push_back(gc_root); } Value *token = vals.empty() ? (Value*)ConstantTokenNone::get(ctx.builder.getContext()) diff --git a/test/compiler/codegen.jl b/test/compiler/codegen.jl index 26d9f0c08e797..9b34ae7321ff6 100644 --- a/test/compiler/codegen.jl +++ b/test/compiler/codegen.jl @@ -574,12 +574,12 @@ end end @test occursin("llvm.julia.gc_preserve_begin", get_llvm(f3, Tuple{Bool}, true, false, false)) - # unions of immutables (JuliaLang/julia#39501) + # PhiNode of unions of immutables (JuliaLang/julia#39501) function f2(cond) - val = cond ? 1 : 1f0 + val = cond ? 1 : "" GC.@preserve val begin end end - @test !occursin("llvm.julia.gc_preserve_begin", get_llvm(f2, Tuple{Bool}, true, false, false)) + @test occursin("llvm.julia.gc_preserve_begin", get_llvm(f2, Tuple{Bool}, true, false, false)) # make sure the fix for the above doesn't regress #34241 function f4(cond) val = cond ? ([1],) : ([1f0],) From c426095d4c1fca0dc7dbe6a4b07fbfea0e25598c Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Wed, 18 Oct 2023 16:32:39 -0400 Subject: [PATCH 168/413] limit TimeType subtraction (#51743) Disallow some type combinations that don't make sense. --------- Co-authored-by: Ben Baumgold <4933671+baumgold@users.noreply.github.com> (cherry picked from commit 8a889ffcd235ac75720205b0cd7446c9b66eb664) --- stdlib/Dates/src/arithmetic.jl | 6 ++++-- stdlib/Dates/test/arithmetic.jl | 4 +--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/stdlib/Dates/src/arithmetic.jl b/stdlib/Dates/src/arithmetic.jl index a847f749d0154..23a76f5ed75d6 100644 --- a/stdlib/Dates/src/arithmetic.jl +++ b/stdlib/Dates/src/arithmetic.jl @@ -6,8 +6,10 @@ # TimeType arithmetic (+)(x::TimeType) = x -(-)(x::T, y::T) where {T<:TimeType} = x.instant - y.instant -(-)(x::TimeType, y::TimeType) = -(promote(x, y)...) +(-)(x::Date, y::Date) = x.instant - y.instant +(-)(x::Time, y::Time) = x.instant - y.instant +(-)(x::DateTime, y::DateTime) = x.instant - y.instant +(-)(x::AbstractDateTime, y::AbstractDateTime) = -(promote(x, y)...) # Date-Time arithmetic """ diff --git a/stdlib/Dates/test/arithmetic.jl b/stdlib/Dates/test/arithmetic.jl index 2e684815a3c86..d1dad0180f57b 100644 --- a/stdlib/Dates/test/arithmetic.jl +++ b/stdlib/Dates/test/arithmetic.jl @@ -12,9 +12,7 @@ using Dates end @testset "TimeType arithmetic" begin - a = Date(2023, 5, 1) - b = DateTime(2023, 5, 2) - @test b - a == Day(1) + @test_throws MethodError DateTime(2023, 5, 2) - Date(2023, 5, 1) end @testset "Wrapping arithmetic for Months" begin From bd99491ada5c0618f4ca8869a4cbdd86dfc3f38b Mon Sep 17 00:00:00 2001 From: "Steven G. Johnson" Date: Fri, 20 Oct 2023 16:24:56 -0400 Subject: [PATCH 169/413] fix unicode indexing in parse(Complex, string) (#51758) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This fixes a string-indexing bug introduced in #24713 (Julia 0.7). Sometimes, this would cause `parse(Complex{T}, string)` to throw a `StringIndexError` rather than an `ArgumentError`, e.g. for `parse(ComplexF64, "3 β+ 4im")` or `parse(ComplexF64, "3 + 4αm")`. (As far as I can tell, it can never cause parsing to fail for valid strings.) The source of the error is that if `i` is the index of an ASCII character in a string `s`, then `s[i+1]` is valid (even if the next character is non-ASCII) but `s[i-1]` is invalid if the previous character is non-ASCII. (cherry picked from commit f71228d939114a84c0c82f0740785f764a2c38ef) --- base/parse.jl | 10 +++++----- test/parse.jl | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/base/parse.jl b/base/parse.jl index f6a93e56369b7..ab1adb7c30895 100644 --- a/base/parse.jl +++ b/base/parse.jl @@ -321,14 +321,14 @@ function tryparse_internal(::Type{Complex{T}}, s::Union{String,SubString{String} if i₊ == i # leading ± sign i₊ = something(findnext(in(('+','-')), s, i₊+1), 0) end - if i₊ != 0 && s[i₊-1] in ('e','E') # exponent sign + if i₊ != 0 && s[prevind(s, i₊)] in ('e','E') # exponent sign i₊ = something(findnext(in(('+','-')), s, i₊+1), 0) end # find trailing im/i/j iᵢ = something(findprev(in(('m','i','j')), s, e), 0) if iᵢ > 0 && s[iᵢ] == 'm' # im - iᵢ -= 1 + iᵢ = prevind(s, iᵢ) if s[iᵢ] != 'i' raise && throw(ArgumentError("expected trailing \"im\", found only \"m\"")) return nothing @@ -337,7 +337,7 @@ function tryparse_internal(::Type{Complex{T}}, s::Union{String,SubString{String} if i₊ == 0 # purely real or imaginary value if iᵢ > i && !(iᵢ == i+1 && s[i] in ('+','-')) # purely imaginary (not "±inf") - x = tryparse_internal(T, s, i, iᵢ-1, raise) + x = tryparse_internal(T, s, i, prevind(s, iᵢ), raise) x === nothing && return nothing return Complex{T}(zero(x),x) else # purely real @@ -353,11 +353,11 @@ function tryparse_internal(::Type{Complex{T}}, s::Union{String,SubString{String} end # parse real part - re = tryparse_internal(T, s, i, i₊-1, raise) + re = tryparse_internal(T, s, i, prevind(s, i₊), raise) re === nothing && return nothing # parse imaginary part - im = tryparse_internal(T, s, i₊+1, iᵢ-1, raise) + im = tryparse_internal(T, s, i₊+1, prevind(s, iᵢ), raise) im === nothing && return nothing return Complex{T}(re, s[i₊]=='-' ? -im : im) diff --git a/test/parse.jl b/test/parse.jl index 69092b2c4188d..e2b94a45cc446 100644 --- a/test/parse.jl +++ b/test/parse.jl @@ -296,6 +296,8 @@ end @test_throws ArgumentError parse(Complex{T}, bad) end @test_throws ArgumentError parse(Complex{Int}, "3 + 4.2im") + @test_throws ArgumentError parse(ComplexF64, "3 β+ 4im") + @test_throws ArgumentError parse(ComplexF64, "3 + 4αm") end @testset "parse and tryparse type inference" begin From d2a66d8a3c610b3b12d82cbc507b8598bba1cdce Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Mon, 23 Oct 2023 05:17:54 -0300 Subject: [PATCH 170/413] Don't make pkgimages global editable (#51781) (cherry picked from commit 37611b407da73b13ec3b520e15fcc39f17293ba5) --- base/loading.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/loading.jl b/base/loading.jl index b3f02a68c2a96..78849ab6cdd3f 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -2402,7 +2402,7 @@ function compilecache(pkg::PkgId, path::String, internal_stderr::IO = stderr, in # Ensure that the user can execute the `.so` we're generating # Note that on windows, `filemode(path)` typically returns `0o666`, so this # addition of the execute bit for the user is doubly needed. - chmod(tmppath_so, filemode(path) & 0o777 | 0o333) + chmod(tmppath_so, filemode(path) & 0o777 | 0o331) end # prune the directory with cache files From e862940299e834b4e9dcde52822467558268879b Mon Sep 17 00:00:00 2001 From: KristofferC Date: Mon, 23 Oct 2023 16:35:36 +0200 Subject: [PATCH 171/413] Revert "bump SparseArrays to latest release-1.10" This reverts commit f2c447d7c7f53b68b96234fc6b6281c0d7375138. --- .../md5 | 1 + .../sha512 | 1 + .../md5 | 1 - .../sha512 | 1 - stdlib/SparseArrays.version | 4 ++-- 5 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 create mode 100644 deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 delete mode 100644 deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/md5 delete mode 100644 deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/sha512 diff --git a/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 b/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 new file mode 100644 index 0000000000000..6509fe3ef2766 --- /dev/null +++ b/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 @@ -0,0 +1 @@ +b2ddca51d8d39c2869555229575451f2 diff --git a/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 b/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 new file mode 100644 index 0000000000000..2855286b87ab3 --- /dev/null +++ b/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 @@ -0,0 +1 @@ +cff167088056690a7c7453326bc1ad0ca0fcff9ffda85ebfd943ebad9684fc8134b0cda18dd70d8550de35493c6d9579b2fb51090b1c9718fa4290008c6d5f3f diff --git a/deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/md5 b/deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/md5 deleted file mode 100644 index ce30b3e199269..0000000000000 --- a/deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -7344619653c2d5a15ffd8a5ffceccd97 diff --git a/deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/sha512 b/deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/sha512 deleted file mode 100644 index b47df53eb7540..0000000000000 --- a/deps/checksums/SparseArrays-d8aae6daa0943d719b4f6dfb0e906193b65928fa.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -611a6b6ae1027ddfb79dbb4c7b6e8b5962dcc8972156acdcf91a36d687ac236b53d37c74b70d298bb392aa5dc4186ea0cc55ddb3630a1945203f06e58240972a diff --git a/stdlib/SparseArrays.version b/stdlib/SparseArrays.version index 782ca3584e88e..295400bbd3b57 100644 --- a/stdlib/SparseArrays.version +++ b/stdlib/SparseArrays.version @@ -1,4 +1,4 @@ -SPARSEARRAYS_BRANCH = release-1.10 -SPARSEARRAYS_SHA1 = d8aae6daa0943d719b4f6dfb0e906193b65928fa +SPARSEARRAYS_BRANCH = main +SPARSEARRAYS_SHA1 = 99c99b4521eb19a7973643d1aa4d7b1e4d50a6db SPARSEARRAYS_GIT_URL := https://github.com/JuliaSparse/SparseArrays.jl.git SPARSEARRAYS_TAR_URL = https://api.github.com/repos/JuliaSparse/SparseArrays.jl/tarball/$1 From 5ded9ab8a078e22dd6b95076d2b89182bd621ea5 Mon Sep 17 00:00:00 2001 From: KristofferC Date: Tue, 24 Oct 2023 10:43:11 +0200 Subject: [PATCH 172/413] bump SparseArrays to latest release-1.10 --- .../md5 | 1 - .../sha512 | 1 - .../md5 | 1 - .../sha512 | 1 - .../md5 | 1 + .../sha512 | 1 + stdlib/SparseArrays.version | 2 +- 7 files changed, 3 insertions(+), 5 deletions(-) delete mode 100644 deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/md5 delete mode 100644 deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/sha512 delete mode 100644 deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 delete mode 100644 deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 create mode 100644 deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/md5 create mode 100644 deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/sha512 diff --git a/deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/md5 b/deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/md5 deleted file mode 100644 index 12314ebe27beb..0000000000000 --- a/deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -6427ffc68076c0555b0d3a02eaf88160 diff --git a/deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/sha512 b/deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/sha512 deleted file mode 100644 index 5c7602b6707cc..0000000000000 --- a/deps/checksums/SparseArrays-3582898a4efd3f504d39076f5a162b9ed1ebcdb2.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -7a4c6dae45b739bb1b22c53c8b2b32fc765995767580338218a99f671749bbd5c5d9b61f45718c3b80e153b524737501141481ede2a6f24856de1c028f07ad3a diff --git a/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 b/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 deleted file mode 100644 index 6509fe3ef2766..0000000000000 --- a/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -b2ddca51d8d39c2869555229575451f2 diff --git a/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 b/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 deleted file mode 100644 index 2855286b87ab3..0000000000000 --- a/deps/checksums/SparseArrays-99c99b4521eb19a7973643d1aa4d7b1e4d50a6db.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -cff167088056690a7c7453326bc1ad0ca0fcff9ffda85ebfd943ebad9684fc8134b0cda18dd70d8550de35493c6d9579b2fb51090b1c9718fa4290008c6d5f3f diff --git a/deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/md5 b/deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/md5 new file mode 100644 index 0000000000000..afeeed49f2e21 --- /dev/null +++ b/deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/md5 @@ -0,0 +1 @@ +85c5dcb49f11bce2d6bb75ef620ea892 diff --git a/deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/sha512 b/deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/sha512 new file mode 100644 index 0000000000000..7cab3aeec5ca9 --- /dev/null +++ b/deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/sha512 @@ -0,0 +1 @@ +a1810991895650263c33c3e9c2b3089c66948b86b4de16c4c06ed49841cf5500814641576a6b735d5cf3841991684e908c4828a56ee218be216424e6aa9d5f43 diff --git a/stdlib/SparseArrays.version b/stdlib/SparseArrays.version index 295400bbd3b57..b30b1002d5285 100644 --- a/stdlib/SparseArrays.version +++ b/stdlib/SparseArrays.version @@ -1,4 +1,4 @@ SPARSEARRAYS_BRANCH = main -SPARSEARRAYS_SHA1 = 99c99b4521eb19a7973643d1aa4d7b1e4d50a6db +SPARSEARRAYS_SHA1 = fa6269b0dc5660cbaddb9365c7d89b206fc55992 SPARSEARRAYS_GIT_URL := https://github.com/JuliaSparse/SparseArrays.jl.git SPARSEARRAYS_TAR_URL = https://api.github.com/repos/JuliaSparse/SparseArrays.jl/tarball/$1 From be97eb7bb99e3132f0072069f880b545564a96cc Mon Sep 17 00:00:00 2001 From: Lilith Orion Hafner Date: Tue, 24 Oct 2023 03:11:54 -0500 Subject: [PATCH 173/413] Fix typo in range display (#51832) Thanks ScottPJones for finding this. Co-authored-by: Lilith Hafner (cherry picked from commit b197197a51cb1d4eea5c3e3fed0ae3419449a6d6) --- base/range.jl | 2 +- test/ranges.jl | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/base/range.jl b/base/range.jl index 67735ad930a2c..d9a958908330f 100644 --- a/base/range.jl +++ b/base/range.jl @@ -595,7 +595,7 @@ function show(io::IO, r::LinRange{T}) where {T} print(io, "LinRange{") show(io, T) print(io, "}(") - ioc = IOContext(io, :typeinto=>T) + ioc = IOContext(io, :typeinfo=>T) show(ioc, first(r)) print(io, ", ") show(ioc, last(r)) diff --git a/test/ranges.jl b/test/ranges.jl index 85f6a04634a14..8a91c4c997a53 100644 --- a/test/ranges.jl +++ b/test/ranges.jl @@ -1286,6 +1286,8 @@ end @test sprint(show, UnitRange(1, 2)) == "1:2" @test sprint(show, StepRange(1, 2, 5)) == "1:2:5" + + @test sprint(show, LinRange{Float32}(1.5, 2.5, 10)) == "LinRange{Float32}(1.5, 2.5, 10)" end @testset "Issue 11049, and related" begin From 7ae153540dbcd8684fd3a235168c18fbb5bb8d19 Mon Sep 17 00:00:00 2001 From: Paul Berg Date: Tue, 24 Oct 2023 10:14:07 +0200 Subject: [PATCH 174/413] Make local scope for `else` blocks in `try`/`catch`/`else` (#51785) [Docs](https://docs.julialang.org/en/v1/manual/control-flow/#else-Clauses) state: > The try, catch, else, and finally clauses each introduce their own > scope blocks. But it is currently not the case for `else` blocks ```julia julia> try catch else z = 1 end 1 julia> z 1 ``` This change actually makes `else` blocks have their own scope block: ```julia julia> try catch else z = 1 end 1 julia> z ERROR: UndefVarError: `z` not defined ``` (cherry picked from commit 17a36eeb06192b9c878cdaa8436ede23f61acfa0) --- src/julia-syntax.scm | 2 +- test/syntax.jl | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/julia-syntax.scm b/src/julia-syntax.scm index eb79dfc52f76c..b5705c55b6e61 100644 --- a/src/julia-syntax.scm +++ b/src/julia-syntax.scm @@ -1420,7 +1420,7 @@ (scope-block ,finalb))))) ((length> e 3) (and (length> e 6) (error "invalid \"try\" form")) - (let ((elseb (if (length= e 6) (cdddddr e) '()))) + (let ((elseb (if (length= e 6) `((scope-block ,@(cdddddr e))) '()))) (expand-forms `(,(if (null? elseb) 'trycatch 'trycatchelse) (scope-block ,tryb) diff --git a/test/syntax.jl b/test/syntax.jl index 36f0f50c376c4..c69843785136e 100644 --- a/test/syntax.jl +++ b/test/syntax.jl @@ -3187,6 +3187,22 @@ end end @test err == 5 + 6 @test x == 1 + + x = 0 + try + catch + else + x = 1 + end + @test x == 1 + + try + catch + else + tryelse_in_local_scope = true + end + + @test !@isdefined(tryelse_in_local_scope) end @test_parseerror """ From 4e1759cbc748dbdb672de791e2d58bbd3953849d Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Mon, 23 Oct 2023 14:19:11 +0200 Subject: [PATCH 175/413] fix eltype for partition iterators of substrings (#51773) Fixes https://github.com/JuliaLang/julia/issues/51771 The convert method that asserts in #51771 is arguably still faulty though. (cherry picked from commit cf00550f955abd408bf0f478882c57887522f67e) --- base/strings/util.jl | 2 ++ test/iterators.jl | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/base/strings/util.jl b/base/strings/util.jl index bd4da03ce1571..1154690ee846b 100644 --- a/base/strings/util.jl +++ b/base/strings/util.jl @@ -571,6 +571,8 @@ end # Specialization for partition(s,n) to return a SubString eltype(::Type{PartitionIterator{T}}) where {T<:AbstractString} = SubString{T} +# SubStrings do not nest +eltype(::Type{PartitionIterator{T}}) where {T<:SubString} = T function iterate(itr::PartitionIterator{<:AbstractString}, state = firstindex(itr.c)) state > ncodeunits(itr.c) && return nothing diff --git a/test/iterators.jl b/test/iterators.jl index 59588bdac9684..a60ec32bb9ac0 100644 --- a/test/iterators.jl +++ b/test/iterators.jl @@ -1001,3 +1001,7 @@ end end @test v == () end + +@testset "collect partition substring" begin + @test collect(Iterators.partition(lstrip("01111", '0'), 2)) == ["11", "11"] +end From a599ed4a8f07b51c3190afd48c2525f5919815dd Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Tue, 24 Oct 2023 20:28:17 -0300 Subject: [PATCH 176/413] [release 1.10] trigger a full sweep if beyond max total memory (#51843) Otherwise `--heap-size-hint` will become a no-op. Likely a merge bug from https://github.com/JuliaLang/julia/pull/51661. --- src/gc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gc.c b/src/gc.c index 8e37fa95a6cfc..a112d73de625a 100644 --- a/src/gc.c +++ b/src/gc.c @@ -3267,8 +3267,10 @@ static int _jl_gc_collect(jl_ptls_t ptls, jl_gc_collection_t collection) // If the live data outgrows the suggested max_total_memory - // we keep going with minimum intervals and full gcs until - // we either free some space or get an OOM error. + // we keep going with full gcs until we either free some space or get an OOM error. + if (live_bytes > max_total_memory) { + sweep_full = 1; + } if (gc_sweep_always_full) { sweep_full = 1; } From ac2593a0f5eb4df525e7ca834bdd990b2e91a9dc Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 25 Oct 2023 00:52:01 -0500 Subject: [PATCH 177/413] inference: fix infinite recursion of nested Generators (#51845) It seems this case has already been fixed by other improvements, so we no longer need this hack, which is now causing problems. Fixes #51694 --- base/compiler/typelimits.jl | 13 ------------- base/compiler/utilities.jl | 2 -- test/compiler/inference.jl | 10 ++++++++++ 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/base/compiler/typelimits.jl b/base/compiler/typelimits.jl index 09372b2dc9613..436c24d85d8d0 100644 --- a/base/compiler/typelimits.jl +++ b/base/compiler/typelimits.jl @@ -277,22 +277,9 @@ function type_more_complex(@nospecialize(t), @nospecialize(c), sources::SimpleVe else tupledepth = 0 end - isgenerator = (t.name.name === :Generator && t.name.module === _topmod(t.name.module)) for i = 1:length(tP) tPi = tP[i] cPi = cP[i + ntail] - if isgenerator - let tPi = unwrap_unionall(tPi), - cPi = unwrap_unionall(cPi) - if isa(tPi, DataType) && isa(cPi, DataType) && - !isabstracttype(tPi) && !isabstracttype(cPi) && - sym_isless(cPi.name.name, tPi.name.name) - # allow collect on (anonymous) Generators to nest, provided that their functions are appropriately ordered - # TODO: is there a better way? - continue - end - end - end type_more_complex(tPi, cPi, sources, depth + 1, tupledepth, 0) && return true end return false diff --git a/base/compiler/utilities.jl b/base/compiler/utilities.jl index 7c3b19ead54cc..4ad66c2d8ed01 100644 --- a/base/compiler/utilities.jl +++ b/base/compiler/utilities.jl @@ -66,8 +66,6 @@ end is_meta_expr_head(head::Symbol) = head === :boundscheck || head === :meta || head === :loopinfo is_meta_expr(@nospecialize x) = isa(x, Expr) && is_meta_expr_head(x.head) -sym_isless(a::Symbol, b::Symbol) = ccall(:strcmp, Int32, (Ptr{UInt8}, Ptr{UInt8}), a, b) < 0 - function is_self_quoting(@nospecialize(x)) return isa(x,Number) || isa(x,AbstractString) || isa(x,Tuple) || isa(x,Type) || isa(x,Char) || x === nothing || isa(x,Function) diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index dc46bc2495c7f..cfd44967a5081 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -96,6 +96,16 @@ end @test !Core.Compiler.type_more_complex(Tuple{Vararg{Tuple{}}}, Tuple{Vararg{Tuple}}, Core.svec(), 0, 0, 0) @test Core.Compiler.type_more_complex(Tuple{Vararg{Tuple}}, Tuple{Vararg{Tuple{}}}, Core.svec(), 0, 0, 0) +# issue #51694 +@test Core.Compiler.type_more_complex( + Base.Generator{Base.Iterators.Flatten{Array{Bool, 1}}, typeof(identity)}, + Base.Generator{Array{Bool, 1}, typeof(identity)}, + Core.svec(), 0, 0, 0) +@test Core.Compiler.type_more_complex( + Base.Generator{Base.Iterators.Flatten{Base.Generator{Array{Bool, 1}, typeof(identity)}}, typeof(identity)}, + Base.Generator{Array{Bool, 1}, typeof(identity)}, + Core.svec(), 0, 0, 0) + let # 40336 t = Type{Type{Int}} c = Type{Int} From f3e683dac1db482504d34d93556bb696137577de Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Wed, 25 Oct 2023 13:57:16 +0200 Subject: [PATCH 178/413] LLVM: Activate typed pointers through the API instead of a global option. (#51840) This allows other users of LLVM to use opaque pointers with their contexts. Co-authored-by: Jameson Nash --- src/codegen.cpp | 11 +++-------- src/jitlayers.cpp | 6 ++++++ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index 09fc465e93fca..384ee5caf9708 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -9196,17 +9196,12 @@ extern "C" void jl_init_llvm(void) if (clopt && clopt->getNumOccurrences() == 0) cl::ProvidePositionalOption(clopt, "4", 1); -#if JL_LLVM_VERSION >= 150000 + // we want the opaque-pointers to be opt-in, per LLVMContext, for this release + // so change the default value back to pre-14.x, without changing the NumOccurrences flag for it clopt = llvmopts.lookup("opaque-pointers"); if (clopt && clopt->getNumOccurrences() == 0) { -#ifdef JL_LLVM_OPAQUE_POINTERS - cl::ProvidePositionalOption(clopt, "true", 1); -#else - cl::ProvidePositionalOption(clopt, "false", 1); -#endif + clopt->addOccurrence(1, clopt->ArgStr, "false", true); } -#endif - jl_ExecutionEngine = new JuliaOJIT(); bool jl_using_gdb_jitevents = false; diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index b5604d77d8e51..1a385403e9672 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -1329,6 +1329,12 @@ JuliaOJIT::JuliaOJIT() ExternalJD(ES.createBareJITDylib("JuliaExternal")), ContextPool([](){ auto ctx = std::make_unique(); + if (!ctx->hasSetOpaquePointersValue()) +#ifndef JL_LLVM_OPAQUE_POINTERS + ctx->setOpaquePointers(false); +#else + ctx->setOpaquePointers(true); +#endif return orc::ThreadSafeContext(std::move(ctx)); }), #ifdef JL_USE_JITLINK From 1977e1fa8c52c5c5a0e47cf9e8294585770d05cb Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Wed, 25 Oct 2023 20:18:13 -0400 Subject: [PATCH 179/413] fixup to #51743, timetype subtraction Restores the method whose removal was probably causing problems. (cherry picked from commit 14d9c7c3765cefcadef8ed02348758702cc96cd8) --- stdlib/Dates/src/arithmetic.jl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/stdlib/Dates/src/arithmetic.jl b/stdlib/Dates/src/arithmetic.jl index 23a76f5ed75d6..b379747c5f9e9 100644 --- a/stdlib/Dates/src/arithmetic.jl +++ b/stdlib/Dates/src/arithmetic.jl @@ -6,8 +6,7 @@ # TimeType arithmetic (+)(x::TimeType) = x -(-)(x::Date, y::Date) = x.instant - y.instant -(-)(x::Time, y::Time) = x.instant - y.instant +(-)(x::T, y::T) where {T<:TimeType} = x.instant - y.instant (-)(x::DateTime, y::DateTime) = x.instant - y.instant (-)(x::AbstractDateTime, y::AbstractDateTime) = -(promote(x, y)...) From 1fe4e262b9c82f8f4f206f2b1d89ac25874b627a Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Fri, 27 Oct 2023 08:59:58 -0400 Subject: [PATCH 180/413] Backport LLVM 15.0.7-9 to 1.10 (#51882) Backport of #51863 --- deps/checksums/clang | 216 ++++++++-------- deps/checksums/lld | 216 ++++++++-------- deps/checksums/llvm | 436 ++++++++++++++++---------------- deps/clang.version | 2 +- deps/lld.version | 2 +- deps/llvm-tools.version | 4 +- deps/llvm.version | 8 +- stdlib/LLD_jll/Project.toml | 2 +- stdlib/libLLVM_jll/Project.toml | 2 +- 9 files changed, 444 insertions(+), 444 deletions(-) diff --git a/deps/checksums/clang b/deps/checksums/clang index 685d7403b5815..f0f458c6cce9a 100644 --- a/deps/checksums/clang +++ b/deps/checksums/clang @@ -1,108 +1,108 @@ -Clang.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/3994ef8cee2fe488709909f5fffdc091 -Clang.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/0713994930b87768dbddeaf5ce5143380e83bfdf3e0e10aa1ba0337fa0ccfc3c84fa05786cccc2b2461d0bf3bf7dee45e18b4f7146c62ae624705f4d3e43df1e -Clang.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/dd097ca34e16abfcee18ec6b955f0d3b -Clang.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/446f31dbca35a307faec0a779737129c7878ce8c879637265120114f4c68365a6593e1f692c76ff160f5b264a0bb0e9b9f157315ee138ddebdcda1e6e9d3c030 -Clang.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/96a5a51c74d4d74ce9a5f7701f7da325 -Clang.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/d27e8931b89aaea97bf10a7bb9d9608a14537e352bbfdb496f0ef9537599f47ce11e519f77912a6befe96189a26c423a8359b1543b39558ec9648a82196c9057 -Clang.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/2bf9499f0016a6d3f192e9b982587fdc -Clang.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/956cc2c49b49a0d56575c8192e8bc8a3378d484ffafb3fc78f2f8d4331f1070a6fa8111c6bcd63d579a0e54546a3d5134a3c760c609a962e2a586d7b0d48646c -Clang.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/28ea22de73f4c555edeeb4ff22ce6099 -Clang.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/88491ec5f0c51e3a6b4b2b6877e9e8437f8b3145a22f8dfb05269f9ddf72c1b8eca496b650ce2e9a26101ad48d2e79d01b4b4a48883fb547d4445b24ab79bfd5 -Clang.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/9058d021eb893fb11313a04359d1d2b0 -Clang.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/5fd93a2278b3d3c6f6a1836722b97ccd099f17a36da900b8bd54f0b399bc9ee42e847bc094058c3f3ce77dfc6950b5cef9b4571f5941857280a370af16c8b7b3 -Clang.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/8ac220c9570fa66c2f13d9247dcfb324 -Clang.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/977077fd338912c2fdbb88f4bcf1591b6b4f648d6e7c9ba2783b331eb67da2e6b9b29f85446500f6dfb15c9e05af8fe9128dbf3e77dfa69bd597999873769e8d -Clang.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/f017a86ee8803f2099b04ecf254e8157 -Clang.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/c773d0c07234b03c71a1c2862f373f76d4c898fdbad35342c2e687a2afadaa220daad759afa5f88aa7eaab3d0d05f1e8eefcfd374bc1c92ddf638d42d20b74fa -Clang.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/80af25bf64203daaccc72f2274b60681 -Clang.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/913f8ee4c7f9618227673db0aad7e5e98f0fccb8a1faa84778ec84ab10ee8fe4d59a8115582420459de67b8667f3f4681bde59dab6dfa70ddeb8ff8b7fd1add2 -Clang.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/5b79fba21be10d03476c52ad0888d562 -Clang.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/075e074a0f460be27fddd32069dcf4ee48aacbdf480ea74356692b3d98808868a18166ae5e689b17faa6b0ae1f1453bb63d98ed119afd3f44a8e662fa602a57e -Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/90a9224695634cc70cc39b603cc8bc57 -Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/c1e388b838723b5251e6bf068a1790f83ccfe618be2e138b397d0a40c4f85f717bf01e8a46bbab48a91f182caef8e3fc291ec71a56df95fa60446a8858ac904b -Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/6f2ec0e8aaaeb7c9e0c1d826010886ba -Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/eb33e93ff5f3e32051c08c0aa42f1cc691dc364683ac484bb292f190911c879226282cea758224c9fea1bfcb934e4abbf4edd07666d9a2dee63d0ba40c2b3b47 -Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/2e8b81ef8017987c5ace824d524545cb -Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/76d1cfba99747038542946680dad02d9deb4fb6dafde6def13e95c393da5d5f5f2aa30889377c6f3a869963075b9181b3d7652016202767768e880f2fdea827d -Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/7556ca721d4e90e64a266c4b59fefc48 -Clang.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/8df1651aaa87364fe47da4fc993551a9f9ba575ca88c749b92d6586390e19c8b059c20081e4b76426b23cc1140d1bd38c216855d968f3dc01505e29dc5760367 -Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/fd294a76698157d71a3a64f4f4e442e5 -Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/71466cd9d0b46686af10e124bb026e02af240b5ad5f3844fa5c0bb152ee334a56d41e5c82c8b2e3778ea409f5dbc1074afe5a8121fcb157745420a2fcc3465f3 -Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/a2ad561f1a41ed993fc2edebbe1a6b3b -Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/51ed85190a1bdf89d0f5fe361381b0e0b773be05f510ac7b77747948f49dea49807d3d46cb3e948d22785884b8b92dcbf36d202087d2c2628fce6c73c6cd9789 -Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/98829294d5c6327582a8f9b1d7232083 -Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/d570b28e6a11d02467075e82931f8529671acd5e61992f462729d690810953535be31dcfe6fbdb3add0e00799809bf3afb529d227820c7f176e6193c24da7853 -Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/bd173830434f85d17e4857b7ffdb2dd1 -Clang.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/ff66a8b1085d67521aa58f766b7bfad2c19ec89add9a67be2c5984a7a5ff5aacf60d54e0448ce70ca80d9a7d972624b9a2be530f767c87ed6839f709a482a7aa -Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/34b020d23cd5b34ae47b2b0473822f14 -Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/250d55dfb02be3cfc4eeca0da386590d9fb0b9d6759360732b72b8663f4a3c843cd9e23ea08b8d272945fa64230e57f9a5bcdc4399dda2db54e51961e7c9f3e6 -Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/b3c76e91d6b43c7794b6ddb9d300d8f4 -Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/efbbcf2cfff1918e58fd850d99eec1e28cdaa11730b722a416e5da233a8fd0be685259052d5e9adf32c2c2364a4f96540a0175a44b8dc8d6ec872ef12394b9f2 -Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/81ae8ac294b1656b188dc437a7de6b10 -Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/1eac2968698b759bba3467205843183ed7279f24ae06f2d47b1cd4965c115d0b9f578ff7e0a6006883a462ad97c1829f3d706767de77a05d159bafa183064f84 -Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/581efd97263d337031ee761326320489 -Clang.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/ae28a7743146eba68831e0f1929f87596117ebf64d9284585c1909ed1b78a60e102618e4232b37017543351208e0d1183d81e0bbf737c7930bd35dd146c9a2bb -Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/34342cc1e94435ddac6ffc7ec89471f9 -Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/2e06c7a4b79a45d2139cadc3c10c4dbc086e6cf20b5f2ce90b50aad9bab6ffa4b55eef3dc9e40b495329a2a1eb9d0948b29a4495dc8a3cd56ce500087b9e63c6 -Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/de880e4c673351c777509ccfdc0a2579 -Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/e1becf694f1edbce097eaff7349c8a2ca8a1dda265c01a40549acf0dbcbbdf3c23d515236b114e6ec124f85e6bde380850ba72029de37cd36d59789936a21e83 -Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/93a4565b236d905021ab84b0a6c9fd34 -Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/d7c5b5e6fb627c2e19c72e42dcbcd8de9784dee522057d9fcdb03b0bba127de5517d72da8ca120c3cafabcfe6ac016526a7fbc090258119f5f6252d26d2c0c17 -Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/31d9e5992d969548f67b9478abfb1575 -Clang.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/28ed4cdf1a289ece1defb2d4f19cb03ad07963f8e9df62073fbde3adaf943e78085a6f2d03b6cbd3f00f10f61a3499f964e104c2c1ee73167965b84be0bca901 -Clang.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/8b6ffb09acc5d80408362b2705629db4 -Clang.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/d69bd543be8848c9349014f216af7ff1cb32401cf1b0a060a3687259cb56518933f65ac8ce24eca74e2bfc79a1900bc638ed1428e7823672d088efee8aa70387 -Clang.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/6dc4752e4987fbf9afc49b0a5a0b62f4 -Clang.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/7617ac0ad1496549f6a38d33414cbbd74b72dbb54758f24ffc88a42226cfb607babba73b7e33d9558bff2d208bac3ee8f3b2594990d5e5fda49819eff3ad0d05 -Clang.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/47cccd1ef2565df7196afe4da7659380 -Clang.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/9d25f2d0634e2b4f5b8d9e4fb57c65c7d5956cadc24bbdb67a62095f2e6378aba3a8f16a0bc3aea6656c97aa035b3179645e352ff1a0b01cb89a773e9edc0b89 -Clang.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/4e3fdf880b91a5fdbdcdff34386ee8de -Clang.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b02b3a7db9796d45d9d1bf1fc95495c71f6575a70ebf7f4d9d249bf117eb8bdbaa100b2d4e867f82da1b9f9d13ae0d7f68097d1b085b0b6f3826ed21723cc709 -Clang.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/859e942a9b7d0ee2fb626552e87586ad -Clang.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/23f4ecd6a2b4967d41a7a7ee18d3930b4c5e9dd4894a75c2f85e59be0c66bc0fccc7931e051258f36290affd64b6fa37b925ed53a68a0d0cb937a66a6ebfd263 -Clang.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/f1c4a569ea5705e9eb5c1807f4053c4a -Clang.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/73cbb461b39b25b9af334487cea4f16ede9d82ea615671a72d9cce28f9069c3f872f8caa85a3ca61d75919424cd03259a9ac7cbc6c245e1aee2f9afbeef37d7a -Clang.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/f1750649bc2102333fee60be64cfcebc -Clang.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/9c512417ebdc0662a1003978f454d28ec5ddb059270172878a0ca62cc1b85a4e7b7a873d8361f52d0e89372f625f9238404f4b850618ff808592107803e80632 -Clang.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/d88610eb9c37cd5e438087b41960658c -Clang.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/79b241c911a38d363e86761500fd2fba3a439feda270132ec364bcf02189c3a97cfafdf73ef41e00364f8bf5e2ead602cdf5c5a699126e8a372bd3696d7f4b1f -Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/7b0878064a5f8ba1953f5e76c4b63c18 -Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/542f057b2c3d6e829f34a615d7c9c021d793ce3723512b70f7e140640175b237a9669bd9f24563eede1dc5e25e37fa8910b1769ed344af9ea4d21bebc6638801 -Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/e797f5d917b08bdae66fdcab4f8367b5 -Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/40a379b2de5eafa8f202b258b8620bf82fb3eae384337120149ae17c7affa7e166a6b4fb77fb4ce94808c152efdf270ec22f03a2ca57aee27799ccc3c684b88c -Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/1fb0bda6cad1591b1b40752efaa1f198 -Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/0ff8a3d9fc53e5733b9ea9ea30a4c0023fc926704d2dc747a1802343e5c45f6cabed9fd3207cb146218bf8f71b4de79d708c3f169fa13e3eb35dde591509d84a -Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7e2922fc9c5e3f93b73af4b2f8502f7b -Clang.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b7656c67cbe9d6cfcd0837a4646819d9dcad83ab0907a570f8e66894f2650cbaa43c78796435b16bf28878b39e1c9254772b5aaa996f6a5629159c7c63caf26b -Clang.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/795b7f564282b22c2ef2cece8162044c -Clang.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/035781d34cc8ddb7e41eb3d46651589ab519cc4fbe0ba0de8d3602b1353027ad4826b619a33de5c033b85f4261471f6f4bd1e62164c07f945a731bd579919e08 -Clang.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/4430f9cbe83a8d97a993dfe7a4b3b044 -Clang.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/19e4ae8d491734b15fac101cbdbaf652cc37d420f64dcf127bd0fac6eb381fa040312f9c3b836f80fd9d6cb67a1951598dacd9abd826a227e639a685e086637f -Clang.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/9ccb6fc99b35c72b6e566f3d2336c686 -Clang.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/af926692bcca26ea35450bb2794b94f6694ffbffbf54342f403dc47270e983ee697c06dbaefc143ecd0954100736586838987f51f8259e160b0ca06688514889 -Clang.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/ce36f48d88d7dad1aef44c11b30aebf8 -Clang.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/fbbf65977c5924830ff4c1c2c6d824a3635d09d4ee9304888030b8eca1bd7c06d8c053521068f663df932379cb3b7f0772589f7cca56156dd7053e6722d29953 -Clang.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/2b68c2057aeca1564106dab565fe876b -Clang.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/64c8be7c227fa52c9d90353d5ab72c179c8974b0bc048d6f5793d0ac08110b98c54e2e3f65416986b7049904cf86b5a865cf3de4423d7b0906b4e85a0dcacd21 -Clang.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/04a0a842bc490c440ec65927c285059f -Clang.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/82dc5eba9a795fe8d0e5c660aad1d902cde8c304ddfeb794d55a7b8decc97d27b648f658bb749b3bc25d2d50771febb0b481198459fc739c1d6944542c2b64f0 -Clang.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/1742d997df9bc95ddc7791e0f3ba49c8 -Clang.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/5187a9fddf31ea260d6d46f613d96c79b3c77bb8c7dd2752bc8d7becb7b7210a3d9ce195b2f03d466760bb4e52dee0beda22f238097e1472dbed04170b14e2c4 -Clang.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/79e68396face36fc162ab27b99714b34 -Clang.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/80f22d1bca302debb3e01213da099e5378eb3c1ff8684dbc8efca9145a27d1542a9a065e328c76148465dbb42268dad028004f38215289bbd862fc2cb12abf81 -Clang.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/e2f7246f9e8ebd73e21186f18985755d -Clang.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/6dcaa68abe3abff6f3e288aa34ce3591a8e92d933187715cb9bc7362947fefeba3ce1b3629efdcdcb1fa3be111f7614a10b4f0b73f3ed54f46d6d9791612305e -Clang.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/15a21dc979f82c71a2d743f76a539c5d -Clang.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/684b9d596c4e0c4567841cc913ba91671030765edea4642c1883d87c12ddc2a2e4ec82931b2024a66e37c48820aeedd1fc41982930396cf657596d8d3970bf09 -Clang.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/82d172f6be5b1ae34fb92f85f962b9d5 -Clang.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/62c39f038d7a616986314ec3da0ebc59cbed5a6cbac73becfae5a037e734922f4ab59e45a25c8c31242660fe4409023a1191c7311d0af1303d6170ec87d97413 -Clang.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/89c040d2773aa3f40fc1b0965d19b201 -Clang.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/adb704fc2545d766da18766b2e3b6353f9865dac7e46a54e5d83b6886ca5ba8a091a8ceed86fe12bbfc0b3dc12b990dcf1389ba8d27ffe1bf8291c9855ca69b0 -Clang.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/b4c8315bcdb815f012e8c31913a06367 -Clang.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/0bf975521b50c2049bc24b363ae1aa7273471ff20ffbb3d6084561c6c83fd7f08d5ce882ab976d6ec5cffac74cc5ca1c0bf888afdbd8c0c42abc3a6d61a73969 -Clang.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/bbb5fd33559714a6cdc89472a78279e3 -Clang.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/d5635f4b34a21a39c52a494c8baa138d15b9455b08ca7d0882cb8920b5d272ae3b6f3a5f5f1ab7cafb53fd4c93d2bf9b7f1028b09c40e4991ae2e2b04669bad2 -Clang.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/f0a7ba2ba8ba4ef2a75e4e2d9fe5e6ca -Clang.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/0148d0fa525f35a1b8835bfcb7f7ddfb498d118762f960b678d236d5c6b2b16b104d6a56ec2763617ada8faba68d3572d61b73d263fd7dbbbc1111359262828d -Clang.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/7c1a2ade54354864e5d7064e6192a111 -Clang.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/abc8121210650568f4c3e84902f2ffb43f2d660c0b0efeebdcf15d11a87d6a6d0409f4db74d58acf4dea58e3167729e34c82170f65ee1735f4db47c487f723e1 +Clang.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/f11d13e193ab5e18c88652012d0313fd +Clang.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/513a14b0a99695ef330c1109e53d2f9ebd44f9d189e2fac691f4dd3502dea0b1437dbad58fecfc99549d64c90237f5143a0d31b8d05dbd747eb9d2570ed85763 +Clang.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/97c7f0c55a0943ef658960aa6b8ad6fe +Clang.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/7a655675d0d3b3a18f031effbfcd60b171d880ebbe14c64d82f3017e537d56deb19e7a613dbfe619dbd4e8c9db1a2d4e14eefa984f11efd086332eed5d141d06 +Clang.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/3ae704a7c7be76ce32bba7c29ef34bc7 +Clang.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/93550af832e64603431a4e87ef90af227f9e376184a839e073ccb8880399b83bb748f4dc0525a69ddcf2bae0a31a010bd27884a9b8f9462f8439899080bd83f7 +Clang.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/6bebcf58049da1baa3689f9b5b4c0508 +Clang.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/68dce1abe90fd6df3facf19f0e430f27a3d27426c6d5673b82e671a252e08f3bed435bbf571e0c203cb95f2b5311dfb948f9a4da81eeec4f53b3c27dd692b049 +Clang.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/ac81a4b721024af1f63a006047b23d61 +Clang.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/48673b058ceb6c022f553c567ee303154cc587adfb6d5e2c60bf3594a47515cfee01bf6abda54a9f54e49b3bbc40bef372f2cd25e4eca4966834fdf5cc1ce150 +Clang.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/51ec3b7ad77d6a525a433cd9044046f7 +Clang.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b67f6c782734d5a1b3bac8b4f93d0bbe49cc2a1fde095c1d13517d19b1631a926f31291c92058d560b4cd69a6161891b1808ad8f6f6e30e8c103e7183d5f59d8 +Clang.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/bb3218601635220ded4b8285d991b88a +Clang.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/0c60978c8b09a9cfdb7042dbfa61b5147748e968c08508df535a26b8d6ce199837b2ca7aee483d940ddb60aa601a191247e31c89e89d9f1eb427e28358a8c0cb +Clang.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/53631f7d2506def52ff0bdc9b60e703c +Clang.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/5a0362e15e3ab1b39e88ebf1c5fd8c179e72d784516d6fdf0139180f3e59806ae07f0bf11f92d0313baf3340b77d872d8f6ce04f1d9f2fe1ba15cbf4b7ae3c61 +Clang.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/8a4061b3454b411f05c8c375b3af4f44 +Clang.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/2ee66b4a16821f0fc5f8a2aad92017f71767d5f12374425162c0ba9440ad40082780f21114f61e51ee35be4f0eccd8d61e28c964e2b724046c572945e9410740 +Clang.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/eb3d9c2224594d96c2b735ebb420f24a +Clang.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/1ea760423afcb28d306f1bcd67d25d1bdc88dee21445f397bfe5b2fdddd84c8343fc4e5fbedb006640546b28643946aff766d7660e75e2d25c3fde51f64e35d7 +Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/ee4b539db8439cf3eb480f4f86b67588 +Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/fe73b6d62a39e8724bf3cc7ddad385958ef1fc80bce8a6c7a4f57c4bb383736b2ed4a59da228683101bf2f16d4673d9012a30973c22b4b9dbad4be75872a4a95 +Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/27e36fa4a5173cdb6179c27299e80128 +Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/9b078f25921f2208fb2cf7ffadeb7f451be772527a6a9a268f44c20a17b8369b9e0b7f55b48ca38ccfa77f9f2a4209a6168001300ebf63ae09a50bc19e1a5403 +Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/76086701d89bd10682c0f937571af5be +Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/0d637913b61dcab5aa32e7d2b1315e1d597114f9c5a9dd8f9c50bf26ca8260cd76a9cf4e4992bf7a502ce6ae682222a41f6d44e5a5676f329837d4ec5151dddd +Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/9151fa6e2a3d3cf51f1ccc0023ea7e23 +Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/56ebc1653607e623d4a1ecba4a66865b069b548a5d3ff3410e712da6e20e9ae222d5ed6fafe50c924fdd927a6052cc02287aeb5a49fd6a404d7ead243f04d230 +Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/cc22ad5247ded68dd2b22f49d9a9da0b +Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/9f42403c94ec2978f252a38215b0feeb9e2e1131a777bab52bfdec1fbd0399e12008e4012254a53c92b31e7db4d9dcaccd47be40f37d5e23596648ba89e77f9f +Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/ac2fbc3060d46a0ff2b1536db0d87461 +Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/a5db6ffeabaeaf20cb8b9b61530094fcca442de249265f9bd5d62067aab663fc42ed65ee87fea91e427648340e3a8a739a6b38363ced69aa2c6f50bc2a14dee9 +Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/916988129901ce50be35b29ca2969ba4 +Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/e37769b80134a14ffca04f85e4a82b36c61395f1459a0122fd07505561aefe0fa8e681d428bfd58fe4c40bb8d4c201e8fc7a1029de2527eb78728ab8d0513981 +Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/d57074a9cd8d0a99db44026a75bbed52 +Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/2bd80d0d5ee6d3fa14d1c5e1c5838f5fef13f0d31012ed0ecaefce66f35d2918faad2444eeedddc64a699b1843b705d002f95ef7f8d82a2dbbe55fe1ff545591 +Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/2aeda3d3dbb3c4d294d3cdfad028aca5 +Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/597ac2c8fa1e00f157af7555f82f7f011a74f6e24ec6dbfca31f5e104b67d6fc157f59b03689afe16cc35f3b8840a22867766d17b92750891e5fcdd0b6027ffd +Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/8318580861648c955f488eed4c2beb87 +Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/6b4f85bfa1bc804666c8e25f15c49dd67c665a261e6a5e79b1d72f079a9cb02ce4c929855e342aa0c0a08fb7ff8891eb93468dc4dad598367eac0314823d398f +Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/d8c1f0aaa04b0a7b8795477a67fad0c0 +Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/5ca6f1ab1e17a4e4712397be9dd040641ee8583c21670a2c26881bd917b1d54420d193efe039ea1aa929b7647b0672838c9309d011c733aa5d060598a985a84b +Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/6dccafa2ab530b162b42948e4e089fc3 +Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/c4a9e1703a1b4c4f7753d16d1dd9cb6159c7199a9217ff01ae2e5b29bf1cbc4eb7e3c9549afe84c23cb767bf095d2f19635dd6451bbf16e7716561b317f6adbc +Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/cf3a71a9368cafd9c90d0949069715ef +Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/b3a6fd1bc2ce52a96915e8095a0ccaf9c9234446336249cf796fe2853f5a95808de7bdec126032135ef4ed202dd83058a055fae95dc06a7c4aef575715d17177 +Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/f15f065e1e759d94576373023cfda5e7 +Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/94903b6220ceb155f1407e822e0449584f9a39ed899c753146736884cebf054b3ce0fc3da657ece6e9573b2699829ebce8b5737c329e67e78fc12fda7a6bbbed +Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/7047338e3cdff0e9bd52d04160ef0ac2 +Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/fa48444ab31826eb06a9eca8c209d7beef952b11e1448bfc2e4dd1906ac5a12fa84fd0f048069cbdecf0ddebf6fe12bfc44d2dd6c117d3d17befb17d05ef0efb +Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/3497b263dc6af14911baf3457f0e002d +Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/44853f230ed408744fb79911f7fa94843a6dc034dd52ecae86710325f9c6ce635771bd3e54b573f021d30542cf1a72cc92a338454633990c25ef51eb741cd63a +Clang.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/9ecbe0287e26e692377b249e7b56943e +Clang.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/ac1ad5ea8e31d68231fa83d54bb8bc63d14b906682590e209fb50dbb6bb41349c1683fa08f4cdcd381f0c05eb7b80443af26e3557110fceb075f392f6cba3acf +Clang.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/83a7ace018fd7c1ff108b74f71064e00 +Clang.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/8ccb3e34e6d5e92b30024877db4df2d697420a3318eda2413442d10b7e8541a25ffe1b8b4133d37882ed6ddbd0ef7aff984315946538946484150f5b8d7307c1 +Clang.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/2ebc196f9c8d210d7e99f9674cf92c38 +Clang.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/d6a236854893629a5e318dd3b4cfc99ae75849fa3677c466d06355a3e6ba002db07fc0cee74ab2abf17a56cb58b37bb58e65d9c1f760d1d900dab35372afadc3 +Clang.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/48f329f4721bb4a5c805291449f397b6 +Clang.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/5e781a7e1ca0a8fdf8065d1ca9b5ecc6f2b85cb3ce6544d7aace5d86c7dccfb25ad46caf39b9231def435c0a61f7466638c3de5878bb20830fbf77e25d39347a +Clang.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/b44457db229714204cdc46862511a8f9 +Clang.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/fab8fa3518106d833aa03e83b17db2e19d57894d5061459376a13de9c825ca3d500d0ea5dede65455f0cd35e00e8e92ed2da9c7c6f085cc0d6b0efd9b755c9b1 +Clang.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/16821bd1660dddb0b807023a00106fc0 +Clang.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/30a3ff94e6a41a719d3b8cec64d9445f69f5ec697b2496dd0f637ae6ed3d6398df34bed47676d1ca8d96a9d83bb59c803246c64d65cbcc19f1c4536c4a83a010 +Clang.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/1d1640575d3ae6ec8c8119c01d48e4d0 +Clang.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/0094a40618ccaa6a1abb5f90f8ded22b9b13f3e1fdb49d71e5cd32666a96ccc02fe2555101b747eb2599178428841d97f273e9f275a2f7ec1666337788a50898 +Clang.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/c2e562ab1853b204ae278286bd08a174 +Clang.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/d668546ab19a6f101aa5fdf3ac81010663b3d1b05870ab413e6ca227901b4653c4ad7f198ed1f97ab33b7c679d4589451f7ba2acc0d17033f9402ab48c8179b9 +Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/259877c60e0bd46d38fa6f442e3adc2a +Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/697fbb22251008dc0af7b85cd4aaf7213e7ab1c1c546df0d5df1a5e9bd7ee7d3acf7008059ffe6ad904719c520aaa7e11464b4bf639f5c15a752ba1ebeadc45e +Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/7a3e2d4a5e1e81ff723629f0f4213623 +Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/6d5cb30265751e4486ac0ff8f46bcc305cc52129130ef2f2d79fb000ec375a402de80302ba42ce381342e52e31e3827dd3958bc4cb125e28b1890b0b6ff16f45 +Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/fc86537fbf358dbb05142e34a60a6677 +Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/14915a943536fde5a27e26d3b1d067739cd456f274f16772fa3e5dd114813a73b556663e406ce5370b3ca7ece201dae74db5c9c76e26488611b2e551e26a71c4 +Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/5efc569392f8892668f4b7c6b23f4234 +Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/01a7a29a9587ea9b0bf78cfec86a4f458466dd9fa3237a9caf55c96ab58fde10c60d5d8148b00cdff7cb74d43b93a806d704ca064aeb631d4cff3f2a5b63e547 +Clang.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/9b9db8d4a19045a4f9f9f6d443564bfa +Clang.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/d32d1f731752e1f39fd5cd5c671d439249092ca2a7002c1d29ad152a273a56df03c197489dc7c52a3a2b94b7368934f93f3602cfe5a50eb949a8cfa902f4edfe +Clang.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/e05b07aca51f3f463b2d77cce7fc3e50 +Clang.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/c17c396462785ebac988c52679517edddf15ccaa46357c4b8e21c939c4a23aa82503f5fada360d003e087b03b0978141780af8504dc7d87c61e0f41ea0a5cc43 +Clang.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/b28a8a689f053b5bc2427f9f2843a82f +Clang.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/e7acc5e7eaff6fe784ed94240f4b9a7e3cd550b9c8cfd5bac7c9e8b6697a78ef876c52a2e593caa09938b629734361c30317ec748366fe26800c7b0419e86cc5 +Clang.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/12551be7929fb3bd8cbe3bc6346d17e5 +Clang.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/0c3650ddf008768300b4da3119667207c78bdef2dcb185d0986cf5c0eac87d59a772261de97f8afe2e872178f98bb0483f81e577d7398dbbef8d1cc01c97bf87 +Clang.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/38ae5bb94d4bfd9ae0cdd4adc7c46241 +Clang.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/035735f1724f93dd96fa60c0fb64453f309e3628da2a7373a76418a22c74d5770e99ac52d460559420454bd4d4e95d0291bd35308c542f3b4004efd61a528646 +Clang.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/5e2744c263f84a40e78526ab456b625a +Clang.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/d3eebce8107972f693b2aac8d27ca724e8c0de382c3bf9ab2063590ef694c3177d2c7e9cc73bb359fe480413c817ce24df4994cb2f7cd14c325baa8e329ce84a +Clang.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/5b35d50b46f46f84937207cbbe53f361 +Clang.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/7b1ff511a59e93aba410c2fae82c12a732efa8c6978e48a2d0ba480e3f5bed305c30b25a169555e4f23d2fc4c257e2a04150bb17b19c28469825e549c7a0ffcc +Clang.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/89d5bc6e2ed559b89b1e69a062b2b0bf +Clang.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/658da15ad6615e406e2f4117d6c447ca819383a2add6c236c8e57f150742ab4512c2f198b92c3d51f4236745aa40b8bf63d0b78f6ed0f3c748771717bc8eceba +Clang.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/4a18a0ea6afd7708adb6023e92f81549 +Clang.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/2bc99affd9098c10ea35a90245006f25c10249616cea5395974502e5c82a5c48569e064c5c2436ed01348675b2b590b50fc6d493407ddf63a953309c225705b9 +Clang.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/f257257f8c4b05983e802bb32701ab3e +Clang.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/3090e623585702693ea93b17564f5393f54a839f3e655aaea3461dc8cf6ba71a5191cc87a7043da4bde1c1bd5a7caeadc36b99c64e524e60c85aa95557a9b07e +Clang.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/8550b772d168d5b8ef760c58bdf6897a +Clang.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/bc35342a4587dff85acfd059415790b2a05bdfcf4e5657aabfce48fed34fc1ced89eb5924f4a03159736da2538954e049f2293ed307912d50e47aab3118b7fc7 +Clang.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/8c2124c8edc3e8e0d48b4cc55247b6b7 +Clang.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/a9282c87c8bb658f3f52ee2fa8c8636dded015b456d42a8edfec9f395185180b783b9dbe75d6bad4dc977571dcafcdeff162d5bb100f447c883b135246d8324e +Clang.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/a4cbc590373f57422eef9f29d4174b87 +Clang.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/3286759915cc733f7aa3784e9cfa0e88c69a2fc6c3bf1bd34f401f7ada9db63c51f51e138c0086a4eeaafa8fa36bc90e11a56f57857daa4772e9c4d45ad5fc9a +Clang.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/ebd1348b93fa59b64750230ae6c84977 +Clang.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/10f742b2db05da287ab7eea5d2c75f4c6dfd7798f2f5b13a6ec1da166aedf5d591a40bcc2df3383072eaf12584901e56f177d8fbfcbbc5b3b0db06e2d829c4cd +Clang.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/739f8ba3cdc2afb4e03b9f03d4872cd5 +Clang.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/25df8931176dd77881494d94ecd52c4fccabf72e8d34d646016fc3cd3eb151a59cf994a796fd1f7bb776f62ca51cd03640c1c1817c857c117445e2c1ba3c8c41 +Clang.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/62714b3305623018e2c8c774509a8514 +Clang.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/cc95aed610963b63aaa7267c0d77fd57e29e19730d369135a27a9b3956837f34197b69af8239d38498cd004e9723ad78d279ed159aeef655dfb173f426420375 diff --git a/deps/checksums/lld b/deps/checksums/lld index 590e2f3cf878e..6936b85224dc4 100644 --- a/deps/checksums/lld +++ b/deps/checksums/lld @@ -1,108 +1,108 @@ -LLD.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/0edc0983135da9e37b18fa3fe6d56237 -LLD.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/2adbb4eb76e72be28951c96140070b6d16c5144f689631d51b56365549a5d38535c1dbb5e351a6bdac4648ba52da02297591874193b1c16e7078060c99d23f04 -LLD.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/59b06fca083f1a5e9bf9517ae4f6a4d6 -LLD.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/7f1dc641df9288dfcd887239b86e7fe2871220b9d7f877b24b3197ab73d2176c4533decbea427b09e8f70ddc6c7570d31f5682eaed7215193e95f323769276a8 -LLD.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/c97e607a661b9ff571eba4238ec649dd -LLD.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/7c7add8a0fac379b580a19a02966adca4932bd4573ba0111262544c0d935fc121c5aadaeadc97f9564331202b08c7366ceb170bb2b318db3425c157772d283ea -LLD.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/d55ebbd25b97a4e4628fad1e04782056 -LLD.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/681729b4d10d8f66b0cdb89ca4500ee8a417561cc886608d06af0809d946bdf7cf5c6bda2b6d5d577bae3a15dc347568a3d7d7428568f86ca61327041026fbd2 -LLD.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/78b06e5a351e6eab372ae29d393ffdcf -LLD.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/37a8b5fa3491ec8ae74da88e81a0c229d38166acbb46ff3f5a819034c40fa59ca2ebf4c0ed58e615baf7bf7da789ba86114738252501cfbd842be95cc2104dd4 -LLD.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7ba5b76c83d746a3c62354bf753db697 -LLD.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1fa403c8923487e2d6a8e8c1d86c2ea955ed32bcde2328cb1167a315cdcf704af896505e9c44b750ffca9e3ae66e805f60831136eb79fe1c6d58eaf81a78b1a4 -LLD.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/f052208026a0fd5120ea838843b244ac -LLD.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/fd9ff2d5836300bcf76e4aeefb1e57860b3203fab0c32e668dce3e636dc362876d0fba1f2c23bf55a342ac17294c73e839a8eaf065d64d4397582dc212b8b9f4 -LLD.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/4d1077835df0f592a168c140ffe6299e -LLD.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/8dfd44113b817f607bc38ac1b4ffb192be340c826b9bc8f9d41e92e0f0333d8fc4227f93aaed16a4b9e94a5ec8b79628f2d3a73fb644684a595921f36ccfbeb8 -LLD.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/0f31939f4ff00c572eb392b6e70aab38 -LLD.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/581441087ad4869cfdba13808b2d6adaf929ea1b38ce96c357f276d77c3e63439f8edbb822c8f41770cb61fc08837d7eed2466d187683bc44f2cb3c553e2e60e -LLD.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/ca767173044b5a19a86c6a890dda3b05 -LLD.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/0577785079039b534fd736ea7a51d9b5176693d81e0bcda4fccd760d7c1218042999b6a38b973a903c0ef68e57dfb3b86e9e2f9e307dbaf603997a853f34eed3 -LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/89bb950f17a5b792a6e60ef98450a6b4 -LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/54bb68159743cd14ac0fce7f218a66ff6bf29e626df8dbdbd6e8581699d9b1d357a3c10d86c6822bde7299c14728bc55480f91cefd041d1de61cc179ed347b9a -LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/735e4dda5f8cc06934f6bda59eab21d6 -LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/a9b91beed959804b9e121fee786f28808a7670fc5d2728688cca1c7e0fe56e82e47d95712e38fdfc42e02030896843c4b3df9928eb34c2aca9ac02262427c76c -LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/30a95179bef252aaca41984daa54c680 -LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/0302db3c04396a30d1f6ab8d8d585bbe3a9e70342f068747ddb875b024c173bb9bb34518da7e76a10d3a325dfd741118f36f67fb83251bdb8a9901c4799ad79f -LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/4386c746c5d9b1408dbe7df04bc6a08d -LLD.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/d71c6ebf5d3eb42368ab336cf8520afcd05470308ea117fe95797171e5c573948412ce777f62cbd45ee99ffa59cc769c276a60393a22fecffbeaf8b77b50ea35 -LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/49287977de61b100979355e458c8970c -LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/85ed3b2c7d2478a307a393a2003e694fc3097cc6812143abb3cbdd73a7d36bcb6f06a7d341ea639b9849f714c2d8f418a8b96035ed1c19a3957b42d005c0427a -LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/80a97341c9537b8a58c7df23f86d5cf4 -LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/5774b246ae820de4230a1f4f65bd683145dad5cbc4d326fd75649e06e773c74c2cffd48108a79ee0cc93175786450b6d50f7ac532e6f68961c18fe6119ef94f5 -LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/6f84d6858aecdfd95726a37c9b6a0e0f -LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/2cdac9a810c777ec6d85093926292c75e4287f83b7224246f6fa248e3874a2078c46377cd5ccb0f36a5e25b139691f1111d705079e89ea4215c9bc8659414094 -LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/d40f0956cc36aa7846630755a672a91c -LLD.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/01368311a0ecfbe3f23514115f0bce7ce816c878815d937f3fa067b9daab07da0c02f520a96ad793212e5056bfb6294dd0129dae75f274dfeb48191e504c5322 -LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/689120b8091b9da8cc9528c96f5c5df2 -LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/ab78810af7d77116a4973b5825d5090133218cf08d5d77be14f83e028821e83493a112adf71094cc208f74cf4deabda63d7fff98866cc0304793aec9b27b7222 -LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/5627ccf1677c48b7ef8ac9e5faac1d20 -LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/454d2636cd72974c79c2d907e56e3c69c30c3fff78b199591c9ebe4f14d04c40c4bd7331f8dc2c957c37e214da8d28ef3a47ed8d3dd4ca9d480d52bab3429b39 -LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/8f50e5f684c41845308c123f8e45a0d5 -LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/21baf8a00fa65473ff6cf7ef2974ef88cd5b0eadd06ff85598de10d09425074297bcff3472ef001047a5440065a2de2fc6b1eefe3a32c7c1b3e3261165dc063c -LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/c2e0a5f58e38a9acf2c3914177ceb827 -LLD.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/2a1653d171a2ff08bde55c53973e62955fe9d9629388ae014a645d3199d8f4bcf0fb923d06812ccd62e224032b261c8ebed56ebebed750acbc87671203d7aee5 -LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/fa3959aa413a2b707d8831edd2bd7867 -LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/8b74fef916a72c2f4933c21d3344410c7e03e64265a44dd62cf2ef2ac0feeafeb2b443eafa5dad3d3d0028be96b9424ff67b16391f1b3a2185826de68921adab -LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/b0751bf7eba4f7f7a28dc22993eac9cc -LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/7510f7349b06365e9cd260229e7b8c84da26bac072c5fe9a4e59484d82a0753d4ecf1066ffe41343f881a682590dc9ee4ef4a49cd83dba45c21b8d76dfb80f67 -LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/5abfe9e960bab4c8a44f41aaccaf936b -LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/efda0e0a35e2774af2f2df53f89d61f146a5730086d40865d448b009c833934b23ea4b296c3dc3f2039527b72ef40493fdee6f7c630484f64cec2d1aebf4a4c1 -LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/bfe87378e965050b1b20e993c8b13a53 -LLD.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/ef2fd5e81f349673417bffd68c4122a87c09caed3f6f8f0235bc70b75deca7363cad68276aa708fb9ad8f7edd249d49f78d9f5fe7b226b62e8604c7bd3d4b9cc -LLD.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/4ee16f57d7dc060007250e17ffd55817 -LLD.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/27fd3a21bac676feb2c2c2363c027cf12988c70d889174e52c6bc1fcb4a93241f4bae85d5750ceba5fa971611700a9d15e3e02803cc14382cf6a1ab2918b719c -LLD.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/06699da5617371442b0539203152405d -LLD.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/83ba6300d5669b52c1913440598a2577106ea73e0b83549a5b3b0f081a94b6b8ca9fc05687d2be4b60c2d6a524bafd43b839082f0eee58b4685758061b229fde -LLD.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/a051688aa3a6383b4be4faa4f4aee985 -LLD.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/2059c6ac6579c4720e7167cd547b679a9c1a27a2c68174ed543be935ee23122234b3f2a4555de0abab3a982aba73d1751db336f3e28005ce8e4659d61f9269aa -LLD.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/600baa66310cf348ef3b4351ada014f4 -LLD.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/52b4718993d8abdca8ab701e86022367655d7927dabb8f3a8e41e43dbc90a9af78caf8abd37907a79b0f05017b6f0ef72314a187dab5bdac8ef7996e74c96e2d -LLD.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/e1e12162e5c63141dd95fca83cf1be64 -LLD.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/ce21d1cfa4af89fee1cb13587e15d355f179d38a4a9b4ffb9f357d46fe9b7fed4a5cad801ddf75d66b71d77170427609a51144450f83c8dd59af5c02fb0a9017 -LLD.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/932639f712fb881f621e5bb369921132 -LLD.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/86426de75c4fd1e1d56e1bee08bb6447be0c7417f8492639158f436caa5794862dd3b2981f26f1828852f35806dd2177fbdaacbee67ea849e8de597948b276b9 -LLD.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/2ff9f42465eb6e845ed6b7567b9d14d8 -LLD.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/a19b985b28a642b9a40ef25d02d4e94608b7e5c9925db5202e9d34ca8258e0b02d758de5bbeed63f958602f7fb59b70c4f32434a59008af3f0dd1b757a20e2bf -LLD.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/6de812afa415af04eb9d806adbd4b2ed -LLD.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/c6799fb148f8b019d0b05fa707d58ac7f449347290fc3f47458cb84e0bef704fd179e6d29d2efdeb0c35e4ee799284f5850b1ec5c04ccfad45b38e058e449554 -LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/331d844c447f564171345009764321a1 -LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/978349a74fc5498408a5318c87ec6d25c01268b9d21fb85e6bb601243ad0d33be8501b181d1f9ab7663433a740912f5bcb7160caf1011b1a2c84fdd51e0fce78 -LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/8595a49c49e851973fffae7c4062911d -LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/f707e514843a206b53f380c7bd8d4d8203cc62219344c1234416462dc1cb3d3f8a7452ddfd0f07178d43dfb193b4402a018cc465dc76b43b687fd20fa1ea5222 -LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/5b4463e81c156dabe3d182c42eb647e1 -LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/995db577d4a78d62cfcfca3f1fafb333ff26548b41d8aa8d763e4705dcdfe8005e2f68873faba4040599a6d15821a523261d0451d75fdf6e1c5224e8e777a71e -LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/d2f9f08cc952c0639f7ef1073c8630d6 -LLD.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b1cab7b813fe0f7c26c55261e8561295cbdf1e812db3844b87605fb527d09855f2bef4a40ddb0a7cd354c7cbb626293d4d4012f33acc242f9af4abe1dbbbeeb7 -LLD.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/e82e3b67a073cfa6b019bf5604eabf2a -LLD.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/9bb18adf78afa9dfa0054e6511f5750a9e2fa9138aeb1bd83f7a51d37d031e2f3c151463ea8f682dc7130cb98fafae0b84c60d3befe27f9d0d3dc3334ef82420 -LLD.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/56da3cbe81ddff089ccf6b6392a9396c -LLD.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/2af483a1761022dcad414fa7cec7fb5c6fd54be28185e49539f4824cb0b6acdc1cfa5c78de31268dbdc444201936c5a6d2e04f39ef6f0b9fb184985ba4e3daa2 -LLD.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/15cbf5eaf89c7b834ee19629387515a5 -LLD.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/75ce7c398bdfd57af2c09dfc946b024d5a72e90575ed92f28e015e620ca89e421dfc9a391f4a78277c3e06c38dd696d572c5601a2b1866e521dbc2fc5a60da56 -LLD.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/b895da29b6082cdff6f0324179352fdf -LLD.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/e89a97dfd6c345158e3e12cdf97d33c22f849e5438401cf5a3670c0d1cf0252ca03e4c52475a42c3e6c2b2d689c2f53fc5cb7c925a23167ac51fa1a5e01e3d7f -LLD.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/7edda2d8c2eaadec2d262ded2456934a -LLD.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/0b1d60840d638c0b0269b901a3f5198e18e244da338aef2fb49b474b3601d44a2b4dec13e258909985e363ef8a8749838b01dd195e05a266ca36e6d9f274ef17 -LLD.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/e26138e3491a053ea9a998dd00ad728b -LLD.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1215861fa52b1ee21196bbce0e99912b25f887f5734e0c2628ac78c1af5fdf57c4d7cf099cddcd7031a26c60cf141aeea66a0147428008cb485c207e90801835 -LLD.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/a1e786ac775517b8b483bbe3f6571d37 -LLD.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/3937f156fc2fb8eecb13444c71f380753c16b08f29124228808c91ea4258ee2195219c4a9b601d4468cc24bd584403c16175518a620bd94a7dadff868b3771d7 -LLD.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/976d840de14ef6ee2c0a538197fe8f10 -LLD.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/7f58f975dc3d69f502537aca79509bbc3c4f5da2ff8ddb1c7e27180a6bb2123713eb42da61cfabd7a48a31fc464fd74554b34935dfdb3ec095d14ff443f514f3 -LLD.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/ab0295ba327cfa6b9a252b0e7a4b50a5 -LLD.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/7c750916d4157ba0a37cd1277a0f8faf32123dfc626ea76f848a7c567fd889a7801f8402a307c190ab34fc21b156f2a23967abc9972fc103e5847a200ffc7305 -LLD.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/6827f38ed653f33953ff7ae510a517d5 -LLD.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/f01c655f6433ec6808b62872b8fb4c5a2d8e187643c11f0b4f5c06e2302e462353b516f431c1e26ee60b579c0f8c8c6385f018db3011c619745a39f9ef263436 -LLD.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/d444e6188476c8b7bb6026aac6ea0a1f -LLD.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/69510929896bcfdc4377b180ed206617f96e1fa13fe9f8ccb18d78958c3f9f951a2ff8ada9d1217a02407819caed5308d91bf8fd72434ba347f548c9ba000a5e -LLD.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/728e79f334e5151fe5595711763baca7 -LLD.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/2501a5cae4e61302e44f06fb7d38d15a776d750c6e99c30f89e1464e836a29c735d40972d48d19f1b38aac3f487cfb532d71ce9db2df8bfddd03d1fea5f3750a -LLD.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/2b64bfd4bb5f6be4783144c53eaba27f -LLD.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/237d512962f0a3f8b98352a645141e788c1722adc761d63a4f0754dc79871912a2302a66bfdfbe80683ff3c6783dee0b4cf31beb50c5f76b6d97c978197b5a3d -LLD.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/c23d2716a9ab651f64908da8fdaf7780 -LLD.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/78d6b3ebd845910dba5f147132378931f7e844a31dbc09a64222eca2c2f610b4e0134d9be184b9c80aef3aa2f4ac4d83de6bca7d1ec08fc775b066b67bc2a0f3 -LLD.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/adb8cf2411501b6faaec1a9a4204bd7e -LLD.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/af9f3cd4f585b2c82dce53429b08d270c2be5114098bff8363a1777f82bfb15c40f59d4fdccb8ac06327d8114669a3beaa16ba8653027a911e654a9425c8963c -LLD.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/1839c9ccde51b3d0830a365ede764dd6 -LLD.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/63b34855470c6838412e158334cbaad9214db8f4b7bdfcd6508c19fb891249adc7e89b0fc50ab52bcec17fb2603a68570a839700fd5ad9d1dd9b1b929bf08f12 +LLD.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/2515c9282eb379601ab7087dba9c121d +LLD.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/0d0a6bee7fa181fe84bdcf75342397416bce00a3f6d40f0df34e9a0c4814a3e15aefb4a8fb1f8f63b2b4f2e8f41691398fc545d67c3783577840379a07d6002b +LLD.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/988278a56d1709f9a52d4e59fc7b1dd6 +LLD.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/96f5c8ccdefa8dff272236af684b430c60bded64ddb9d2d814e9420992fd8c25e6938f155be8c47bccf3717ceff8213ba7b33642dc2c15866e70163bc13af1a2 +LLD.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/4760ca32d06be9bed2f18d8ce397bc84 +LLD.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/e4178ed3826c513be62ab51f10e9660afc5bdd7802f8d2a8130de4a8c948640525f85ad946758626946d63f55325004feefce2af08b6aa90aa0a908c24d47b9c +LLD.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/7b88bdfb8fa1f3160b60b02fa0b7fee4 +LLD.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/05a5815ea20948a41ee506911a6d0c7e03d0a169b8c714720de466b48483bfd887960c454946878ac8040f64fcbd36f30657419b8b7051f7c67b2f9e5067b8f1 +LLD.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/4ef7e0fef18afef96790a1d8d85c8ece +LLD.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/68813d3f7c10d64696435abd8d978257b5edd51b0aa8f8325a4add5dc4abcd9e14452bd208c1bc8396336d2fd7d7037b1b8b4f56cd995cb65406949afa0fb4b9 +LLD.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/128fd145cf30d49d24293866923d25cc +LLD.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/faaea140bd122019e4914d5a6fca1af30a5dfbc5015c4650ac9734d489fe51db46428b3f58983c381b7d56802a1487ebe66d3b8536ebfa3d7b9a527eb7e5357d +LLD.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/d78d58fc905b18232cbcce6521740756 +LLD.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/65190392bd91801269d7f65437da95ca98665264c9815223ee32bf6dd95d3abbf3c2404184d7b3d04ff37907dc901dc827cc92e63b58d119d42b08736728ed11 +LLD.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/0853474ca6d0150937b882578d488abf +LLD.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/38a4898aff7d41553c2dabb4e81a0e8ba373ef4b7a6536281772aba4a1ae6f7df7b3ef80bc7e65c8e3c4f609462ea8ff96eac21822d7d17e043e020332ab325b +LLD.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/81809aff70e22c183da2d369bdccc667 +LLD.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/eb291e31221a227c370d60c6ff7ab609ad4766a0b0e107bfac049d798873398d78206ef69fb5a1cccd14f8827cbbe15e12fca1882d14adbb2ecfe6f096411b21 +LLD.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/c9865ba23de7443bb0a135898eac573d +LLD.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/1af80988614295b11b4263d1e27d182c6646137fb76b295524fa82ff5012a3333df8a07992c155ed2eb285d0b7c402560348ff7716dd31978edad5ead95a295b +LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/d02a04c53ffc1426243b848dfa9c00fd +LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/0a1b933af79f045a8538b4a694c02014ac8c3017ed76b5e675c77fcb3b01371cbecf0260fe92e1f141388bff8be6ef271b6e889837051e66c08f14198df87022 +LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/911765f28d1e96d8540ad52a8a6a0ca8 +LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/55705692f7be598160fae7b8663d8f4394e40a016b0caf99132c1799081dc8f6f296abcc23505966a8a1247a468dc95e27fb072448ed7eb90a8ef022410a9898 +LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/7dbbcbcfceabb11f227f5f8a3fcbc15b +LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/08912bd251628d429986b4e032d9ac0e6e3608318e8c3c3207ce241ffcfadfb7ab1d6b17065ee88965730ab3090e26014231ed3ae7681c5512a0cab8c1455bf2 +LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/01b0d73f4cff765c20fe3dea05b0b925 +LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/10e30133f5b68e7d425c9407d80c6b2704ebf2e4df7cf0594f0f6fad3d4dfac47dc7268503bd97e1fb679971b622116c95f4d66d502c4ffd5a0be995e014ae65 +LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/a162866a5d4830debf30e1a7e594cb37 +LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/28fd908126506cfdec748947a34de59943215ed922299ceb2cbdbcfcd75559fd3e8c0f8eb656fab05dde0a94aa73475643e71db0140c18e885d60b0474fa50fb +LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/a937f25494a6221ba62caf1863067bf4 +LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/74bbc42376571135ea3f37bbb9ccb54c3c7cf4d5181a7e5ce958e2eb85071859510247b8c2d1ccf1435b5e93820c66c5fc0751457b318530fba388e69ca7e40e +LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/46cbfd0c17be90082e03e9b365b6528e +LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/5d2d9d6fbc4439c6aa6e5af196c900efd66c65e91c06d2f88ec7a58d0a4a23d6659b9ba655f6c17450ff09cac73d6816012bc1b56907238ba6e4b8fef18cc553 +LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/dba008662626e1ffff3be471a6f336c4 +LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/03ef05fa73d8d867f619e7268266ba8afdbe1b91cdd1afba04f48889bd69152bbb73ebf7cb4b465472d5851ff764ba50c033ea7da1430f32647fd3c32504f033 +LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/fe5707850e6572458579a652b62ef375 +LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/9575326ae0110aa0f6d6e6611628b40b49db19c2397154fe66aa8ce538ddeb517abbbe72f20f71a3e4de588d730916b556ab949ebf04c45e3c79c03519b73064 +LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/46ca92e8392d0e66189add3e07e0176e +LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/b62ecc665d731a4e5397efcba784853dd94a5b0ca2b036c17f17910531ed96b5cb07332f13383f27ec9751a0066d6cce1f4f77a1f06f42629060e3017e280195 +LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/4ad63e824cf246445ae363145efc5977 +LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/914c388e41b467b59b5cd3f53a135662c689f62c367e0b010d7faa01a94338b36c3ca23115b37562bcbb2060914603646999351efb2672992d393135bda8debf +LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/64964540adbc4da2d9b3734ffb3b5414 +LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/19190d022c9aa733b2a3be1ad523c291ee187569ace0594eb2d18959486e91aa56e8440f3ee715801ed7214bab6cd348679f2851c6418f6133f84479a5980587 +LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/014f16cfe047ba26323d730171b63efa +LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/0eb6a94107b88675a9cb5c6e514f9b326a6d8067ff32062e10ab63961eccd6b44fe784b888caf0e5b1a297641b2a9f943caccbce18df76a100b1183b6fb78177 +LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/3041df8d07f840a18f9a3712ba165a11 +LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/01954c0c500eb2dc85a896fd0604672a432c86781a1a25818bf6849e350e5e0751a0d3e124a5dcc3cc5ddfd6130816f00024b5bf0bf062c3fa143b27f7cfc7cf +LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/00c8d0195d3bb52158e25d96f9667cf0 +LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/504b79e64929b8f21b05e9fbaa4a2eb60b565ba6b4ade3369dc1e38678bc094344f4ffdde657b41c062e951f97701c6ed58841b66f2060a21274202e2cbbfc69 +LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/a81af919513dc7103d5f65748e99a932 +LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/9d6c0311113d998a2e2f93afaad2b0155bae6e37dcaa0778879259d61ce1d37d54ccb169c06dc7911f63b0184499cf208a72d4b330198cf5282df15baa307bdd +LLD.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/39bc3ee14a07b7a19149e74ef678b2d1 +LLD.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/19ae60bf3efe9347eb7fb510437d0aa97039bba7f9ac0e0ca50fb5222348c6e8fa74920960d97e421306c9764921f3b00e6e79410bfd355719304709b3424a3c +LLD.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/ae563cfd3b9ce5ca8de3d63c9f956d29 +LLD.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/11b036eafb2f2037382af2a6e76901ecfef70c120f2b33d7d9621d2047cade9082e184580c684e1d6a70f92d2c33fcb75a8fcd78ce047e04d57165d532e191c9 +LLD.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/2fb700351f0a990f8b61ee854b1cf52b +LLD.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/474cb28550056d2a51d95ad6ae806f032a872e69d72eddcf039cbfed21d1d3c182caad73a720f11c2173f20c63043e352d618761a15535ec3e8071b3fdd88cd3 +LLD.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/5ccc80802c4053ad1a5fe351b45d33f3 +LLD.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b7349862fb03d4c29b1018ad7ef90ce056e8d40a3340b10af754a1cbb06d4ab494d7837c274de2a7e13028d3b044f11c39ca3bbe969569adf4557e6402191993 +LLD.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/bd4b518e05a13241809a0cdefe05cf3a +LLD.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/6c327220fad9cbaec397078232c6e800cdc824d6706a4453ec03e016baf0a86ef2c082df2b980196d1b10ebd2d22c74fbb7b92cd90e7fd902372a3a176630bfb +LLD.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/ff60ea3e401a5315560d77990eb1261d +LLD.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/f018c307b47779cc97368762e1edfa63e0f9c354166eefe706f2c398599b30be7041161e08ea5276b75a826c8bceaf250330e1231591b96ca430bf674c51dbb1 +LLD.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/9ff7c7f20eaf5ab1a8053037e5b50e23 +LLD.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/f3508b68727c2c7890928975fa4387009edcce957f6942c1ac9db0554c7b3dc3c6d9b22bbe543910d7354717bb292d30d4468f48b9451adb0f305ececfd5a528 +LLD.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/48f6fe99a0d2f67ef378b06ffa6a1386 +LLD.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/59096b2f9067d49e9eefa3d5e4356e0bf0a6cb2c7b8fc477ebc74603f2ba0c6a5e7c44b65080fa73ad4d2ebe4377b9788e370e311cafaabd2a95f76be383c240 +LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/adbac48e6ea29783d7e0e0a34b0a74f1 +LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/c589a430dc42d2f2fa8334dcc6a992e2776d4a3d1e76c435759b99b200117710c4afbac56e02d7c0a6285817e404a62b11833b570eacafb1ef871cec0c3c7c30 +LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/a215122469aca265bff80e6c8948aaa2 +LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/519f835a62ba7c3e27169d94e95f3a2671a82ce37ab67af79061b1ae15811d6974f6e0788a9979d510cef4aa2e444ce90b358c8655265b26b4c569e3899700ae +LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/6cdeb73fb0f6a1d305111382b1074b16 +LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/8a86e431e5d6ddedc52a38bafadafef4cdfeeea2b3be34793ffefe240ae1a0347adae2a4efe783a493377fe8fc30a0646e68a1acd868bcee9e50a2b486611a42 +LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/d8b6577c4f0c6286641599cb0a0b7abc +LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/fb6262eb94adfb3ed1e81c69706600d00e267176d40c3ae6247dd7c0cdb4248d041083a5ad7c83fd9f307352f4a22d1d3b10274b4d43c4fd5c47a68189f22de2 +LLD.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/60bd90c33a864d74a6c2e16a43599e78 +LLD.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/1f6b39e41a892cbaf1435d6ffc4ed8f80c2418f1a7f6feeb1175b38620e8294b00a96213e5c3c13ca33dd2e57493b03cc4417fb786e98577fe35224a0d4fe8fb +LLD.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/0b003a8140dba5e1c0f4dcc9dc56f83d +LLD.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/f56334c7d2bf42390feb02e3b4e4261940fcf731a5d6083d9d8d52f75006f72866b8271951f2ce8a0208ed624fb45f5254978e12ae805b75a391b9130fd3af68 +LLD.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/5e755233a506d16ee5b83e84bc776351 +LLD.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/4ab51f3375fd33857e3ab7d58f8d59f3038747a40e14473236b830fb8924f8e8460e44dd9a26c545e6b0f236591d72fb23f0ad0d59ebf60ccd3dbf268922bb23 +LLD.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/fb0cc1fefe0795f3b401959a2ff2ec42 +LLD.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/de8899449b864b698db37acffcf94e4f9dc14b920b108b4289c3bf1dbae87d0374361e83242f7f964983117f2978d2c7ba1509111395c063b70de57ee71ff632 +LLD.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/d86e2f57b0b19326c99d8bb24ce70238 +LLD.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/e0cc6552b92f9246b19032d18a0a2edfc65950cabab3ddd8a5d24eb56b34bd735a3d1875714a8cf1a7771fe3cf3845de53d99198ecf3c3298d152e1598f57c5b +LLD.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/b7a713da29369a24ab4c293280527552 +LLD.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/de33a4d3134c339c7669275018e18bd1ee34b64fd58dd7ac509fffdfcd364732fc8c2319a6664cbbefd9f2461b5e83538adf3214564c7cf932cf705de6fef709 +LLD.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/6b2a3d6b923387a5667ac8f2347f1351 +LLD.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/d4a6df10c8d537866e85676b116c1ae6140c1169cee866ea1b5c45831f3610f872a85eef9e925651dcd9070cec53ae297de93870f29a582e8bb83678b0d3bd7a +LLD.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/b0179804d9ba8ee1567558264c18263e +LLD.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/d836ed00ca3486496488d7913de68609dd664924da65ae5bfc1df2ace7a7a8c79674340e219c3d1ca62e9c9d4d7f3deb4b56b3e19b19ce2cee2ba33a07bbfe32 +LLD.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/af12ad9a93df90946b85872ac6b9ef79 +LLD.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/894a5f2f3599cf9a88260bf07fb0ef382ba829e9bd8aef98770adeef995f524e8f8e35e5877181371a02a2e9035f9b5cf995532299dbd645ce946739900be711 +LLD.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/b1161814ecafd0897ec8bba22a9dfb8c +LLD.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/e1c6b33320c50d68914b530add1d5321baf385f19a4392bd1babae98abb2ec8b155e18015d712f6e33f7c9c08c8a27b565ffb986989373c98773bf4991a8b963 +LLD.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/75ab6b8e7ddfedf97d5a97027be1d390 +LLD.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/56c8dc096650756c0dcbcbcab1fd528755873b8fd4e502c0179ff83dd01c4832f7b8a2b474b62bd2fe7eb2550daeb9bc4999906e84fd99598b15a199c5c83443 +LLD.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/45b91d8869d97e7ba12cd125fb2ccda5 +LLD.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/e88eeb4d357cdf57a739803897fec1365cd43cb57d62f54b479031b1c2d1ae52511397c4c66f1cc1465580f077e5b121275bd70c5fac29c841cbaab599679173 +LLD.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/c2e9acb2ad5943920e045baea06d1ff1 +LLD.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/07eca55d28508fa500a7a93d3fc599460f4c894bd6c1979507a725f066d5d17b692e501d56861dee9bbf002629e3841d48eef2b65b3120ef05d3daefdba8f19a +LLD.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/1b3227e17ea0a65c2879439094e2bc2f +LLD.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/68b939ee717f9f751359e6ef4141ec4608be6926f72158b8f02128876fc97be8c255b7a27f8a89906de8e9f5f3f77eb0b83861ff46d614c2a33f349a254179ff +LLD.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/f2280fb244942fc505285aa415359409 +LLD.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/770abd9b2be1adec57442b4bde0dbc1dedbf78e60a8589e3e146bb44b2af3fe48cbc8ddd7036a8c0eeafed81b45c5d0dcd3a298876e98a1b0039a77a210f6778 +LLD.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/b12f9686b2bf8bf1022ddfe5647cc32c +LLD.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/bf6738aa1f8cbf749fb110fadabb23e02a137c5e55e8ca0e1cec94b517ca6a314affc3da4899cc6e6f58a7f920dc87e4de939069590b5e516176bde07458df43 diff --git a/deps/checksums/llvm b/deps/checksums/llvm index f9bc921b4a8ee..c0386f3377a85 100644 --- a/deps/checksums/llvm +++ b/deps/checksums/llvm @@ -1,111 +1,111 @@ -LLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/8b23ac6a55ad8a8a911af1cd2be84f7c -LLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/60df009ecef6b7d435fc198dd477e9198e1f96d89b3c583b06af5b6b938b9f4d545f75f09d0daee93f94448f6fef36ca2e0b541e1179280e6d918b02c619291f -LLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/649c61e6bb2ddc619d2f967d923a62d6 -LLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/864910013f659f473def2a5df78adf5c13f6f84f400d3b87c5660ef51a97c86520a73cc6072db2ed739f3e7e3e2d326f34634bc9ab432edbab59baaf2085f4bf -LLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/2bae4d31c56385e73f3cf667e5cb5582 -LLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/27f8479a639434329fc5e67326df2c22aacee61237cb1eb1bf9938a58b1dcf883ea0476a066dd284047388a42a3b676c37b2c800f97feab694edf091aa10a8b7 -LLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/040485a871ce0036fb19f3e9ab9ed1f6 -LLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/0472ab3fb75efe1b67ba8c34cd9b36377ef9206506f741ea9a6289d3dad4ba4d0560578661bf9e433b51c03c77a9de5ed23df37e160a9225bcb50c27e5431e76 -LLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/12f54c1888f00373ea1e8fcafffbc313 -LLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/fc246d39c1711cc041b014a77e8b0c9fbbdf86c92a1c027e35a152d18bf6cc72d8b059c65457851ce240a5c745ebd39934ed6ce6f553d408ec8ad4078135c746 -LLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7065ccae75d0e16876aec6d96de41409 -LLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1c0bdce88797baca3188be7927d7694861bc491b4ad7970e485332ecf36b28e121a57e3a4ffbe83f6919f00da66d04d7809c589b8f9bf4b9940b15cc5c1590e0 -LLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/708f78fb147a1a5455b1f0e27e0a8946 -LLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/f7aa0dab1f2b0a7dc5324ef1ed9969e31334245938f2954425eaea2c034072d844a3c9eed8b522bf1794a22d822117d6beff6c23872c875dcbcdd7cc719a6d61 -LLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/eaf4c42566b3ffbd6c3fa3fdab126d0a -LLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/7d60771a1795fe328c8f5fb534580d34016f6dcd85c268e94d6ed8af7e68fc74e3bb25ed8262bef4100b9341dea180a2961d1705e453d37dc5d6a01ff9b00ae8 -LLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/f4ed6360b1e46be18392900cf5e6e413 -LLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/0dbc3f7954ef085bff00cf1a7d18bf338bd76f67ab98d972a486942ade7f11a6c9761a4605ae653402d867c543a065d6c238bd6a375852544e89eb9f9cc6c335 -LLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/b8cfc0edd85f79fe0ee22b84b9271d62 -LLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/8f8b5111223d433bbbb7ec48df5436ee5a4c21c4cd57fab1b6a4121d72230251998035c9d62993d442af279e3d393afa2df1c161af2762420ec149ee16f01833 -LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/5cff8a24ca2d1da58ea709d34c33decd -LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/2c20fef573744dacafc6333687be408b474c9773c558fe08ff1702d1957aac3bc99dd9998866651bf9af7473214d1be236273725501cf9f5c38d1807f1605456 -LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/2721d242b457748e3f8301b085282c3c -LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/8a73828ebd84e683f9a043007bba955ca85deec608d9602fe29ef18fc999b4959bc8e87c865bcd060adb8b4c15f8cb04113027b37c3b4e075cc8c7946831a52d -LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/8c8171ed600e466b022a96956fb93e69 -LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/48798715ab9866528d55b0c75a9aa6a87e03b771c3a29b0f3d88bc8d89845ee8f39ddeb6232a0337eb1491092322fb7617e5ebef1e55c0bc4c46f05ed115a0f8 -LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/8343d87440928bdc76f0209eb905fac6 -LLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/e20a0fb7e3cff62832ba840782b84c12ce8ac38cbcd0eff82dbc6a6ab5cd58c59cb760f5b85e4e60dec63aa274e8e43035c5e1fa5e77639d607971690487b3a4 -LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/f6a415de133867e9045c5821ae2bb286 -LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/acd4c6a31f998f506c747f3d8d4ddae393f6a58a282a928913d4eab850147e485e99fc953d4847d00555a1bde295255eed530e4dcf1dbd46e62d2c0a4df9c4c3 -LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/4164c3a46ea05eeda4c471b290b9c782 -LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/c19df17b57f67d2dd281f1939462250aca5b6cfd99598b0dd45eb76ba46f4b02c4e3ccc8e09ca57843c12de822a94df88d5593a34b401050f148452986094ec2 -LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/1d3bd6f4770fba34a9f1b14a3871665c -LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/686a8be7a96e37b91d70bd06259a8a61b6e8d2fbb3b28d9252b987b7ed58ae476a4cb1b773b143d41dc6de23a7b969cedf35c9b8070052a7b9882503379d4f6f -LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/3783a3c99a4c8c27ae367e5bb717cf3a -LLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/34bc40f96d054487022879477eb826ce769b507c90de9c481107f582a1c995a9af9172d1d017eb30e6a9875f68877c26b76fd3ec48a4338c9e5608d970d012f5 -LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/b6d3fd4b5460fb336ccf71ed4f27112c -LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/9558ed5556c8c0ef5f3882f76bf4f4f5ba8bb642eecd3a6f9f7d4ad82c0d9a15038e8fda0e613eb614b747ef045e3bdb1cc3cad6a674627e9f54e56abac67daf -LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/37ef614a98b59a8100ead9a5a0b3a369 -LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/02f99b72dd23aeaeb5326c555e26f2090c311c8b111e3b203235ac503faa3d8499afda2e3541d0744dbbd8b6451c50d377b09ff7dfe37d3934b931e31b643640 -LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/f0b6cfc6d392e597e305a77985949bbe -LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/9e2487984369a573e000b92899888ec845cb76dc20aaf200eaa1f52dbaedc8311c4161f3c9febce47b077be86aa8780c6d9c550f508c6b4949d76d236ecefcea -LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/a369c3db68953d38d71d2e342ebb72d4 -LLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/e0a4f18dd056578b690903dddc971aa91f91b194758a4ec69422f4834dd1c85224bdfd2b95d6f801cd4d23aa26c09a104452266ba8d61b5f1a429b57b2f597b4 -LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/ab49be8073da48f3a353346fd6d9a833 -LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/3f0a76b3940a918bf8206529a15d538db59e4c419cdeb4af0f338d343912d5708bf89ff89435a95b7ea42d3d36a83616a2f45bd21e1e8e4a067df5be22898ba8 -LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/493df42ef5cae32a099ca7ee2c2dfb1d -LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/ac27639cd6273f6dd38bad0db9bba82f1dd299d9260c6877cc4b876d4f82fd518c758aeeea58b389e790eb7e212d0976fd1af1741e7854e8c287c4a381c5f0dd -LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/529256ff2095f50c1c57356819122ed5 -LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/3922fb3a3419ee319392c68124550824e6644e7a638d39ac2831b6595c1e1fdce6934eaadb74415dc81f6ab349714e5443f746a61c0d8927c78b51987dc95a32 -LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/82216b18dcc9148c3cdc00bdaed163f2 -LLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/c212134793544ba37247842c733b540055bb987b0854194d038f90dabbdf9ab5df6ca1e64c7e85d8071263d0b8f1d2feb99ac9d842b731551aa58ee2be2618ea -LLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/465288c493241318c5947f756319d2ae -LLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/4ef949ced9cf6c9f30c56388a8e53eb67c528e0635bb3c00d1dd204c8b8f74e72a6bc2104745dcfecf7c653ce1499d86c3a7acac98b565546b3826230710b92d -LLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/0437433a85900470209cde06ee185e9f -LLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/efa646ae330dcb5d4dc40a8e91a51248b55811d090111deddd415e22d8d7f26009dd4a124756dcdb9df4d83804f11576b786758692a5e82ceaefc88de3b9b00d -LLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/895eedc69041096b1643f66976f2a51b -LLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/dab5fcbd7e48e60c7d16031930e954a83a87e705ac72cba3f660bd569fa8b6a05d7ddf2551eb8e5f163d385c31ce197ca519e47e6ccf85982c6ae7072c6a301d -LLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/083c0b15d8747cedfd617a9127792ca6 -LLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/427d8caba92e5bc3f88b9f33ca951fdb01dd6ce94bd852af61cd94f3476c35e82f9c387989c5847af8ae65d5e9ddfb6efc4afdcb57320bac1115b3ef23e9563b -LLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/0e0a82a95205bc58a31ac24a7d479d84 -LLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/4472eb1cf1386d6754ee9fe2aed514b656ce34c0fcf478e3dd0532e3010e2fbd82b905060382eb661e7daa48d1e44e4606b1bf3625f539bcadff3f13497ac5c1 -LLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/91639f25324ac04119751f1c4b09c0ec -LLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/a07270a19a7d8ba5dfdf8ddfb089ea19101ef9386b3d418353c9fb7d2812b3b6bb68dd3e170fccc0f2ae7a7c7cb5a0bbead36580249726346a04f028ff4f94d6 -LLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/6eee5cd139347f0dc6c0100a1fe34e78 -LLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/2e8e4a14e0822b5078ee1dd5580a136f2e75f9e58a065b83cb857f7f2e17a5f462c6ef8a41b383c3c9ddc54e31876709472a53787b5b285332802babe9a41744 -LLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/b4df578f69f7ff1a43c73b92f8b2fc08 -LLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/c965c4b42b6b22650f329d1187a27523e2e1ea6032de11f1cdb6a54b79871aaa260716e84e38ea5c8692930e1aa6927f5f82617a096bcfa10e3666e37cda50ce -LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/ff278e2aa1a91a9bd6dc0d240ce23e3b -LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/5903a1cb350391f7e15ad81ed9c0690b43e267c5b061e011c61badbf324be544287869fbb4c2d68415c4621ecc37cc798762cbde34ccb64194547d63cb3a980b -LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/a02b1dea41d86fd28411798b535f7674 -LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/7b6c94d8e60985206a7e6faefaca1dfab04a1a1378e8b52cd981726f6b6558caba23b716d44824fdb9fb54c16ec478e8de4296db9b2ef0be67680784ed26831c -LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/1d1f3db1b9a23c5948a5b982b46e5de6 -LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/d741dcb76c3a143fe3b000999a627ba4a3abd36d738028e739e96c861be661cd1de12f5c7ee7e03826b1109aea11e80371d18865fb5332d1834f4dcf0ceca245 -LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/3ed7af8b8e34820a83a8459edeb3843d -LLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/eaab7e410cb433f2b83e6b38671a6e7489556865cc7007ce1588c8fcb0421c64dda480be231f96b30ce6fa75c2d9e99fbdb2a6293fa108ed9bc0599d2ca2ca63 -LLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/88003e4d20bce7d175d8e4db003e0eeb -LLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/aed46b6b3aacf7ef373f9812da24edaf71ff1a382299e5f15eaffec605bb308fb3732846b9dde6d3afdeaa010de61773ba0e725d41e3b160fab37d2d0cf389cd -LLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/ef75e04e4946bb58091eb1a57b08ace2 -LLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/7e6ff0a8d511f19eb868d61fa50ff8c0014da4ea50ad960603f0851a6c09a693a66baea4563af6cdcf2f2fcd018bf2456a9e9479b9278c656ef64f0a08aa11ae -LLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/95a8b1fe9135120ee5fba2441ad16f2c -LLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/167dcff24d6144a4e211ee473b389d5fb4daa51d4ddbd98655456d3bee6c00554b91580a627ca5355e5c2d38a9a326f13c13454de64c0cc32a1f214a52b21400 -LLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/ba2fd64dcb09926f754fdde94ec5cde1 -LLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/fac4e6ab8875aa94cf6cf2065d718403b733954c18b0f5dee11148b70ecafabd92ff23155224ba5628c743fe963ee82a376ba9025f8ec8ca199a66412855ecd2 -LLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/f80738de98ca42cfc8c4ef141ec7cf0c -LLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/ddf7670f555db3916933ea202672c7ffb51d254422af801ae928fa3618b3b7db1f7513710576dabd52f219cb2791e19803b5a4f3470f7ea05f71b0b04b03aaf4 -LLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/a502a8057b19bebe8aac1c42d9cda20f -LLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/6e20328737c46fae6204cca68b16fa72e55c4b00fbaf8470b4847a869741fc0e2cef0da2ed9507fc4980678500dffbd42ccfe9f173321dee633bb0cf5adbe57e -LLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/3b06471de330c6f4a53012711c7c9d72 -LLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/c19a9a2d8e4d3bca25a1568b0fdc01653b0b467dadc68967c4ab88512b4b78cab2e829fcfcd3d1e7139ad5bc3fab62dfdfd50be57f0d0099de383d820dafd306 -LLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/06a632eb722009eb4bbd49689b49a8a8 -LLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/67969cd09ab313b395cdf9f614dffeeda1ab72b2fa9e68057bc8dae9bad36d39443569b91ad88bbab9a6309a8084e09d40dff76d5d4bd261a1553afd5c3dd6c8 -LLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/bc000f09920a305fea5b32cf2d1bebd4 -LLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/580a3b12d7620d4c3148f988125d081b3fc76defb0e78702286806e08dcecf2b9c41ad8071334ff1e4e9ee4155d8949d07c57e8470109c01acecd2b37a07083b -LLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/6cd4cf2922f69efe968637d240bcfd62 -LLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/7a23f48faf2c4e85247c684bc43239a21ea0732c980b4d46b50df27857f143cdfc081bca867a5692b086d32ff9031a230d496c0231d3ccb5fe3f48beb6ad480e -LLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/e7c54d9144ba36f697cd9be10e8e59cd -LLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/bd96434dd2a79b335bd7169222bf5bd78fdc00eeb7ef2f364bb5ec71071d68846a0ba6b51d5b182522e6ff577d8e3d7ca3c014962cbc04ef5a04a7157887cd6d -LLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/22005a7066939bef459f0fa7ad8508a4 -LLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/2742a12f8a9054d6aa70fa823d2cae8126fc7a591849259e92b87b2e6b90ad7d21ffd855d34e08999600a5e2b591492502788d2ebd0a2564325ecc1860607b50 -LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/bdc275515045127ff9883802963b3baf -LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/0fbed47ab0a14116a4b1f2b866ae65b5c81cc08007150750964eee8ac09a2a90afb0ba35d5d6447a33c75dd68755990a85e8874588faf84e7c1174b0c4f61c18 -LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/657059eb6dc68b3fdc56ea167ebede2d -LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/ebdd42af6d04bd98d9bb50dbdb36b9f5087d9d303d5671e96395ee6dad248402bceab5b4765f0fea7a8381ad3fcc17aae7379206903c8e4624a4dadd5eec3faf -LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/e6e68533173f74000ee4c1c84c579a28 -LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/8599d6ae2f84272ee4e8b176ae517ab3d2d25b7617c0520ee70cc33fdce9030a76205d3d9abc3f21c83e33258c78d52a31e0bab50a85f2050c4f3660eee378e1 -LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/8add628662e5b234c20a7dc986749dbc -LLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/047ce72373190ac36654d6c931d00a0b766d0fc5bbc8e9dc787ab9c97e7691908c61d9edb13ee1608b38b10662dd8a584a019bde36c339c5164b1bb8e23837d8 +LLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/a70ce2a3f17c7f1a5ca012cb54824961 +LLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/fe882bdeac640beba174498dfd2ecb388db1fa1265555047588d0ad250bc673088b9611bfdfc14689e65fc874b60e91474f912600c395a25c81b53e69f298f7d +LLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/dfe8b093925d73e04b8fe20ab1f03db9 +LLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/09dbe669fd5cb3680e1ede7e3f2bd2efa50d30a231a459ef498f172c9066ee2360d9012bb080abaa880aa38a01db9808ba5ac656edf395857b3ed683e688c514 +LLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/5ef95fa3fa21127f2445652c22dece6e +LLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/e5c3e014a987ec0b7699941ca1543035cd8b1d67f3498826fc2df48944579ab008a8edd8b8bffed8ba0ffeb543e815e8a26495de028ad86cb5a1aaa160338866 +LLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/1a9e4424b89695dec44dd683557e2849 +LLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/6de91e4ba3a8c8cdb04f6c829890a6bb74ddae1fb90076000ac11031746129ff818910adf7f9e6300550efd190b9fda5f2493ff3e4bef3fdac8ca3bf97e6ccaa +LLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/0b05b71ad4721dea3815e1e2454d0133 +LLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/a191e2d7a4dd3a967fdf7b1e8f27a5ac2a0738008026351a27bb2aa188b2cb086b18848c99ad73ad2e1a350863137619c9bc1a51371baab29f1f1698e15d03d1 +LLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/a80354c67defce5ad7b989c4f3366008 +LLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/82fd3e66b46ec56d2affeae043462d01933ea20677ce44f7d1e25a3983ba2e34c018a7287125a55e62d9a3346bd330a2df8c3c94326a393ef04a9d8f01beecdf +LLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/e0400469dbc86855fae49afa2de33734 +LLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/52acee4ac93c17596e430865ce877c92afaaae194d616af930003e51972dc05348d0019325af83d0949b7188e3043d7f8b893837a65751cf55ecf4985cde8fcc +LLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/39e6aed193941fa8cb05140071443492 +LLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/c9e565abbcc25a3cd731ff1af92de94c3fadd83e6ebed8c9d9d25b259b32f22014404027fcd433484ee0eef2b5bbc9398f218a805f8205cb5dfa61257a034c90 +LLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/ed14d5afbf2b8b3654a683ad1e04af31 +LLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/4124a866e55f5b397d1ead170548c13e004105b2947ec0c8ecb20d021c6eba2206cefb63fb005e899c338583b56c9a0bd17c94724ceac7edae844a84a77c0a8f +LLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/8361fcfe223d65680625c5a20159dae7 +LLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/385be5df02cb44746365da98feaf7caa2360cd3203fcb4f63809dd88c52c90a479b4ddad592b46f1fce025fb305aaa7b1a02ceb57059f598c95495cdaf52da66 +LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/a3852342bd1ae33e7af332008c279654 +LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/a6b97c22ba365176ad17071b91546fc361b28ac03f1ef521f41106eaa1f66daa06a90d7d483e8e64bcf9778a9ed74ffb2cea908f1d53e8000886554a2674cf59 +LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/4175eea371b3c2087838761f90af9e80 +LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/ad6d824d03d262098348f04a8de59354b8cba1ead11c3b3c48b74dbf78b5e03219f6cfd7cc9eb48bd13b624a20fb524560565bc06290620d0583c4218fd8ce4d +LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/b58769dd16d41cc232e0af0745db0c0d +LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/aa3a9dd18439977ee2a9946325e873bfc65f01d8787ac9ac42f44b6780e0d8908c072ea410679dd463bf08ce539154bdf5a5139d6ce8032462137126abfaeb25 +LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/f06631ff471f4abc3ac775f4160c7d43 +LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/67ab50784ff858cc705ed2748898b1892c21a9ce21065cead4a62c2361c7a9f053e562ee27a629348ebe66f41fe078aadeca67526c0ed70148bab7369d8bfdb0 +LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/9a3cf1e8cbdfe3ed895defe91c184107 +LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/d1fb7496f60d152c35e5974b15958f96ef30eae118d2fa09fe48058db4310ddaf88a20eeea995b6fb882412ee9d23760e087836f7f93b3ac64818f5badfa3dba +LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/743bfb035a17bbc85de8202e46631fd9 +LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/86a737660325089d9973ff1de39d471d54cd2994ab3b8b24dfffc5ce2db2188ed11af4c4cbb7d6eee2c55760d736b00974eec7352c36ed5afaaeec65b83c2f72 +LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/6a64360208288c31ea44ac4f7f6e7f73 +LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/186da02c1bea8f65e9107bf1712db4b93acc78622c0a57534e7c342e40ffbc7fb4daf675e66879ae2a58835657a673f3fa61b08452fbb809838ca65469f75aba +LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/50af8192ae03a8c2586a6e3c66490df1 +LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/44e41c8064bba44705bdf1ac8e31a795cfe86c6697f48c26b8b87fcc0dad1083bd4ea203894a06530cf59ee646259694dd7732c7d3d99c7c1632c8ea3be56635 +LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/a2263b7edb6ca4d1654d264169fc1a34 +LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/c95c8bb2eb823eae849d04235bd2754c0368fbb91933deb4103cbdad4f49437f2dfa9a59a656fd6b5e7016de189ead3961e5c2bcaa60b0511d8b9667e84bddf7 +LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/72fd40f0f2a14d6dda0ab0ea76587b3b +LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/1ab3af3fdb4442f6b9dd1b954ccc775f4815159c3af913c6101319d76715c691216818f9c35e6d92be95d457f198d7dde6b4fc81fe8af71f47a1dcaa74a35ae6 +LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/29329543013995dedb79661591fdbe08 +LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/40f75b4409a5def7f41b39c4e4cdb31dc81ed027005281da2ec8ed5ebbd477929d2a1aa1177c33b6c981ef6616194e0b267fc5d9d0e8717c05e7bbea490ff257 +LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/2f21a287b77d37fdfd03d20e21ed1378 +LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/24a396cf3d963f476a02939e8d666112ef2fcab1883e46243ef166dc13bf354356fd1db9ca8081a2107ea08d015bfec3456f8a4ee33b029b8b7958db7d631400 +LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/0289c0b501b8bcb693a1c92e10613727 +LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/ed91a1785a193f1ad88f4c25467916a9c97cdff470b6bf86b640e296193d338f1ccbf380f1a89751b7be31ed12485665d0a77abf31b879a789582f5196f50406 +LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/2b01d3ed13d8d6c2f1981f6ae2969405 +LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/eba25bf68431d480df175706a6a02612aeb38cfbea08b9171e6da019b4bdb1f5fad2f357a7b1cdd1b06353558e371868bd5678275cf5cfaef3095f261f401134 +LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/0721db7911f73b5806d467d769ea7a8c +LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/f38d2e09f01b566a845e067514cd653ace5398578148cd8700d27077abd4d3d71cab29aa9025dd7e7f0383b0307c5a88a0666b3978600d2ea3840a5bccdd22bf +LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/bdfe5c46ef0b04930c5ab2595945e5d3 +LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/ad783a4b1b1f5d54e740cf42840d7ed24ff9d2e512900c08ea16356def2c8158d5d1c70f3026f8cb5a0b4b4802857c6f5090dd83ea871f9d5d3c4a7a22cf0e73 +LLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/f72efb9dba006c308cc791389b6eabc4 +LLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/dce1dd64311f840fadfba85a52f41a8a4eeb90244a1261de5360cc911cdc19371a0f12b7d67384ea251105a6eedc91a4fc615b87f63fd9ecb6a4d2ae9346cc53 +LLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/8fd06e11639cacc71ba363017cc9a82f +LLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/6f32b44bd4e910aca8a9359eeedc8fd038001e0eaf0c12b34c07fed78546ca6d06ac54e0a1cb43846b19a1c7389729616fcf1f39db41450fc5cb7e54a8572129 +LLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/2ad4cda8bb5528f1b187fc66f5c74aea +LLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/199fafa07917f05b4b9f3e18a8a59235aa3491c79ffe1b54ac4acee41b90df8bb630e789584c8bfce6d60c454e5c7b24c7b424db63458de0916dffa3b28ced21 +LLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/781bd8b1e041bc05600e4d0fe70fe125 +LLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/02bda3d17a509980e3a1b1464e64ea80879e0759eb5c5f706c913164af5bf83b19da96f05adcbebdc02566ee953e69adc41da7d752e41533ae6781d22daf4404 +LLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/6a09756d6d1c4a2fdafad07a55a4199d +LLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/f55038c9446cf6f2fd305e26097ca208766ea4a5ef0e875510b43390fc749b1a123376aa629287dd2df0608160c37bc8c5d7579c2c63abbd798839b5e628dcc8 +LLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/39f7f5a20d035a78305f0923009b4bc8 +LLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/22ecc841945137e2dcfaffef5cdb51fa19a9b7554367f4c0735f2d9399adef591af234b0c9aced763fd8f8135dbfad5f04dc915175af8c7f1853a961e67e3f85 +LLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/ddb8c15c549c4dd1d886f0e3e3b01c9e +LLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/c484efa3ca5fc9e1e570a97b02f06ce7470ef46fb445f04118dee460682194de2363b55b0d7217c4535bcd0fc2dc5d7f032a91de75ed028c37fedb8955f1275f +LLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/6f9957228785593507affbb5751d855f +LLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/ee45945e4133c12b16d12ffc761eadbf218f2d527e54722d48aab60f6574f57c13f21846f2d786a9389eeeb32908fb11c438e38a2932b1711c9cfd880ee5440f +LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/c51b915e22e90204f7309fbdffcfe8a1 +LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/5a44fea5b9caa9c933350d29b23c8819f0ad040d62c7235f4612fa8ddc51c352803c7b9a4c92d7eace8543e7138cfea639e68e8529208291dfd443c4810a397e +LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/28d9ad7228add4db7a12545df5d1a35d +LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/6b7e3b6a4523a66237dc26563b8706769cc6b7228fbf61e4e6804678ced42243434e42c7c92421bafa88c0bd761fc8a57cb0c5225ab3c00a83c719edb2d7776d +LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/256222a8980ee3d8aeae284ceb9e9704 +LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/fa61dbf7051ec054e2e85e6d486ef8522536512a092ff10f0d46fe975aa3e2ba3d7e8ec98b3bc99d7d066b5c694f07b97c46ea42ecac9119d108e403ed05c83f +LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/ff364000aa8025b973923dbc89f419b9 +LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/0c90ea208dac7f3e96f4547565cce4a965cf27eabe79e1bc557593524e9f723eef8e4a1cbad1fab9004a1b94d34e8a71622fed40feed693240d1c923cf1be18f +LLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/95b33cdcd79b499f8d862c85a81acf71 +LLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/8f89c44f53b5561a8d949089bb3237e1f82952f45cc540c42e3f784c399ac0435edca90ad08966a200dbe194026fd459c63750aba930e11cc6da5e2ec1cbd475 +LLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/1693403dc93ca962bd081ad8271c569d +LLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/8364ef2a49fbf6442b32279326e5494491a501e466105842f8ccb7d9b259b91fdbd296d0984222d56cc9e4be87464b9d6f279553a967a148b2a6fac662ee6d68 +LLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/859698c3451608193f1bacbd3d893a12 +LLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/284094eaa0b76092cb62ea1a55ca03d983f1b1a904ce52aad12b4dd6adfd139d738e8dd9df0f004c544f905d5454dc166e9e783646c7b60367fbd2788a108ba7 +LLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/95c7e9fb2a344e6ac0252878fc12a7b5 +LLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/b023f2b762efd971c825bb1d34d591caa198ec8ea75742beab0b0bcecd50173a09fdfdd1dc5e8aa448ea5244c2c1c34218c96005452b95461cdd26c76619ac53 +LLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/43de4986e07102480c22658cb3ae8592 +LLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/4a55b9983d19f1b012d80303291420a0e98e9d61644ddc94b694faac7e0dd575a45417d177ee822d9fc9f001c23e5b6ca3c9feee0e49f34088f657cae7278cc4 +LLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/8698009378fe086c50243d908d45a085 +LLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/f264e5663d65cf6856547fde0e6800b8b828ae77c49cf87c73226bedbd95f71f4c12598bd26b0a47e3424bf710a79650b255935eb5e82c4e3b7c6845066c77d8 +LLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/1ebed3977c754042d3fad1c8a2b5c471 +LLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/b374a6cc383df97c71ed16503d8af7e0713217705a5b38fe9b137eb2c0df1a69f28fe7e8a96e496ce8cc63546e63ae262fca139fdffa0cfcef3c9b2b0a412f7d +LLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/7a7440b35ed8484efb1a7a66929e7a68 +LLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/9856dd0395ff5340f3c3d4198f901dd11e024af72cb61cf146aa177c18c06926b00b9848248c1d360f8b550d8f0a7b291966ca089591655aff865519d152bf4e +LLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/8a3b05772a16c58fd37df033adfb68ca +LLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/62ca5be9abcd355e18ee3ea3d120dae336076b84ab877d2a796e8f138f9d9084353b592c221762d6e4af7beb64587497d4e27edbc6b371afdbc09e926fcb23cd +LLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/9e88bc5575372bde26d67342b375d41f +LLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/e1b377008b3ff6626608410eb6d6cd77cae32a73ff3e2bd042cb9212529089c80223aee8196fc04966072e1dcad46ba4d980a80426f0b5247da3e4087dc7fa24 +LLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/749af273a95500e67ee926c30bc6bbe4 +LLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/961550ab92e51cdabffe31c4210953f49dffdb962a29ac3f02b64f523e70434a0c0c842077d2eb9bf064b52fb14eae0c345e80c3d602c7ac49ef982222c2abfe +LLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/65052109742b92529cddde9c21003e9b +LLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/7e7992f8ac36b427a3639c58109743d7c7134f42eff768bab248a33c7d890e731704de949d107c63b30d1644497eaa230150c575d059fce50e2eea2a9f8c2ee5 +LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/0655017c0caa7d90e1d36b2bf5f6672b +LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/1b78ebd6dbf6b83045f9d4df7b45b84e930cc905b1cdc2204ccc5b550230fde3c1e61eae60edd3821cf9d0854a072d03975956a188fc6f64d50cfe62046cfcb3 +LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/755c270d98e648dff4e1a53bf6c11e94 +LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/3bb2bba0bf41f0d5a6cd92b7fd4f39e2b336f10f3011b0240b14c5e90769d6d77f6d0efa81f577e6801748cd20da525c0f4b21449c5d8c014f7f94ec30490670 +LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/006b00b828e176f8f29f292fcc247297 +LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/519e9d529e27111522eb5ab7c1b12b14c7a0063c4d1d74a5522fd387f52f7349b975ceb23c687b39837752afefe154ceb325d206fe376813f5be626f8f7552f7 +LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/f5644910d8072e24ec4e0126721a01bd +LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/b8bc06cd12e56d2d82db8f960172a99af1aba51748eef369cf95cad57107b95cdf3c21f534b48cfdea714e0e23df1a29ea82d961a69060b3649c0b043c20021f LLVMLibUnwind.v12.0.1+0.aarch64-apple-darwin.tar.gz/md5/b95ad4844e649bf46db43683b55b9f4f LLVMLibUnwind.v12.0.1+0.aarch64-apple-darwin.tar.gz/sha512/15e0996aebe6db91fe58121001aa7ea4b23685ead3c26b5d89afae34b535e34b4e801a971f4854d8e1a1fbc805cece06272470622eef863e225358113a127913 LLVMLibUnwind.v12.0.1+0.aarch64-linux-gnu.tar.gz/md5/6d8783dc9b86c9884e0877f0d8ac4167 @@ -138,115 +138,115 @@ LLVMLibUnwind.v12.0.1+0.x86_64-unknown-freebsd.tar.gz/md5/54ac594b4c8e7f261034a8 LLVMLibUnwind.v12.0.1+0.x86_64-unknown-freebsd.tar.gz/sha512/a43756afd92081e6dd7244d162862fc318b41ca110a5e8be6e4ee2d8fdfd8fb0f79961ae55e48913e055779791bd1c0ecd34fd59281fb66b3c4f24a1f44128f0 LLVMLibUnwind.v12.0.1+0.x86_64-w64-mingw32.tar.gz/md5/83cf8fc2a085a73b8af4245a82b7d32f LLVMLibUnwind.v12.0.1+0.x86_64-w64-mingw32.tar.gz/sha512/297a5c7b33bd3f57878871eccb3b9879ea5549639523a1b9db356b710cafb232906a74d668315340d60ba0c5087d3400f14ab92c3704e32e062e6b546abf7df6 -libLLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/6f46148833fa386b55dd92e946561c85 -libLLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/ea1912f9a75c07374bc9c22c7b8b4321a0700f4ea196d29169e14a648a30d164897215ef4c4c6478810e5c5cdc76b1f2937fec4e6b0bb3e4f579bae06a219d0e -libLLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/0f2558df8ed485a93837e790bc646018 -libLLVM.v15.0.7+8.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/e7f962c4dd9675b6abec6129e7fa460ba3ba4bbe9eead4f9327a1db5fc9c64651d7424f9439ef396f0546f8e232bdc34eb625df0fa36bdfaed0e6b7af4dd0070 -libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/3317b67ebfb01c8d3dcb17c04d0f5ee5 -libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/383ec73210e00b02b3fe3f247bfe81a8c81668d3faf59c0ba9b0f032c41603807cb65808f28fc8a91dcf7cf72f3f5fa3bc68277bcb17cd35ec758ba3dd8ec857 -libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/f49e5ae9b0eb96cddeb3d68bec320d7b -libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/e2cf6ef242479bc781f6ea70d7123b087370bad917c8f398757ba32d9446ef3b8c3d3b813be2c1ad3a8945dce1464551b57d3bc40a2e063199dfe555ad697dc8 -libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/e8eb2e0bc1b0693fbdf01c9dbe0e0170 -libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/245a157bd6b49ece87075d6250315f419506262c43ad6c5c76340d60ca1eedb00dab77c6588b91bb5cd8033e7ed1d97c21d801f8359486c9c350ded3bfae7642 -libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/60dea992b59646da2d719185f32f4a7e -libLLVM.v15.0.7+8.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/7fcd64e51c87de8683923460d4596e406c5775d2ec6b7f4111bcb0689692dee09584622ecfae17ce91d1632f03a37cc9d43696190a5b92e916f4b8d4d0a50003 -libLLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/86385feda64011d17952300a29a28a46 -libLLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/2cf9f4934932b39a4a0195eab39f28c718c7cb5b830a425bddeb2f0a643fe6a74c7754483324f57e876ca8b92b5cfa1aaca802a44dc9ebcde86d8875c0493952 -libLLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/72cd1154871445247a6af96536ae1b51 -libLLVM.v15.0.7+8.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/b35740ff38e77c2b718f151e3ef55831bb4145d164c9c74bb78b7cce94693a6accb39cc747c67171cc43c72fff6cc72b3a19ba73e4dc8cf127ffe61f640ceac0 -libLLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/8dd9a908e0d94695352762d87bb5cfd4 -libLLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/3d9fbede7af089548bca9348c5ad13f146386ee4e2391223b4f9d299f9a52f7062dc758ab098805e481f434a5057ed37cb031d48de7fc3eb3137699f5540587e -libLLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/f55864a3ee48940270502c637412dd58 -libLLVM.v15.0.7+8.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/c52bca8cb48cee54ad86bb86696f489d6a6d471238e49affb9af70b0e88ec6a4af57391a72f88fbea31f7c597a066d57978b1d3ea63a29cfae559457c66f6e06 -libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/20d1d88a807f96b469032e5c932c0696 -libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/d6cdc9746c81c504faa968638ea9d7fd9ded72ad0abdcf6c5adb8bcd127126d35506c2b6b3bedb977736a76318edb5c899ba555ff1d05df21f797a8f9a4e5122 -libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/b4d7d4ebce4c7bbe3ac11cca0017a67a -libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/bb388db416d805ef5fbdbf4d2210d4b2188d6eae2c864692cfb1da7ba89de772423667e4648889db7cf43d9127aa13f77981d0b99ef321ff3f09faf7fd4b8bb9 -libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/b9382496b307f7e72fb12d394eef4e39 -libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/122a5f8daf1240c5d7b4f1926292311a3d287c4461516ee3321d1657ff3c9ca5caff54a1298f0d2a2b4c19627a57d626a4fb4455921862d87fe5897d672bdfae -libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/bd564398619c3338e509e2f9ef7d7ba0 -libLLVM.v15.0.7+8.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/a54812732e95604031ef1fb420057ed40b909e211a68d5a533be617556c7c41e4022dea35fc6b8c81d8cb1227e4086d46b345cfcb6022dad9efc456ed85d7825 -libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/39daf88d35f518325138f8562dec70dd -libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/2b2fd30a04cbdcffa57d12ea2785e3016456fbf1dfe99b74a1628ce213bdc28d65f8c6937175c700c0df4f5f8f1c257ef71f27d1d5cca2c5efe5598c893d5011 -libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/af88ec70f786750081d2948b6b9fd0ba -libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/f2a6bf3d74ddd06115d4791bd7ed833fc9ff1c24c0a317d7756d181f7cc59d21da73e085abb7ab0b46a12b0cbe4656df0e9e509b057cdf7d3d0cae2304f6b39c -libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/5dfdae75a373ef890d7e6c004cb16b2d -libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/3993609a2199c78cc12f430f76c2c3b58b0d6f208271bc474e3869d9f505fadfa61e1c2c5774ca5190c7886cad68507fff9a0f6d11641106507fc4b5e3bc8a41 -libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/e426a70337cf4e38ba22f64c9adbabd0 -libLLVM.v15.0.7+8.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/c5ac86c22d016adf70e77970ae976a5081a85ebe1943a46fcb93be53f85f82e4aaa724e41b450306d0cf50dc4eb64367059737b6c828eab554f6166774201310 -libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/523077c1c0fedd6d5e62536e933b2c8a -libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/246df1e0d1a038ea2cb77a9678ed0e13f568ca35bc2c751547b9e871163c0dd7e18ea321c88eb6c9b2ccce9ec4347c29c69e5cbc41dbbd43d23d7a658ca5fc15 -libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/23aa72bc1511ff8f4c09a2bdf70085a7 -libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/4d1d46652e98e75925478a86bc3b2e613ce54d3e99cbd75fecc637dab70a72187c36a979e2124592cb764d867c39555c013497fc3438103aa320fb7e45247254 -libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/ba162cc558297ef830f94323e351aae0 -libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/f98f1c74f5fb3a1e8936692c0b9c57fb8da1ae8fcbe187e019d61ff6691cbcdb03e7f53b5254bd219856bc3dc4408cb29926744f6086a13c3a32e66c1a79f422 -libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/9b364f0c1f2bf550d5908407120ab68a -libLLVM.v15.0.7+8.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/c7bb0a90cb24352926c6a0d3599490db75f84e907697f48d1ac099767f4d3480e94a6e19995bd16d2c26c7cac1309bb579f71208899ce83aa617ec06cea2847f -libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/06ff2d8850863f47c6d7391d9bdc4cd9 -libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/6d03c53673b072ba1936124b681219ca474f7d269dbeb3c0278ea88aeba5949a5af5388f3776f9bf5c1f05fef81922c9720d16fbb57737bd9b83925206f46cf1 -libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/7d37c75e75b9fa3e5db8cc2422a65b90 -libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/ffdb947940a033a01d0568f25018c125a743f3c71ce46565965ddbad52bd88596092190070c827aa6f7e70e22338e5d5162dfcb008deb80734f59d35437b41ed -libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/c31df5def85016f499c1a7daedf006ef -libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/d1b7220c0037450ec6efc4a2119c4dc4b9c48a20281c60b923f33bd80a9d146a69270983fe15cd8623ccfbac6c4bc4f4df3b44ad36cbcf86da8086f932e4da4d -libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/a178f55baca2221e71a0badc79b49bd2 -libLLVM.v15.0.7+8.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/d613e2744c59b845b8893eba4a4579750d9dd4bf4375837aadd963f051475dcbf074d254dc8eacec2f4b2f77a9c1cca68f88b7948df8065910b1b0752dd2004b -libLLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/2c5cd46b8a66d959807f4b285f5a221c -libLLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/43061164687d44c1aa92f11198e218af19e96b1fc6519a2f41a2626302b3089beda58d24040e3220424e718366c761c41a064479411c8c923eea1708b4bb4c77 -libLLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/1a0850a7e8c88088a6c26a50cd746396 -libLLVM.v15.0.7+8.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/57bb6a55f7b84488d72195e1420826e94f082541fdaa0f981da1abcd8b1fb4f0a12f1398d786abd51943c6920513914e9476a05c7477b2e003e30a068304f0ae -libLLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/538b7f590bfe5145c39c06aed74c845f -libLLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/98e59c9a2354f4881b61bc23ebc34c2f70e6394a54cbc6735a56f59688e248db85b8a674e1e4a2a60bb8802f23213767c17985c44eb530743132d3366b0ed2ce -libLLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/854ce5a05f524762390216637048a2c5 -libLLVM.v15.0.7+8.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/028714472e5e5ae01b667f1058dc704b051030c8c95ef4816aae1118aea6442f44d824e48c13cf4111f81ea151a7dd951aad40e4c05208730da4a4f9f4e52c3f -libLLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/dc6aabdb3fff4b33a9eb75ace7e6615e -libLLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/457a1f6d28b287033f501247499c4a9871be7db7880b65f34ab615846c06759fcbb9b4643a6692f670d56bb2346311806475fc7bb82a699755ea6410dd999d37 -libLLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/0578542bbde3db752171f9420ce30d74 -libLLVM.v15.0.7+8.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/93a8310e3b5bf85bcc7d1b20ee836805eb087a318bde258d5117babb877689e05d5a0d66e8c00946544b6e07a322c2af5bfd1499927cc325a98fb5b6aefdbed3 -libLLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/c2b7dec7d566c3f110f84a69e781866b -libLLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/44652389f9aeea2a8ba4e49bf78fa7d11ef3579205f178af844567e8e999917d737e233fe74a31cb3bf9a49847e364824109634e6683b75096b3f45a9fb4150d -libLLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/1c13dbb8577ad9e7020059a474560286 -libLLVM.v15.0.7+8.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/1d3e4a06f3d6ae3afa976713ad8937a51c4e9fd0b544c1e9f8c74ae8579dba29fd8e77eb8acec0873dec8ec58fa91bfa6738212a504769807a758caa1f203b2e -libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/ba4c9eceaa281a177f1f8b878bde35e6 -libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/c0f8fecd3f6e1b342a075630ef0fbcd76d964e9bac08ac5e8a48ab0686c0ab91d327c263e045056a66b93f44346a0624af1687ea36d7f3c41c94d23d33c0d2ef -libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/396cd763186100f920279ea551db8d09 -libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/c79d60d522b4c186b51b7ea50fa8916ec63f64941225d535f8cceb25e3732458291260186684d098776091f8ba235c7c890fc635e8f39ac3c603aeb7c84f0782 -libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/8288ec83ada261b340994f5ea62c2efb -libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/c612e99e655dec48f0c1b2b28d5aa999c3ba8e83f7796a1f2807074ceccdb08a8b6a5e3554eacfc3ba7a99aeeb8c6b28217cdc957937e344a94636920cf288e0 -libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/039c44655a46ee04f7de2b184bba432a -libLLVM.v15.0.7+8.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/a47b840e221933001b9366aa90b5862f25eced86bead68164b98ac3b095a1a948a9d89a6d2f9e7db2fabf40df4de211b5ff5d7d10fc3572c24470764d14a559e -libLLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/036be0a300369212fe943134678ba985 -libLLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/7dc49931b9775372385a61cd9de441dae567df791c83adcdacd45602e8cb64848895b26e8c53476fe53d86d21a06a00c21623eba4ef71ca97a545bc4fc2c5b18 -libLLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/747b5946945160209c2e5705a0ab0bcd -libLLVM.v15.0.7+8.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/da1b2b543c648e322a1d87d2294a0cf87f4ae4c1c5b5708a3de6bfd29ffd589f970fa8f01182017db1743bc53d6726f9118438efef07484c7388ff0b0918c99b -libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/b5eebac2361874017e0908dd2b655953 -libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/b3e1b05afb00e44d1b6b1ce9adc6934e2f2caf1d8bc8d112a7aee5526a39cf77d52b256b888bdc54ac848a98aa2714c6a8beca5603fff62e974595f2c2ce1b25 -libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/16864fadbf7366031ec0f5aa69a295ac -libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/2099f8f4167f7a96ad2e9145e2c4e26d201aececd8a34d21c1e21b3865e8c63192cfef6e012863a6920b55d7865143527aba17805412b122f1fa0e2ff304b515 -libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/3146935cca2cf625311fda3df6860aef -libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/745310983881e2839797b3da1f56e4adc115f34ac932215546ee1bbc869baecea1be077b546c9a68dd0fddb89551dea19ff181c691892e572f86ada885da3bfc -libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7c3ba44af8f1fecd3c370614fda602dd -libLLVM.v15.0.7+8.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/ddf418ea2dbfbb61ce4c977e0b0ae29137e378458fab37b5fc18db8a7d196663d7012e28161efbaaa75824ad0bd0c16841625349d89c8e3f7738d973e760cd27 -libLLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/b7985ca8dc4eb2b89239ce6e0083db89 -libLLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/babb426085a330434ffca6e55d1b237b780754845e4699621ef581b2cdbd803c0e0a0b3f91693f76848ba2cf1f177b6c342ebbd459d9926d6a4e0b7f4184de18 -libLLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/cc912aceddbfdd5278f302dff233aacc -libLLVM.v15.0.7+8.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/fbdd72353b76cab6c82af9e19e7f2abc7b5e19c634abb66d25cda0276c79e4c75f14eeaa8de6f03197a3b69cab130f0693bc3b17f144bed476a2e14268f2a5cb -libLLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/e9bc3f99cf16ad7e37b6f8692610c0c5 -libLLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/b7e0b1b1804d3641e8763eb35d08e1f9c9c2bdbcf9d129d1fae5835067d5b6ccda1acf0888b686c5e8a268b14fa455f52451e3cb6909446c9d053d3d1d261fb2 -libLLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/ba454f84baa9f746de63e22714c740f2 -libLLVM.v15.0.7+8.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/2b61a1a6693c7899fd9af8630c9eb45b54b6c84519e50828d80a6f7eb88dfb3df6ee4d473f8e30ca11a0e1db2c096711164dc08cc61707277f7beb1902930f43 -libLLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/1ebc12781d75fa94145bb6c7a2ba235e -libLLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/43898f026a1f43ef035999654555afe4410425f2b6f56341100115e2a66825843fe93777c10ba052d60562a64a1150095fca4181a1c09f0820baa83736611627 -libLLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/7259f7a15909745b0176c7bec2d5bb8e -libLLVM.v15.0.7+8.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/fcf10dcc6bc0bfd4389859db1ab6a827fcc15368cbd42f1f50a2b7a3e752c4cd2676e65fcd69bf0eb42579293d303d770e06c6d10150ff17d7fdd6fc71d0155f -libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/9ebab83ab97a6cfef7d745e799ce39bd -libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/8892e553f08507b07b62e4c7859f3499a47e3eed5fe773e61c9c2831150fd49a06fc25e164b7053873c97830755d478c5527d23598ce674eb2e13246a64d00a8 -libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/11915b49d288c71d78bab5c114bbd5dc -libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/0b38cca2f9492dabbd49a411660fea39e70c53ba105db7f8eb6a616d108ab8dee4b015b79a2cb34e75b91af5941d5f9acb2630f233ef9edd4f99118302a68537 -libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/e2de9f36a69100387209f59f99bd54a8 -libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/641aa82ab684656ae82f12b19bf3d090080d62d3c933525f23607a85da0ed1f1dbdf02c30120994e52a447abf86552fb2a3e0ab70f718c4baafc9bc8b01fb17f -libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/596a32ac2f4a2e4aedcef09cea7541a6 -libLLVM.v15.0.7+8.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/2ad659ebede4fbd2b09d487bd4efdf050988da7267797c4b884387f35c5e02cc0dbf93f56e51316dbdca3e8ffd6a7d9120c2cf10387fd1fead4a05d81366d83e -llvm-julia-15.0.7-7.tar.gz/md5/20678ba77ec517e16df67b6683fe1fd6 -llvm-julia-15.0.7-7.tar.gz/sha512/dd18b1d1817d7bff23bbd9598eb691e2d65ef679666e7219e4137223e739b62d5f4ef11d8c42474438b954026e0c3f0c5e350d3df23d8b4b294765d8d7788802 +libLLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/119e6752a47c65f2eb26becb92b0d1b6 +libLLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/f83e594967feaf6b5aea1b81db28f36386f2c33b28c63454123c4563e235526cad50446d153d0cafc41a39252fb13c62b9a9d9489429bb263e61d9ba54712a62 +libLLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/946e446b392d33f6c42a3d6f8d854079 +libLLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/f5fd00286b65101b644837fae104c24cd8c99c79aa5b952c0fb3855a25377626295cd839cdecab7b839e3a75d5b2b852fc3a886c71fe0f5f4ab78ad348609c45 +libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/55f9c6f7a51f5310da2d0205ce181c26 +libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/89cdb450885dbb4f511ffe3939afbee607bcc2e8568e5ce6ac34bb36431db3c7c8ca3e9d59a27e2ccccddda13ecc3c5d5ffe7a19ae63f909718a731f5c27067b +libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/8600b413e657ad169370d2e07d168aa7 +libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/ca35d96928ae93ed36ab8274c67e5e8a9a971d2b11a3363313f3160579871856cf5c92a8246edc404e10bd44a21c1dbe66941995d87af5efe34b10882aae1df1 +libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/504427a6bf7adf4178891c37a2cbee09 +libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/3a4e40d3ce7ab47987ef604275759cadc171a168638781e74396e2cd48bb6a8a8bc0983ccbe099c2bbb43584d405df63a214d5426830863db773487733688121 +libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/75dbde809013a444c1d9db1556b7e14b +libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/37a72c7dc0333fb6be67023447e82a8f98ec3b74c64a3f08b5b047feb585fa8f35cf397ab3db3eef512ff0a7ace6556c3c4e685df7ff22dd095515b77b3ef8ca +libLLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/e92dafe7f987c44f2a860db03bb6df05 +libLLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/31bc73561d6ee24bf8eaad8b7cbbcf1a3713814058a3db47624a05ce572e407241cb7857a851a4f12f93be0df4f2341102e0d68c8371505fd36ce19069e48918 +libLLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/6b978e264a0a1131907c817d4f259534 +libLLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/bdb4976a3d4fdde5885f930a411da895600ef1ef76c8c0f5d6929c9495062600dc422e87f7fea4af12e169f508740fb0701df50ba7e9c4c1c332387a9b7d4c6d +libLLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/ab22578145e661333b4e4d7369e5ff7f +libLLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/4598533c15224a1543fcdd84edbf11ef9611dc4cb22e16f4bef66ffec65e5a9b5a0993bea9bfe25c7af4bb0447af0f31ec82b1eca01cd96d8065bf82007e58b2 +libLLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/9ceb4fc78861ca7d687646350a3d18b8 +libLLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/158f0bf1cf555e5c0b79c1bb8ab9cf8a2c434236f5795c70e9c08c2b5c01da4d88a59cf61a1215f40e4046d3875dcfe2fe89c56e9f6ca7088d10c1fc044de22c +libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/0172fc1ff16552478bf00bbb480b08a2 +libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/710d392dbd708208eb0e2149d87603e2aa4fa99722d50fef2e2ed8c9ba5fbb3b4dff3208a1ee390635eb885aab91a7b228083424a9ca320578b25d8e391d0a8a +libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/c9583dd988c03827d08afb42342a4893 +libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/0954a6c774befd092d59ae228b7a48cfc509fc89e215e79958f460ab2dadc5f7fbd46e00d9c3f0032ab96cd0300aab4f6cdb92488cdf8619513f82cf56f512a0 +libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/5fbe9ce9d7cad44dc57757ce537e098f +libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/b275a24bcc051c25fe57f042518749afae00df2ce61491a70227a7e2e5fdd793e069597a1d19d148462149e3bc0e7d7f5d6b578187dae4e791ae70fbe063e14c +libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/42b7d81dc8084eeb385c22cd4b43e34b +libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/75ca00734dd52ef00f3603bb8b89d9ffbb45ff145d2557c460dc856802d814e3ff8e02af1179a18ee32edb0552ccd4fcb44cf5b23b682af164969433916c2d47 +libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/a138c265db068e53752ed917ef9afeab +libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/b66106cc2d348b262d097158ecc0a5ce604460b2de6e1f2c04c24f30a3e7a4103a2c775f0ac1b9f9ba2ad23c8b9a472d0dcb5a266222149deb6fe77611a245a1 +libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/d1e2420d0c90443a2e9ed805e7f36bdd +libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/641f40c2bc485a09f69c38afed880987562549342a71d8626daceb444d76d71d2ec7bcdfd23e870cc9e216791be223599d29e885856a8be4f394b59750b23a0b +libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/03e52f6937072c2bb6ec1fe6e62e6181 +libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/30399baaaf445c45b70f0fd4c95b7d9b63b0f0b2213d4817913b2ea28c35cd1906c398c8cfd9fffde077fcebc43445d6b5bd992ecbe9859e74a3122318ef3628 +libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/12301c5764dd64d924ef617547dc9b8a +libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/3d11ba6018f67712483cbb9c52e686d69000b39964e908e13e6695832eb1e6e9f8c764669cbe487fc8a9ef11b4619bddbc9da42210f43e4f60984813cd81b1b7 +libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/06c8c80bff9e49ee05f8024f527b925a +libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/671c47b9f03856641eb0e24cb4d08fdfc2993bc739d5cf11857b0bbad517fab490b2259501d2efad84efd295ad7bcdfa9d0b4991425f7bfc2538b13f7958b556 +libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/a7d88848fd4ef9dff68aa4f1294a272a +libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/25e243b38a1a5bcc1c01f9fcb69d7fa08ded91856de0c626bad22d472c3af77c3ac91d4dbbfef198fb90d21a7cc100eb461f66a21764adbd867fcb889121aa9b +libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/c6cc7b104317544312531f2acda37610 +libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/e732b0af56e5c0efb9bf15996bb398ba6ed49bd5a97517b742d54cd16415830e6bbdf4427ea6e07f316c720a31a279220e72e360128cbcd867520a8322690594 +libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/2318d50e1541d7d319ee23ce1eed268d +libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/3ff0a6d43cf26af45e51d966a4212cd3a7b4127cb7dfe6742ead34c489f1a6487c06721591db4e26848b0d42abd49b0a970231f2a1d655c46686f163c7fd3c0a +libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/560bdfdfef0fcab6cb71eefe82412f30 +libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/8d1960d83544e4f6c1a421f4f74f17cf05503c52cd3b5bc2f3dd544aeb7b533af812e1ec1dc113a68396ea66adba5ce01019c97507f8115ec087c95456cb8bb8 +libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/b4765514e48975aa73a9694f3bdca5e5 +libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/085aa81d1542b50b247120b08866775ce3a13dd23e9b649282c902bd2ba8d4581a4571c09d241340a29bc8413a7e749c5f37c1063af4f5b450cf5b271be1e24e +libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/78000c16b21ae1b67610976a26ef201f +libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/1a053a22f183b7b04b4ce8fbcc24393612ace7479a60b73f2a58f54b1ae8632fb9679daf10662347d17ece27d4f64be10d28a6b7f21cedb1131c174754e77660 +libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/12ec163e43b1247a37b3edd5662b0317 +libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/44a8a3a68f63a2858a190d2e6ab80952d233f1c86adcb9e6acb23a7f7719ac710a3aadc89053433baf33b435db191b67132f52ccb1ac0f731aa5088400f7a7b4 +libLLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/41bda0ee2f4bc2fbd5b9ee19648249c6 +libLLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/df36876b425dc1ad4639171c61bb82ad0f13405e192cff4d015dd98a2360970ccf096a865c0e8ffc94db829f928ce6323fe54c2db58532b5417ff36da69a1023 +libLLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/335e0c093c6df8d38a0543c5ac7da915 +libLLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/384bb24b12d99896ee617bb54c5a76714df667b41de39dc83bbcfd7e94c8aa2e0e8af9f82570c828f395cf363fbb7b8989413618b0222da373bbeb37a60925ac +libLLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/6255fd402da3174d3256558b719b0ed2 +libLLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/df45f55a4c9f0b235dd741e85e7c353300fdc3dc7b0746b1627b2925d14aba8420ffd669529441b8decd8227dca7821e3efb7c5311368cafd2ef1e1c985a5546 +libLLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/c07fd8ab5524bdc8480bc3255b36b44f +libLLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/015cdc9f78ad1caa90d22abe46314e7ef685ef6da3fc842de5dc641edecb6e41a1329ecd6a9b1450ab50649318320ec0960ae5baad1724c5d938ed97e6fcda17 +libLLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/f7f778128d4bf9982a4b2d8fadece45f +libLLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/622eabb90a99c34b02784303cb09a9ae2670d839f9ca0307c7034abe7e03ac2dc637eb60c084f4cc59e88b184a9dc174493e812b40a4935b05dcab8b4ae23f1e +libLLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/899150cd028d99652e2e390c9afefff3 +libLLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/834d8ce87a58e876c5589ab05389ddfb7dd898cc90a2a8138f31d5bb65d01821a4da4ad70b747b506cca6119cdf70146aa7448307655681aeb7e58012dabdc2f +libLLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/152a7b0c440560edfe0e20a5c8eedb15 +libLLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/344f2ecd173d198d3bfaa7400f46de57822219345234157ae9c901d929e0a32628339989eafeaff716763d26b4c66ca9cb5f55696fa3ad9f236d537f21e26b0b +libLLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/3755794024285e1a3e9dd716e5a0c47b +libLLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/245c5cfce819dcc128925bd40ebc3b39eb2b9760a400c3604168a13434ab6ca96e9067df19acaabc031205d59996e677bc1d804be3c63e7d9a0a88fee6e4d518 +libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/fedb5c68002a0827e4172ba59ebd3efb +libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/4137e0254c8176a9e5ac1d36160a27c1a0d67ec1c21970e115cdea831211ae1258fdfa8f8f7382bfccd08b467777421458e74274979f1e1c2c4c163cb9e51d06 +libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/b6ce8039dd59ade65a12087fc9a507ea +libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/06a351fa2e1dfe1d762908bfbc9c350b15758be77766b8c2fbe9d3208f4385304fce31051966c3073e3cb8aba7a1c15aac12b725fa8b552fb30ac3ebe69f7379 +libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/fb15051e20aa736d745c75af41e1ac72 +libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/4bdb341710510e07a2a7151f2f612229269b12d6bd6b3f61d9ecf5ae02001bee1e24cf0fa29ca36f105f5b003544b95c47858da59c201e49ba3a067dad7abc7d +libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/4fcb319068cd0dce43619eee69c3ae04 +libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/f576e9d47a6b12026d7b765b28fbe8fc88a64fa0d4d4b76640cfcc25648ba1894d0bed31a1c23c3a2086d9fc9db7e17c944c9f22cca3d8142656b12cabe1556d +libLLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/b4a3dcd7838f363c67ffccf926e2607d +libLLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/1b72a72de7a14a15a9748820c44f75f3ec6b0ef59f25e9a0a3416205014076f4503781a8738770af2fa3b02ca8445be09bd873bf1d37fb56ad92ba690624f4d0 +libLLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/3af7ad02cfedb3ae47b3bc9748abe5d0 +libLLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/18e6a2bbafa7f7381b5a063db3769aedf952f21bb97e6d26a7b55fced146cfd34ab16d300ca9d42be8d703e4e91426b21174f119fb0348179651d1689ff07c7b +libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/f6f5e31aa1047ab6afce0ffcac90ac14 +libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/d4235fb8858d5f696e0ac6252d54e7ae54abe18336f6e962631c83feeb6a1c1c87cb3a65900dc4d41a2f2ecf4eaf63a914392c151d26003aa5ae6b1858d417c6 +libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/34a53675cb20a6c2114091dc4b500202 +libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/ec81f180f3241c4936a0374b5eee9e1336bb16dd69b403c9c8a4d2bec6207a197a55d0d6b487b7ec694d18db09267f7cbee4efb09b13d32d57927381b5dd09dd +libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/5a392fd27d729a834fff3536dd3a11b0 +libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/152a79331508858070bfa62444c45a66eba488522739369886c277cf597e3b7e5d24b74b371b87e3c92383aea3ffa259a18f6d216f27388babf5baf46a3bf352 +libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/d275153e2738e0517d42e9dd1594c1f5 +libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/16362cc75e79e7f19819a2d6b46af96d4ce152bf3a733eb5b573932ad09b3c46700036839978e5f968e14d7c6e5e96b53b051bbe0e1f644421bf8cb1078d3010 +libLLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/8f6f6f101db3da2a422239db48d80228 +libLLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/82950bb2b6e3f4cf4832c73df72753246476ae0c923fe2d1c0abfaee52bdf47dd307e478594163a50633c248d7b86b64ff43a6fd0601616425b0d44eaae1cf55 +libLLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/dcf7c1df5048db10ff97ac0639a4e567 +libLLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/99bfab8c2f954c889b63623e9426bd6e378b51a3bd414c6ce844e8464f026ca21de2e6cdfa313e678b6bf93a62af39b39bfeeb4154e7362604dd5216323fae4e +libLLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/4475f2fe1521a0cc8213a7ef53052a3b +libLLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/82a0f70ffa92e7f43d8c07a0c64dc5ef0d628b3150c285d87926e49bf66017f1ca4cd8a372b1c9842154c8e47db933e95305626501f481d2b837119e843cea7a +libLLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/0f13558877d79581c2d302fc2480fd2b +libLLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/cc8343fabdc2569982b65c55dca33c290b3d72ebcd7126006fd13f1b216d2803c502f6a5e9839c69d22e642031db711b2dca23ccf1ca3b7c481c55dda1159630 +libLLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/854190a61038ca020a18ef5fa5cdd0a1 +libLLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/f39ec16b2e8aef564b8cc7e523ab2b38de7f18705915140f1769e003bab3871259c8ba3403c0896b3cd78b2cf30bcf2c2d2f5f649329dd35c0e4fc706cee203e +libLLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/3c58b4d61518cf6a53b1035f4fc9b13e +libLLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/b706427edd2fe21ca527da587f1cac37b0e36857c6006b1263115bf3e6eb9bc4524b7afd68aebad42d28eafb22fde8c373c460e31a123e8ae4cde3b2fb249d7b +libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/1d5d1f85a7ad52636b550fd0c449130a +libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/4bb34be432bcb752561068b9b99756910bcce1ebc91a54761fc67ce08536e807d61cfa238a0df02026e1a4131cfb2feb1137f449fb16aac76eb4697befd94a6c +libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/b39be2b3fd55154523d6cefc9eec82c9 +libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/ee38ba17a790caeb3997e872eaea2dc81a2e9cfbb70caf900c65052be859ce798b008d545b1cc3c0025d880e069fe4287a37862f1920c4e0c7abbd11a811a080 +libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/4197b06616c8a56ea25dd16fc5cb3b68 +libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/cf2a1868f0b68b76b00bf97bf9ea89f5054ab89e5177b112b8c958ec1c9545bc6ed912c3b4b5038368cd6447ec295d3ae0fe6b9abc4f53c91239644a3bd1a95c +libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/608053656f194352fb58dd00a3168a41 +libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/8f4688db666fd2342f57887aeb64b85cf000321c6cd9d27f9a685d61136a27055cff426d3eda1a8beaafb8a178250ba0e4736f435baf3e6f1cf31e20720a3a8d +llvm-julia-15.0.7-9.tar.gz/md5/930ebd05cf54da65ae2142aa2833e2be +llvm-julia-15.0.7-9.tar.gz/sha512/f9f4d2e28379470f7b7785be2782f8295aaee2c1587d7678fa1f43747a1dabff6b065e4ce778def2ebf6471595b6c072a9650b4a61d019e34fde8a1fb7bdee5a llvmunwind-12.0.1.tar.xz/md5/4ec327cee517fdb1f6a20e83748e2c7b llvmunwind-12.0.1.tar.xz/sha512/847b6ba03010a43f4fdbfdc49bf16d18fd18474d01584712e651b11191814bf7c1cf53475021d9ee447ed78413202b4ed97973d7bdd851d3e49f8d06f55a7af4 diff --git a/deps/clang.version b/deps/clang.version index 4c5f1ecc02062..18e40bbd2c434 100644 --- a/deps/clang.version +++ b/deps/clang.version @@ -1,4 +1,4 @@ ## jll artifact # Clang (paired with LLVM, only here as a JLL download) CLANG_JLL_NAME := Clang -CLANG_JLL_VER := 15.0.7+8 +CLANG_JLL_VER := 15.0.7+9 diff --git a/deps/lld.version b/deps/lld.version index 64e8aca55fe84..106ffc05fecf3 100644 --- a/deps/lld.version +++ b/deps/lld.version @@ -1,3 +1,3 @@ ## jll artifact LLD_JLL_NAME := LLD -LLD_JLL_VER := 15.0.7+8 +LLD_JLL_VER := 15.0.7+9 diff --git a/deps/llvm-tools.version b/deps/llvm-tools.version index da7a4ec18bdcc..d7ae53fca1fc1 100644 --- a/deps/llvm-tools.version +++ b/deps/llvm-tools.version @@ -1,5 +1,5 @@ ## jll artifact # LLVM_tools (downloads LLVM_jll to get things like `lit` and `opt`) LLVM_TOOLS_JLL_NAME := LLVM -LLVM_TOOLS_JLL_VER := 15.0.7+8 -LLVM_TOOLS_ASSERT_JLL_VER := 15.0.7+8 +LLVM_TOOLS_JLL_VER := 15.0.7+9 +LLVM_TOOLS_ASSERT_JLL_VER := 15.0.7+9 diff --git a/deps/llvm.version b/deps/llvm.version index 52a3a11e1c145..ba0b900233bfb 100644 --- a/deps/llvm.version +++ b/deps/llvm.version @@ -2,14 +2,14 @@ ## jll artifact LLVM_JLL_NAME := libLLVM -LLVM_ASSERT_JLL_VER := 15.0.7+8 +LLVM_ASSERT_JLL_VER := 15.0.7+9 ## source build # Version number of LLVM LLVM_VER := 15.0.7 # Git branch name in `LLVM_GIT_URL` repository -LLVM_BRANCH=julia-15.0.7-7 +LLVM_BRANCH=julia-15.0.7-9 # Git ref in `LLVM_GIT_URL` repository -LLVM_SHA1=julia-15.0.7-7 +LLVM_SHA1=julia-15.0.7-9 ## Following options are used to automatically fetch patchset from Julia's fork. This is ## useful if you want to build an external LLVM while still applying Julia's patches. @@ -20,4 +20,4 @@ LLVM_JULIA_DIFF_GITHUB_REPO := https://github.com/llvm/llvm-project # Base GitHub ref for generating the diff. LLVM_BASE_REF := llvm:llvmorg-15.0.7 # Julia fork's GitHub ref for generating the diff. -LLVM_JULIA_REF := JuliaLang:julia-15.0.7-7 +LLVM_JULIA_REF := JuliaLang:julia-15.0.7-9 diff --git a/stdlib/LLD_jll/Project.toml b/stdlib/LLD_jll/Project.toml index 0a0cd4aa6924f..30d0c6625a28e 100644 --- a/stdlib/LLD_jll/Project.toml +++ b/stdlib/LLD_jll/Project.toml @@ -1,6 +1,6 @@ name = "LLD_jll" uuid = "d55e3150-da41-5e91-b323-ecfd1eec6109" -version = "15.0.7+8" +version = "15.0.7+9" [deps] Zlib_jll = "83775a58-1f1d-513f-b197-d71354ab007a" diff --git a/stdlib/libLLVM_jll/Project.toml b/stdlib/libLLVM_jll/Project.toml index b0bd480fc99fc..a8e628438e170 100644 --- a/stdlib/libLLVM_jll/Project.toml +++ b/stdlib/libLLVM_jll/Project.toml @@ -1,6 +1,6 @@ name = "libLLVM_jll" uuid = "8f36deef-c2a5-5394-99ed-8e07531fb29a" -version = "15.0.7+8" +version = "15.0.7+9" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" From cba88c10b815f64853b214a87ea6b7c4cd1bf50a Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Sat, 28 Oct 2023 11:52:34 -0400 Subject: [PATCH 181/413] Backport "Fix Expr(:loopinfo) codegen" (#51883) Backport #50663 to 1.10 --- src/codegen.cpp | 45 ++-- src/jl_exported_funcs.inc | 2 +- src/llvm-julia-passes.inc | 2 +- src/llvm-simdloop.cpp | 242 +++++++----------- src/passes.h | 10 +- src/pipeline.cpp | 2 +- test/llvmpasses/julia-simdloop-memoryssa.ll | 55 ++++ .../{simdloop.ll => julia-simdloop.ll} | 29 +-- test/llvmpasses/loopinfo.jl | 22 +- test/llvmpasses/parsing.ll | 2 +- 10 files changed, 209 insertions(+), 202 deletions(-) create mode 100644 test/llvmpasses/julia-simdloop-memoryssa.ll rename test/llvmpasses/{simdloop.ll => julia-simdloop.ll} (75%) diff --git a/src/codegen.cpp b/src/codegen.cpp index 384ee5caf9708..d28971b9a4caf 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -981,14 +981,7 @@ static const auto jl_typeof_func = new JuliaFunction<>{ Attributes(C, {Attribute::NonNull}), None); }, }; -static const auto jl_loopinfo_marker_func = new JuliaFunction<>{ - "julia.loopinfo_marker", - [](LLVMContext &C) { return FunctionType::get(getVoidTy(C), false); }, - [](LLVMContext &C) { return AttributeList::get(C, - Attributes(C, {Attribute::ReadOnly, Attribute::NoRecurse, Attribute::InaccessibleMemOnly}), - AttributeSet(), - None); }, -}; + static const auto jl_write_barrier_func = new JuliaFunction<>{ "julia.write_barrier", [](LLVMContext &C) { return FunctionType::get(getVoidTy(C), @@ -1600,6 +1593,7 @@ class jl_codectx_t { std::map &global_targets; std::map, GlobalVariable*> &external_calls; Function *f = NULL; + MDNode* LoopID = NULL; // local var info. globals are not in here. std::vector slots; std::map phic_slots; @@ -5766,16 +5760,22 @@ static jl_cgval_t emit_expr(jl_codectx_t &ctx, jl_value_t *expr, ssize_t ssaidx_ } else if (head == jl_loopinfo_sym) { // parse Expr(:loopinfo, "julia.simdloop", ("llvm.loop.vectorize.width", 4)) + // to LLVM LoopID SmallVector MDs; + + // Reserve first location for self reference to the LoopID metadata node. + TempMDTuple TempNode = MDNode::getTemporary(ctx.builder.getContext(), None); + MDs.push_back(TempNode.get()); + for (int i = 0, ie = nargs; i < ie; ++i) { Metadata *MD = to_md_tree(args[i], ctx.builder.getContext()); if (MD) MDs.push_back(MD); } - MDNode* MD = MDNode::get(ctx.builder.getContext(), MDs); - CallInst *I = ctx.builder.CreateCall(prepare_call(jl_loopinfo_marker_func)); - I->setMetadata("julia.loopinfo", MD); + ctx.LoopID = MDNode::getDistinct(ctx.builder.getContext(), MDs); + // Replace the temporary node with a self-reference. + ctx.LoopID->replaceOperandWith(0, ctx.LoopID); return jl_cgval_t(); } else if (head == jl_leave_sym || head == jl_coverageeffect_sym @@ -8045,6 +8045,7 @@ static jl_llvm_functions_t std::map BB; std::map come_from_bb; int cursor = 0; + int current_label = 0; auto find_next_stmt = [&] (int seq_next) { // new style ir is always in dominance order, but frontend IR might not be // `seq_next` is the next statement we want to emit @@ -8061,6 +8062,7 @@ static jl_llvm_functions_t workstack.pop_back(); auto nextbb = BB.find(item + 1); if (nextbb == BB.end()) { + // Not a BB cursor = item; return; } @@ -8071,8 +8073,10 @@ static jl_llvm_functions_t seq_next = -1; // if this BB is non-empty, we've visited it before so skip it if (!nextbb->second->getTerminator()) { + // New BB ctx.builder.SetInsertPoint(nextbb->second); cursor = item; + current_label = item; return; } } @@ -8319,7 +8323,12 @@ static jl_llvm_functions_t if (jl_is_gotonode(stmt)) { int lname = jl_gotonode_label(stmt); come_from_bb[cursor+1] = ctx.builder.GetInsertBlock(); - ctx.builder.CreateBr(BB[lname]); + auto br = ctx.builder.CreateBr(BB[lname]); + // Check if backwards branch + if (ctx.LoopID && lname <= current_label) { + br->setMetadata(LLVMContext::MD_loop, ctx.LoopID); + ctx.LoopID = NULL; + } find_next_stmt(lname - 1); continue; } @@ -8337,10 +8346,17 @@ static jl_llvm_functions_t workstack.push_back(lname - 1); BasicBlock *ifnot = BB[lname]; BasicBlock *ifso = BB[cursor+2]; + Instruction *br; if (ifnot == ifso) - ctx.builder.CreateBr(ifnot); + br = ctx.builder.CreateBr(ifnot); else - ctx.builder.CreateCondBr(isfalse, ifnot, ifso); + br = ctx.builder.CreateCondBr(isfalse, ifnot, ifso); + + // Check if backwards branch + if (ctx.LoopID && lname <= current_label) { + br->setMetadata(LLVMContext::MD_loop, ctx.LoopID); + ctx.LoopID = NULL; + } find_next_stmt(cursor + 1); continue; } @@ -9088,7 +9104,6 @@ static void init_jit_functions(void) add_named_global(jl_object_id__func, &jl_object_id_); add_named_global(jl_alloc_obj_func, (void*)NULL); add_named_global(jl_newbits_func, (void*)jl_new_bits); - add_named_global(jl_loopinfo_marker_func, (void*)NULL); add_named_global(jl_typeof_func, (void*)NULL); add_named_global(jl_write_barrier_func, (void*)NULL); add_named_global(jldlsym_func, &jl_load_and_lookup); diff --git a/src/jl_exported_funcs.inc b/src/jl_exported_funcs.inc index a7ffedd5cba10..745905b113622 100644 --- a/src/jl_exported_funcs.inc +++ b/src/jl_exported_funcs.inc @@ -580,7 +580,6 @@ YY(LLVMExtraAddCPUFeaturesPass) \ YY(LLVMExtraMPMAddCPUFeaturesPass) \ YY(LLVMExtraMPMAddRemoveNIPass) \ - YY(LLVMExtraMPMAddLowerSIMDLoopPass) \ YY(LLVMExtraMPMAddFinalLowerGCPass) \ YY(LLVMExtraMPMAddMultiVersioningPass) \ YY(LLVMExtraMPMAddRemoveJuliaAddrspacesPass) \ @@ -594,6 +593,7 @@ YY(LLVMExtraFPMAddLowerExcHandlersPass) \ YY(LLVMExtraFPMAddGCInvariantVerifierPass) \ YY(LLVMExtraLPMAddJuliaLICMPass) \ + YY(LLVMExtraLPMAddLowerSIMDLoopPass) \ YY(JLJITGetLLVMOrcExecutionSession) \ YY(JLJITGetJuliaOJIT) \ YY(JLJITGetExternalJITDylib) \ diff --git a/src/llvm-julia-passes.inc b/src/llvm-julia-passes.inc index 39030d60a44fc..d12370b1852c7 100644 --- a/src/llvm-julia-passes.inc +++ b/src/llvm-julia-passes.inc @@ -2,7 +2,6 @@ #ifdef MODULE_PASS MODULE_PASS("CPUFeatures", CPUFeaturesPass, CPUFeaturesPass()) MODULE_PASS("RemoveNI", RemoveNIPass, RemoveNIPass()) -MODULE_PASS("LowerSIMDLoop", LowerSIMDLoopPass, LowerSIMDLoopPass()) MODULE_PASS("FinalLowerGC", FinalLowerGCPass, FinalLowerGCPass()) MODULE_PASS("JuliaMultiVersioning", MultiVersioningPass, MultiVersioningPass()) MODULE_PASS("RemoveJuliaAddrspaces", RemoveJuliaAddrspacesPass, RemoveJuliaAddrspacesPass()) @@ -24,4 +23,5 @@ FUNCTION_PASS("GCInvariantVerifier", GCInvariantVerifierPass, GCInvariantVerifie //Loop passes #ifdef LOOP_PASS LOOP_PASS("JuliaLICM", JuliaLICMPass, JuliaLICMPass()) +LOOP_PASS("LowerSIMDLoop", LowerSIMDLoopPass, LowerSIMDLoopPass()) #endif diff --git a/src/llvm-simdloop.cpp b/src/llvm-simdloop.cpp index 21e2ec574d650..ad17e71aff3f5 100644 --- a/src/llvm-simdloop.cpp +++ b/src/llvm-simdloop.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -73,7 +74,7 @@ static unsigned getReduceOpcode(Instruction *J, Instruction *operand) JL_NOTSAFE /// If Phi is part of a reduction cycle of FAdd, FSub, FMul or FDiv, /// mark the ops as permitting reassociation/commuting. /// As of LLVM 4.0, FDiv is not handled by the loop vectorizer -static void enableUnsafeAlgebraIfReduction(PHINode *Phi, Loop *L, OptimizationRemarkEmitter &ORE) JL_NOTSAFEPOINT +static void enableUnsafeAlgebraIfReduction(PHINode *Phi, Loop &L, OptimizationRemarkEmitter &ORE, ScalarEvolution *SE) JL_NOTSAFEPOINT { typedef SmallVector chainVector; chainVector chain; @@ -84,7 +85,7 @@ static void enableUnsafeAlgebraIfReduction(PHINode *Phi, Loop *L, OptimizationRe // Find the user of instruction I that is within loop L. for (User *UI : I->users()) { /*}*/ Instruction *U = cast(UI); - if (L->contains(U)) { + if (L.contains(U)) { if (J) { LLVM_DEBUG(dbgs() << "LSL: not a reduction var because op has two internal uses: " << *I << "\n"); REMARK([&]() { @@ -151,128 +152,95 @@ static void enableUnsafeAlgebraIfReduction(PHINode *Phi, Loop *L, OptimizationRe }); (*K)->setHasAllowReassoc(true); (*K)->setHasAllowContract(true); + if (SE) + SE->forgetValue(*K); ++length; } ReductionChainLength += length; MaxChainLength.updateMax(length); } -static bool markLoopInfo(Module &M, Function *marker, function_ref GetLI) JL_NOTSAFEPOINT +static bool processLoop(Loop &L, OptimizationRemarkEmitter &ORE, ScalarEvolution *SE) JL_NOTSAFEPOINT { - bool Changed = false; - std::vector ToDelete; - for (User *U : marker->users()) { - ++TotalMarkedLoops; - Instruction *I = cast(U); - ToDelete.push_back(I); - - BasicBlock *B = I->getParent(); - OptimizationRemarkEmitter ORE(B->getParent()); - LoopInfo &LI = GetLI(*B->getParent()); - Loop *L = LI.getLoopFor(B); - if (!L) { - I->removeFromParent(); - continue; - } - - LLVM_DEBUG(dbgs() << "LSL: loopinfo marker found\n"); - bool simd = false; - bool ivdep = false; - SmallVector MDs; - - BasicBlock *Lh = L->getHeader(); - LLVM_DEBUG(dbgs() << "LSL: loop header: " << *Lh << "\n"); - - // Reserve first location for self reference to the LoopID metadata node. - TempMDTuple TempNode = MDNode::getTemporary(Lh->getContext(), None); - MDs.push_back(TempNode.get()); - - // Walk `julia.loopinfo` metadata and filter out `julia.simdloop` and `julia.ivdep` - if (I->hasMetadataOtherThanDebugLoc()) { - MDNode *JLMD= I->getMetadata("julia.loopinfo"); - if (JLMD) { - LLVM_DEBUG(dbgs() << "LSL: has julia.loopinfo metadata with " << JLMD->getNumOperands() <<" operands\n"); - for (unsigned i = 0, ie = JLMD->getNumOperands(); i < ie; ++i) { - Metadata *Op = JLMD->getOperand(i); - const MDString *S = dyn_cast(Op); - if (S) { - LLVM_DEBUG(dbgs() << "LSL: found " << S->getString() << "\n"); - if (S->getString().startswith("julia")) { - if (S->getString().equals("julia.simdloop")) - simd = true; - if (S->getString().equals("julia.ivdep")) - ivdep = true; - continue; - } - } - MDs.push_back(Op); - } - } - } - - LLVM_DEBUG(dbgs() << "LSL: simd: " << simd << " ivdep: " << ivdep << "\n"); - - REMARK([=]() { - return OptimizationRemarkAnalysis(DEBUG_TYPE, "Loop SIMD Flags", I->getDebugLoc(), B) - << "Loop marked for SIMD vectorization with flags { \"simd\": " << (simd ? "true" : "false") << ", \"ivdep\": " << (ivdep ? "true" : "false") << " }"; - }); - - MDNode *n = L->getLoopID(); - if (n) { - // Loop already has a LoopID so copy over Metadata - // original loop id is operand 0 - for (unsigned i = 1, ie = n->getNumOperands(); i < ie; ++i) { - Metadata *Op = n->getOperand(i); - MDs.push_back(Op); + MDNode *LoopID = L.getLoopID(); + if (!LoopID) + return false; + bool simd = false; + bool ivdep = false; + + BasicBlock *Lh = L.getHeader(); + LLVM_DEBUG(dbgs() << "LSL: loop header: " << *Lh << "\n"); + + SmallVector MDs(1); + // First Operand is self-reference + // Drop `julia.` prefixes + for (unsigned i = 1, ie = LoopID->getNumOperands(); i < ie; ++i) { + Metadata *Op = LoopID->getOperand(i); + const MDString *S = dyn_cast(Op); + if (S) { + LLVM_DEBUG(dbgs() << "LSL: found " << S->getString() << "\n"); + if (S->getString().startswith("julia")) { + if (S->getString().equals("julia.simdloop")) + simd = true; + if (S->getString().equals("julia.ivdep")) + ivdep = true; + continue; } } - MDNode *LoopID = MDNode::getDistinct(Lh->getContext(), MDs); - // Replace the temporary node with a self-reference. - LoopID->replaceOperandWith(0, LoopID); - L->setLoopID(LoopID); - assert(L->getLoopID()); + MDs.push_back(Op); + } + LLVM_DEBUG(dbgs() << "LSL: simd: " << simd << " ivdep: " << ivdep << "\n"); + if (!simd && !ivdep) + return false; + + ++TotalMarkedLoops; + LLVMContext &Context = L.getHeader()->getContext(); + LoopID = MDNode::get(Context, MDs); + // Set operand 0 to refer to the loop id itself + LoopID->replaceOperandWith(0, LoopID); + L.setLoopID(LoopID); + + REMARK([&]() { + return OptimizationRemarkAnalysis(DEBUG_TYPE, "Loop SIMD Flags", L.getStartLoc(), L.getHeader()) + << "Loop marked for SIMD vectorization with flags { \"simd\": " << (simd ? "true" : "false") << ", \"ivdep\": " << (ivdep ? "true" : "false") << " }"; + }); + + // If ivdep is true we assume that there is no memory dependency between loop iterations + // This is a fairly strong assumption and does often not hold true for generic code. + if (ivdep) { + ++IVDepLoops; MDNode *m = MDNode::get(Lh->getContext(), ArrayRef(LoopID)); - - // If ivdep is true we assume that there is no memory dependency between loop iterations - // This is a fairly strong assumption and does often not hold true for generic code. - if (ivdep) { - ++IVDepLoops; - // Mark memory references so that Loop::isAnnotatedParallel will return true for this loop. - for (BasicBlock *BB : L->blocks()) { - for (Instruction &I : *BB) { - if (I.mayReadOrWriteMemory()) { - ++IVDepInstructions; - I.setMetadata(LLVMContext::MD_mem_parallel_loop_access, m); - } - } + // Mark memory references so that Loop::isAnnotatedParallel will return true for this loop. + for (BasicBlock *BB : L.blocks()) { + for (Instruction &I : *BB) { + if (I.mayReadOrWriteMemory()) { + ++IVDepInstructions; + I.setMetadata(LLVMContext::MD_mem_parallel_loop_access, m); + } } - assert(L->isAnnotatedParallel()); } + assert(L.isAnnotatedParallel()); + } - if (simd) { - ++SimdLoops; - // Mark floating-point reductions as okay to reassociate/commute. - for (BasicBlock::iterator I = Lh->begin(), E = Lh->end(); I != E; ++I) { - if (PHINode *Phi = dyn_cast(I)) - enableUnsafeAlgebraIfReduction(Phi, L, ORE); - else - break; - } + if (simd) { + ++SimdLoops; + // Mark floating-point reductions as okay to reassociate/commute. + for (BasicBlock::iterator I = Lh->begin(), E = Lh->end(); I != E; ++I) { + if (PHINode *Phi = dyn_cast(I)) + enableUnsafeAlgebraIfReduction(Phi, L, ORE, SE); + else + break; } - I->removeFromParent(); - - Changed = true; + if (SE) + SE->forgetLoopDispositions(&L); } - for (Instruction *I : ToDelete) - I->deleteValue(); - marker->eraseFromParent(); #ifdef JL_VERIFY_PASSES - assert(!verifyModule(M, &errs())); + assert(!verifyFunction(*L.getHeader()->getParent(), &errs())); #endif - return Changed; + return true; } } // end anonymous namespace @@ -283,23 +251,19 @@ static bool markLoopInfo(Module &M, Function *marker, function_ref(M).getManager(); +PreservedAnalyses LowerSIMDLoopPass::run(Loop &L, LoopAnalysisManager &AM, + LoopStandardAnalysisResults &AR, LPMUpdater &U) - auto GetLI = [&FAM](Function &F) -> LoopInfo & { - return FAM.getResult(F); - }; - - if (markLoopInfo(M, loopinfo_marker, GetLI)) { - auto preserved = PreservedAnalyses::allInSet(); - preserved.preserve(); +{ + OptimizationRemarkEmitter ORE(L.getHeader()->getParent()); + if (processLoop(L, ORE, &AR.SE)) { +#ifdef JL_DEBUG_BUILD + if (AR.MSSA) + AR.MSSA->verifyMemorySSA(); +#endif + auto preserved = getLoopPassPreservedAnalyses(); + preserved.preserveSet(); + preserved.preserve(); return preserved; } @@ -307,37 +271,23 @@ PreservedAnalyses LowerSIMDLoopPass::run(Module &M, ModuleAnalysisManager &AM) } namespace { -class LowerSIMDLoopLegacy : public ModulePass { - //LowerSIMDLoop Impl; +class LowerSIMDLoopLegacy : public LoopPass { public: - static char ID; + static char ID; - LowerSIMDLoopLegacy() : ModulePass(ID) { - } - - bool runOnModule(Module &M) override { - bool Changed = false; - - Function *loopinfo_marker = M.getFunction("julia.loopinfo_marker"); - - auto GetLI = [this](Function &F) JL_NOTSAFEPOINT -> LoopInfo & { - return getAnalysis(F).getLoopInfo(); - }; - - if (loopinfo_marker) - Changed |= markLoopInfo(M, loopinfo_marker, GetLI); + LowerSIMDLoopLegacy() : LoopPass(ID) { + } - return Changed; - } + bool runOnLoop(Loop *L, LPPassManager &LPM) override + { + OptimizationRemarkEmitter ORE(L->getHeader()->getParent()); + return processLoop(*L, ORE, nullptr); + } - void getAnalysisUsage(AnalysisUsage &AU) const override - { - ModulePass::getAnalysisUsage(AU); - AU.addRequired(); - AU.addPreserved(); - AU.setPreservesCFG(); - } + void getAnalysisUsage(AnalysisUsage &AU) const override { + getLoopAnalysisUsage(AU); + } }; } // end anonymous namespace diff --git a/src/passes.h b/src/passes.h index 2bb33d6eec60d..030e5f1bfa677 100644 --- a/src/passes.h +++ b/src/passes.h @@ -57,11 +57,6 @@ struct RemoveNIPass : PassInfoMixin { static bool isRequired() { return true; } }; -struct LowerSIMDLoopPass : PassInfoMixin { - PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM) JL_NOTSAFEPOINT; - static bool isRequired() { return true; } -}; - struct FinalLowerGCPass : PassInfoMixin { PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM) JL_NOTSAFEPOINT; static bool isRequired() { return true; } @@ -103,6 +98,11 @@ struct JuliaLICMPass : PassInfoMixin { LoopStandardAnalysisResults &AR, LPMUpdater &U) JL_NOTSAFEPOINT; }; +struct LowerSIMDLoopPass : PassInfoMixin { + PreservedAnalyses run(Loop &L, LoopAnalysisManager &AM, + LoopStandardAnalysisResults &AR, LPMUpdater &U) JL_NOTSAFEPOINT; +}; + #define MODULE_MARKER_PASS(NAME) \ struct NAME##MarkerPass : PassInfoMixin { \ PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM) JL_NOTSAFEPOINT { return PreservedAnalyses::all(); } \ diff --git a/src/pipeline.cpp b/src/pipeline.cpp index 19cd085602594..88c2da5d729c9 100644 --- a/src/pipeline.cpp +++ b/src/pipeline.cpp @@ -402,6 +402,7 @@ static void buildLoopOptimizerPipeline(FunctionPassManager &FPM, PassBuilder *PB FPM.addPass(BeforeLoopOptimizationMarkerPass()); { LoopPassManager LPM; + LPM.addPass(LowerSIMDLoopPass()); if (O.getSpeedupLevel() >= 2) { LPM.addPass(LoopRotatePass()); } @@ -560,7 +561,6 @@ static void buildPipeline(ModulePassManager &MPM, PassBuilder *PB, OptimizationL buildEarlySimplificationPipeline(MPM, PB, O, options); MPM.addPass(AlwaysInlinerPass()); buildEarlyOptimizerPipeline(MPM, PB, O, options); - MPM.addPass(LowerSIMDLoopPass()); { FunctionPassManager FPM; buildLoopOptimizerPipeline(FPM, PB, O, options); diff --git a/test/llvmpasses/julia-simdloop-memoryssa.ll b/test/llvmpasses/julia-simdloop-memoryssa.ll new file mode 100644 index 0000000000000..0c1c4ac021996 --- /dev/null +++ b/test/llvmpasses/julia-simdloop-memoryssa.ll @@ -0,0 +1,55 @@ +; COM: NewPM-only test, tests that memoryssa is preserved correctly + +; RUN: opt -enable-new-pm=1 --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='function(loop-mssa(LowerSIMDLoop),print)' -S -o /dev/null %s 2>&1 | FileCheck %s --check-prefixes=CHECK + +; RUN: opt -enable-new-pm=1 --opaque-pointers=1 --load-pass-plugin=libjulia-codegen%shlibext -passes='function(loop-mssa(LowerSIMDLoop),print)' -S -o /dev/null %s 2>&1 | FileCheck %s --check-prefixes=CHECK + +; CHECK-LABEL: MemorySSA for function: simd_test +; CHECK-LABEL: @simd_test( +define void @simd_test(double *%a, double *%b) { +; CHECK: top: +top: + br label %loop +; CHECK: loop: +loop: +; CHECK-NEXT: [[MPHI:[0-9]+]] = MemoryPhi({top,liveOnEntry},{loop,[[MSSA_USE:[0-9]+]]}) + %i = phi i64 [0, %top], [%nexti, %loop] + %aptr = getelementptr double, double *%a, i64 %i + %bptr = getelementptr double, double *%b, i64 %i +; CHECK: MemoryUse([[MPHI]]) MayAlias +; CHECK: llvm.mem.parallel_loop_access + %aval = load double, double *%aptr +; CHECK: MemoryUse([[MPHI]]) MayAlias + %bval = load double, double *%aptr + %cval = fadd double %aval, %bval +; CHECK: [[MSSA_USE]] = MemoryDef([[MPHI]]) + store double %cval, double *%bptr + %nexti = add i64 %i, 1 + %done = icmp sgt i64 %nexti, 500 + br i1 %done, label %loopdone, label %loop, !llvm.loop !1 +loopdone: + ret void +} + +; CHECK-LABEL: MemorySSA for function: simd_test_sub2 +; CHECK-LABEL: @simd_test_sub2( +define double @simd_test_sub2(double *%a) { +top: + br label %loop +loop: + %i = phi i64 [0, %top], [%nexti, %loop] + %v = phi double [0.000000e+00, %top], [%nextv, %loop] + %aptr = getelementptr double, double *%a, i64 %i +; CHECK: MemoryUse(liveOnEntry) MayAlias + %aval = load double, double *%aptr + %nextv = fsub double %v, %aval +; CHECK: fsub reassoc contract double %v, %aval + %nexti = add i64 %i, 1 + %done = icmp sgt i64 %nexti, 500 + br i1 %done, label %loopdone, label %loop, !llvm.loop !0 +loopdone: + ret double %nextv +} + +!0 = distinct !{!0, !"julia.simdloop"} +!1 = distinct !{!1, !"julia.simdloop", !"julia.ivdep"} \ No newline at end of file diff --git a/test/llvmpasses/simdloop.ll b/test/llvmpasses/julia-simdloop.ll similarity index 75% rename from test/llvmpasses/simdloop.ll rename to test/llvmpasses/julia-simdloop.ll index 929fbeea2c3f5..ad3e125893068 100644 --- a/test/llvmpasses/simdloop.ll +++ b/test/llvmpasses/julia-simdloop.ll @@ -1,12 +1,10 @@ ; This file is a part of Julia. License is MIT: https://julialang.org/license ; RUN: opt -enable-new-pm=0 --opaque-pointers=0 -load libjulia-codegen%shlibext -LowerSIMDLoop -S %s | FileCheck %s -; RUN: opt -enable-new-pm=1 --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='LowerSIMDLoop' -S %s | FileCheck %s +; RUN: opt -enable-new-pm=1 --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='loop(LowerSIMDLoop)' -S %s | FileCheck %s ; RUN: opt -enable-new-pm=0 --opaque-pointers=1 -load libjulia-codegen%shlibext -LowerSIMDLoop -S %s | FileCheck %s -; RUN: opt -enable-new-pm=1 --opaque-pointers=1 --load-pass-plugin=libjulia-codegen%shlibext -passes='LowerSIMDLoop' -S %s | FileCheck %s - -declare void @julia.loopinfo_marker() +; RUN: opt -enable-new-pm=1 --opaque-pointers=1 --load-pass-plugin=libjulia-codegen%shlibext -passes='loop(LowerSIMDLoop)' -S %s | FileCheck %s ; CHECK-LABEL: @simd_test( define void @simd_test(double *%a, double *%b) { @@ -22,9 +20,8 @@ loop: %cval = fadd double %aval, %bval store double %cval, double *%bptr %nexti = add i64 %i, 1 - call void @julia.loopinfo_marker(), !julia.loopinfo !3 %done = icmp sgt i64 %nexti, 500 - br i1 %done, label %loopdone, label %loop + br i1 %done, label %loopdone, label %loop, !llvm.loop !1 loopdone: ret void } @@ -42,9 +39,8 @@ loop: %nextv = fsub double %v, %aval ; CHECK: fsub reassoc contract double %v, %aval %nexti = add i64 %i, 1 - call void @julia.loopinfo_marker(), !julia.loopinfo !3 %done = icmp sgt i64 %nexti, 500 - br i1 %done, label %loopdone, label %loop + br i1 %done, label %loopdone, label %loop, !llvm.loop !1 loopdone: ret double %nextv } @@ -61,9 +57,8 @@ loop: %nextv = fsub double %v, %aval ; CHECK: fsub reassoc contract double %v, %aval %nexti = add i64 %i, 1 - call void @julia.loopinfo_marker(), !julia.loopinfo !2 %done = icmp sgt i64 %nexti, 500 - br i1 %done, label %loopdone, label %loop + br i1 %done, label %loopdone, label %loop, !llvm.loop !0 loopdone: ret double %nextv } @@ -82,20 +77,16 @@ for.body: ; preds = %for.body, %entry %arrayidx2 = getelementptr inbounds i32, i32* %a, i64 %indvars.iv store i32 %add, i32* %arrayidx2, align 4 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1 - call void @julia.loopinfo_marker(), !julia.loopinfo !4 %exitcond = icmp eq i64 %indvars.iv.next, 48 ; CHECK: br {{.*}} !llvm.loop [[LOOP:![0-9]+]] - br i1 %exitcond, label %for.end, label %for.body + br i1 %exitcond, label %for.end, label %for.body, !llvm.loop !2 for.end: ; preds = %for.body %1 = load i32, i32* %a, align 4 ret i32 %1 } -!1 = !{} -!2 = !{!"julia.simdloop"} -!3 = !{!"julia.simdloop", !"julia.ivdep"} -!4 = !{!"julia.simdloop", !"julia.ivdep", !5} -!5 = !{!"llvm.loop.vectorize.disable", i1 0} -; CHECK: [[LOOP]] = distinct !{[[LOOP]], [[LOOP_DISABLE:![0-9]+]]} -; CHECK-NEXT: [[LOOP_DISABLE]] = !{!"llvm.loop.vectorize.disable", i1 false} +!0 = distinct !{!0, !"julia.simdloop"} +!1 = distinct !{!1, !"julia.simdloop", !"julia.ivdep"} +!2 = distinct !{!2, !"julia.simdloop", !"julia.ivdep", !3} +!3 = !{!"llvm.loop.vectorize.disable", i1 0} diff --git a/test/llvmpasses/loopinfo.jl b/test/llvmpasses/loopinfo.jl index b9b388c73d0c5..559793b70b27f 100644 --- a/test/llvmpasses/loopinfo.jl +++ b/test/llvmpasses/loopinfo.jl @@ -3,7 +3,7 @@ # RUN: julia --startup-file=no %s %t && llvm-link -S %t/* -o %t/module.ll # RUN: cat %t/module.ll | FileCheck %s # RUN: cat %t/module.ll | opt -enable-new-pm=0 -load libjulia-codegen%shlibext -LowerSIMDLoop -S - | FileCheck %s -check-prefix=LOWER -# RUN: cat %t/module.ll | opt -enable-new-pm=1 --load-pass-plugin=libjulia-codegen%shlibext -passes='LowerSIMDLoop' -S - | FileCheck %s -check-prefix=LOWER +# RUN: cat %t/module.ll | opt -enable-new-pm=1 --load-pass-plugin=libjulia-codegen%shlibext -passes='loop(LowerSIMDLoop)' -S - | FileCheck %s -check-prefix=LOWER # RUN: julia --startup-file=no %s %t -O && llvm-link -S %t/* -o %t/module.ll # RUN: cat %t/module.ll | FileCheck %s -check-prefix=FINAL @@ -27,10 +27,9 @@ function simdf(X) acc = zero(eltype(X)) @simd for x in X acc += x -# CHECK: call void @julia.loopinfo_marker(), {{.*}}, !julia.loopinfo [[LOOPINFO:![0-9]+]] +# CHECK: br {{.*}}, !llvm.loop [[LOOPID:![0-9]+]] # LOWER-NOT: llvm.mem.parallel_loop_access # LOWER: fadd reassoc contract double -# LOWER-NOT: call void @julia.loopinfo_marker() # LOWER: br {{.*}}, !llvm.loop [[LOOPID:![0-9]+]] # FINAL: fadd reassoc contract <{{(vscale x )?}}{{[0-9]+}} x double> end @@ -43,9 +42,8 @@ function simdf2(X) acc = zero(eltype(X)) @simd ivdep for x in X acc += x -# CHECK: call void @julia.loopinfo_marker(), {{.*}}, !julia.loopinfo [[LOOPINFO2:![0-9]+]] +# CHECK: br {{.*}}, !llvm.loop [[LOOPID2:![0-9]+]] # LOWER: llvm.mem.parallel_loop_access -# LOWER-NOT: call void @julia.loopinfo_marker() # LOWER: fadd reassoc contract double # LOWER: br {{.*}}, !llvm.loop [[LOOPID2:![0-9]+]] end @@ -61,8 +59,7 @@ end for i in 1:N iteration(i) $(Expr(:loopinfo, (Symbol("llvm.loop.unroll.count"), 3))) -# CHECK: call void @julia.loopinfo_marker(), {{.*}}, !julia.loopinfo [[LOOPINFO3:![0-9]+]] -# LOWER-NOT: call void @julia.loopinfo_marker() +# CHECK: br {{.*}}, !llvm.loop [[LOOPID3:![0-9]+]] # LOWER: br {{.*}}, !llvm.loop [[LOOPID3:![0-9]+]] # FINAL: call {{(swiftcc )?}}void @j_iteration # FINAL: call {{(swiftcc )?}}void @j_iteration @@ -87,8 +84,7 @@ end iteration(i) end $(Expr(:loopinfo, (Symbol("llvm.loop.unroll.full"),))) -# CHECK: call void @julia.loopinfo_marker(), {{.*}}, !julia.loopinfo [[LOOPINFO4:![0-9]+]] -# LOWER-NOT: call void @julia.loopinfo_marker() +# CHECK: br {{.*}}, !llvm.loop [[LOOPID4:![0-9]+]] # LOWER: br {{.*}}, !llvm.loop [[LOOPID4:![0-9]+]] # FINAL: call {{(swiftcc )?}}void @j_iteration # FINAL: call {{(swiftcc )?}}void @j_iteration @@ -119,11 +115,11 @@ end end ## Check all the MD nodes -# CHECK: [[LOOPINFO]] = !{!"julia.simdloop"} -# CHECK: [[LOOPINFO2]] = !{!"julia.simdloop", !"julia.ivdep"} -# CHECK: [[LOOPINFO3]] = !{[[LOOPUNROLL:![0-9]+]]} +# CHECK: [[LOOPID]] = distinct !{[[LOOPID]], !"julia.simdloop"} +# CHECK: [[LOOPID2]] = distinct !{[[LOOPID2]], !"julia.simdloop", !"julia.ivdep"} +# CHECK: [[LOOPID3]] = distinct !{[[LOOPID3]], [[LOOPUNROLL:![0-9]+]]} # CHECK: [[LOOPUNROLL]] = !{!"llvm.loop.unroll.count", i64 3} -# CHECK: [[LOOPINFO4]] = !{[[LOOPUNROLL2:![0-9]+]]} +# CHECK: [[LOOPID4]] = distinct !{[[LOOPID4]], [[LOOPUNROLL2:![0-9]+]]} # CHECK: [[LOOPUNROLL2]] = !{!"llvm.loop.unroll.full"} # LOWER: [[LOOPID]] = distinct !{[[LOOPID]]} # LOWER: [[LOOPID2]] = distinct !{[[LOOPID2]]} diff --git a/test/llvmpasses/parsing.ll b/test/llvmpasses/parsing.ll index 434ffbb26c95f..dadf7db62db57 100644 --- a/test/llvmpasses/parsing.ll +++ b/test/llvmpasses/parsing.ll @@ -1,6 +1,6 @@ ; COM: NewPM-only test, tests for ability to parse Julia passes -; RUN: opt --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='module(CPUFeatures,RemoveNI,LowerSIMDLoop,FinalLowerGC,JuliaMultiVersioning,RemoveJuliaAddrspaces,LowerPTLSPass,function(DemoteFloat16,CombineMulAdd,LateLowerGCFrame,AllocOpt,PropagateJuliaAddrspaces,LowerExcHandlers,GCInvariantVerifier,loop(JuliaLICM),GCInvariantVerifier,GCInvariantVerifier),LowerPTLSPass,LowerPTLSPass,JuliaMultiVersioning,JuliaMultiVersioning)' -S %s -o /dev/null +; RUN: opt --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='module(CPUFeatures,RemoveNI,FinalLowerGC,JuliaMultiVersioning,RemoveJuliaAddrspaces,LowerPTLSPass,function(DemoteFloat16,CombineMulAdd,LateLowerGCFrame,AllocOpt,PropagateJuliaAddrspaces,LowerExcHandlers,GCInvariantVerifier,loop(LowerSIMDLoop,JuliaLICM),GCInvariantVerifier,GCInvariantVerifier),LowerPTLSPass,LowerPTLSPass,JuliaMultiVersioning,JuliaMultiVersioning)' -S %s -o /dev/null define void @test() { ret void From 0edde833a19937db09396826afbefcb747099443 Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Wed, 25 Oct 2023 20:18:13 -0400 Subject: [PATCH 182/413] fixup to #51743, timetype subtraction Restores the method whose removal was probably causing problems. (cherry picked from commit f6f1ee9e00b1b9cc1e7703cd4ce7712f7064fdd4) --- stdlib/Dates/test/arithmetic.jl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/stdlib/Dates/test/arithmetic.jl b/stdlib/Dates/test/arithmetic.jl index d1dad0180f57b..d266526496c45 100644 --- a/stdlib/Dates/test/arithmetic.jl +++ b/stdlib/Dates/test/arithmetic.jl @@ -11,8 +11,13 @@ using Dates @test Dates.CompoundPeriod(a - b) == Dates.Hour(12) end +struct MonthlyDate <: TimeType + instant::Dates.UTInstant{Month} +end @testset "TimeType arithmetic" begin @test_throws MethodError DateTime(2023, 5, 2) - Date(2023, 5, 1) + # check that - between two same-type TimeTypes works by default + @test MonthlyDate(Dates.UTInstant(Month(10))) - MonthlyDate(Dates.UTInstant(Month(1))) == Month(9) end @testset "Wrapping arithmetic for Months" begin From 4770eeabc36e10e8196d7f0aa79cc8f30d9dbad8 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 31 Oct 2023 12:19:12 +0100 Subject: [PATCH 183/413] remove chmodding the pkgimages (#51885) This shouldn't be needed because `ldd` should do it itself. (cherry picked from commit 5b34cdfa705df21997a8b97f6642c18de3a6d0e1) --- base/loading.jl | 6 ------ 1 file changed, 6 deletions(-) diff --git a/base/loading.jl b/base/loading.jl index 78849ab6cdd3f..d748283c7c9d8 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -2398,12 +2398,6 @@ function compilecache(pkg::PkgId, path::String, internal_stderr::IO = stderr, in # inherit permission from the source file (and make them writable) chmod(tmppath, filemode(path) & 0o777 | 0o200) - if cache_objects - # Ensure that the user can execute the `.so` we're generating - # Note that on windows, `filemode(path)` typically returns `0o666`, so this - # addition of the execute bit for the user is doubly needed. - chmod(tmppath_so, filemode(path) & 0o777 | 0o331) - end # prune the directory with cache files if pkg.uuid !== nothing From 81d8c12adfe5d687a3e25599996aa6a244b2c3da Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Tue, 31 Oct 2023 18:49:17 -0400 Subject: [PATCH 184/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20Pkg=20stdlib=20from=209261a54d3=20to=20e63c601b?= =?UTF-8?q?d=20(#51964)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/md5 | 1 - .../Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/sha512 | 1 - .../Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/md5 | 1 + .../Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/sha512 | 1 + stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/sha512 create mode 100644 deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/md5 create mode 100644 deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/sha512 diff --git a/deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/md5 b/deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/md5 deleted file mode 100644 index 82bb339b85d7b..0000000000000 --- a/deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -c5e39338f3fa7bb37694a36b179f388a diff --git a/deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/sha512 b/deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/sha512 deleted file mode 100644 index 5b44edb1a6f7b..0000000000000 --- a/deps/checksums/Pkg-9261a54d360bd9f7e49ce60faa7318c2057348b1.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -78640eed1615523d1e289f6a79eb3e0f4152aa40cb9878663888b4a00a50647908472ed70abd657896491a92526de2fe38759bc87caab9e53856056dfe4b8510 diff --git a/deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/md5 b/deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/md5 new file mode 100644 index 0000000000000..bddd4fc615336 --- /dev/null +++ b/deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/md5 @@ -0,0 +1 @@ +a68258944ba3c7b8a31864ad5dc6e320 diff --git a/deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/sha512 b/deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/sha512 new file mode 100644 index 0000000000000..0f89a4347a7d6 --- /dev/null +++ b/deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/sha512 @@ -0,0 +1 @@ +e7ea74323f873e6ff0b92b19d368a16df768f21474222ef38918d36d827c92a5597e7fa243e9ef985b02f3bcf65d41904cfeeae9aca64612fdfbb9483c3cbd12 diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 46843b84bda97..7c2d80c35fe19 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = 9261a54d360bd9f7e49ce60faa7318c2057348b1 +PKG_SHA1 = e63c601bd3a00a8e6062d926673337c8a659542d PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 5aaa94854367ca875375e38ae14f369f124e7315 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Fri, 3 Nov 2023 08:44:08 +0100 Subject: [PATCH 185/413] release-1.10: Update VERSION to 1.10-rc1 (#51997) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index d15a9aa3a227f..70cd4f3fd92ce 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.0-beta3 +1.10.0-rc1 From ba2a8a35ec9a4bd53a7c48b8aac1a05b184c3b12 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Thu, 5 Oct 2023 17:14:12 +0200 Subject: [PATCH 186/413] Use a simple error when reporting sysimg load failures. (#51598) `jl_errorexception_type` is undefined at the point we (fail to) load a sysimg. (cherry picked from commit 20a5fa751aa613b3244c9158581bcc85f049dc5c) --- src/processor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/processor.cpp b/src/processor.cpp index d2d91d3cd9966..587ff300c8d7e 100644 --- a/src/processor.cpp +++ b/src/processor.cpp @@ -634,7 +634,7 @@ static inline jl_image_t parse_sysimg(void *hdl, F &&callback) JL_GC_PUSH1(&rejection_reason); uint32_t target_idx = callback(ids, &rejection_reason); if (target_idx == (uint32_t)-1) { - jl_throw(jl_new_struct(jl_errorexception_type, rejection_reason)); + jl_error(jl_string_ptr(rejection_reason)); } JL_GC_POP(); From 1aa50550224454d854d174170a6b87671cde54e9 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Fri, 20 Oct 2023 07:26:06 +0200 Subject: [PATCH 187/413] fix parallel peakflop usage (#51757) This is required now once Distributed is not in the sysimage. Fixes https://github.com/JuliaLang/julia/issues/51756 (cherry picked from commit 795d8d7a033cb711f5914b0da7587ab55edb0f39) --- stdlib/LinearAlgebra/src/LinearAlgebra.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/stdlib/LinearAlgebra/src/LinearAlgebra.jl b/stdlib/LinearAlgebra/src/LinearAlgebra.jl index 85ba1d2770ba7..494572b1e8dd8 100644 --- a/stdlib/LinearAlgebra/src/LinearAlgebra.jl +++ b/stdlib/LinearAlgebra/src/LinearAlgebra.jl @@ -619,7 +619,9 @@ function peakflops(n::Integer=4096; eltype::DataType=Float64, ntrials::Integer=3 if parallel let Distributed = Base.require(Base.PkgId( Base.UUID((0x8ba89e20_285c_5b6f, 0x9357_94700520ee1b)), "Distributed")) - return sum(Distributed.pmap(peakflops, fill(n, Distributed.nworkers()))) + nworkers = @invokelatest Distributed.nworkers() + results = @invokelatest Distributed.pmap(peakflops, fill(n, nworkers)) + return sum(results) end else return 2*Float64(n)^3 / minimum(t) From feb75f830f23f98faa91d1634f3e70d2ce36d861 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 25 Oct 2023 10:16:47 -0500 Subject: [PATCH 188/413] allow finalizers to take any locks and yield during exit (#51848) This aligns their behavior with manual calls to `finalize(o)`, and prepares for a future time in which these functions are always run on a separate thread. This means that they can wait to acquire locks in this context, which otherwise would have been denied to them. (cherry picked from commit c54a3f2b83bfca5f79a1b482abaa9b8e7f0da9ce) --- src/gc.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gc.c b/src/gc.c index a112d73de625a..6b86f4cab81a8 100644 --- a/src/gc.c +++ b/src/gc.c @@ -420,7 +420,7 @@ JL_DLLEXPORT void jl_gc_init_finalizer_rng_state(void) jl_rng_split(finalizer_rngState, jl_current_task->rngState); } -static void run_finalizers(jl_task_t *ct) +static void run_finalizers(jl_task_t *ct, int finalizers_thread) { // Racy fast path: // The race here should be OK since the race can only happen if @@ -448,7 +448,7 @@ static void run_finalizers(jl_task_t *ct) // This releases the finalizers lock. int8_t was_in_finalizer = ct->ptls->in_finalizer; - ct->ptls->in_finalizer = 1; + ct->ptls->in_finalizer = !finalizers_thread; jl_gc_run_finalizers_in_list(ct, &copied_list); ct->ptls->in_finalizer = was_in_finalizer; arraylist_free(&copied_list); @@ -462,7 +462,7 @@ JL_DLLEXPORT void jl_gc_run_pending_finalizers(jl_task_t *ct) ct = jl_current_task; jl_ptls_t ptls = ct->ptls; if (!ptls->in_finalizer && ptls->locks.len == 0 && ptls->finalizers_inhibited == 0) { - run_finalizers(ct); + run_finalizers(ct, 0); } } @@ -555,7 +555,7 @@ void jl_gc_run_all_finalizers(jl_task_t *ct) JL_UNLOCK_NOGC(&finalizers_lock); gc_n_threads = 0; gc_all_tls_states = NULL; - run_finalizers(ct); + run_finalizers(ct, 1); } void jl_gc_add_finalizer_(jl_ptls_t ptls, void *v, void *f) JL_NOTSAFEPOINT @@ -3466,7 +3466,7 @@ JL_DLLEXPORT void jl_gc_collect(jl_gc_collection_t collection) // or wait for finalizers on other threads without dead lock). if (!ptls->finalizers_inhibited && ptls->locks.len == 0) { JL_TIMING(GC, GC_Finalizers); - run_finalizers(ct); + run_finalizers(ct, 0); } JL_PROBE_GC_FINALIZER(); From db5574228aaf6649b5774edba52cf799b0360d80 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 25 Oct 2023 12:34:51 -0500 Subject: [PATCH 189/413] add missing wait during Timer and AsyncCondition close (#51847) Can cause spurious warnings about not closing these properly and unexpected events to appear after `close` returns. (cherry picked from commit d0c42840f6ff509421a3f0d28ebe5bd80c625cc3) --- base/asyncevent.jl | 39 ++++++++++++++++++++++++++++++++------- test/channels.jl | 6 +++--- 2 files changed, 35 insertions(+), 10 deletions(-) diff --git a/base/asyncevent.jl b/base/asyncevent.jl index a26945bbb1105..11551df5d0e52 100644 --- a/base/asyncevent.jl +++ b/base/asyncevent.jl @@ -118,14 +118,18 @@ end unsafe_convert(::Type{Ptr{Cvoid}}, t::Timer) = t.handle unsafe_convert(::Type{Ptr{Cvoid}}, async::AsyncCondition) = async.handle +# if this returns true, the object has been signaled +# if this returns false, the object is closed function _trywait(t::Union{Timer, AsyncCondition}) set = t.set if set # full barrier now for AsyncCondition t isa Timer || Core.Intrinsics.atomic_fence(:acquire_release) else - t.isopen || return false - t.handle == C_NULL && return false + if !isopen(t) + close(t) # wait for the close to complete + return false + end iolock_begin() set = t.set if !set @@ -133,7 +137,7 @@ function _trywait(t::Union{Timer, AsyncCondition}) lock(t.cond) try set = t.set - if !set && t.isopen && t.handle != C_NULL + if !set && t.handle != C_NULL # wait for set or handle, but not the isopen flag iolock_end() set = wait(t.cond) unlock(t.cond) @@ -160,10 +164,28 @@ end isopen(t::Union{Timer, AsyncCondition}) = t.isopen && t.handle != C_NULL function close(t::Union{Timer, AsyncCondition}) + t.handle == C_NULL && return # short-circuit path iolock_begin() - if isopen(t) - @atomic :monotonic t.isopen = false - ccall(:jl_close_uv, Cvoid, (Ptr{Cvoid},), t) + if t.handle != C_NULL + if t.isopen + @atomic :monotonic t.isopen = false + ccall(:jl_close_uv, Cvoid, (Ptr{Cvoid},), t) + end + # implement _trywait here without the auto-reset function, just waiting for the final close signal + preserve_handle(t) + lock(t.cond) + try + while t.handle != C_NULL + iolock_end() + wait(t.cond) + unlock(t.cond) + iolock_begin() + lock(t.cond) + end + finally + unlock(t.cond) + unpreserve_handle(t) + end end iolock_end() nothing @@ -220,7 +242,10 @@ function uv_timercb(handle::Ptr{Cvoid}) @atomic :monotonic t.set = true if ccall(:uv_timer_get_repeat, UInt64, (Ptr{Cvoid},), t) == 0 # timer is stopped now - close(t) + if t.isopen + @atomic :monotonic t.isopen = false + ccall(:jl_close_uv, Cvoid, (Ptr{Cvoid},), t) + end end notify(t.cond, true) finally diff --git a/test/channels.jl b/test/channels.jl index 36fec7b842de1..82689e8d08d28 100644 --- a/test/channels.jl +++ b/test/channels.jl @@ -457,8 +457,8 @@ end Sys.iswindows() && Base.process_events() # schedule event (windows?) close(async) # and close @test !isopen(async) - @test tc[] == 2 - @test tc[] == 2 + @test tc[] == 3 + @test tc[] == 3 yield() # consume event & then close @test tc[] == 3 sleep(0.1) # no further events @@ -479,7 +479,7 @@ end close(async) @test !isopen(async) Base.process_events() # and close - @test tc[] == 0 + @test tc[] == 1 yield() # consume event & then close @test tc[] == 1 sleep(0.1) # no further events From 35264b7f23e0f04c40026cda055787d23b9946c9 Mon Sep 17 00:00:00 2001 From: Guillaume Dalle <22795598+gdalle@users.noreply.github.com> Date: Fri, 27 Oct 2023 16:34:09 +0200 Subject: [PATCH 190/413] Add aliasing warnings to docstrings for mutating functions in Base (#50824) (cherry picked from commit 58030da3bc4e6790d7bafe66d5f37b382dd6df3c) --- base/Base.jl | 6 ++++++ base/abstractarray.jl | 6 ++++++ base/abstractset.jl | 8 ++++++++ base/accumulate.jl | 8 ++++++++ base/array.jl | 6 ++++++ base/asyncmap.jl | 2 ++ base/combinatorics.jl | 4 ++++ base/multidimensional.jl | 5 +++-- base/reducedim.jl | 22 ++++++++++++++++++++-- base/sort.jl | 4 ++++ doc/src/manual/functions.md | 3 +++ 11 files changed, 70 insertions(+), 4 deletions(-) diff --git a/base/Base.jl b/base/Base.jl index 0ec70add2a2c4..6ed423a799e4e 100644 --- a/base/Base.jl +++ b/base/Base.jl @@ -115,6 +115,12 @@ time_ns() = ccall(:jl_hrtime, UInt64, ()) start_base_include = time_ns() +# A warning to be interpolated in the docstring of every dangerous mutating function in Base, see PR #50824 +const _DOCS_ALIASING_WARNING = """ +!!! warning + Behavior can be unexpected when any mutated argument shares memory with any other argument. +""" + ## Load essential files and libraries include("essentials.jl") include("ctypes.jl") diff --git a/base/abstractarray.jl b/base/abstractarray.jl index 6f9823a5be5d7..c9a544425d8d0 100644 --- a/base/abstractarray.jl +++ b/base/abstractarray.jl @@ -905,6 +905,8 @@ If `dst` and `src` are of the same type, `dst == src` should hold after the call. If `dst` and `src` are multidimensional arrays, they must have equal [`axes`](@ref). +$(_DOCS_ALIASING_WARNING) + See also [`copyto!`](@ref). !!! compat "Julia 1.1" @@ -1369,6 +1371,8 @@ _unsafe_ind2sub(sz, i) = (@inline; _ind2sub(sz, i)) Store values from array `X` within some subset of `A` as specified by `inds`. The syntax `A[inds...] = X` is equivalent to `(setindex!(A, X, inds...); X)`. +$(_DOCS_ALIASING_WARNING) + # Examples ```jldoctest julia> A = zeros(2,2); @@ -3339,6 +3343,8 @@ end Like [`map`](@ref), but stores the result in `destination` rather than a new collection. `destination` must be at least as large as the smallest collection. +$(_DOCS_ALIASING_WARNING) + See also: [`map`](@ref), [`foreach`](@ref), [`zip`](@ref), [`copyto!`](@ref). # Examples diff --git a/base/abstractset.jl b/base/abstractset.jl index 5d0d65dad2de6..a6b123ceab007 100644 --- a/base/abstractset.jl +++ b/base/abstractset.jl @@ -65,6 +65,8 @@ const ∪ = union Construct the [`union`](@ref) of passed in sets and overwrite `s` with the result. Maintain order with arrays. +$(_DOCS_ALIASING_WARNING) + # Examples ```jldoctest julia> a = Set([3, 4, 5]); @@ -182,6 +184,8 @@ const ∩ = intersect Intersect all passed in sets and overwrite `s` with the result. Maintain order with arrays. + +$(_DOCS_ALIASING_WARNING) """ function intersect!(s::AbstractSet, itrs...) for x in itrs @@ -218,6 +222,8 @@ setdiff(s) = union(s) Remove from set `s` (in-place) each element of each iterable from `itrs`. Maintain order with arrays. +$(_DOCS_ALIASING_WARNING) + # Examples ```jldoctest julia> a = Set([1, 3, 4, 5]); @@ -272,6 +278,8 @@ symdiff(s) = symdiff!(copy(s)) Construct the symmetric difference of the passed in sets, and overwrite `s` with the result. When `s` is an array, the order is maintained. Note that in this case the multiplicity of elements matters. + +$(_DOCS_ALIASING_WARNING) """ function symdiff!(s::AbstractSet, itrs...) for x in itrs diff --git a/base/accumulate.jl b/base/accumulate.jl index eeb9759e125c7..a2d8a1d368d86 100644 --- a/base/accumulate.jl +++ b/base/accumulate.jl @@ -42,6 +42,8 @@ end cumsum!(B, A; dims::Integer) Cumulative sum of `A` along the dimension `dims`, storing the result in `B`. See also [`cumsum`](@ref). + +$(_DOCS_ALIASING_WARNING) """ cumsum!(B::AbstractArray{T}, A; dims::Integer) where {T} = accumulate!(add_sum, B, A, dims=dims) @@ -150,6 +152,8 @@ cumsum(itr) = accumulate(add_sum, itr) Cumulative product of `A` along the dimension `dims`, storing the result in `B`. See also [`cumprod`](@ref). + +$(_DOCS_ALIASING_WARNING) """ cumprod!(B::AbstractArray{T}, A; dims::Integer) where {T} = accumulate!(mul_prod, B, A, dims=dims) @@ -159,6 +163,8 @@ cumprod!(B::AbstractArray{T}, A; dims::Integer) where {T} = Cumulative product of a vector `x`, storing the result in `y`. See also [`cumprod`](@ref). + +$(_DOCS_ALIASING_WARNING) """ cumprod!(y::AbstractVector, x::AbstractVector) = cumprod!(y, x, dims=1) @@ -301,6 +307,8 @@ Cumulative operation `op` on `A` along the dimension `dims`, storing the result Providing `dims` is optional for vectors. If the keyword argument `init` is given, its value is used to instantiate the accumulation. +$(_DOCS_ALIASING_WARNING) + See also [`accumulate`](@ref), [`cumsum!`](@ref), [`cumprod!`](@ref). # Examples diff --git a/base/array.jl b/base/array.jl index 7fb3d0501bb7b..535aad691c78d 100644 --- a/base/array.jl +++ b/base/array.jl @@ -322,6 +322,8 @@ source and `do` in the destination (1-indexed). The `unsafe` prefix on this function indicates that no validation is performed to ensure that N is inbounds on either array. Incorrect usage may corrupt or segfault your program, in the same manner as C. + +$(_DOCS_ALIASING_WARNING) """ function unsafe_copyto!(dest::Array{T}, doffs, src::Array{T}, soffs, n) where T t1 = @_gc_preserve_begin dest @@ -1781,6 +1783,8 @@ place of the removed items; in this case, `indices` must be a `AbstractUnitRange To insert `replacement` before an index `n` without removing any items, use `splice!(collection, n:n-1, replacement)`. +$(_DOCS_ALIASING_WARNING) + !!! compat "Julia 1.5" Prior to Julia 1.5, `indices` must always be a `UnitRange`. @@ -2760,6 +2764,8 @@ Remove the items at all the indices which are not given by `inds`, and return the modified `a`. Items which are kept are shifted to fill the resulting gaps. +$(_DOCS_ALIASING_WARNING) + `inds` must be an iterator of sorted and unique integer indices. See also [`deleteat!`](@ref). diff --git a/base/asyncmap.jl b/base/asyncmap.jl index be16ba1b27610..c81afbb7e9115 100644 --- a/base/asyncmap.jl +++ b/base/asyncmap.jl @@ -394,6 +394,8 @@ length(itr::AsyncGenerator) = length(itr.collector.enumerator) Like [`asyncmap`](@ref), but stores output in `results` rather than returning a collection. + +$(_DOCS_ALIASING_WARNING) """ function asyncmap!(f, r, c1, c...; ntasks=0, batch_size=nothing) foreach(identity, AsyncCollector(f, r, c1, c...; ntasks=ntasks, batch_size=batch_size)) diff --git a/base/combinatorics.jl b/base/combinatorics.jl index d09a5b6c0ce83..4a46e95113840 100644 --- a/base/combinatorics.jl +++ b/base/combinatorics.jl @@ -169,6 +169,8 @@ it is even faster to write into a pre-allocated output array with `u .= @view v[ (Even though `permute!` overwrites `v` in-place, it internally requires some allocation to keep track of which elements have been moved.) +$(_DOCS_ALIASING_WARNING) + See also [`invpermute!`](@ref). # Examples @@ -222,6 +224,8 @@ Note that if you have a pre-allocated output array (e.g. `u = similar(v)`), it is quicker to instead employ `u[p] = v`. (`invpermute!` internally allocates a copy of the data.) +$(_DOCS_ALIASING_WARNING) + # Examples ```jldoctest julia> A = [1, 1, 3, 4]; diff --git a/base/multidimensional.jl b/base/multidimensional.jl index 2b4bf54d88826..02f2075919fbd 100644 --- a/base/multidimensional.jl +++ b/base/multidimensional.jl @@ -1179,8 +1179,7 @@ circshift!(dest::AbstractArray, src, ::Tuple{}) = copyto!(dest, src) Circularly shift, i.e. rotate, the data in `src`, storing the result in `dest`. `shifts` specifies the amount to shift in each dimension. -The `dest` array must be distinct from the `src` array (they cannot -alias each other). +$(_DOCS_ALIASING_WARNING) See also [`circshift`](@ref). """ @@ -1238,6 +1237,8 @@ their indices; any offset results in a (circular) wraparound. If the arrays have overlapping indices, then on the domain of the overlap `dest` agrees with `src`. +$(_DOCS_ALIASING_WARNING) + See also: [`circshift`](@ref). # Examples diff --git a/base/reducedim.jl b/base/reducedim.jl index c1c58ccdfefed..f5a22940310cf 100644 --- a/base/reducedim.jl +++ b/base/reducedim.jl @@ -448,6 +448,8 @@ _count(f, A::AbstractArrayOrBroadcasted, dims, init) = mapreduce(_bool(f), add_s Count the number of elements in `A` for which `f` returns `true` over the singleton dimensions of `r`, writing the result into `r` in-place. +$(_DOCS_ALIASING_WARNING) + !!! compat "Julia 1.5" inplace `count!` was added in Julia 1.5. @@ -525,8 +527,8 @@ sum(f, A::AbstractArray; dims) sum!(r, A) Sum elements of `A` over the singleton dimensions of `r`, and write results to `r`. -Note that since the sum! function is intended to operate without making any allocations, -the target should not alias with the source. + +$(_DOCS_ALIASING_WARNING) # Examples ```jldoctest @@ -601,6 +603,8 @@ prod(f, A::AbstractArray; dims) Multiply elements of `A` over the singleton dimensions of `r`, and write results to `r`. +$(_DOCS_ALIASING_WARNING) + # Examples ```jldoctest julia> A = [1 2; 3 4] @@ -678,6 +682,8 @@ maximum(f, A::AbstractArray; dims) Compute the maximum value of `A` over the singleton dimensions of `r`, and write results to `r`. +$(_DOCS_ALIASING_WARNING) + # Examples ```jldoctest julia> A = [1 2; 3 4] @@ -755,6 +761,8 @@ minimum(f, A::AbstractArray; dims) Compute the minimum value of `A` over the singleton dimensions of `r`, and write results to `r`. +$(_DOCS_ALIASING_WARNING) + # Examples ```jldoctest julia> A = [1 2; 3 4] @@ -820,6 +828,8 @@ extrema(f, A::AbstractArray; dims) Compute the minimum and maximum value of `A` over the singleton dimensions of `r`, and write results to `r`. +$(_DOCS_ALIASING_WARNING) + !!! compat "Julia 1.8" This method requires Julia 1.8 or later. @@ -895,6 +905,8 @@ all(::Function, ::AbstractArray; dims) Test whether all values in `A` along the singleton dimensions of `r` are `true`, and write results to `r`. +$(_DOCS_ALIASING_WARNING) + # Examples ```jldoctest julia> A = [true false; true false] @@ -968,6 +980,8 @@ any(::Function, ::AbstractArray; dims) Test whether any values in `A` along the singleton dimensions of `r` are `true`, and write results to `r`. +$(_DOCS_ALIASING_WARNING) + # Examples ```jldoctest julia> A = [true false; true false] @@ -1085,6 +1099,8 @@ end Find the minimum of `A` and the corresponding linear index along singleton dimensions of `rval` and `rind`, and store the results in `rval` and `rind`. `NaN` is treated as less than all other values except `missing`. + +$(_DOCS_ALIASING_WARNING) """ function findmin!(rval::AbstractArray, rind::AbstractArray, A::AbstractArray; init::Bool=true) @@ -1156,6 +1172,8 @@ end Find the maximum of `A` and the corresponding linear index along singleton dimensions of `rval` and `rind`, and store the results in `rval` and `rind`. `NaN` is treated as greater than all other values except `missing`. + +$(_DOCS_ALIASING_WARNING) """ function findmax!(rval::AbstractArray, rind::AbstractArray, A::AbstractArray; init::Bool=true) diff --git a/base/sort.jl b/base/sort.jl index abf0b9ed07682..b6a2d664e39f4 100644 --- a/base/sort.jl +++ b/base/sort.jl @@ -1583,6 +1583,8 @@ v[ix[k]] == partialsort(v, k) The return value is the `k`th element of `ix` if `k` is an integer, or view into `ix` if `k` is a range. +$(Base._DOCS_ALIASING_WARNING) + # Examples ```jldoctest julia> v = [3, 1, 2, 1]; @@ -1707,6 +1709,8 @@ end Like [`sortperm`](@ref), but accepts a preallocated index vector or array `ix` with the same `axes` as `A`. `ix` is initialized to contain the values `LinearIndices(A)`. +$(Base._DOCS_ALIASING_WARNING) + !!! compat "Julia 1.9" The method accepting `dims` requires at least Julia 1.9. diff --git a/doc/src/manual/functions.md b/doc/src/manual/functions.md index a724f450dccfa..97f84f35f3eef 100644 --- a/doc/src/manual/functions.md +++ b/doc/src/manual/functions.md @@ -102,6 +102,9 @@ As a common convention in Julia (not a syntactic requirement), such a function w [typically be named `f!(x, y)`](@ref man-punctuation) rather than `f(x, y)`, as a visual reminder at the call site that at least one of the arguments (often the first one) is being mutated. +!!! warning "Shared memory between arguments" + The behavior of a mutating function can be unexpected when a mutated argument shares memory with another argument, a situation known as aliasing (e.g. when one is a view of the other). + Unless the function docstring explicitly indicates that aliasing produces the expected result, it is the responsibility of the caller to ensure proper behavior on such inputs. ## Argument-type declarations From 3a4b1401d359ff9c94641272d68680b1f411202b Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Wed, 1 Nov 2023 13:18:08 -0400 Subject: [PATCH 191/413] further fix to the new promoting method for AbstractDateTime subtraction (#51967) (cherry picked from commit 405ce111a86ea85a97734efed0ea995cfdc7f56c) --- stdlib/Dates/src/arithmetic.jl | 2 +- stdlib/Dates/test/arithmetic.jl | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/stdlib/Dates/src/arithmetic.jl b/stdlib/Dates/src/arithmetic.jl index b379747c5f9e9..83a2873b43409 100644 --- a/stdlib/Dates/src/arithmetic.jl +++ b/stdlib/Dates/src/arithmetic.jl @@ -7,7 +7,7 @@ # TimeType arithmetic (+)(x::TimeType) = x (-)(x::T, y::T) where {T<:TimeType} = x.instant - y.instant -(-)(x::DateTime, y::DateTime) = x.instant - y.instant +(-)(x::T, y::T) where {T<:AbstractDateTime} = x.instant - y.instant (-)(x::AbstractDateTime, y::AbstractDateTime) = -(promote(x, y)...) # Date-Time arithmetic diff --git a/stdlib/Dates/test/arithmetic.jl b/stdlib/Dates/test/arithmetic.jl index d266526496c45..e3ed6ace57c69 100644 --- a/stdlib/Dates/test/arithmetic.jl +++ b/stdlib/Dates/test/arithmetic.jl @@ -14,10 +14,15 @@ end struct MonthlyDate <: TimeType instant::Dates.UTInstant{Month} end +struct OtherTime <: Dates.AbstractDateTime + instant::Dates.UTInstant{Nanosecond} +end @testset "TimeType arithmetic" begin @test_throws MethodError DateTime(2023, 5, 2) - Date(2023, 5, 1) # check that - between two same-type TimeTypes works by default @test MonthlyDate(Dates.UTInstant(Month(10))) - MonthlyDate(Dates.UTInstant(Month(1))) == Month(9) + # ... and between two same-type AbstractDateTimes + @test OtherTime(Dates.UTInstant(Nanosecond(2))) - OtherTime(Dates.UTInstant(Nanosecond(1))) == Nanosecond(1) end @testset "Wrapping arithmetic for Months" begin From 2d6af7ebf494e1ff81b7b117327c6075d0dfe81c Mon Sep 17 00:00:00 2001 From: Paul Berg Date: Thu, 2 Nov 2023 14:53:26 +0100 Subject: [PATCH 192/413] macroexpand: handle const/atomic struct fields correctly (#51980) Fixes #51899 (cherry picked from commit 924aac92b977b7a492c8cba878ff14329a4ad4b0) --- src/macroexpand.scm | 28 +++++++++++++++++----------- test/syntax.jl | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 11 deletions(-) diff --git a/src/macroexpand.scm b/src/macroexpand.scm index e0e809eee08f1..6e390a6c24cf2 100644 --- a/src/macroexpand.scm +++ b/src/macroexpand.scm @@ -340,8 +340,22 @@ (define (reescape ux x) (if (and (pair? x) (eq? (car x) 'escape)) - (reescape '(escape ,ux) (cadr x))) - ux) + (reescape `(escape ,ux) (cadr x)) + ux)) + +;; type has special behavior: identifiers inside are +;; field names, not expressions. +(define (resolve-struct-field-expansion x env m parent-scope inarg) + (let ((ux (unescape x))) + (cond + ((atom? ux) ux) + ((and (pair? ux) (eq? (car ux) '|::|)) + `(|::| ,(unescape (cadr ux)) + ,(resolve-expansion-vars- (reescape (caddr ux) x) env m parent-scope inarg))) + ((and (pair? ux) (memq (car ux) '(const atomic))) + `(,(car ux) ,(resolve-struct-field-expansion (reescape (cadr ux) x) env m parent-scope inarg))) + (else + (resolve-expansion-vars-with-new-env x env m parent-scope inarg))))) (define (resolve-expansion-vars- e env m parent-scope inarg) (cond ((or (eq? e 'begin) (eq? e 'end) (eq? e 'ccall) (eq? e 'cglobal) (underscore-symbol? e)) @@ -377,16 +391,8 @@ ((symbolicgoto) e) ((struct) `(struct ,(cadr e) ,(resolve-expansion-vars- (caddr e) env m parent-scope inarg) - ;; type has special behavior: identifiers inside are - ;; field names, not expressions. ,(map (lambda (x) - (let ((ux (unescape x))) - (cond ((atom? ux) ux) - ((and (pair? ux) (eq? (car ux) '|::|)) - `(|::| ,(unescape (cadr ux)) - ,(resolve-expansion-vars- (reescape (caddr ux) x) env m parent-scope inarg))) - (else - (resolve-expansion-vars-with-new-env x env m parent-scope inarg))))) + (resolve-struct-field-expansion x env m parent-scope inarg)) (cadddr e)))) ((parameters) diff --git a/test/syntax.jl b/test/syntax.jl index c69843785136e..3516c306c42d4 100644 --- a/test/syntax.jl +++ b/test/syntax.jl @@ -1783,6 +1783,43 @@ end @test B28593.var.name === :S @test C28593.var.name === :S +# issue #51899 +macro struct_macro_51899() + quote + mutable struct Struct51899 + const const_field + const const_field_with_type::Int + $(esc(Expr(:const, :(escaped_const_field::MyType)))) + @atomic atomic_field + @atomic atomic_field_with_type::Int + end + end +end + +let ex = @macroexpand @struct_macro_51899() + const_field, const_field_with_type, escaped_const_field, + atomic_field, atomic_field_with_type = filter(x -> isa(x, Expr), ex.args[end].args[end].args) + @test Meta.isexpr(const_field, :const) + @test const_field.args[1] === :const_field + + @test Meta.isexpr(const_field_with_type, :const) + @test Meta.isexpr(const_field_with_type.args[1], :(::)) + @test const_field_with_type.args[1].args[1] === :const_field_with_type + @test const_field_with_type.args[1].args[2] == GlobalRef(@__MODULE__, :Int) + + @test Meta.isexpr(escaped_const_field, :const) + @test Meta.isexpr(const_field_with_type.args[1], :(::)) + @test escaped_const_field.args[1].args[1] === :escaped_const_field + @test escaped_const_field.args[1].args[2] === :MyType + + @test Meta.isexpr(atomic_field, :atomic) + @test atomic_field.args[1] === :atomic_field + + @test Meta.isexpr(atomic_field_with_type, :atomic) + @test atomic_field_with_type.args[1].args[1] === :atomic_field_with_type + @test atomic_field_with_type.args[1].args[2] == GlobalRef(@__MODULE__, :Int) +end + # issue #25955 macro noeffect25955(e) return e From 3b6e9dd1cf95e10964ca09dd91cd41a0a96fb98d Mon Sep 17 00:00:00 2001 From: Ashutosh Bharambe <43771652+ashutosh-b-b@users.noreply.github.com> Date: Thu, 2 Nov 2023 20:07:01 +0000 Subject: [PATCH 193/413] [Artifacts] Pass artifacts dictionary to `ensure_artifact_installed` dispatch (#51995) The artifacts dict is not lowered to ensure_artifact_installed which causes to load the ".toml" during runtime for lazy artifacts (cherry picked from commit 9bc6994fd6e61d98c12733f673aaa1a296465eb6) --- stdlib/Artifacts/src/Artifacts.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/Artifacts/src/Artifacts.jl b/stdlib/Artifacts/src/Artifacts.jl index 70593bfadae05..5daf994bfbf10 100644 --- a/stdlib/Artifacts/src/Artifacts.jl +++ b/stdlib/Artifacts/src/Artifacts.jl @@ -548,7 +548,7 @@ function _artifact_str(__module__, artifacts_toml, name, path_tail, artifact_dic if nameof(lazyartifacts) in (:Pkg, :Artifacts) Base.depwarn("using Pkg instead of using LazyArtifacts is deprecated", :var"@artifact_str", force=true) end - return jointail(lazyartifacts.ensure_artifact_installed(string(name), artifacts_toml; platform), path_tail) + return jointail(lazyartifacts.ensure_artifact_installed(string(name), meta, artifacts_toml; platform), path_tail) end error("Artifact $(repr(name)) is a lazy artifact; package developers must call `using LazyArtifacts` in $(__module__) before using lazy artifacts.") end From 6f864a76665d1d7884a537c447a9100e330d6d85 Mon Sep 17 00:00:00 2001 From: Milan Bouchet-Valat Date: Thu, 9 Nov 2023 11:13:18 +0100 Subject: [PATCH 194/413] Bump Statistics (#52030) This bumps Statistics to the latest commit of the release-1.10 branch in order to backport JuliaStats/Statistics.jl#153. See https://github.com/JuliaData/DataFrames.jl/issues/3383. Cc: @bkamins @George9000 --- .../md5 | 1 - .../sha512 | 1 - .../md5 | 1 + .../sha512 | 1 + stdlib/Statistics.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/md5 delete mode 100644 deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/sha512 create mode 100644 deps/checksums/Statistics-d147f9253aa0f2f71be9c3fed8d51c2215410408.tar.gz/md5 create mode 100644 deps/checksums/Statistics-d147f9253aa0f2f71be9c3fed8d51c2215410408.tar.gz/sha512 diff --git a/deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/md5 b/deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/md5 deleted file mode 100644 index 42034e9a42a7b..0000000000000 --- a/deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -735ae885122f81261ecf152853ce0b42 diff --git a/deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/sha512 b/deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/sha512 deleted file mode 100644 index dbec046cef091..0000000000000 --- a/deps/checksums/Statistics-08562cb8abbe67829e437aa8533994121c350c05.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -42dd950bd59fa91540806f9c1b26c391373ef4508106e59f875ca256805951784fe4469b834978a6d20ab340eb979da97b0f4b32c8f53626b03d7b3f84e4cb5a diff --git a/deps/checksums/Statistics-d147f9253aa0f2f71be9c3fed8d51c2215410408.tar.gz/md5 b/deps/checksums/Statistics-d147f9253aa0f2f71be9c3fed8d51c2215410408.tar.gz/md5 new file mode 100644 index 0000000000000..406ed9e1d1af7 --- /dev/null +++ b/deps/checksums/Statistics-d147f9253aa0f2f71be9c3fed8d51c2215410408.tar.gz/md5 @@ -0,0 +1 @@ +30cb9242a167ec2ed652d2923d1f7d23 diff --git a/deps/checksums/Statistics-d147f9253aa0f2f71be9c3fed8d51c2215410408.tar.gz/sha512 b/deps/checksums/Statistics-d147f9253aa0f2f71be9c3fed8d51c2215410408.tar.gz/sha512 new file mode 100644 index 0000000000000..16b0e72537968 --- /dev/null +++ b/deps/checksums/Statistics-d147f9253aa0f2f71be9c3fed8d51c2215410408.tar.gz/sha512 @@ -0,0 +1 @@ +c325f09ed306bef6d4fe186aa4ce9300f1e400752f776b23220d828468f8bae16a9058683d04176bd32a47fdc32aa71cb6a479a1bfa3102944838658581c94d7 diff --git a/stdlib/Statistics.version b/stdlib/Statistics.version index 05d7839223924..336d7c731bd47 100644 --- a/stdlib/Statistics.version +++ b/stdlib/Statistics.version @@ -1,4 +1,4 @@ STATISTICS_BRANCH = master -STATISTICS_SHA1 = 08562cb8abbe67829e437aa8533994121c350c05 +STATISTICS_SHA1 = d147f9253aa0f2f71be9c3fed8d51c2215410408 STATISTICS_GIT_URL := https://github.com/JuliaStats/Statistics.jl.git STATISTICS_TAR_URL = https://api.github.com/repos/JuliaStats/Statistics.jl/tarball/$1 From 405e1a4124cdc984724e6dc741744e950c3bc2a4 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Wed, 6 Sep 2023 07:35:01 -0300 Subject: [PATCH 195/413] Wait for other threads to finish compiling before exiting (#51213) This avoids a crashes where we run the destructors because C++ is fun and runs destructors before thread exit. (cherry picked from commit 3d88550124d30ac88fd68a851df2a67216a5854b) --- src/codegen.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/codegen.cpp b/src/codegen.cpp index d28971b9a4caf..ea00c9488e303 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -9294,6 +9294,8 @@ extern "C" JL_DLLEXPORT_CODEGEN void jl_teardown_codegen_impl() JL_NOTSAFEPOINT if (jl_ExecutionEngine) jl_ExecutionEngine->printTimers(); PrintStatistics(); + JL_LOCK(&jl_codegen_lock); // TODO: If this lock gets removed reconsider + // LLVM global state/destructors (maybe a rwlock) } // the rest of this file are convenience functions From f5adeced00b9577a9584250f76b3256b5741e2c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mos=C3=A8=20Giordano?= Date: Wed, 1 Nov 2023 14:28:55 +0000 Subject: [PATCH 196/413] [devdocs] Improve documentation about building external forks of LLVM (#50207) Suggested by @vchuravy. --------- Co-authored-by: Jameson Nash (cherry picked from commit 2adf54a951d70d6963af7f22950ca28c032000af) --- Make.inc | 4 +++ doc/src/devdocs/build/build.md | 52 ++++++++++++++++++++++++++++++++-- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/Make.inc b/Make.inc index 1163f66c2fdbd..729870fbad860 100644 --- a/Make.inc +++ b/Make.inc @@ -359,6 +359,10 @@ USE_MLIR := 0 # Options to use RegionVectorizer USE_RV := 0 +# Use `ccache` for speeding up recompilation of the C/C++ part of Julia. +# Requires the `ccache` executable to be in the `PATH` environment variable. +USECCACHE := 0 + # Cross-compile #XC_HOST := i686-w64-mingw32 #XC_HOST := x86_64-w64-mingw32 diff --git a/doc/src/devdocs/build/build.md b/doc/src/devdocs/build/build.md index ad3871c2e70f0..c915c669f2c5e 100644 --- a/doc/src/devdocs/build/build.md +++ b/doc/src/devdocs/build/build.md @@ -60,6 +60,16 @@ To run julia from anywhere you can: - write `prefix=/path/to/install/folder` into `Make.user` and then run `make install`. If there is a version of Julia already installed in this folder, you should delete it before running `make install`. +Some of the options you can set to control the build of Julia are listed and documented at the beginning of the file `Make.inc`, but you should never edit it for this purpose, use `Make.user` instead. + +Julia's Makefiles define convenient automatic rules called `print-` for printing the value of variables, replacing `` with the name of the variable to print the value of. +For example +```console +$ make print-JULIA_PRECOMPILE +JULIA_PRECOMPILE=1 +``` +These rules are useful for debugging purposes. + Now you should be able to run Julia like this: julia @@ -239,10 +249,48 @@ For packaging Julia with LLVM, we recommend either: - bundling a Julia-only LLVM library inside the Julia package, or - adding the patches to the LLVM package of the distribution. * A complete list of patches is available in on [Github](https://github.com/JuliaLang/llvm-project) see the `julia-release/15.x` branch. - * The only Julia-specific patch is the lib renaming (`llvm-symver-jlprefix.patch`), which should _not_ be applied to a system LLVM. + * The only Julia-specific patch is the lib renaming (`llvm7-symver-jlprefix.patch`), which should _not_ be applied to a system LLVM. * The remaining patches are all upstream bug fixes, and have been contributed into upstream LLVM. -Using an unpatched or different version of LLVM will result in errors and/or poor performance. Though Julia can be built with newer LLVM versions, support for this should be regarded as experimental and not suitable for packaging. +Using an unpatched or different version of LLVM will result in errors and/or poor performance. +You can build a different version of LLVM from a remote Git repository with the following options in the `Make.user` file: + +```make +# Force source build of LLVM +USE_BINARYBUILDER_LLVM = 0 +# Use Git for fetching LLVM source code +# this is either `1` to get all of them +DEPS_GIT = 1 +# or a space-separated list of specific dependencies to download with git +DEPS_GIT = llvm + +# Other useful options: +#URL of the Git repository you want to obtain LLVM from: +# LLVM_GIT_URL = ... +#Name of the alternate branch to clone from git +# LLVM_BRANCH = julia-16.0.6-0 +#SHA hash of the alterate commit to check out automatically +# LLVM_SHA1 = $(LLVM_BRANCH) +#List of LLVM targets to build. It is strongly recommended to keep at least all the +#default targets listed in `deps/llvm.mk`, even if you don't necessarily need all of them. +# LLVM_TARGETS = ... +#Use ccache for faster recompilation in case you need to restart a build. +# USECCACHE = 1 +# CMAKE_GENERATOR=Ninja +# LLVM_ASSERTIONS=1 +# LLVM_DEBUG=Symbols +``` + +The various build phases are controlled by specific files: + * `deps/llvm.version` : touch or change to checkout a new version, `make get-llvm check-llvm` + * `deps/srccache/llvm/source-extracted` : result of `make extract-llvm` + * `deps/llvm/build_Release*/build-configured` : result of `make configure-llvm` + * `deps/llvm/build_Release*/build-configured` : result of `make compile-llvm` + * `usr-staging/llvm/build_Release*.tgz` : result of `make stage-llvm` (regenerate with `make reinstall-llvm`) + * `usr/manifest/llvm` : result of `make install-llvm` (regenerate with `make uninstall-llvm`) + * `make version-check-llvm` : runs every time to warn the user if there are local modifications + +Though Julia can be built with newer LLVM versions, support for this should be regarded as experimental and not suitable for packaging. ### libuv From 3ffa3db3b723c81696e76d668e567f30a65aefc3 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 8 Nov 2023 20:44:29 -0500 Subject: [PATCH 197/413] fix sorting for iterables that define copymutable (#52086) (cherry picked from commit f99e6bfe19b7b8d73975f5f96e54052e9725f1c8) --- base/sort.jl | 4 ++-- test/sorting.jl | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/base/sort.jl b/base/sort.jl index b6a2d664e39f4..253faa162d8f9 100644 --- a/base/sort.jl +++ b/base/sort.jl @@ -1496,7 +1496,7 @@ function sort(v; kws...) size = IteratorSize(v) size == HasShape{0}() && throw(ArgumentError("$v cannot be sorted")) size == IsInfinite() && throw(ArgumentError("infinite iterator $v cannot be sorted")) - sort!(copymutable(v); kws...) + sort!(collect(v); kws...) end sort(v::AbstractVector; kws...) = sort!(copymutable(v); kws...) # for method disambiguation sort(::AbstractString; kws...) = @@ -1508,7 +1508,7 @@ function sort(x::NTuple{N}; lt::Function=isless, by::Function=identity, rev::Union{Bool,Nothing}=nothing, order::Ordering=Forward) where N o = ord(lt,by,rev,order) if N > 9 - v = sort!(copymutable(x), DEFAULT_STABLE, o) + v = sort!(collect(x), DEFAULT_STABLE, o) tuple((v[i] for i in 1:N)...) else _sort(x, o) diff --git a/test/sorting.jl b/test/sorting.jl index 147a70a5db7d9..c12f07ae750d7 100644 --- a/test/sorting.jl +++ b/test/sorting.jl @@ -559,6 +559,11 @@ end @test_throws ArgumentError sort("string") @test_throws ArgumentError("1 cannot be sorted") sort(1) + + @test sort(Set((1, 3, 6))) == [1, 3, 6] + @test sort(Dict((1=>9, 3=>2, 6=>5))) == [1=>9, 3=>2, 6=>5] + @test sort(keys(Dict((1=>2, 3=>5, 6=>9)))) == [1, 3, 6] + @test sort(values(Dict((1=>9, 3=>2, 6=>5)))) == [2, 5, 9] end @testset "sort!(::AbstractVector{<:Integer}) with short int range" begin From 8b85bbf150a4137b943687829bf41a4f6f0a5f5a Mon Sep 17 00:00:00 2001 From: Lilith Orion Hafner Date: Fri, 10 Nov 2023 05:47:38 -0600 Subject: [PATCH 198/413] Fix errors in `sort` docstring (#52098) Two chagnes wrapped into one `Base.copymutable` => `Base.copymutable` & `collect` and `Base.copymutable` => `similar` & words. Followup for #52086 and #46104; also fixes #51932 (though we still may want to make `copymutable` public at some point) --------- Co-authored-by: Jameson Nash (cherry picked from commit 42c088b8b3e678edd19e5cb9ea54503e43624d06) --- base/sort.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/base/sort.jl b/base/sort.jl index 253faa162d8f9..a5d3927c450c4 100644 --- a/base/sort.jl +++ b/base/sort.jl @@ -1470,7 +1470,8 @@ end Variant of [`sort!`](@ref) that returns a sorted copy of `v` leaving `v` itself unmodified. -Uses `Base.copymutable` to support immutable collections and iterables. +Returns something [`similar`](@ref) to `v` when `v` is an `AbstractArray` and uses +[`collect`](@ref) to support arbitrary non-`AbstractArray` iterables. !!! compat "Julia 1.10" `sort` of arbitrary iterables requires at least Julia 1.10. From 1ddd6da6480617ba50dff93f215c9035f6195587 Mon Sep 17 00:00:00 2001 From: Claire Foster Date: Mon, 13 Nov 2023 18:03:29 +1000 Subject: [PATCH 199/413] Bump JuliaSyntax to 0.4.7 (#52136) This fixes a whole bunch of small but annoying bugs, as described in the JuliaSyntax-0.4.7 release notes https://github.com/JuliaLang/JuliaSyntax.jl/releases/tag/v0.4.7 I've been careful about cutting the JuliaSyntax-0.4.7 release from nonbreaking changes, so we should be able to backport this to 1.10. --- Extended notes about compatibility * The public keyword in https://github.com/JuliaLang/JuliaSyntax.jl/pull/320 is released in JuliaSyntax-0.4.7 but JuliaSyntax is multi-version aware so this is disabled when used as the default parser in Julia 1.10, but is enabled in 1.11-DEV. So should be backportable. * We aim for parsing to `Expr` to always be stable in JuliaSyntax and independent of the host Julia `VERSION`, but we're not fully there yet for 1.11 / 1.10 due to https://github.com/JuliaLang/JuliaSyntax.jl/issues/377. Thus some careful management of the JuliaSyntax-0.4.x branch for now. (cherry picked from commit 85d7ccad2cc2154d9c3371283512eec33252cc40) --- deps/JuliaSyntax.version | 2 +- .../md5 | 1 + .../sha512 | 1 + 3 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 deps/checksums/JuliaSyntax-4f1731d6ce7c2465fc21ea245110b7a39f34658a.tar.gz/md5 create mode 100644 deps/checksums/JuliaSyntax-4f1731d6ce7c2465fc21ea245110b7a39f34658a.tar.gz/sha512 diff --git a/deps/JuliaSyntax.version b/deps/JuliaSyntax.version index e726eea3656fc..7f124715024ce 100644 --- a/deps/JuliaSyntax.version +++ b/deps/JuliaSyntax.version @@ -1,4 +1,4 @@ JULIASYNTAX_BRANCH = main -JULIASYNTAX_SHA1 = 045d156c44dbb87769c7416d049a7c08908539d4 +JULIASYNTAX_SHA1 = 4f1731d6ce7c2465fc21ea245110b7a39f34658a JULIASYNTAX_GIT_URL := https://github.com/JuliaLang/JuliaSyntax.jl.git JULIASYNTAX_TAR_URL = https://api.github.com/repos/JuliaLang/JuliaSyntax.jl/tarball/$1 diff --git a/deps/checksums/JuliaSyntax-4f1731d6ce7c2465fc21ea245110b7a39f34658a.tar.gz/md5 b/deps/checksums/JuliaSyntax-4f1731d6ce7c2465fc21ea245110b7a39f34658a.tar.gz/md5 new file mode 100644 index 0000000000000..c2663955ec773 --- /dev/null +++ b/deps/checksums/JuliaSyntax-4f1731d6ce7c2465fc21ea245110b7a39f34658a.tar.gz/md5 @@ -0,0 +1 @@ +8c9d9579eeab1ba40f978a32c9db9900 diff --git a/deps/checksums/JuliaSyntax-4f1731d6ce7c2465fc21ea245110b7a39f34658a.tar.gz/sha512 b/deps/checksums/JuliaSyntax-4f1731d6ce7c2465fc21ea245110b7a39f34658a.tar.gz/sha512 new file mode 100644 index 0000000000000..46647cb3e432b --- /dev/null +++ b/deps/checksums/JuliaSyntax-4f1731d6ce7c2465fc21ea245110b7a39f34658a.tar.gz/sha512 @@ -0,0 +1 @@ +1bdad624f61482b55deba8727fea1c087bfaea9e1f8afa3b44b984441fb7e663dac067baa4a96ae2d4cbd4a46ae8c87e9d20d2dfcd17046ad194711304184e57 From 99c4ae46a610a62699a6a59f66d21723734b911f Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Sat, 30 Sep 2023 12:27:10 -0300 Subject: [PATCH 200/413] Make allocopt respect the GC verifier rules with non usual address spaces (#51520) On AMDGPU, this was generating a `addrspace(10)` pointer to an `alloca` which is illegal and lead to other issues. (cherry picked from commit af9a7af3b27c0ff22179a7dcd30bf6753d3d575f) --- src/llvm-alloc-opt.cpp | 4 +--- test/llvmpasses/alloc-opt-gcframe-addrspaces.ll | 11 ++++++----- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/llvm-alloc-opt.cpp b/src/llvm-alloc-opt.cpp index b87a5a6799b0b..751cae6419dda 100644 --- a/src/llvm-alloc-opt.cpp +++ b/src/llvm-alloc-opt.cpp @@ -643,8 +643,6 @@ void Optimizer::moveToStack(CallInst *orig_inst, size_t sz, bool has_ref) } insertLifetime(ptr, ConstantInt::get(Type::getInt64Ty(prolog_builder.getContext()), sz), orig_inst); Instruction *new_inst = cast(prolog_builder.CreateBitCast(ptr, JuliaType::get_pjlvalue_ty(prolog_builder.getContext(), buff->getType()->getPointerAddressSpace()))); - if (orig_inst->getModule()->getDataLayout().getAllocaAddrSpace() != 0) - new_inst = cast(prolog_builder.CreateAddrSpaceCast(new_inst, JuliaType::get_pjlvalue_ty(prolog_builder.getContext(), orig_inst->getType()->getPointerAddressSpace()))); new_inst->takeName(orig_inst); auto simple_replace = [&] (Instruction *orig_i, Instruction *new_i) { @@ -692,7 +690,7 @@ void Optimizer::moveToStack(CallInst *orig_inst, size_t sz, bool has_ref) else if (auto call = dyn_cast(user)) { auto callee = call->getCalledOperand(); if (pass.pointer_from_objref_func == callee) { - call->replaceAllUsesWith(new_i); + call->replaceAllUsesWith(prolog_builder.CreateAddrSpaceCast(new_i, call->getCalledFunction()->getReturnType())); call->eraseFromParent(); return; } diff --git a/test/llvmpasses/alloc-opt-gcframe-addrspaces.ll b/test/llvmpasses/alloc-opt-gcframe-addrspaces.ll index b33f2cdac7dd4..1eefa7e56922f 100644 --- a/test/llvmpasses/alloc-opt-gcframe-addrspaces.ll +++ b/test/llvmpasses/alloc-opt-gcframe-addrspaces.ll @@ -19,15 +19,16 @@ declare {}* @julia.pointer_from_objref({} addrspace(11)*) ; Test that non-0 addrspace allocas are properly emitted and handled ; CHECK-LABEL: @non_zero_addrspace -; CHECK: %1 = alloca i32, align 8, addrspace(5) +; TYPED: %1 = alloca i32, align 8, addrspace(5) ; TYPED: %2 = bitcast i32 addrspace(5)* %1 to i8 addrspace(5)* -; TYPED: %3 = bitcast i8 addrspace(5)* %2 to {} addrspace(5)* -; TYPED: %var1 = addrspacecast {} addrspace(5)* %3 to {} addrspace(10)* +; TYPED: %var1 = bitcast i8 addrspace(5)* %2 to {} addrspace(5)* +; TYPED: %3 = addrspacecast {} addrspace(5)* %var1 to {}* ; TYPED: call void @llvm.lifetime.start.p5i8(i64 4, i8 addrspace(5)* %2) -; OPAQUE: %var1 = addrspacecast ptr addrspace(5) %1 to ptr addrspace(10) -; OPAQUE: call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) %1) +; OPAQUE: %var1 = alloca i32, align 8, addrspace(5) +; OPAQUE: %1 = addrspacecast ptr addrspace(5) %var1 to ptr +; OPAQUE: call void @llvm.lifetime.start.p5(i64 4, ptr addrspace(5) %var1) ; CHECK: ret void define void @non_zero_addrspace() { From 0a1e83e27a87b26a9688c3a5c8213da1be0c8472 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Tue, 14 Nov 2023 21:42:19 -0500 Subject: [PATCH 201/413] Make c func `abspath` consistent on Windows. Fix tracking path conversion. (#52140) Explanation for the `GetFullPathName` behavior https://developercommunity.visualstudio.com/t/GetFullPath-fails-if-given-empty-string/483359#T-N486167 (cherry picked from commit eaef647957ca5e085eea299cfa9f699c6afe6d8f) --- src/init.c | 11 ++++++++++- test/cmdlineargs.jl | 39 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/init.c b/src/init.c index 4a152ed04b13d..c49ec2ac80be2 100644 --- a/src/init.c +++ b/src/init.c @@ -574,6 +574,14 @@ static char *abspath(const char *in, int nprefix) } } #else + // GetFullPathName intentionally errors if given an empty string so manually insert `.` to invoke cwd + char *in2 = (char*)malloc_s(JL_PATH_MAX); + if (strlen(in) - nprefix == 0) { + memcpy(in2, in, nprefix); + in2[nprefix] = '.'; + in2[nprefix+1] = '\0'; + in = in2; + } DWORD n = GetFullPathName(in + nprefix, 0, NULL, NULL); if (n <= 0) { jl_error("fatal error: jl_options.image_file path too long or GetFullPathName failed"); @@ -584,6 +592,7 @@ static char *abspath(const char *in, int nprefix) jl_error("fatal error: jl_options.image_file path too long or GetFullPathName failed"); } memcpy(out, in, nprefix); + free(in2); #endif return out; } @@ -678,7 +687,7 @@ static void jl_resolve_sysimg_location(JL_IMAGE_SEARCH rel) if (jl_options.output_code_coverage) jl_options.output_code_coverage = absformat(jl_options.output_code_coverage); if (jl_options.tracked_path) - jl_options.tracked_path = absformat(jl_options.tracked_path); + jl_options.tracked_path = abspath(jl_options.tracked_path, 0); const char **cmdp = jl_options.cmds; if (cmdp) { diff --git a/test/cmdlineargs.jl b/test/cmdlineargs.jl index 417ac82973558..72d1c6bb5663f 100644 --- a/test/cmdlineargs.jl +++ b/test/cmdlineargs.jl @@ -465,10 +465,47 @@ let exename = `$(Base.julia_cmd()) --startup-file=no --color=no` @test occursin(expected, got) || (expected, got) @test_broken occursin(expected_good, got) + # Ask for coverage in current directory + tdir = dirname(realpath(inputfile)) + cd(tdir) do + # there may be atrailing separator here so use rstrip + @test readchomp(`$exename -E "(Base.JLOptions().code_coverage, rstrip(unsafe_string(Base.JLOptions().tracked_path), '/'))" -L $inputfile + --code-coverage=$covfile --code-coverage=@`) == "(3, $(repr(tdir)))" + end + @test isfile(covfile) + got = read(covfile, String) + rm(covfile) + @test occursin(expected, got) || (expected, got) + @test_broken occursin(expected_good, got) + + # Ask for coverage in relative directory + tdir = dirname(realpath(inputfile)) + cd(dirname(tdir)) do + @test readchomp(`$exename -E "(Base.JLOptions().code_coverage, unsafe_string(Base.JLOptions().tracked_path))" -L $inputfile + --code-coverage=$covfile --code-coverage=@testhelpers`) == "(3, $(repr(tdir)))" + end + @test isfile(covfile) + got = read(covfile, String) + rm(covfile) + @test occursin(expected, got) || (expected, got) + @test_broken occursin(expected_good, got) + + # Ask for coverage in relative directory with dot-dot notation + tdir = dirname(realpath(inputfile)) + cd(tdir) do + @test readchomp(`$exename -E "(Base.JLOptions().code_coverage, unsafe_string(Base.JLOptions().tracked_path))" -L $inputfile + --code-coverage=$covfile --code-coverage=@../testhelpers`) == "(3, $(repr(tdir)))" + end + @test isfile(covfile) + got = read(covfile, String) + rm(covfile) + @test occursin(expected, got) || (expected, got) + @test_broken occursin(expected_good, got) + # Ask for coverage in a different directory tdir = mktempdir() # a dir that contains no code @test readchomp(`$exename -E "(Base.JLOptions().code_coverage, unsafe_string(Base.JLOptions().tracked_path))" -L $inputfile - --code-coverage=$covfile --code-coverage=@$tdir`) == "(3, $(repr(tdir)))" + --code-coverage=$covfile --code-coverage=@$tdir`) == "(3, $(repr(realpath(tdir))))" @test isfile(covfile) got = read(covfile, String) @test isempty(got) From dc2c4f1254603b88a2ff69c2f8bdfc3a8acfca60 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Wed, 15 Nov 2023 14:15:16 -0500 Subject: [PATCH 202/413] [REPL] fix computation of startpos for path completions (#52009) Fixes https://github.com/JuliaLang/julia/issues/51985 Ensure that the REPL completions escape and unescape text correctly, using the correct functions, and accounting for exactly what the user has currently typed. The old broken method is left around for Pkg, since it has an over-reliance on it returning incorrect answers. Once Pkg is fixed, we can delete that code. Co-authored-by: Jameson Nash (cherry picked from commit 5edcdc5a234fa69a65f5e2b8d85ac51cfb37a653) --- base/shell.jl | 24 ++- stdlib/REPL/src/REPLCompletions.jl | 266 +++++++++++++++++++--------- stdlib/REPL/test/replcompletions.jl | 58 +++--- test/spawn.jl | 16 +- 4 files changed, 246 insertions(+), 118 deletions(-) diff --git a/base/shell.jl b/base/shell.jl index 5bfd11fb46d29..48214418bdee5 100644 --- a/base/shell.jl +++ b/base/shell.jl @@ -18,12 +18,11 @@ end function shell_parse(str::AbstractString, interpolate::Bool=true; special::AbstractString="", filename="none") - s = SubString(str, firstindex(str)) + last_arg = firstindex(str) # N.B.: This is used by REPLCompletions + s = SubString(str, last_arg) s = rstrip_shell(lstrip(s)) - # N.B.: This is used by REPLCompletions - last_parse = 0:-1 - isempty(s) && return interpolate ? (Expr(:tuple,:()),last_parse) : ([],last_parse) + isempty(s) && return interpolate ? (Expr(:tuple,:()), last_arg) : ([], last_arg) in_single_quotes = false in_double_quotes = false @@ -32,6 +31,7 @@ function shell_parse(str::AbstractString, interpolate::Bool=true; arg = [] i = firstindex(s) st = Iterators.Stateful(pairs(s)) + update_last_arg = false # true after spaces or interpolate function push_nonempty!(list, x) if !isa(x,AbstractString) || !isempty(x) @@ -54,6 +54,7 @@ function shell_parse(str::AbstractString, interpolate::Bool=true; for (j, c) in st j, c = j::Int, c::C if !in_single_quotes && !in_double_quotes && isspace(c) + update_last_arg = true i = consume_upto!(arg, s, i, j) append_2to1!(args, arg) while !isempty(st) @@ -77,12 +78,17 @@ function shell_parse(str::AbstractString, interpolate::Bool=true; # use parseatom instead of parse to respect filename (#28188) ex, j = Meta.parseatom(s, stpos, filename=filename) end - last_parse = (stpos:prevind(s, j)) .+ s.offset - push_nonempty!(arg, ex) + last_arg = stpos + s.offset + update_last_arg = true + push!(arg, ex) s = SubString(s, j) Iterators.reset!(st, pairs(s)) i = firstindex(s) else + if update_last_arg + last_arg = i + s.offset + update_last_arg = false + end if !in_double_quotes && c == '\'' in_single_quotes = !in_single_quotes i = consume_upto!(arg, s, i, j) @@ -124,14 +130,14 @@ function shell_parse(str::AbstractString, interpolate::Bool=true; push_nonempty!(arg, s[i:end]) append_2to1!(args, arg) - interpolate || return args, last_parse + interpolate || return args, last_arg # construct an expression ex = Expr(:tuple) for arg in args push!(ex.args, Expr(:tuple, arg...)) end - return ex, last_parse + return ex, last_arg end function shell_split(s::AbstractString) @@ -216,7 +222,7 @@ function print_shell_escaped_posixly(io::IO, args::AbstractString...) function isword(c::AbstractChar) if '0' <= c <= '9' || 'a' <= c <= 'z' || 'A' <= c <= 'Z' # word characters - elseif c == '_' || c == '/' || c == '+' || c == '-' + elseif c == '_' || c == '/' || c == '+' || c == '-' || c == '.' # other common characters elseif c == '\'' have_single = true diff --git a/stdlib/REPL/src/REPLCompletions.jl b/stdlib/REPL/src/REPLCompletions.jl index debe568b25f64..94ca678b8f387 100644 --- a/stdlib/REPL/src/REPLCompletions.jl +++ b/stdlib/REPL/src/REPLCompletions.jl @@ -243,8 +243,21 @@ const sorted_keyvals = ["false", "true"] complete_keyval(s::Union{String,SubString{String}}) = complete_from_list(KeyvalCompletion, sorted_keyvals, s) -function complete_path(path::AbstractString, pos::Int; - use_envpath=false, shell_escape=false, +function do_raw_escape(s) + # escape_raw_string with delim='`' and ignoring the rule for the ending \ + return replace(s, r"(\\+)`" => s"\1\\`") +end +function do_shell_escape(s) + return Base.shell_escape_posixly(s) +end +function do_string_escape(s) + return escape_string(s, ('\"','$')) +end + +function complete_path(path::AbstractString; + use_envpath=false, + shell_escape=false, + raw_escape=false, string_escape=false) @assert !(shell_escape && string_escape) if Base.Sys.isunix() && occursin(r"^~(?:/|$)", path) @@ -257,50 +270,49 @@ function complete_path(path::AbstractString, pos::Int; else dir, prefix = splitdir(path) end - local files - try + files = try if isempty(dir) - files = readdir() + readdir() elseif isdir(dir) - files = readdir(dir) + readdir(dir) else - return Completion[], 0:-1, false + return Completion[], dir, false end - catch - return Completion[], 0:-1, false + catch ex + ex isa Base.IOError || rethrow() + return Completion[], dir, false end matches = Set{String}() for file in files if startswith(file, prefix) p = joinpath(dir, file) - is_dir = try isdir(p) catch; false end - push!(matches, is_dir ? joinpath(file, "") : file) + is_dir = try isdir(p) catch ex; ex isa Base.IOError ? false : rethrow() end + push!(matches, is_dir ? file * "/" : file) end end - if use_envpath && length(dir) == 0 + if use_envpath && isempty(dir) # Look for files in PATH as well - local pathdirs = split(ENV["PATH"], @static Sys.iswindows() ? ";" : ":") + pathdirs = split(ENV["PATH"], @static Sys.iswindows() ? ";" : ":") for pathdir in pathdirs - local actualpath - try - actualpath = realpath(pathdir) - catch + actualpath = try + realpath(pathdir) + catch ex + ex isa Base.IOError || rethrow() # Bash doesn't expect every folder in PATH to exist, so neither shall we continue end - if actualpath != pathdir && in(actualpath,pathdirs) + if actualpath != pathdir && in(actualpath, pathdirs) # Remove paths which (after resolving links) are in the env path twice. # Many distros eg. point /bin to /usr/bin but have both in the env path. continue end - local filesinpath - try - filesinpath = readdir(pathdir) + filesinpath = try + readdir(pathdir) catch e # Bash allows dirs in PATH that can't be read, so we should as well. if isa(e, Base.IOError) || isa(e, Base.ArgumentError) @@ -321,18 +333,38 @@ function complete_path(path::AbstractString, pos::Int; end end - function do_escape(s) - return shell_escape ? replace(s, r"(\s|\\)" => s"\\\0") : - string_escape ? escape_string(s, ('\"','$')) : - s - end + matches = ((shell_escape ? do_shell_escape(s) : string_escape ? do_string_escape(s) : s) for s in matches) + matches = ((raw_escape ? do_raw_escape(s) : s) for s in matches) + matches = Completion[PathCompletion(s) for s in matches] + return matches, dir, !isempty(matches) +end - matchList = Completion[PathCompletion(do_escape(s)) for s in matches] - startpos = pos - lastindex(do_escape(prefix)) + 1 - # The pos - lastindex(prefix) + 1 is correct due to `lastindex(prefix)-lastindex(prefix)==0`, - # hence we need to add one to get the first index. This is also correct when considering - # pos, because pos is the `lastindex` a larger string which `endswith(path)==true`. - return matchList, startpos:pos, !isempty(matchList) +function complete_path(path::AbstractString, + pos::Int; + use_envpath=false, + shell_escape=false, + string_escape=false) + ## TODO: enable this depwarn once Pkg is fixed + #Base.depwarn("complete_path with pos argument is deprecated because the return value [2] is incorrect to use", :complete_path) + paths, dir, success = complete_path(path; use_envpath, shell_escape, string_escape) + if Base.Sys.isunix() && occursin(r"^~(?:/|$)", path) + # if the path is just "~", don't consider the expanded username as a prefix + if path == "~" + dir, prefix = homedir(), "" + else + dir, prefix = splitdir(homedir() * path[2:end]) + end + else + dir, prefix = splitdir(path) + end + startpos = pos - lastindex(prefix) + 1 + Sys.iswindows() && map!(paths, paths) do c::PathCompletion + # emulation for unnecessarily complicated return value, since / is a + # perfectly acceptable path character which does not require quoting + # but is required by Pkg's awkward parser handling + return endswith(c.path, "/") ? PathCompletion(chop(c.path) * "\\\\") : c + end + return paths, startpos:pos, success end function complete_expanduser(path::AbstractString, r) @@ -784,10 +816,11 @@ function afterusing(string::String, startpos::Int) return occursin(r"^\b(using|import)\s*((\w+[.])*\w+\s*,\s*)*$", str[fr:end]) end -function close_path_completion(str, startpos, r, paths, pos) +function close_path_completion(dir, paths, str, pos) length(paths) == 1 || return false # Only close if there's a single choice... - _path = str[startpos:prevind(str, first(r))] * (paths[1]::PathCompletion).path - path = expanduser(unescape_string(replace(_path, "\\\$"=>"\$", "\\\""=>"\""))) + path = (paths[1]::PathCompletion).path + path = unescape_string(replace(path, "\\\$"=>"\$")) + path = joinpath(dir, path) # ...except if it's a directory... try isdir(path) @@ -1075,42 +1108,80 @@ function completions(string::String, pos::Int, context_module::Module=Main, shif return complete_identifiers!(Completion[], ffunc, context_module, string, string[startpos:pos], pos, dotpos, startpos) elseif inc_tag === :cmd - m = match(r"[\t\n\r\"`><=*?|]| (?!\\)", reverse(partial)) - startpos = nextind(partial, reverseind(partial, m.offset)) - r = startpos:pos - - # This expansion with "\\ "=>' ' replacement and shell_escape=true - # assumes the path isn't further quoted within the cmd backticks. - expanded = complete_expanduser(replace(string[r], r"\\ " => " "), r) - expanded[3] && return expanded # If user expansion available, return it - - paths, r, success = complete_path(replace(string[r], r"\\ " => " "), pos, - shell_escape=true) - - return sort!(paths, by=p->p.path), r, success + # TODO: should this call shell_completions instead of partially reimplementing it? + let m = match(r"[\t\n\r\"`><=*?|]| (?!\\)", reverse(partial)) # fuzzy shell_parse in reverse + startpos = nextind(partial, reverseind(partial, m.offset)) + r = startpos:pos + scs::String = string[r] + + expanded = complete_expanduser(scs, r) + expanded[3] && return expanded # If user expansion available, return it + + path::String = replace(scs, r"(\\+)\g1(\\?)`" => "\1\2`") # fuzzy unescape_raw_string: match an even number of \ before ` and replace with half as many + # This expansion with "\\ "=>' ' replacement and shell_escape=true + # assumes the path isn't further quoted within the cmd backticks. + path = replace(path, r"\\ " => " ", r"\$" => "\$") # fuzzy shell_parse (reversed by shell_escape_posixly) + paths, dir, success = complete_path(path, shell_escape=true, raw_escape=true) + + if success && !isempty(dir) + let dir = do_raw_escape(do_shell_escape(dir)) + # if escaping of dir matches scs prefix, remove that from the completions + # otherwise make it the whole completion + if endswith(dir, "/") && startswith(scs, dir) + r = (startpos + sizeof(dir)):pos + elseif startswith(scs, dir * "/") + r = nextind(string, startpos + sizeof(dir)):pos + else + map!(paths, paths) do c::PathCompletion + return PathCompletion(dir * "/" * c.path) + end + end + end + end + return sort!(paths, by=p->p.path), r, success + end elseif inc_tag === :string # Find first non-escaped quote - m = match(r"\"(?!\\)", reverse(partial)) - startpos = nextind(partial, reverseind(partial, m.offset)) - r = startpos:pos + let m = match(r"\"(?!\\)", reverse(partial)) + startpos = nextind(partial, reverseind(partial, m.offset)) + r = startpos:pos + scs::String = string[r] + + expanded = complete_expanduser(scs, r) + expanded[3] && return expanded # If user expansion available, return it + + path = try + unescape_string(replace(scs, "\\\$"=>"\$")) + catch ex + ex isa ArgumentError || rethrow() + nothing + end + if !isnothing(path) + paths, dir, success = complete_path(path::String, string_escape=true) - expanded = complete_expanduser(string[r], r) - expanded[3] && return expanded # If user expansion available, return it + if close_path_completion(dir, paths, path, pos) + paths[1] = PathCompletion((paths[1]::PathCompletion).path * "\"") + end - path_prefix = try - unescape_string(replace(string[r], "\\\$"=>"\$", "\\\""=>"\"")) - catch - nothing - end - if !isnothing(path_prefix) - paths, r, success = complete_path(path_prefix, pos, string_escape=true) + if success && !isempty(dir) + let dir = do_string_escape(dir) + # if escaping of dir matches scs prefix, remove that from the completions + # otherwise make it the whole completion + if endswith(dir, "/") && startswith(scs, dir) + r = (startpos + sizeof(dir)):pos + elseif startswith(scs, dir * "/") + r = nextind(string, startpos + sizeof(dir)):pos + else + map!(paths, paths) do c::PathCompletion + return PathCompletion(dir * "/" * c.path) + end + end + end + end - if close_path_completion(string, startpos, r, paths, pos) - paths[1] = PathCompletion((paths[1]::PathCompletion).path * "\"") + # Fallthrough allowed so that Latex symbols can be completed in strings + success && return sort!(paths, by=p->p.path), r, success end - - # Fallthrough allowed so that Latex symbols can be completed in strings - success && return sort!(paths, by=p->p.path), r, success end end @@ -1196,35 +1267,58 @@ end function shell_completions(string, pos) # First parse everything up to the current position scs = string[1:pos] - local args, last_parse - try - args, last_parse = Base.shell_parse(scs, true)::Tuple{Expr,UnitRange{Int}} - catch + args, last_arg_start = try + Base.shell_parse(scs, true)::Tuple{Expr,Int} + catch ex + ex isa ArgumentError || ex isa ErrorException || rethrow() return Completion[], 0:-1, false end ex = args.args[end]::Expr # Now look at the last thing we parsed isempty(ex.args) && return Completion[], 0:-1, false - arg = ex.args[end] - if all(s -> isa(s, AbstractString), ex.args) - arg = arg::AbstractString - # Treat this as a path - - # As Base.shell_parse throws away trailing spaces (unless they are escaped), - # we need to special case here. - # If the last char was a space, but shell_parse ignored it search on "". - ignore_last_word = arg != " " && scs[end] == ' ' - prefix = ignore_last_word ? "" : join(ex.args) + lastarg = ex.args[end] + # As Base.shell_parse throws away trailing spaces (unless they are escaped), + # we need to special case here. + # If the last char was a space, but shell_parse ignored it search on "". + if isexpr(lastarg, :incomplete) || isexpr(lastarg, :error) + partial = string[last_arg_start:pos] + ret, range = completions(partial, lastindex(partial)) + range = range .+ (last_arg_start - 1) + return ret, range, true + elseif endswith(scs, ' ') && !endswith(scs, "\\ ") + r = pos+1:pos + paths, dir, success = complete_path("", use_envpath=false, shell_escape=true) + return paths, r, success + elseif all(arg -> arg isa AbstractString, ex.args) + # Join these and treat this as a path + path::String = join(ex.args) + r = last_arg_start:pos # Also try looking into the env path if the user wants to complete the first argument - use_envpath = !ignore_last_word && length(args.args) < 2 + use_envpath = length(args.args) < 2 - return complete_path(prefix, pos, use_envpath=use_envpath, shell_escape=true) - elseif isexpr(arg, :incomplete) || isexpr(arg, :error) - partial = scs[last_parse] - ret, range = completions(partial, lastindex(partial)) - range = range .+ (first(last_parse) - 1) - return ret, range, true + # TODO: call complete_expanduser here? + + paths, dir, success = complete_path(path, use_envpath=use_envpath, shell_escape=true) + + if success && !isempty(dir) + let dir = do_shell_escape(dir) + # if escaping of dir matches scs prefix, remove that from the completions + # otherwise make it the whole completion + partial = string[last_arg_start:pos] + if endswith(dir, "/") && startswith(partial, dir) + r = (last_arg_start + sizeof(dir)):pos + elseif startswith(partial, dir * "/") + r = nextind(string, last_arg_start + sizeof(dir)):pos + else + map!(paths, paths) do c::PathCompletion + return PathCompletion(dir * "/" * c.path) + end + end + end + end + + return paths, r, success end return Completion[], 0:-1, false end diff --git a/stdlib/REPL/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl index c5a2d1c8e006e..c515ec5927dd3 100644 --- a/stdlib/REPL/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -325,7 +325,7 @@ end let s = "\\alpha" c, r = test_bslashcomplete(s) @test c[1] == "α" - @test r == 1:length(s) + @test r == 1:lastindex(s) @test length(c) == 1 end @@ -1041,7 +1041,7 @@ let s, c, r s = "@show \"/dev/nul\"" c,r = completions(s, 15) c = map(completion_text, c) - @test "null" in c + @test "null\"" in c @test r == 13:15 @test s[r] == "nul" @@ -1065,8 +1065,8 @@ let s, c, r if !isdir(joinpath(s, "tmp")) c,r = test_scomplete(s) @test !("tmp/" in c) - @test r === length(s) + 1:0 - @test s[r] == "" + @test !("$s/tmp/" in c) + @test r === (sizeof(s) + 1):sizeof(s) end s = "cd \$(Iter" @@ -1091,7 +1091,7 @@ let s, c, r touch(file) s = string(tempdir(), "/repl\\ ") c,r = test_scomplete(s) - @test ["repl\\ completions"] == c + @test ["'repl completions'"] == c @test s[r] == "repl\\ " rm(file) end @@ -1185,7 +1185,7 @@ let current_dir, forbidden catch e e isa Base.IOError && occursin("ELOOP", e.msg) end - c, r = test_complete("\""*escape_string(joinpath(path, "selfsym"))) + c, r = test_complete("\"$(escape_string(path))/selfsym") @test c == ["selfsymlink"] end end @@ -1222,20 +1222,20 @@ mktempdir() do path dir_space = replace(space_folder, " " => "\\ ") s = Sys.iswindows() ? "cd $dir_space\\\\space" : "cd $dir_space/space" c, r = test_scomplete(s) - @test s[r] == "space" - @test "space\\ .file" in c + @test s[r] == (Sys.iswindows() ? "$dir_space\\\\space" : "$dir_space/space") + @test "'$space_folder'/'space .file'" in c # Also use shell escape rules within cmd backticks s = "`$s" c, r = test_scomplete(s) - @test s[r] == "space" - @test "space\\ .file" in c + @test s[r] == (Sys.iswindows() ? "$dir_space\\\\space" : "$dir_space/space") + @test "'$space_folder'/'space .file'" in c # escape string according to Julia escaping rules - julia_esc(str) = escape_string(str, ('\"','$')) + julia_esc(str) = REPL.REPLCompletions.do_string_escape(str) # For normal strings the string should be properly escaped according to # the usual rules for Julia strings. - s = "cd(\"" * julia_esc(joinpath(path, space_folder, "space")) + s = "cd(\"" * julia_esc(joinpath(path, space_folder) * "/space") c, r = test_complete(s) @test s[r] == "space" @test "space .file\"" in c @@ -1244,7 +1244,7 @@ mktempdir() do path # which needs to be escaped in Julia strings (on unix we could do this # test with all sorts of special chars) touch(joinpath(space_folder, "needs_escape\$.file")) - escpath = julia_esc(joinpath(path, space_folder, "needs_escape\$")) + escpath = julia_esc(joinpath(path, space_folder) * "/needs_escape\$") s = "cd(\"$escpath" c, r = test_complete(s) @test s[r] == "needs_escape\\\$" @@ -1281,12 +1281,12 @@ mktempdir() do path # in shell commands the shell path completion cannot complete # paths with these characters c, r, res = test_scomplete(test_dir) - @test c[1] == test_dir*(Sys.iswindows() ? "\\\\" : "/") + @test c[1] == "'$test_dir/'" @test res end escdir = julia_esc(test_dir) c, r, res = test_complete("\""*escdir) - @test c[1] == escdir*(Sys.iswindows() ? "\\\\" : "/") + @test c[1] == escdir * "/" @test res finally rm(joinpath(path, test_dir), recursive=true) @@ -1322,27 +1322,43 @@ if Sys.iswindows() cd(path) do s = "cd ..\\\\" c,r = test_scomplete(s) - @test r == length(s)+1:length(s) - @test temp_name * "\\\\" in c + @test r == lastindex(s)-3:lastindex(s) + @test "../$temp_name/" in c + + s = "cd ../" + c,r = test_scomplete(s) + @test r == lastindex(s)+1:lastindex(s) + @test "$temp_name/" in c s = "ls $(file[1:2])" c,r = test_scomplete(s) - @test r == length(s)-1:length(s) + @test r == lastindex(s)-1:lastindex(s) @test file in c s = "cd(\"..\\\\" c,r = test_complete(s) - @test r == length(s)+1:length(s) - @test temp_name * "\\\\" in c + @test r == lastindex(s)-3:lastindex(s) + @test "../$temp_name/" in c + + s = "cd(\"../" + c,r = test_complete(s) + @test r == lastindex(s)+1:lastindex(s) + @test "$temp_name/" in c s = "cd(\"$(file[1:2])" c,r = test_complete(s) - @test r == length(s) - 1:length(s) + @test r == lastindex(s) - 1:lastindex(s) @test (length(c) > 1 && file in c) || (["$file\""] == c) end rm(tmp) end +# issue 51985 +let s = "`\\" + c,r = test_scomplete(s) + @test r == lastindex(s)+1:lastindex(s) +end + # auto completions of true and false... issue #14101 let s = "tru" c, r, res = test_complete(s) diff --git a/test/spawn.jl b/test/spawn.jl index 3fdfa794ff39e..1fab652199ee0 100644 --- a/test/spawn.jl +++ b/test/spawn.jl @@ -660,9 +660,21 @@ let p = run(`$sleepcmd 100`, wait=false) kill(p) end -# Second argument of shell_parse +# Second return of shell_parse let s = " \$abc " - @test s[Base.shell_parse(s)[2]] == "abc" + @test Base.shell_parse(s)[2] === findfirst('a', s) + s = "abc def" + @test Base.shell_parse(s)[2] === findfirst('d', s) + s = "abc 'de'f\"\"g" + @test Base.shell_parse(s)[2] === findfirst('\'', s) + s = "abc \$x'de'f\"\"g" + @test Base.shell_parse(s)[2] === findfirst('\'', s) + s = "abc def\$x'g'" + @test Base.shell_parse(s)[2] === findfirst('\'', s) + s = "abc def\$x " + @test Base.shell_parse(s)[2] === findfirst('x', s) + s = "abc \$(d)ef\$(x " + @test Base.shell_parse(s)[2] === findfirst('x', s) - 1 end # Logging macros should not output to finalized streams (#26687) From 02185996555969879c41de3c2b1a307a46d0e17a Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Thu, 16 Nov 2023 23:09:09 -0300 Subject: [PATCH 203/413] cap the number of GC threads to number of cpu cores (#52192) (cherry picked from commit f26947b4f5aee73135581bb14290c1c00102b8e3) --- src/threading.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/threading.c b/src/threading.c index 4faa8a0a2dc46..436e6184a6c23 100644 --- a/src/threading.c +++ b/src/threading.c @@ -655,6 +655,7 @@ void jl_init_threading(void) } } + int cpu = jl_cpu_threads(); jl_n_markthreads = jl_options.nmarkthreads - 1; jl_n_sweepthreads = jl_options.nsweepthreads; if (jl_n_markthreads == -1) { // --gcthreads not specified @@ -683,8 +684,20 @@ void jl_init_threading(void) else { jl_n_markthreads = (nthreads / 2) - 1; } + // if `--gcthreads` or ENV[NUM_GCTHREADS_NAME] was not specified, + // cap the number of threads that may run the mark phase to + // the number of CPU cores + if (jl_n_markthreads + 1 >= cpu) { + jl_n_markthreads = cpu - 1; + } } } + // warn the user if they try to run with a number + // of GC threads which is larger than the number + // of physical cores + if (jl_n_markthreads + 1 > cpu) { + jl_safe_printf("WARNING: running Julia with %d GC threads on %d CPU cores\n", jl_n_markthreads + 1, cpu); + } int16_t ngcthreads = jl_n_markthreads + jl_n_sweepthreads; jl_all_tls_states_size = nthreads + nthreadsi + ngcthreads; From f67439cb43fca6f8d7345305fc9dff6fca1468c2 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Tue, 21 Nov 2023 18:06:36 -0300 Subject: [PATCH 204/413] Make have_fma consistent between interpreter and compiled (#52206) Currently the interpreter always returns false. Which isn't very good. Make it follow whatever the JIT will do. (cherry picked from commit a6c656e6c47ff2b1237c92e90ba73ac267fc1dc0) --- src/jl_exported_funcs.inc | 1 + src/llvm-cpufeatures.cpp | 4 ++-- src/processor.h | 2 ++ src/processor_arm.cpp | 16 ++++++++++++++++ src/processor_fallback.cpp | 5 +++++ src/processor_x86.cpp | 11 +++++++++++ src/runtime_intrinsics.c | 11 ++++++++--- test/llvmpasses/cpu-features.ll | 2 ++ test/sysinfo.jl | 2 ++ 9 files changed, 49 insertions(+), 5 deletions(-) diff --git a/src/jl_exported_funcs.inc b/src/jl_exported_funcs.inc index 745905b113622..ee255a0e1a876 100644 --- a/src/jl_exported_funcs.inc +++ b/src/jl_exported_funcs.inc @@ -214,6 +214,7 @@ XX(jl_get_binding_wr) \ XX(jl_get_cpu_name) \ XX(jl_get_cpu_features) \ + XX(jl_cpu_has_fma) \ XX(jl_get_current_task) \ XX(jl_get_default_sysimg_path) \ XX(jl_get_excstack) \ diff --git a/src/llvm-cpufeatures.cpp b/src/llvm-cpufeatures.cpp index 77f1baf6237c4..3d3fb6b0583da 100644 --- a/src/llvm-cpufeatures.cpp +++ b/src/llvm-cpufeatures.cpp @@ -60,7 +60,7 @@ static bool have_fma(Function &intr, Function &caller, const Triple &TT) JL_NOTS StringRef FS = FSAttr.isValid() ? FSAttr.getValueAsString() : jl_ExecutionEngine->getTargetFeatureString(); - SmallVector Features; + SmallVector Features; FS.split(Features, ','); for (StringRef Feature : Features) if (TT.isARM()) { @@ -68,7 +68,7 @@ static bool have_fma(Function &intr, Function &caller, const Triple &TT) JL_NOTS return typ == "f32" || typ == "f64"; else if (Feature == "+vfp4sp") return typ == "f32"; - } else { + } else if (TT.isX86()) { if (Feature == "+fma" || Feature == "+fma4") return typ == "f32" || typ == "f64"; } diff --git a/src/processor.h b/src/processor.h index a3ebdf4f8c605..09ee780f2b9c5 100644 --- a/src/processor.h +++ b/src/processor.h @@ -224,6 +224,8 @@ JL_DLLEXPORT jl_value_t *jl_get_cpu_name(void); // Return the features of the host CPU as a julia string. JL_DLLEXPORT jl_value_t *jl_get_cpu_features(void); // Dump the name and feature set of the host CPU +JL_DLLEXPORT jl_value_t *jl_cpu_has_fma(int bits); +// Check if the CPU has native FMA instructions; // For debugging only JL_DLLEXPORT void jl_dump_host_cpu(void); JL_DLLEXPORT jl_value_t* jl_check_pkgimage_clones(char* data); diff --git a/src/processor_arm.cpp b/src/processor_arm.cpp index f47d1509f4975..0018d2ec925d9 100644 --- a/src/processor_arm.cpp +++ b/src/processor_arm.cpp @@ -1808,6 +1808,22 @@ JL_DLLEXPORT jl_value_t *jl_get_cpu_features(void) return jl_cstr_to_string(jl_get_cpu_features_llvm().c_str()); } +JL_DLLEXPORT jl_value_t *jl_cpu_has_fma(int bits) +{ +#ifdef _CPU_AARCH64_ + return jl_true; +#else + TargetData target = jit_targets.front(); + FeatureList features = target.en.features; + if (bits == 32 && test_nbit(features, Feature::vfp4sp)) + return jl_true; + else if ((bits == 64 || bits == 32) && test_nbit(features, Feature::vfp4)) + return jl_true; + else + return jl_false; +#endif +} + jl_image_t jl_init_processor_sysimg(void *hdl) { if (!jit_targets.empty()) diff --git a/src/processor_fallback.cpp b/src/processor_fallback.cpp index 08a4274f44ac8..833cd02b5fdfc 100644 --- a/src/processor_fallback.cpp +++ b/src/processor_fallback.cpp @@ -172,6 +172,11 @@ JL_DLLEXPORT jl_value_t *jl_get_cpu_features(void) return jl_cstr_to_string(jl_get_cpu_features_llvm().c_str()); } +JL_DLLEXPORT jl_value_t *jl_cpu_has_fma(int bits) +{ + return jl_false; // Match behaviour of have_fma in src/llvm-cpufeatures.cpp (assume false) +} + JL_DLLEXPORT void jl_dump_host_cpu(void) { jl_safe_printf("CPU: %s\n", host_cpu_name().c_str()); diff --git a/src/processor_x86.cpp b/src/processor_x86.cpp index 73e0992bcf37c..d96e2061ee674 100644 --- a/src/processor_x86.cpp +++ b/src/processor_x86.cpp @@ -4,6 +4,7 @@ // CPUID +#include "julia.h" extern "C" JL_DLLEXPORT void jl_cpuid(int32_t CPUInfo[4], int32_t InfoType) { asm volatile ( @@ -1055,6 +1056,16 @@ JL_DLLEXPORT jl_value_t *jl_get_cpu_features(void) return jl_cstr_to_string(jl_get_cpu_features_llvm().c_str()); } +JL_DLLEXPORT jl_value_t *jl_cpu_has_fma(int bits) +{ + TargetData target = jit_targets.front(); + FeatureList features = target.en.features; + if ((bits == 32 || bits == 64) && (test_nbit(features, Feature::fma) || test_nbit(features, Feature::fma4))) + return jl_true; + else + return jl_false; +} + jl_image_t jl_init_processor_sysimg(void *hdl) { if (!jit_targets.empty()) diff --git a/src/runtime_intrinsics.c b/src/runtime_intrinsics.c index ed320aa9a6c35..844a5ca8338c7 100644 --- a/src/runtime_intrinsics.c +++ b/src/runtime_intrinsics.c @@ -1454,6 +1454,7 @@ un_fintrinsic(trunc_float,trunc_llvm) un_fintrinsic(rint_float,rint_llvm) un_fintrinsic(sqrt_float,sqrt_llvm) un_fintrinsic(sqrt_float,sqrt_llvm_fast) +jl_value_t *jl_cpu_has_fma(int bits); JL_DLLEXPORT jl_value_t *jl_arraylen(jl_value_t *a) { @@ -1463,7 +1464,11 @@ JL_DLLEXPORT jl_value_t *jl_arraylen(jl_value_t *a) JL_DLLEXPORT jl_value_t *jl_have_fma(jl_value_t *typ) { - JL_TYPECHK(have_fma, datatype, typ); - // TODO: run-time feature check? - return jl_false; + JL_TYPECHK(have_fma, datatype, typ); // TODO what about float16/bfloat16? + if (typ == (jl_value_t*)jl_float32_type) + return jl_cpu_has_fma(32); + else if (typ == (jl_value_t*)jl_float64_type) + return jl_cpu_has_fma(64); + else + return jl_false; } diff --git a/test/llvmpasses/cpu-features.ll b/test/llvmpasses/cpu-features.ll index eea3d1b288204..080b6e07d3086 100644 --- a/test/llvmpasses/cpu-features.ll +++ b/test/llvmpasses/cpu-features.ll @@ -5,6 +5,8 @@ ; RUN: opt -enable-new-pm=0 --opaque-pointers=1 -load libjulia-codegen%shlibext -CPUFeatures -simplifycfg -S %s | FileCheck %s ; RUN: opt -enable-new-pm=1 --opaque-pointers=1 --load-pass-plugin=libjulia-codegen%shlibext -passes='CPUFeatures,simplifycfg' -S %s | FileCheck %s +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:10:11:12:13" +target triple = "x86_64-linux-gnu" declare i1 @julia.cpu.have_fma.f64() declare double @with_fma(double %0, double %1, double %2) diff --git a/test/sysinfo.jl b/test/sysinfo.jl index cb943cfd38843..f2e233d608338 100644 --- a/test/sysinfo.jl +++ b/test/sysinfo.jl @@ -12,6 +12,8 @@ Base.Sys.loadavg() @test length(ccall(:jl_get_cpu_name, String, ())) != 0 @test length(ccall(:jl_get_cpu_features, String, ())) >= 0 +foo_fma() = Core.Intrinsics.have_fma(Int64) +@test ccall(:jl_cpu_has_fma, Bool, (Cint,), 64) == foo_fma() if Sys.isunix() mktempdir() do tempdir From e9acaf53f6025c9c157d07cbbd3c0e5c839abcf0 Mon Sep 17 00:00:00 2001 From: "Steven G. Johnson" Date: Wed, 22 Nov 2023 11:23:07 -0500 Subject: [PATCH 205/413] fix Unicode.julia_chartransform for Julia 1.10 (#52027) #49559 by @JeffBezanson updated `src/flisp/julia_charmap.h` but missed [the comment](https://github.com/JuliaLang/julia/blob/164969f3d06919b073f3aa9ee608e40974ca82d9/src/flisp/julia_charmap.h#L5-L6) noting that `base/strings/unicode.jl` has to be updated accordingly. (cherry picked from commit 05f4b05384af9af364dcdf181db1a35020e07270) --- base/strings/unicode.jl | 1 + stdlib/Unicode/test/runtests.jl | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/base/strings/unicode.jl b/base/strings/unicode.jl index 17c5d66c160b6..2e04633b87487 100644 --- a/base/strings/unicode.jl +++ b/base/strings/unicode.jl @@ -179,6 +179,7 @@ const _julia_charmap = Dict{UInt32,UInt32}( 0x00B7 => 0x22C5, 0x0387 => 0x22C5, 0x2212 => 0x002D, + 0x210F => 0x0127, ) utf8proc_map(s::AbstractString, flags::Integer, chartransform=identity) = utf8proc_map(String(s), flags, chartransform) diff --git a/stdlib/Unicode/test/runtests.jl b/stdlib/Unicode/test/runtests.jl index 5c5a75b33e363..573d5da6167ba 100644 --- a/stdlib/Unicode/test/runtests.jl +++ b/stdlib/Unicode/test/runtests.jl @@ -27,8 +27,8 @@ using Unicode: normalize, isassigned, julia_chartransform @test normalize("\u0072\u0307\u0323", :NFC) == "\u1E5B\u0307" #26917 # julia_chartransform identifier normalization - @test normalize("julia\u025B\u00B5\u00B7\u0387\u2212", chartransform=julia_chartransform) == - "julia\u03B5\u03BC\u22C5\u22C5\u002D" + @test normalize("julia\u025B\u00B5\u00B7\u0387\u2212\u210F", chartransform=julia_chartransform) == + "julia\u03B5\u03BC\u22C5\u22C5\u002D\u0127" @test julia_chartransform('\u00B5') === '\u03BC' end From 99d71c0b5921678130d9520c34d6ad8caa6c5a9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mos=C3=A8=20Giordano?= Date: Mon, 27 Nov 2023 05:27:30 +0000 Subject: [PATCH 206/413] More helpful error message for empty `cpu_target` in `Base.julia_cmd` (#52217) Fix #52209. (cherry picked from commit 4a18886a16308dee8d475c942bc641d718e59e9f) --- base/util.jl | 6 ++++-- test/cmdlineargs.jl | 16 +++++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/base/util.jl b/base/util.jl index 3ccdd0a37ae68..2617d5a602850 100644 --- a/base/util.jl +++ b/base/util.jl @@ -144,7 +144,7 @@ See also [`print`](@ref), [`println`](@ref), [`show`](@ref). printstyled(stdout, msg...; bold=bold, italic=italic, underline=underline, blink=blink, reverse=reverse, hidden=hidden, color=color) """ - Base.julia_cmd(juliapath=joinpath(Sys.BINDIR, julia_exename()); cpu_target) + Base.julia_cmd(juliapath=joinpath(Sys.BINDIR, julia_exename()); cpu_target::Union{Nothing,String}=nothing) Return a julia command similar to the one of the running process. Propagates any of the `--cpu-target`, `--sysimage`, `--compile`, `--sysimage-native-code`, @@ -154,6 +154,8 @@ command line arguments that are not at their default values. Among others, `--math-mode`, `--warn-overwrite`, and `--trace-compile` are notably not propagated currently. +Unless set to `nothing`, the `cpu_target` keyword argument can be used to override the CPU target set for the running process. + To get the julia command without propagated command line arguments, `julia_cmd()[1]` can be used. !!! compat "Julia 1.1" @@ -246,7 +248,7 @@ function julia_cmd(julia=joinpath(Sys.BINDIR, julia_exename()); cpu_target::Unio # If pkgimage is set, malloc_log and code_coverage should not @assert opts.malloc_log == 0 && opts.code_coverage == 0 end - return `$julia -C$cpu_target -J$image_file $addflags` + return `$julia -C $cpu_target -J$image_file $addflags` end function julia_exename() diff --git a/test/cmdlineargs.jl b/test/cmdlineargs.jl index 72d1c6bb5663f..1730fe8179857 100644 --- a/test/cmdlineargs.jl +++ b/test/cmdlineargs.jl @@ -66,7 +66,9 @@ end get_julia_cmd(arg) = strip(read(`$julia_basic $arg -e 'print(repr(Base.julia_cmd()))'`, String), ['`']) for (arg, default) in ( - ("-C$(unsafe_string(opts.cpu_target))", false), + # Use a Cmd to handle space nicely when + # interpolating inside another Cmd. + (`-C $(unsafe_string(opts.cpu_target))`, false), ("-J$(unsafe_string(opts.image_file))", false), @@ -123,13 +125,21 @@ end ("--pkgimages=no", false), ) @testset "$arg" begin + str = arg isa Cmd ? join(arg.exec, ' ') : arg if default - @test !occursin(arg, get_julia_cmd(arg)) + @test !occursin(str, get_julia_cmd(arg)) else - @test occursin(arg, get_julia_cmd(arg)) + @test occursin(str, get_julia_cmd(arg)) end end end + + # Test empty `cpu_target` gives a helpful error message, issue #52209. + io = IOBuffer() + p = run(pipeline(`$(Base.julia_cmd(; cpu_target="")) --startup-file=no -e ''`; stderr=io); wait=false) + wait(p) + @test p.exitcode == 1 + @test occursin("empty CPU name", String(take!(io))) end let exename = `$(Base.julia_cmd()) --startup-file=no --color=no` From 2638522b7576fce9a951ac54efbdbbacf7148a8d Mon Sep 17 00:00:00 2001 From: Mason Protter Date: Mon, 27 Nov 2023 07:00:19 +0100 Subject: [PATCH 207/413] Memoize `cwstring` when used for env lookup / modification on Windows (#51371) ~This is just me proposing a suggestion from @KristofferC in https://discourse.julialang.org/t/debug-has-massive-performance-impact/103974/22, it's all his code / idea, not mine.~ This PR makes it so that on windows, we pre-allocate an `IdDict` and every time someone looks up environment variables (motivating example here is `@debug` statements), we store the result of `cwstring(::String)` in that `IdDict` so that it doesn't need to be re-computed for future uses. The idea behind this is that people have observed that [using `@debug` is significantly more costly on Windows than other platforms](https://discourse.julialang.org/t/debug-has-massive-performance-impact/103974), even though we have documented in that manual that it should be a really cheap operation. @KristofferC suggests this is due to the fact that [checking environment variables in Windows is more costly](https://discourse.julialang.org/t/debug-has-massive-performance-impact/103974/18). ~The idea here is that we preallocate a `Cwstring` on Windows that just holds the text `"JULIA_DEBUG"`, so that if `access_env(f, "JULIA_DEBUG")` gets called, we don't need to create a new `Cwstring` and then throw it away each time.~ --------- Co-authored-by: Ian Butterworth Co-authored-by: Jameson Nash (cherry picked from commit 9dcedaa8ec198b49387a8459e4daff1474b93ce2) --- base/env.jl | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/base/env.jl b/base/env.jl index 077b3a4ed28e5..27594acff6b7f 100644 --- a/base/env.jl +++ b/base/env.jl @@ -3,12 +3,29 @@ if Sys.iswindows() const ERROR_ENVVAR_NOT_FOUND = UInt32(203) + const env_dict = IdDict{String, Vector{Cwchar_t}}() + const env_lock = ReentrantLock() + + function memoized_env_lookup(str::AbstractString) + # Windows environment variables have a different format from Linux / MacOS, and previously + # incurred allocations because we had to convert a String to a Vector{Cwchar_t} each time + # an environment variable was looked up. This function memoizes that lookup process, storing + # the String => Vector{Cwchar_t} pairs in env_dict + var = get(env_dict, str, nothing) + if isnothing(var) + var = @lock env_lock begin + env_dict[str] = cwstring(str) + end + end + var + end + _getenvlen(var::Vector{UInt16}) = ccall(:GetEnvironmentVariableW,stdcall,UInt32,(Ptr{UInt16},Ptr{UInt16},UInt32),var,C_NULL,0) _hasenv(s::Vector{UInt16}) = _getenvlen(s) != 0 || Libc.GetLastError() != ERROR_ENVVAR_NOT_FOUND - _hasenv(s::AbstractString) = _hasenv(cwstring(s)) + _hasenv(s::AbstractString) = _hasenv(memoized_env_lookup(s)) function access_env(onError::Function, str::AbstractString) - var = cwstring(str) + var = memoized_env_lookup(str) len = _getenvlen(var) if len == 0 return Libc.GetLastError() != ERROR_ENVVAR_NOT_FOUND ? "" : onError(str) @@ -21,7 +38,7 @@ if Sys.iswindows() end function _setenv(svar::AbstractString, sval::AbstractString, overwrite::Bool=true) - var = cwstring(svar) + var = memoized_env_lookup(svar) val = cwstring(sval) if overwrite || !_hasenv(var) ret = ccall(:SetEnvironmentVariableW,stdcall,Int32,(Ptr{UInt16},Ptr{UInt16}),var,val) @@ -30,7 +47,7 @@ if Sys.iswindows() end function _unsetenv(svar::AbstractString) - var = cwstring(svar) + var = memoized_env_lookup(svar) ret = ccall(:SetEnvironmentVariableW,stdcall,Int32,(Ptr{UInt16},Ptr{UInt16}),var,C_NULL) windowserror(:setenv, ret == 0 && Libc.GetLastError() != ERROR_ENVVAR_NOT_FOUND) end From 9c097b673938875c8320e95c5531e7a8c4db939a Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Fri, 17 Nov 2023 03:41:28 +0100 Subject: [PATCH 208/413] Revert "Support sorting iterators (#46104)" (#52010) Co-authored-by: Lilith Orion Hafner (cherry picked from commit 1cb85ad3fb1ba32e18be9be67775d1b36dc27079) --- base/sort.jl | 43 ++----------------------------------------- test/sorting.jl | 36 ------------------------------------ 2 files changed, 2 insertions(+), 77 deletions(-) diff --git a/base/sort.jl b/base/sort.jl index a5d3927c450c4..971a68fa3d725 100644 --- a/base/sort.jl +++ b/base/sort.jl @@ -5,8 +5,7 @@ module Sort using Base.Order using Base: copymutable, midpoint, require_one_based_indexing, uinttype, - sub_with_overflow, add_with_overflow, OneTo, BitSigned, BitIntegerType, top_set_bit, - IteratorSize, HasShape, IsInfinite, tail + sub_with_overflow, add_with_overflow, OneTo, BitSigned, BitIntegerType, top_set_bit import Base: sort, @@ -1470,12 +1469,6 @@ end Variant of [`sort!`](@ref) that returns a sorted copy of `v` leaving `v` itself unmodified. -Returns something [`similar`](@ref) to `v` when `v` is an `AbstractArray` and uses -[`collect`](@ref) to support arbitrary non-`AbstractArray` iterables. - -!!! compat "Julia 1.10" - `sort` of arbitrary iterables requires at least Julia 1.10. - # Examples ```jldoctest julia> v = [3, 1, 2]; @@ -1493,39 +1486,7 @@ julia> v 2 ``` """ -function sort(v; kws...) - size = IteratorSize(v) - size == HasShape{0}() && throw(ArgumentError("$v cannot be sorted")) - size == IsInfinite() && throw(ArgumentError("infinite iterator $v cannot be sorted")) - sort!(collect(v); kws...) -end -sort(v::AbstractVector; kws...) = sort!(copymutable(v); kws...) # for method disambiguation -sort(::AbstractString; kws...) = - throw(ArgumentError("sort(::AbstractString) is not supported")) -sort(::Tuple; kws...) = - throw(ArgumentError("sort(::Tuple) is only supported for NTuples")) - -function sort(x::NTuple{N}; lt::Function=isless, by::Function=identity, - rev::Union{Bool,Nothing}=nothing, order::Ordering=Forward) where N - o = ord(lt,by,rev,order) - if N > 9 - v = sort!(collect(x), DEFAULT_STABLE, o) - tuple((v[i] for i in 1:N)...) - else - _sort(x, o) - end -end -_sort(x::Union{NTuple{0}, NTuple{1}}, o::Ordering) = x -function _sort(x::NTuple, o::Ordering) - a, b = Base.IteratorsMD.split(x, Val(length(x)>>1)) - merge(_sort(a, o), _sort(b, o), o) -end -merge(x::NTuple, y::NTuple{0}, o::Ordering) = x -merge(x::NTuple{0}, y::NTuple, o::Ordering) = y -merge(x::NTuple{0}, y::NTuple{0}, o::Ordering) = x # Method ambiguity -merge(x::NTuple, y::NTuple, o::Ordering) = - (lt(o, y[1], x[1]) ? (y[1], merge(x, tail(y), o)...) : (x[1], merge(tail(x), y, o)...)) - +sort(v::AbstractVector; kws...) = sort!(copymutable(v); kws...) ## partialsortperm: the permutation to sort the first k elements of an array ## diff --git a/test/sorting.jl b/test/sorting.jl index c12f07ae750d7..81376ab5cd114 100644 --- a/test/sorting.jl +++ b/test/sorting.jl @@ -88,20 +88,6 @@ end vcat(2000, (x:x+99 for x in 1900:-100:100)..., 1:99) end -function tuple_sort_test(x) - @test issorted(sort(x)) - length(x) > 9 && return # length > 9 uses a vector fallback - @test 0 == @allocated sort(x) -end -@testset "sort(::NTuple)" begin - @test sort((9,8,3,3,6,2,0,8)) == (0,2,3,3,6,8,8,9) - @test sort((9,8,3,3,6,2,0,8), by=x->x÷3) == (2,0,3,3,8,6,8,9) - for i in 1:40 - tuple_sort_test(tuple(rand(i)...)) - end - @test_throws ArgumentError sort((1,2,3.0)) -end - @testset "partialsort" begin @test partialsort([3,6,30,1,9],3) == 6 @test partialsort([3,6,30,1,9],3:4) == [6,9] @@ -544,28 +530,6 @@ end @test isequal(a, [8,6,7,NaN,5,3,0,9]) end -@testset "sort!(iterable)" begin - gen = (x % 7 + 0.1x for x in 1:50) - @test sort(gen) == sort!(collect(gen)) - gen = (x % 7 + 0.1y for x in 1:10, y in 1:5) - @test sort(gen; dims=1) == sort!(collect(gen); dims=1) - @test sort(gen; dims=2) == sort!(collect(gen); dims=2) - - @test_throws ArgumentError("dimension out of range") sort(gen; dims=3) - - @test_throws UndefKeywordError(:dims) sort(gen) - @test_throws UndefKeywordError(:dims) sort(collect(gen)) - @test_throws UndefKeywordError(:dims) sort!(collect(gen)) - - @test_throws ArgumentError sort("string") - @test_throws ArgumentError("1 cannot be sorted") sort(1) - - @test sort(Set((1, 3, 6))) == [1, 3, 6] - @test sort(Dict((1=>9, 3=>2, 6=>5))) == [1=>9, 3=>2, 6=>5] - @test sort(keys(Dict((1=>2, 3=>5, 6=>9)))) == [1, 3, 6] - @test sort(values(Dict((1=>9, 3=>2, 6=>5)))) == [2, 5, 9] -end - @testset "sort!(::AbstractVector{<:Integer}) with short int range" begin a = view([9:-1:0;], :)::SubArray sort!(a) From 2030e7df55658c5523f006e7fbfd0e61323f3b41 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Fri, 24 Nov 2023 17:35:51 -0500 Subject: [PATCH 209/413] Turn Method Overwritten Error into a PrecompileError -- turning off caching (#52214) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #52213 Overwritting methods during cache creation is currently not something that the system can support and can lead to surprising, counter-intuitive and fatal errors. In 1.10 we turned it from a warning to a strong error, with this PR it remains a strong error, but the precompilation system recognizes it and essentially sets `__precompile__(false)` for this module and all modules that depend on it. Before: ``` julia> using OverwriteMethodError [ Info: Precompiling OverwriteMethodError [top-level] WARNING: Method definition +(Bool, Bool) in module Base at bool.jl:166 overwritten in module OverwriteMethodError at /home/vchuravy/src/julia2/OverwriteMethodError.jl:2. ERROR: LoadError: Method overwriting is not permitted during Module precompile. Stacktrace: [1] top-level scope @ ~/src/julia2/OverwriteMethodError.jl:2 [2] include @ Base ./Base.jl:489 [inlined] [3] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt128}}, source::Nothing) @ Base ./loading.jl:2216 [4] top-level scope @ stdin:3 in expression starting at /home/vchuravy/src/julia2/OverwriteMethodError.jl:1 in expression starting at stdin:3 ERROR: Failed to precompile OverwriteMethodError [top-level] to "/home/vchuravy/.julia/compiled/v1.10/jl_guiuCQ". Stacktrace: [1] error(s::String) @ Base ./error.jl:35 [2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool) @ Base ./loading.jl:2462 [3] compilecache @ Base ./loading.jl:2334 [inlined] [4] (::Base.var"#968#969"{Base.PkgId})() @ Base ./loading.jl:1968 [5] mkpidlock(f::Base.var"#968#969"{Base.PkgId}, at::String, pid::Int32; kwopts::@Kwargs{stale_age::Int64, wait::Bool}) @ FileWatching.Pidfile ~/.julia/juliaup/julia-1.10.0-rc1+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:93 [6] #mkpidlock#6 @ FileWatching.Pidfile ~/.julia/juliaup/julia-1.10.0-rc1+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:88 [inlined] [7] trymkpidlock(::Function, ::Vararg{Any}; kwargs::@Kwargs{stale_age::Int64}) @ FileWatching.Pidfile ~/.julia/juliaup/julia-1.10.0-rc1+0.x64.linux.gnu/share/julia/stdlib/v1.10/FileWatching/src/pidfile.jl:111 [8] #invokelatest#2 @ Base ./essentials.jl:889 [inlined] [9] invokelatest @ Base ./essentials.jl:884 [inlined] [10] maybe_cachefile_lock(f::Base.var"#968#969"{Base.PkgId}, pkg::Base.PkgId, srcpath::String; stale_age::Int64) @ Base ./loading.jl:2977 [11] maybe_cachefile_lock @ Base ./loading.jl:2974 [inlined] [12] _require(pkg::Base.PkgId, env::String) @ Base ./loading.jl:1964 [13] __require_prelocked(uuidkey::Base.PkgId, env::String) @ Base ./loading.jl:1806 [14] #invoke_in_world#3 @ Base ./essentials.jl:921 [inlined] [15] invoke_in_world @ Base ./essentials.jl:918 [inlined] [16] _require_prelocked(uuidkey::Base.PkgId, env::String) @ Base ./loading.jl:1797 [17] macro expansion @ Base ./loading.jl:1784 [inlined] [18] macro expansion @ Base ./lock.jl:267 [inlined] [19] __require(into::Module, mod::Symbol) @ Base ./loading.jl:1747 [20] #invoke_in_world#3 @ Base ./essentials.jl:921 [inlined] [21] invoke_in_world @ Base ./essentials.jl:918 [inlined] [22] require(into::Module, mod::Symbol) @ Base ./loading.jl:1740 ``` After: ``` julia> using OverwriteMethodError ┌ Info: Precompiling OverwriteMethodError [top-level] └ @ Base loading.jl:2486 WARNING: Method definition +(Bool, Bool) in module Base at bool.jl:166 overwritten in module OverwriteMethodError at /home/vchuravy/src/julia2/OverwriteMethodError.jl:2. ERROR: Method overwriting is not permitted during Module precompile. ┌ Info: Skipping precompilation since __precompile__(false). Importing OverwriteMethodError [top-level]. └ @ Base loading.jl:2084 ``` --------- Co-authored-by: Kristoffer Carlsson (cherry picked from commit 9e8fe688c5e32bde3ab48bb71f9d4ab45ef272ee) --- base/boot.jl | 2 ++ base/loading.jl | 2 +- src/gf.c | 6 ++++-- src/jl_exported_data.inc | 1 + src/jltypes.c | 1 + src/julia.h | 1 + src/staticdata.c | 3 ++- test/precompile.jl | 11 +++++++++++ 8 files changed, 23 insertions(+), 4 deletions(-) diff --git a/base/boot.jl b/base/boot.jl index 78b7daaf47d64..561be564d58f4 100644 --- a/base/boot.jl +++ b/base/boot.jl @@ -370,6 +370,8 @@ struct InitError <: WrappedException error end +struct PrecompilableError <: Exception end + String(s::String) = s # no constructor yet const Cvoid = Nothing diff --git a/base/loading.jl b/base/loading.jl index d748283c7c9d8..bbc14c3f1d591 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -1686,7 +1686,7 @@ function include_dependency(path::AbstractString) end # we throw PrecompilableError when a module doesn't want to be precompiled -struct PrecompilableError <: Exception end +import Core: PrecompilableError function show(io::IO, ex::PrecompilableError) print(io, "Declaring __precompile__(false) is not allowed in files that are being precompiled.") end diff --git a/src/gf.c b/src/gf.c index 9ee77a8426432..1b6251078fa1f 100644 --- a/src/gf.c +++ b/src/gf.c @@ -1568,8 +1568,10 @@ static void method_overwrite(jl_typemap_entry_t *newentry, jl_method_t *oldvalue jl_printf(s, ".\n"); jl_uv_flush(s); } - if (jl_generating_output()) - jl_error("Method overwriting is not permitted during Module precompile."); + if (jl_generating_output()) { + jl_printf(JL_STDERR, "ERROR: Method overwriting is not permitted during Module precompilation. Use `__precompile__(false)` to opt-out of precompilation.\n"); + jl_throw(jl_precompilable_error); + } } static void update_max_args(jl_methtable_t *mt, jl_value_t *type) diff --git a/src/jl_exported_data.inc b/src/jl_exported_data.inc index 092a48be81930..b9d4651ef24c0 100644 --- a/src/jl_exported_data.inc +++ b/src/jl_exported_data.inc @@ -126,6 +126,7 @@ XX(jl_voidpointer_type) \ XX(jl_void_type) \ XX(jl_weakref_type) \ + XX(jl_precompilable_error) \ // Data symbols that are defined inside the public libjulia #define JL_EXPORTED_DATA_SYMBOLS(XX) \ diff --git a/src/jltypes.c b/src/jltypes.c index a39bc935fb181..d61a06b06f159 100644 --- a/src/jltypes.c +++ b/src/jltypes.c @@ -3410,6 +3410,7 @@ void post_boot_hooks(void) jl_methoderror_type = (jl_datatype_t*)core("MethodError"); jl_loaderror_type = (jl_datatype_t*)core("LoadError"); jl_initerror_type = (jl_datatype_t*)core("InitError"); + jl_precompilable_error = jl_new_struct_uninit((jl_datatype_t*)core("PrecompilableError")); jl_pair_type = core("Pair"); jl_kwcall_func = core("kwcall"); jl_kwcall_mt = ((jl_datatype_t*)jl_typeof(jl_kwcall_func))->name->mt; diff --git a/src/julia.h b/src/julia.h index f4229eae909ac..6da03fb3d526a 100644 --- a/src/julia.h +++ b/src/julia.h @@ -829,6 +829,7 @@ extern JL_DLLIMPORT jl_value_t *jl_readonlymemory_exception JL_GLOBALLY_ROOTED; extern JL_DLLIMPORT jl_value_t *jl_diverror_exception JL_GLOBALLY_ROOTED; extern JL_DLLIMPORT jl_value_t *jl_undefref_exception JL_GLOBALLY_ROOTED; extern JL_DLLIMPORT jl_value_t *jl_interrupt_exception JL_GLOBALLY_ROOTED; +extern JL_DLLIMPORT jl_value_t *jl_precompilable_error JL_GLOBALLY_ROOTED; extern JL_DLLIMPORT jl_datatype_t *jl_boundserror_type JL_GLOBALLY_ROOTED; extern JL_DLLIMPORT jl_value_t *jl_an_empty_vec_any JL_GLOBALLY_ROOTED; extern JL_DLLIMPORT jl_value_t *jl_an_empty_string JL_GLOBALLY_ROOTED; diff --git a/src/staticdata.c b/src/staticdata.c index a974d98a39835..aae64ae2ffb51 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -99,7 +99,7 @@ extern "C" { // TODO: put WeakRefs on the weak_refs list during deserialization // TODO: handle finalizers -#define NUM_TAGS 158 +#define NUM_TAGS 159 // An array of references that need to be restored from the sysimg // This is a manually constructed dual of the gvars array, which would be produced by codegen for Julia code, for C. @@ -224,6 +224,7 @@ jl_value_t **const*const get_tags(void) { INSERT_TAG(jl_undefref_exception); INSERT_TAG(jl_readonlymemory_exception); INSERT_TAG(jl_atomicerror_type); + INSERT_TAG(jl_precompilable_error); // other special values INSERT_TAG(jl_emptysvec); diff --git a/test/precompile.jl b/test/precompile.jl index 82f445a115fee..e10d896da7d3f 100644 --- a/test/precompile.jl +++ b/test/precompile.jl @@ -504,6 +504,17 @@ precompile_test_harness(false) do dir """) @test Base.compilecache(Base.PkgId("Baz")) == Base.PrecompilableError() # due to __precompile__(false) + + OverwriteMethodError_file = joinpath(dir, "OverwriteMethodError.jl") + write(OverwriteMethodError_file, + """ + module OverwriteMethodError + Base.:(+)(x::Bool, y::Bool) = false + end + """) + + @test Base.compilecache(Base.PkgId("OverwriteMethodError")) == Base.PrecompilableError() # due to piracy + @eval using Baz @test Base.invokelatest(Baz.baz) == 1 From 9f55128062c2c1fc65217fb858c84b08fa66f325 Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Mon, 13 Nov 2023 11:32:10 -0500 Subject: [PATCH 210/413] Devdocs on fixing precompile hangs, take 2 (#51895) This is #50914, with only the documentation changes, plus an improvement to the warning message. --------- Co-authored-by: Tim Holy Co-authored-by: Ian Butterworth (cherry picked from commit 6d5787a993ae7623df479217c9805767ceaa3556) --- doc/make.jl | 1 + doc/src/devdocs/img/precompilation_hang.png | Bin 0 -> 9175 bytes doc/src/devdocs/precompile_hang.md | 98 ++++++++++++++++++++ src/jl_uv.c | 9 +- 4 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 doc/src/devdocs/img/precompilation_hang.png create mode 100644 doc/src/devdocs/precompile_hang.md diff --git a/doc/make.jl b/doc/make.jl index a9343a3133a63..6bbc94b925b60 100644 --- a/doc/make.jl +++ b/doc/make.jl @@ -154,6 +154,7 @@ DevDocs = [ "devdocs/EscapeAnalysis.md", "devdocs/gc-sa.md", "devdocs/gc.md", + "devdocs/precompile_hang.md", ], "Developing/debugging Julia's C code" => [ "devdocs/backtraces.md", diff --git a/doc/src/devdocs/img/precompilation_hang.png b/doc/src/devdocs/img/precompilation_hang.png new file mode 100644 index 0000000000000000000000000000000000000000..d076b7697f2712a12aa8132197e95ea7e7014e2d GIT binary patch literal 9175 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 literal 0 HcmV?d00001 diff --git a/doc/src/devdocs/precompile_hang.md b/doc/src/devdocs/precompile_hang.md new file mode 100644 index 0000000000000..0de9c99792b64 --- /dev/null +++ b/doc/src/devdocs/precompile_hang.md @@ -0,0 +1,98 @@ +# Fixing precompilation hangs due to open tasks or IO + +On Julia 1.10 or higher, you might see the following message: + +![Screenshot of precompilation hang](./img/precompilation_hang.png) + +This may repeat. If it continues to repeat with no hints that it will +resolve itself, you may have a "precompilation hang" that requires +fixing. Even if it's transient, you might prefer to resolve it so that +users will not be bothered by this warning. This page walks you +through how to analyze and fix such issues. + +If you follow the advice and hit `Ctrl-C`, you might see + +``` +^C Interrupted: Exiting precompilation... + + 1 dependency had warnings during precompilation: +┌ Test1 [ac89d554-e2ba-40bc-bc5c-de68b658c982] +│ [pid 2745] waiting for IO to finish: +│ Handle type uv_handle_t->data +│ timer 0x55580decd1e0->0x7f94c3a4c340 +``` + +This message conveys two key pieces of information: + +- the hang is occurring during precompilation of `Test1`, a dependency of `Test2` (the package we were trying to load with `using Test2`) +- during precompilation of `Test1`, Julia created a `Timer` object (use `?Timer` if you're unfamiliar with Timers) which is still open; until that closes, the process is hung + +If this is enough of a hint for you to figure out how `timer = Timer(args...)` is being created, one good solution is to add `wait(timer)` if `timer` eventually finishes on its own, or `close(timer)` if you need to force-close it, before the final `end` of the module. + +However, there are cases that may not be that straightforward. Usually the best option is to start by determining whether the hang is due to code in Test1 or whether it is due to one of Test1's dependencies: + +- Option 1: `Pkg.add("Aqua")` and use [`Aqua.test_persistent_tasks`](https://juliatesting.github.io/Aqua.jl/dev/#Aqua.test_persistent_tasks-Tuple{Base.PkgId}). This should help you identify which package is causing the problem, after which the instructions [below](@ref pchang_fix) should be followed. If needed, you can create a `PkgId` as `Base.PkgId(UUID("..."), "Test1")`, where `...` comes from the `uuid` entry in `Test1/Project.toml`. +- Option 2: manually diagnose the source of the hang. + +To manually diagnose: + +1. `Pkg.develop("Test1")` +2. Comment out all the code `include`d or defined in `Test1`, *except* the `using/import` statements. +3. Try `using Test2` (or even `using Test1` assuming that hangs too) again + +Now we arrive at a fork in the road: either + +- the hang persists, indicating it is [due to one of your dependencies](@ref pchang_deps) +- the hang disappears, indicating that it is [due to something in your code](@ref pchang_fix). + +## [Diagnosing and fixing hangs due to a package dependency](@id pchang_deps) + +Use a binary search to identify the problematic dependency: start by commenting out half your dependencies, then when you isolate which half is responsible comment out half of that half, etc. (You don't have to remove them from the project, just comment out the `using`/`import` statements.) + +Once you've identified a suspect (here we'll call it `ThePackageYouThinkIsCausingTheProblem`), first try precompiling that package. If it also hangs during precompilation, continue chasing the problem backwards. + +However, most likely `ThePackageYouThinkIsCausingTheProblem` will precompile fine. This suggests it's in the function `ThePackageYouThinkIsCausingTheProblem.__init__`, which does not run during precompilation of `ThePackageYouThinkIsCausingTheProblem` but *does* in any package that loads `ThePackageYouThinkIsCausingTheProblem`. To test this theory, set up a minimal working example (MWE), something like + +```julia +(@v1.10) pkg> generate MWE + Generating project MWE: + MWE\Project.toml + MWE\src\MWE.jl +``` + +where the source code of `MWE.jl` is + +```julia +module MWE +using ThePackageYouThinkIsCausingTheProblem +end +``` + +and you've added `ThePackageYouThinkIsCausingTheProblem` to MWE's dependencies. + +If that MWE reproduces the hang, you've found your culprit: +`ThePackageYouThinkIsCausingTheProblem.__init__` must be creating the `Timer` object. If the timer object can be safely `close`d, that's a good option. Otherwise, the most common solution is to avoid creating the timer while *any* package is being precompiled: add + +```julia +ccall(:jl_generating_output, Cint, ()) == 1 && return nothing +``` + +as the first line of `ThePackageYouThinkIsCausingTheProblem.__init__`, and it will avoid doing any initialization in any Julia process whose purpose is to precompile packages. + +## [Fixing package code to avoid hangs](@id pchang_fix) + +Search your package for suggestive words (here like "Timer") and see if you can identify where the problem is being created. Note that a method *definition* like + +```julia +maketimer() = Timer(timer -> println("hi"), 0; interval=1) +``` + +is not problematic in and of itself: it can cause this problem only if `maketimer` gets called while the module is being defined. This might be happening from a top-level statement such as + +```julia +const GLOBAL_TIMER = maketimer() +``` + +or it might conceivably occur in a [precompile workload](https://github.com/JuliaLang/PrecompileTools.jl). + +If you struggle to identify the causative lines, then consider doing a binary search: comment out sections of your package (or `include` lines to omit entire files) until you've reduced the problem in scope. diff --git a/src/jl_uv.c b/src/jl_uv.c index 281dd798dbb36..62dc3a628d085 100644 --- a/src/jl_uv.c +++ b/src/jl_uv.c @@ -51,9 +51,9 @@ static void walk_print_cb(uv_handle_t *h, void *arg) npad += strlen(type); pad += npad < strlen(pad) ? npad : strlen(pad); if (fd == -1) - jl_safe_printf(" %s %s@%p->%p\n", type, pad, (void*)h, (void*)h->data); + jl_safe_printf(" %s %s%p->%p\n", type, pad, (void*)h, (void*)h->data); else - jl_safe_printf(" %s[%zd] %s@%p->%p\n", type, (size_t)fd, pad, (void*)h, (void*)h->data); + jl_safe_printf(" %s[%zd] %s%p->%p\n", type, (size_t)fd, pad, (void*)h, (void*)h->data); } static void wait_empty_func(uv_timer_t *t) @@ -63,9 +63,12 @@ static void wait_empty_func(uv_timer_t *t) if (!uv_loop_alive(t->loop)) return; jl_safe_printf("\n[pid %zd] waiting for IO to finish:\n" - " TYPE[FD/PID] @UV_HANDLE_T->DATA\n", + " Handle type uv_handle_t->data\n", (size_t)uv_os_getpid()); uv_walk(jl_io_loop, walk_print_cb, NULL); + if (jl_generating_output() && jl_options.incremental) { + jl_safe_printf("This means that a package has started a background task or event source that has not finished running. For precompilation to complete successfully, the event source needs to be closed explicitly. See the developer documentation on fixing precompilation hangs for more help.\n"); + } jl_gc_collect(JL_GC_FULL); } From 5c9602e137f5bd49daf184d74ed5a0a244fcd684 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Sat, 7 Oct 2023 18:53:10 -0400 Subject: [PATCH 211/413] Don't mark nonlocal symbols as hidden (#51596) Co-authored-by: Prem Chintalapudi (cherry picked from commit 341e9d067d0cbdce5fe85ff18d6ef5945cbadc28) --- src/aotcompile.cpp | 18 ++++++++++++++++-- src/codegen.cpp | 4 ++++ src/staticdata.c | 12 ++++++------ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index 05088394500c1..5fc9a30fc35c3 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -835,8 +835,12 @@ static SmallVector partitionModule(Module &M, unsigned threads) { continue; if (!canPartition(G)) continue; - G.setLinkage(GlobalValue::ExternalLinkage); - G.setVisibility(GlobalValue::HiddenVisibility); + // Currently ccallable global aliases have extern linkage, we only want to make the + // internally linked functions/global variables extern+hidden + if (G.hasLocalLinkage()) { + G.setLinkage(GlobalValue::ExternalLinkage); + G.setVisibility(GlobalValue::HiddenVisibility); + } if (auto F = dyn_cast(&G)) { partitioner.make(&G, getFunctionWeight(*F).weight); } else { @@ -1569,6 +1573,16 @@ void jl_dump_native_impl(void *native_code, Type *T_psize = dataM.getDataLayout().getIntPtrType(Context)->getPointerTo(); + // This should really be in jl_create_native, but we haven't + // yet set the target triple binary format correctly at that + // point. This should be resolved when we start JITting for + // COFF when we switch over to JITLink. + for (auto &GA : dataM.aliases()) { + // Global aliases are only used for ccallable things, so we should + // mark them as dllexport + addComdat(&GA, TheTriple); + } + // add metadata information if (imaging_mode) { multiversioning_preannotate(dataM); diff --git a/src/codegen.cpp b/src/codegen.cpp index ea00c9488e303..0528180d1b50d 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -6797,6 +6797,10 @@ const char *jl_generate_ccallable(LLVMOrcThreadSafeModuleRef llvmmod, void *sysi int found = jl_dlsym(sysimg_handle, name, &addr, 0); if (found) add_named_global(name, addr); + else { + err = jl_get_exceptionf(jl_errorexception_type, "%s not found in sysimg", name); + jl_throw(err); + } } else { jl_method_instance_t *lam = jl_get_specialization1((jl_tupletype_t*)sigt, world, &min_valid, &max_valid, 0); diff --git a/src/staticdata.c b/src/staticdata.c index aae64ae2ffb51..36961b58f375a 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -3372,7 +3372,7 @@ static jl_value_t *jl_validate_cache_file(ios_t *f, jl_array_t *depmods, uint64_ } // TODO?: refactor to make it easier to create the "package inspector" -static jl_value_t *jl_restore_package_image_from_stream(ios_t *f, jl_image_t *image, jl_array_t *depmods, int completeinfo, const char *pkgname, bool needs_permalloc) +static jl_value_t *jl_restore_package_image_from_stream(void* pkgimage_handle, ios_t *f, jl_image_t *image, jl_array_t *depmods, int completeinfo, const char *pkgname, bool needs_permalloc) { JL_TIMING(LOAD_IMAGE, LOAD_Pkgimg); jl_timing_printf(JL_TIMING_DEFAULT_BLOCK, pkgname); @@ -3427,7 +3427,7 @@ static jl_value_t *jl_restore_package_image_from_stream(ios_t *f, jl_image_t *im size_t world = jl_atomic_load_acquire(&jl_world_counter); jl_insert_backedges((jl_array_t*)edges, (jl_array_t*)ext_targets, (jl_array_t*)new_specializations, world); // restore external backedges (needs to be last) // reinit ccallables - jl_reinit_ccallable(&ccallable_list, base, NULL); + jl_reinit_ccallable(&ccallable_list, base, pkgimage_handle); arraylist_free(&ccallable_list); if (completeinfo) { @@ -3458,11 +3458,11 @@ static void jl_restore_system_image_from_stream(ios_t *f, jl_image_t *image, uin jl_restore_system_image_from_stream_(f, image, NULL, checksum | ((uint64_t)0xfdfcfbfa << 32), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); } -JL_DLLEXPORT jl_value_t *jl_restore_incremental_from_buf(const char *buf, jl_image_t *image, size_t sz, jl_array_t *depmods, int completeinfo, const char *pkgname, bool needs_permalloc) +JL_DLLEXPORT jl_value_t *jl_restore_incremental_from_buf(void* pkgimage_handle, const char *buf, jl_image_t *image, size_t sz, jl_array_t *depmods, int completeinfo, const char *pkgname, bool needs_permalloc) { ios_t f; ios_static_buffer(&f, (char*)buf, sz); - jl_value_t *ret = jl_restore_package_image_from_stream(&f, image, depmods, completeinfo, pkgname, needs_permalloc); + jl_value_t *ret = jl_restore_package_image_from_stream(pkgimage_handle, &f, image, depmods, completeinfo, pkgname, needs_permalloc); ios_close(&f); return ret; } @@ -3475,7 +3475,7 @@ JL_DLLEXPORT jl_value_t *jl_restore_incremental(const char *fname, jl_array_t *d "Cache file \"%s\" not found.\n", fname); } jl_image_t pkgimage = {}; - jl_value_t *ret = jl_restore_package_image_from_stream(&f, &pkgimage, depmods, completeinfo, pkgname, true); + jl_value_t *ret = jl_restore_package_image_from_stream(NULL, &f, &pkgimage, depmods, completeinfo, pkgname, true); ios_close(&f); return ret; } @@ -3546,7 +3546,7 @@ JL_DLLEXPORT jl_value_t *jl_restore_package_image_from_file(const char *fname, j jl_image_t pkgimage = jl_init_processor_pkgimg(pkgimg_handle); - jl_value_t* mod = jl_restore_incremental_from_buf(pkgimg_data, &pkgimage, *plen, depmods, completeinfo, pkgname, false); + jl_value_t* mod = jl_restore_incremental_from_buf(pkgimg_handle, pkgimg_data, &pkgimage, *plen, depmods, completeinfo, pkgname, false); return mod; } From 4aeef2147943ed21cd91b66fa867af9c2a52753e Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Wed, 25 Oct 2023 15:45:45 +0900 Subject: [PATCH 212/413] [REPLCompletions] allow symbol completions within incomplete macrocall expression (#51834) fix #51827 --------- Co-authored-by: Kristoffer Carlsson (cherry picked from commit 3b1ba62bd27e0dabbd2ec0a6c000edb8138c5915) --- stdlib/REPL/src/REPLCompletions.jl | 5 +++++ stdlib/REPL/test/replcompletions.jl | 24 ++++++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/stdlib/REPL/src/REPLCompletions.jl b/stdlib/REPL/src/REPLCompletions.jl index 94ca678b8f387..b94ea3da2890b 100644 --- a/stdlib/REPL/src/REPLCompletions.jl +++ b/stdlib/REPL/src/REPLCompletions.jl @@ -1041,6 +1041,11 @@ function complete_identifiers!(suggestions::Vector{Completion}, @nospecialize(ff if isinfix ex = ex.args[end] end + elseif isexpr(ex, :macrocall) && length(ex.args) > 1 + # allow symbol completions within potentially incomplete macrocalls + if s[end] ≠ '`' && s[end] ≠ ')' + ex = ex.args[end] + end end end append!(suggestions, complete_symbol(ex, name, ffunc, context_module)) diff --git a/stdlib/REPL/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl index c515ec5927dd3..63b629c5aa784 100644 --- a/stdlib/REPL/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -157,7 +157,7 @@ end test_complete(s) = map_completion_text(@inferred(completions(s, lastindex(s)))) test_scomplete(s) = map_completion_text(@inferred(shell_completions(s, lastindex(s)))) test_bslashcomplete(s) = map_completion_text(@inferred(bslash_completions(s, lastindex(s)))[2]) -test_complete_context(s, m) = map_completion_text(@inferred(completions(s,lastindex(s), m))) +test_complete_context(s, m=@__MODULE__) = map_completion_text(@inferred(completions(s,lastindex(s), m))) test_complete_foo(s) = test_complete_context(s, Main.CompletionFoo) test_complete_noshift(s) = map_completion_text(@inferred(completions(s, lastindex(s), Main, false))) @@ -1841,7 +1841,7 @@ function Base.getproperty(v::Issue36437, s::Symbol) end let s = "Issue36437(42)." - c, r, res = test_complete_context(s, @__MODULE__) + c, r, res = test_complete_context(s) @test res for n in ("a", "b", "c") @test n in c @@ -1849,7 +1849,7 @@ let s = "Issue36437(42)." end let s = "Some(Issue36437(42)).value." - c, r, res = test_complete_context(s, @__MODULE__) + c, r, res = test_complete_context(s) @test res for n in ("a", "b", "c") @test n in c @@ -1858,7 +1858,7 @@ end # aggressive concrete evaluation on mutable allocation in `repl_frame` let s = "Ref(Issue36437(42))[]." - c, r, res = test_complete_context(s, @__MODULE__) + c, r, res = test_complete_context(s) @test res for n in ("a", "b", "c") @test n in c @@ -1868,7 +1868,7 @@ end const global_xs = [Some(42)] let s = "pop!(global_xs)." - c, r, res = test_complete_context(s, @__MODULE__) + c, r, res = test_complete_context(s) @test res @test "value" in c end @@ -1900,7 +1900,7 @@ end Issue49892(x) = x let s = "Issue49892(fal" - c, r, res = test_complete_context(s, @__MODULE__) + c, r, res = test_complete_context(s) @test res for n in ("false", "falses") @test n in c @@ -1920,3 +1920,15 @@ for (s, compl) in (("2*CompletionFoo.nam", "named"), c, r = test_complete(s) @test only(c) == compl end + +# allows symbol completion within incomplete :macrocall +# https://github.com/JuliaLang/julia/issues/51827 +macro issue51827(args...) + length(args) ≥ 2 || error("@issue51827: incomplete arguments") + return args +end +let s = "@issue51827 Base.ac" + c, r, res = test_complete_context(s) + @test res + @test "acquire" in c +end From 4f7feb19f70d8aeef3b54ec7d13f992b0c6200cd Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Mon, 25 Sep 2023 13:20:19 +0200 Subject: [PATCH 213/413] add support for async backtraces of Tasks on any thread (#51430) (cherry picked from commit e5c6340e252986c0bba240a0924ee4b6885aeb65) --- src/Makefile | 2 +- src/gc-stacks.c | 80 +++++--- src/gc.c | 8 +- src/interpreter.c | 3 +- src/julia.h | 5 + src/julia_internal.h | 5 + src/julia_threads.h | 8 +- src/mtarraylist.c | 81 ++++++++ src/signals-mach.c | 29 ++- src/signals-unix.c | 54 +++-- src/signals-win.c | 109 ++++++---- src/stackwalk.c | 468 +++++++++++++++++++++++-------------------- src/threading.c | 6 +- 13 files changed, 531 insertions(+), 327 deletions(-) create mode 100644 src/mtarraylist.c diff --git a/src/Makefile b/src/Makefile index 3ea28e7c40324..08fb816d302a0 100644 --- a/src/Makefile +++ b/src/Makefile @@ -43,7 +43,7 @@ endif SRCS := \ jltypes gf typemap smallintset ast builtins module interpreter symbol \ dlload sys init task array staticdata toplevel jl_uv datatype \ - simplevector runtime_intrinsics precompile jloptions \ + simplevector runtime_intrinsics precompile jloptions mtarraylist \ threading partr stackwalk gc gc-debug gc-pages gc-stacks gc-alloc-profiler method \ jlapi signal-handling safepoint timing subtype rtutils gc-heap-snapshot \ crc32c APInt-C processor ircode opaque_closure codegen-stubs coverage runtime_ccall diff --git a/src/gc-stacks.c b/src/gc-stacks.c index b35c1722c82ff..b89ae8cb08e0d 100644 --- a/src/gc-stacks.c +++ b/src/gc-stacks.c @@ -112,7 +112,7 @@ static void _jl_free_stack(jl_ptls_t ptls, void *stkbuf, size_t bufsz) if (bufsz <= pool_sizes[JL_N_STACK_POOLS - 1]) { unsigned pool_id = select_pool(bufsz); if (pool_sizes[pool_id] == bufsz) { - arraylist_push(&ptls->heap.free_stacks[pool_id], stkbuf); + small_arraylist_push(&ptls->heap.free_stacks[pool_id], stkbuf); return; } } @@ -141,7 +141,7 @@ void jl_release_task_stack(jl_ptls_t ptls, jl_task_t *task) #ifdef _COMPILER_ASAN_ENABLED_ __asan_unpoison_stack_memory((uintptr_t)stkbuf, bufsz); #endif - arraylist_push(&ptls->heap.free_stacks[pool_id], stkbuf); + small_arraylist_push(&ptls->heap.free_stacks[pool_id], stkbuf); } } } @@ -156,9 +156,9 @@ JL_DLLEXPORT void *jl_malloc_stack(size_t *bufsz, jl_task_t *owner) JL_NOTSAFEPO if (ssize <= pool_sizes[JL_N_STACK_POOLS - 1]) { unsigned pool_id = select_pool(ssize); ssize = pool_sizes[pool_id]; - arraylist_t *pool = &ptls->heap.free_stacks[pool_id]; + small_arraylist_t *pool = &ptls->heap.free_stacks[pool_id]; if (pool->len > 0) { - stk = arraylist_pop(pool); + stk = small_arraylist_pop(pool); } } else { @@ -177,8 +177,8 @@ JL_DLLEXPORT void *jl_malloc_stack(size_t *bufsz, jl_task_t *owner) JL_NOTSAFEPO } *bufsz = ssize; if (owner) { - arraylist_t *live_tasks = &ptls->heap.live_tasks; - arraylist_push(live_tasks, owner); + small_arraylist_t *live_tasks = &ptls->heap.live_tasks; + mtarraylist_push(live_tasks, owner); } return stk; } @@ -202,7 +202,7 @@ void sweep_stack_pools(void) // free half of stacks that remain unused since last sweep for (int p = 0; p < JL_N_STACK_POOLS; p++) { - arraylist_t *al = &ptls2->heap.free_stacks[p]; + small_arraylist_t *al = &ptls2->heap.free_stacks[p]; size_t n_to_free; if (al->len > MIN_STACK_MAPPINGS_PER_POOL) { n_to_free = al->len / 2; @@ -213,12 +213,12 @@ void sweep_stack_pools(void) n_to_free = 0; } for (int n = 0; n < n_to_free; n++) { - void *stk = arraylist_pop(al); + void *stk = small_arraylist_pop(al); free_stack(stk, pool_sizes[p]); } } - arraylist_t *live_tasks = &ptls2->heap.live_tasks; + small_arraylist_t *live_tasks = &ptls2->heap.live_tasks; size_t n = 0; size_t ndel = 0; size_t l = live_tasks->len; @@ -261,24 +261,52 @@ void sweep_stack_pools(void) JL_DLLEXPORT jl_array_t *jl_live_tasks(void) { - jl_task_t *ct = jl_current_task; - jl_ptls_t ptls = ct->ptls; - arraylist_t *live_tasks = &ptls->heap.live_tasks; - size_t i, j, l; - jl_array_t *a; - do { - l = live_tasks->len; - a = jl_alloc_vec_any(l + 1); // may gc, changing the number of tasks - } while (l + 1 < live_tasks->len); - l = live_tasks->len; - void **lst = live_tasks->items; - j = 0; - ((void**)jl_array_data(a))[j++] = ptls->root_task; - for (i = 0; i < l; i++) { - if (((jl_task_t*)lst[i])->stkbuf != NULL) - ((void**)jl_array_data(a))[j++] = lst[i]; + size_t nthreads = jl_atomic_load_acquire(&jl_n_threads); + jl_ptls_t *allstates = jl_atomic_load_relaxed(&jl_all_tls_states); + size_t l = 0; // l is not reset on restart, so we keep getting more aggressive at making a big enough list everything it fails +restart: + for (size_t i = 0; i < nthreads; i++) { + // skip GC threads since they don't have tasks + if (gc_first_tid <= i && i < gc_first_tid + jl_n_gcthreads) { + continue; + } + jl_ptls_t ptls2 = allstates[i]; + if (ptls2 == NULL) + continue; + small_arraylist_t *live_tasks = &ptls2->heap.live_tasks; + size_t n = mtarraylist_length(live_tasks); + l += n + (ptls2->root_task->stkbuf != NULL); + } + l += l / 20; // add 5% for margin of estimation error + jl_array_t *a = jl_alloc_vec_any(l); // may gc, changing the number of tasks and forcing us to reload everything + nthreads = jl_atomic_load_acquire(&jl_n_threads); + allstates = jl_atomic_load_relaxed(&jl_all_tls_states); + size_t j = 0; + for (size_t i = 0; i < nthreads; i++) { + // skip GC threads since they don't have tasks + if (gc_first_tid <= i && i < gc_first_tid + jl_n_gcthreads) { + continue; + } + jl_ptls_t ptls2 = allstates[i]; + if (ptls2 == NULL) + continue; + jl_task_t *t = ptls2->root_task; + if (t->stkbuf != NULL) { + if (j == l) + goto restart; + ((void**)jl_array_data(a))[j++] = t; + } + small_arraylist_t *live_tasks = &ptls2->heap.live_tasks; + size_t n = mtarraylist_length(live_tasks); + for (size_t i = 0; i < n; i++) { + jl_task_t *t = (jl_task_t*)mtarraylist_get(live_tasks, i); + if (t->stkbuf != NULL) { + if (j == l) + goto restart; + ((void**)jl_array_data(a))[j++] = t; + } + } } - l = jl_array_len(a); if (j < l) { JL_GC_PUSH1(&a); jl_array_del_end(a, l - j); diff --git a/src/gc.c b/src/gc.c index 6b86f4cab81a8..72d878864352b 100644 --- a/src/gc.c +++ b/src/gc.c @@ -947,7 +947,7 @@ JL_DLLEXPORT jl_weakref_t *jl_gc_new_weakref_th(jl_ptls_t ptls, jl_weakref_t *wr = (jl_weakref_t*)jl_gc_alloc(ptls, sizeof(void*), jl_weakref_type); wr->value = value; // NOTE: wb not needed here - arraylist_push(&ptls->heap.weak_refs, wr); + small_arraylist_push(&ptls->heap.weak_refs, wr); return wr; } @@ -3510,8 +3510,10 @@ void jl_init_thread_heap(jl_ptls_t ptls) p[i].freelist = NULL; p[i].newpages = NULL; } - arraylist_new(&heap->weak_refs, 0); - arraylist_new(&heap->live_tasks, 0); + small_arraylist_new(&heap->weak_refs, 0); + small_arraylist_new(&heap->live_tasks, 0); + for (int i = 0; i < JL_N_STACK_POOLS; i++) + small_arraylist_new(&heap->free_stacks[i], 0); heap->mallocarrays = NULL; heap->mafreelist = NULL; heap->big_objects = NULL; diff --git a/src/interpreter.c b/src/interpreter.c index 2ad56e76b2549..d84a1381fccad 100644 --- a/src/interpreter.c +++ b/src/interpreter.c @@ -65,7 +65,8 @@ extern void JL_GC_ENABLEFRAME(interpreter_state*) JL_NOTSAFEPOINT; // we define this separately so that we can populate the frame before we add it to the backtrace // it's recommended to mark the containing function with NOINLINE, though not essential #define JL_GC_ENABLEFRAME(frame) \ - ((void**)&frame[1])[0] = __builtin_frame_address(0); + jl_signal_fence(); \ + ((void**)&frame[1])[0] = __builtin_frame_address(0); #endif diff --git a/src/julia.h b/src/julia.h index 6da03fb3d526a..1f85f06dd35dc 100644 --- a/src/julia.h +++ b/src/julia.h @@ -1050,6 +1050,11 @@ JL_DLLEXPORT void *jl_gc_managed_realloc(void *d, size_t sz, size_t oldsz, int isaligned, jl_value_t *owner); JL_DLLEXPORT void jl_gc_safepoint(void); +void *mtarraylist_get(small_arraylist_t *_a, size_t idx) JL_NOTSAFEPOINT; +size_t mtarraylist_length(small_arraylist_t *_a) JL_NOTSAFEPOINT; +void mtarraylist_add(small_arraylist_t *_a, void *elt, size_t idx) JL_NOTSAFEPOINT; +void mtarraylist_push(small_arraylist_t *_a, void *elt) JL_NOTSAFEPOINT; + // object accessors ----------------------------------------------------------- #define jl_svec_len(t) (((jl_svec_t*)(t))->length) diff --git a/src/julia_internal.h b/src/julia_internal.h index 3e4c01365a2fc..51661fa1835f9 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -203,6 +203,8 @@ JL_DLLEXPORT void jl_lock_profile(void) JL_NOTSAFEPOINT JL_NOTSAFEPOINT_ENTER; JL_DLLEXPORT void jl_unlock_profile(void) JL_NOTSAFEPOINT JL_NOTSAFEPOINT_LEAVE; JL_DLLEXPORT void jl_lock_profile_wr(void) JL_NOTSAFEPOINT JL_NOTSAFEPOINT_ENTER; JL_DLLEXPORT void jl_unlock_profile_wr(void) JL_NOTSAFEPOINT JL_NOTSAFEPOINT_LEAVE; +int jl_lock_stackwalk(void) JL_NOTSAFEPOINT JL_NOTSAFEPOINT_ENTER; +void jl_unlock_stackwalk(int lockret) JL_NOTSAFEPOINT JL_NOTSAFEPOINT_LEAVE; // number of cycles since power-on static inline uint64_t cycleclock(void) JL_NOTSAFEPOINT @@ -1162,6 +1164,9 @@ void jl_print_bt_entry_codeloc(jl_bt_element_t *bt_data) JL_NOTSAFEPOINT; #ifdef _OS_WINDOWS_ JL_DLLEXPORT void jl_refresh_dbg_module_list(void); #endif +int jl_thread_suspend_and_get_state(int tid, int timeout, bt_context_t *ctx) JL_NOTSAFEPOINT; +void jl_thread_resume(int tid) JL_NOTSAFEPOINT; + // *to is NULL or malloc'd pointer, from is allowed to be NULL STATIC_INLINE char *jl_copy_str(char **to, const char *from) JL_NOTSAFEPOINT { diff --git a/src/julia_threads.h b/src/julia_threads.h index f4c235243e684..8acbf9b53d90c 100644 --- a/src/julia_threads.h +++ b/src/julia_threads.h @@ -109,7 +109,7 @@ typedef struct { // handle to reference an OS thread #ifdef _OS_WINDOWS_ -typedef DWORD jl_thread_t; +typedef HANDLE jl_thread_t; #else typedef pthread_t jl_thread_t; #endif @@ -140,10 +140,10 @@ typedef struct { typedef struct { // variable for tracking weak references - arraylist_t weak_refs; + small_arraylist_t weak_refs; // live tasks started on this thread // that are holding onto a stack from the pool - arraylist_t live_tasks; + small_arraylist_t live_tasks; // variables for tracking malloc'd arrays struct _mallocarray_t *mallocarrays; @@ -170,7 +170,7 @@ typedef struct { jl_gc_pool_t norm_pools[JL_GC_N_POOLS]; #define JL_N_STACK_POOLS 16 - arraylist_t free_stacks[JL_N_STACK_POOLS]; + small_arraylist_t free_stacks[JL_N_STACK_POOLS]; } jl_thread_heap_t; typedef struct { diff --git a/src/mtarraylist.c b/src/mtarraylist.c new file mode 100644 index 0000000000000..8bad44797dab4 --- /dev/null +++ b/src/mtarraylist.c @@ -0,0 +1,81 @@ +// This file is a part of Julia. License is MIT: https://julialang.org/license + +#include "julia.h" +#include "julia_internal.h" +#include "julia_assert.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// this file provides some alternate API functions for small_arraylist (push and add) +// which can be safely observed from other threads concurrently +// there is only permitted to be a single writer thread (or a mutex) +// but there can be any number of observers + +typedef struct { + _Atomic(uint32_t) len; + uint32_t max; + _Atomic(_Atomic(void*)*) items; + _Atomic(void*) _space[SMALL_AL_N_INLINE]; +} small_mtarraylist_t; + +// change capacity to at least newlen +static void mtarraylist_resizeto(small_mtarraylist_t *a, size_t len, size_t newlen) JL_NOTSAFEPOINT +{ + size_t max = a->max; + if (newlen > max) { + size_t nm = max * 2; + if (nm == 0) + nm = 1; + while (newlen > nm) + nm *= 2; + void *olditems = (void*)jl_atomic_load_relaxed(&a->items); + void *p = calloc_s(nm * sizeof(void*)); + memcpy(p, olditems, len * sizeof(void*)); + jl_atomic_store_release(&a->items, (_Atomic(void*)*)p); + a->max = nm; + if (olditems != (void*)&a->_space[0]) { + jl_task_t *ct = jl_current_task; + jl_gc_add_quiescent(ct->ptls, (void**)olditems, free); + } + } +} + +// single-threaded +void mtarraylist_push(small_arraylist_t *_a, void *elt) +{ + small_mtarraylist_t *a = (small_mtarraylist_t*)_a; + size_t len = jl_atomic_load_relaxed(&a->len); + mtarraylist_resizeto(a, len, len + 1); + jl_atomic_store_release(&jl_atomic_load_relaxed(&a->items)[len], elt); + jl_atomic_store_release(&a->len, len + 1); +} + +// single-threaded +void mtarraylist_add(small_arraylist_t *_a, void *elt, size_t idx) +{ + small_mtarraylist_t *a = (small_mtarraylist_t*)_a; + size_t len = jl_atomic_load_relaxed(&a->len); + mtarraylist_resizeto(a, len, idx + 1); + jl_atomic_store_release(&jl_atomic_load_relaxed(&a->items)[idx], elt); + if (jl_atomic_load_relaxed(&a->len) < idx + 1) + jl_atomic_store_release(&a->len, idx + 1); +} + +// concurrent-safe +size_t mtarraylist_length(small_arraylist_t *_a) +{ + small_mtarraylist_t *a = (small_mtarraylist_t*)_a; + return jl_atomic_load_relaxed(&a->len); +} + +// concurrent-safe +void *mtarraylist_get(small_arraylist_t *_a, size_t idx) +{ + small_mtarraylist_t *a = (small_mtarraylist_t*)_a; + size_t len = jl_atomic_load_acquire(&a->len); + if (idx >= len) + return NULL; + return jl_atomic_load_relaxed(&jl_atomic_load_relaxed(&a->items)[idx]); +} diff --git a/src/signals-mach.c b/src/signals-mach.c index 02bb044609ade..6ec8f95570f17 100644 --- a/src/signals-mach.c +++ b/src/signals-mach.c @@ -384,12 +384,12 @@ static void attach_exception_port(thread_port_t thread, int segv_only) HANDLE_MACH_ERROR("thread_set_exception_ports", ret); } -static int jl_thread_suspend_and_get_state2(int tid, host_thread_state_t *ctx) +static int jl_thread_suspend_and_get_state2(int tid, host_thread_state_t *ctx) JL_NOTSAFEPOINT { jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; if (ptls2 == NULL) // this thread is not alive return 0; - jl_task_t *ct2 = ptls2 ? jl_atomic_load_relaxed(&ptls2->current_task) : NULL; + jl_task_t *ct2 = jl_atomic_load_relaxed(&ptls2->current_task); if (ct2 == NULL) // this thread is already dead return 0; @@ -407,18 +407,18 @@ static int jl_thread_suspend_and_get_state2(int tid, host_thread_state_t *ctx) return 1; } -static void jl_thread_suspend_and_get_state(int tid, int timeout, unw_context_t **ctx) +int jl_thread_suspend_and_get_state(int tid, int timeout, bt_context_t *ctx) { (void)timeout; - static host_thread_state_t state; + host_thread_state_t state; if (!jl_thread_suspend_and_get_state2(tid, &state)) { - *ctx = NULL; - return; + return 0; } - *ctx = (unw_context_t*)&state; + *ctx = *(unw_context_t*)&state; + return 1; } -static void jl_thread_resume(int tid, int sig) +void jl_thread_resume(int tid) { jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; mach_port_t thread = pthread_mach_thread_np(ptls2->system_id); @@ -593,8 +593,15 @@ static void jl_unlock_profile_mach(int dlsymlock, int keymgr_locked) jl_unlock_profile(); } -#define jl_lock_profile() int keymgr_locked = jl_lock_profile_mach(1) -#define jl_unlock_profile() jl_unlock_profile_mach(1, keymgr_locked) +int jl_lock_stackwalk(void) +{ + return jl_lock_profile_mach(1); +} + +void jl_unlock_stackwalk(int lockret) +{ + jl_unlock_profile_mach(1, lockret); +} void *mach_profile_listener(void *arg) { @@ -691,7 +698,7 @@ void *mach_profile_listener(void *arg) bt_data_prof[bt_size_cur++].uintptr = 0; } // We're done! Resume the thread. - jl_thread_resume(i, 0); + jl_thread_resume(i); } jl_unlock_profile_mach(0, keymgr_locked); if (running) { diff --git a/src/signals-unix.c b/src/signals-unix.c index b2056947e2b8a..0d5ad9b1be7c5 100644 --- a/src/signals-unix.c +++ b/src/signals-unix.c @@ -291,6 +291,18 @@ int exc_reg_is_write_fault(uintptr_t esr) { #include "signals-mach.c" #else +int jl_lock_stackwalk(void) +{ + jl_lock_profile(); + return 0; +} + +void jl_unlock_stackwalk(int lockret) +{ + (void)lockret; + jl_unlock_profile(); +} + #if defined(_OS_LINUX_) && (defined(_CPU_X86_64_) || defined(_CPU_X86_)) int is_write_fault(void *context) { @@ -384,12 +396,12 @@ JL_NO_ASAN static void segv_handler(int sig, siginfo_t *info, void *context) } #if !defined(JL_DISABLE_LIBUNWIND) -static unw_context_t *signal_context; +static bt_context_t *signal_context; pthread_mutex_t in_signal_lock; static pthread_cond_t exit_signal_cond; static pthread_cond_t signal_caught_cond; -static void jl_thread_suspend_and_get_state(int tid, int timeout, unw_context_t **ctx) +int jl_thread_suspend_and_get_state(int tid, int timeout, bt_context_t *ctx) { struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); @@ -399,9 +411,8 @@ static void jl_thread_suspend_and_get_state(int tid, int timeout, unw_context_t jl_task_t *ct2 = ptls2 ? jl_atomic_load_relaxed(&ptls2->current_task) : NULL; if (ct2 == NULL) { // this thread is not alive or already dead - *ctx = NULL; pthread_mutex_unlock(&in_signal_lock); - return; + return 0; } jl_atomic_store_release(&ptls2->signal_request, 1); pthread_kill(ptls2->system_id, SIGUSR2); @@ -410,9 +421,8 @@ static void jl_thread_suspend_and_get_state(int tid, int timeout, unw_context_t if (err == ETIMEDOUT) { sig_atomic_t request = 1; if (jl_atomic_cmpswap(&ptls2->signal_request, &request, 0)) { - *ctx = NULL; pthread_mutex_unlock(&in_signal_lock); - return; + return 0; } // Request is either now 0 (meaning the other thread is waiting for // exit_signal_cond already), @@ -429,15 +439,16 @@ static void jl_thread_suspend_and_get_state(int tid, int timeout, unw_context_t // checking it is 0, and add an acquire barrier for good measure) int request = jl_atomic_load_acquire(&ptls2->signal_request); assert(request == 0); (void) request; - *ctx = signal_context; + jl_atomic_store_release(&ptls2->signal_request, 1); // prepare to resume normally + *ctx = *signal_context; + return 1; } -static void jl_thread_resume(int tid, int sig) +void jl_thread_resume(int tid) { jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; - jl_atomic_store_release(&ptls2->signal_request, sig == -1 ? 3 : 1); pthread_cond_broadcast(&exit_signal_cond); - pthread_cond_wait(&signal_caught_cond, &in_signal_lock); // wait for thread to acknowledge + pthread_cond_wait(&signal_caught_cond, &in_signal_lock); // wait for thread to acknowledge (so that signal_request doesn't get mixed up) // The other thread is waiting to leave exit_signal_cond (verify that here by // checking it is 0, and add an acquire barrier for good measure) int request = jl_atomic_load_acquire(&ptls2->signal_request); @@ -472,14 +483,14 @@ CFI_NORETURN static void jl_exit_thread0(int signo, jl_bt_element_t *bt_data, size_t bt_size) { jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[0]; - unw_context_t *signal_context; + bt_context_t signal_context; // This also makes sure `sleep` is aborted. - jl_thread_suspend_and_get_state(0, 30, &signal_context); - if (signal_context != NULL) { + if (jl_thread_suspend_and_get_state(0, 30, &signal_context)) { thread0_exit_signo = signo; ptls2->bt_size = bt_size; // <= JL_MAX_BT_SIZE memcpy(ptls2->bt_data, bt_data, ptls2->bt_size * sizeof(bt_data[0])); - jl_thread_resume(0, -1); // resume with message 3 (call jl_exit_thread0_cb) + jl_atomic_store_release(&ptls2->signal_request, 3); + jl_thread_resume(0); // resume with message 3 (call jl_exit_thread0_cb) } else { // thread 0 is gone? just do the exit ourself @@ -840,11 +851,11 @@ static void *signal_listener(void *arg) int nthreads = jl_atomic_load_acquire(&jl_n_threads); bt_size = 0; #if !defined(JL_DISABLE_LIBUNWIND) - unw_context_t *signal_context; + bt_context_t signal_context; // sample each thread, round-robin style in reverse order // (so that thread zero gets notified last) if (critical || profile) { - jl_lock_profile(); + int lockret = jl_lock_stackwalk(); int *randperm; if (profile) randperm = profile_get_randperm(nthreads); @@ -852,8 +863,7 @@ static void *signal_listener(void *arg) // Stop the threads in the random or reverse round-robin order. int i = profile ? randperm[idx] : idx; // notify thread to stop - jl_thread_suspend_and_get_state(i, 1, &signal_context); - if (signal_context == NULL) + if (!jl_thread_suspend_and_get_state(i, 1, &signal_context)) continue; // do backtrace on thread contexts for critical signals @@ -861,7 +871,7 @@ static void *signal_listener(void *arg) if (critical) { bt_size += rec_backtrace_ctx(bt_data + bt_size, JL_MAX_BT_SIZE / nthreads - 1, - signal_context, NULL); + &signal_context, NULL); bt_data[bt_size++].uintptr = 0; } @@ -883,7 +893,7 @@ static void *signal_listener(void *arg) } else { // Get backtrace data bt_size_cur += rec_backtrace_ctx((jl_bt_element_t*)bt_data_prof + bt_size_cur, - bt_size_max - bt_size_cur - 1, signal_context, NULL); + bt_size_max - bt_size_cur - 1, &signal_context, NULL); } jl_set_safe_restore(old_buf); @@ -908,9 +918,9 @@ static void *signal_listener(void *arg) } // notify thread to resume - jl_thread_resume(i, sig); + jl_thread_resume(i); } - jl_unlock_profile(); + jl_unlock_stackwalk(lockret); } #ifndef HAVE_MACH if (profile && running) { diff --git a/src/signals-win.c b/src/signals-win.c index 7cd3b02462851..10bd0dec7f480 100644 --- a/src/signals-win.c +++ b/src/signals-win.c @@ -344,6 +344,54 @@ JL_DLLEXPORT void jl_install_sigint_handler(void) static volatile HANDLE hBtThread = 0; +int jl_thread_suspend_and_get_state(int tid, int timeout, bt_context_t *ctx) +{ + (void)timeout; + jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; + if (ptls2 == NULL) // this thread is not alive + return 0; + jl_task_t *ct2 = jl_atomic_load_relaxed(&ptls2->current_task); + if (ct2 == NULL) // this thread is already dead + return 0; + HANDLE hThread = ptls2->system_id; + if ((DWORD)-1 == SuspendThread(hThread)) + return 0; + assert(sizeof(*ctx) == sizeof(CONTEXT)); + memset(ctx, 0, sizeof(CONTEXT)); + ctx->ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER; + if (!GetThreadContext(hThread, ctx)) { + if ((DWORD)-1 == ResumeThread(hThread)) + abort(); + return 0; + } + return 1; +} + +void jl_thread_resume(int tid) +{ + jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[tid]; + HANDLE hThread = ptls2->system_id; + if ((DWORD)-1 == ResumeThread(hThread)) { + fputs("failed to resume main thread! aborting.", stderr); + abort(); + } +} + +int jl_lock_stackwalk(void) +{ + uv_mutex_lock(&jl_in_stackwalk); + jl_lock_profile(); + return 0; +} + +void jl_unlock_stackwalk(int lockret) +{ + (void)lockret; + jl_unlock_profile(); + uv_mutex_unlock(&jl_in_stackwalk); +} + + static DWORD WINAPI profile_bt( LPVOID lparam ) { // Note: illegal to use jl_* functions from this thread except for profiling-specific functions @@ -357,58 +405,45 @@ static DWORD WINAPI profile_bt( LPVOID lparam ) continue; } else { - uv_mutex_lock(&jl_in_stackwalk); - jl_lock_profile(); - if ((DWORD)-1 == SuspendThread(hMainThread)) { - fputs("failed to suspend main thread. aborting profiling.", stderr); - break; - } + // TODO: bring this up to parity with other OS by adding loop over tid here + int lockret = jl_lock_stackwalk(); CONTEXT ctxThread; - memset(&ctxThread, 0, sizeof(CONTEXT)); - ctxThread.ContextFlags = CONTEXT_CONTROL | CONTEXT_INTEGER; - if (!GetThreadContext(hMainThread, &ctxThread)) { - fputs("failed to get context from main thread. aborting profiling.", stderr); + if (!jl_thread_suspend_and_get_state(0, 0, &ctxThread)) { + jl_unlock_stackwalk(lockret); + fputs("failed to suspend main thread. aborting profiling.", stderr); jl_profile_stop_timer(); + break; } - else { - // Get backtrace data - bt_size_cur += rec_backtrace_ctx((jl_bt_element_t*)bt_data_prof + bt_size_cur, - bt_size_max - bt_size_cur - 1, &ctxThread, NULL); + // Get backtrace data + bt_size_cur += rec_backtrace_ctx((jl_bt_element_t*)bt_data_prof + bt_size_cur, + bt_size_max - bt_size_cur - 1, &ctxThread, NULL); - jl_ptls_t ptls = jl_atomic_load_relaxed(&jl_all_tls_states)[0]; // given only profiling hMainThread + jl_ptls_t ptls = jl_atomic_load_relaxed(&jl_all_tls_states)[0]; // given only profiling hMainThread - // store threadid but add 1 as 0 is preserved to indicate end of block - bt_data_prof[bt_size_cur++].uintptr = ptls->tid + 1; + // store threadid but add 1 as 0 is preserved to indicate end of block + bt_data_prof[bt_size_cur++].uintptr = ptls->tid + 1; - // store task id (never null) - bt_data_prof[bt_size_cur++].jlvalue = (jl_value_t*)jl_atomic_load_relaxed(&ptls->current_task); + // store task id (never null) + bt_data_prof[bt_size_cur++].jlvalue = (jl_value_t*)jl_atomic_load_relaxed(&ptls->current_task); - // store cpu cycle clock - bt_data_prof[bt_size_cur++].uintptr = cycleclock(); + // store cpu cycle clock + bt_data_prof[bt_size_cur++].uintptr = cycleclock(); - // store whether thread is sleeping but add 1 as 0 is preserved to indicate end of block - bt_data_prof[bt_size_cur++].uintptr = jl_atomic_load_relaxed(&ptls->sleep_check_state) + 1; + // store whether thread is sleeping but add 1 as 0 is preserved to indicate end of block + bt_data_prof[bt_size_cur++].uintptr = jl_atomic_load_relaxed(&ptls->sleep_check_state) + 1; - // Mark the end of this block with two 0's - bt_data_prof[bt_size_cur++].uintptr = 0; - bt_data_prof[bt_size_cur++].uintptr = 0; - } - jl_unlock_profile(); - uv_mutex_unlock(&jl_in_stackwalk); - if ((DWORD)-1 == ResumeThread(hMainThread)) { - jl_profile_stop_timer(); - fputs("failed to resume main thread! aborting.", stderr); - jl_gc_debug_critical_error(); - abort(); - } + // Mark the end of this block with two 0's + bt_data_prof[bt_size_cur++].uintptr = 0; + bt_data_prof[bt_size_cur++].uintptr = 0; + jl_unlock_stackwalk(lockret); + jl_thread_resume(0); jl_check_profile_autostop(); } } } - jl_unlock_profile(); uv_mutex_unlock(&jl_in_stackwalk); jl_profile_stop_timer(); - hBtThread = 0; + hBtThread = NULL; return 0; } diff --git a/src/stackwalk.c b/src/stackwalk.c index 18bf4b2126938..cd4e46c204281 100644 --- a/src/stackwalk.c +++ b/src/stackwalk.c @@ -856,7 +856,7 @@ _os_ptr_munge(uintptr_t ptr) extern bt_context_t *jl_to_bt_context(void *sigctx); -void jl_rec_backtrace(jl_task_t *t) JL_NOTSAFEPOINT +static void jl_rec_backtrace(jl_task_t *t) JL_NOTSAFEPOINT { jl_task_t *ct = jl_current_task; jl_ptls_t ptls = ct->ptls; @@ -865,222 +865,242 @@ void jl_rec_backtrace(jl_task_t *t) JL_NOTSAFEPOINT ptls->bt_size = rec_backtrace(ptls->bt_data, JL_MAX_BT_SIZE, 0); return; } - if (t->copy_stack || !t->started || t->stkbuf == NULL) - return; - int16_t old = -1; - if (!jl_atomic_cmpswap(&t->tid, &old, ptls->tid) && old != ptls->tid) - return; bt_context_t *context = NULL; -#if defined(_OS_WINDOWS_) bt_context_t c; - memset(&c, 0, sizeof(c)); - _JUMP_BUFFER *mctx = (_JUMP_BUFFER*)&t->ctx.ctx.uc_mcontext; + int16_t old = -1; + while (!jl_atomic_cmpswap(&t->tid, &old, ptls->tid) && old != ptls->tid) { + int lockret = jl_lock_stackwalk(); + // if this task is already running somewhere, we need to stop the thread it is running on and query its state + if (!jl_thread_suspend_and_get_state(old, 0, &c)) { + jl_unlock_stackwalk(lockret); + return; + } + jl_unlock_stackwalk(lockret); + if (jl_atomic_load_relaxed(&t->tid) == old) { + jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[old]; + if (ptls2->previous_task == t || // we might print the wrong stack here, since we can't know whether we executed the swapcontext yet or not, but it at least avoids trying to access the state inside uc_mcontext which might not be set yet + (ptls2->previous_task == NULL && jl_atomic_load_relaxed(&ptls2->current_task) == t)) { // this case should be always accurate + // use the thread context for the unwind state + context = &c; + } + break; + } + // got the wrong thread stopped, try again + jl_thread_resume(old); + } + if (context == NULL && (!t->copy_stack && t->started && t->stkbuf != NULL)) { + // need to read the context from the task stored state +#if defined(_OS_WINDOWS_) + memset(&c, 0, sizeof(c)); + _JUMP_BUFFER *mctx = (_JUMP_BUFFER*)&t->ctx.ctx.uc_mcontext; #if defined(_CPU_X86_64_) - c.Rbx = mctx->Rbx; - c.Rsp = mctx->Rsp; - c.Rbp = mctx->Rbp; - c.Rsi = mctx->Rsi; - c.Rdi = mctx->Rdi; - c.R12 = mctx->R12; - c.R13 = mctx->R13; - c.R14 = mctx->R14; - c.R15 = mctx->R15; - c.Rip = mctx->Rip; - memcpy(&c.Xmm6, &mctx->Xmm6, 10 * sizeof(mctx->Xmm6)); // Xmm6-Xmm15 + c.Rbx = mctx->Rbx; + c.Rsp = mctx->Rsp; + c.Rbp = mctx->Rbp; + c.Rsi = mctx->Rsi; + c.Rdi = mctx->Rdi; + c.R12 = mctx->R12; + c.R13 = mctx->R13; + c.R14 = mctx->R14; + c.R15 = mctx->R15; + c.Rip = mctx->Rip; + memcpy(&c.Xmm6, &mctx->Xmm6, 10 * sizeof(mctx->Xmm6)); // Xmm6-Xmm15 #else - c.Eip = mctx->Eip; - c.Esp = mctx->Esp; - c.Ebp = mctx->Ebp; + c.Eip = mctx->Eip; + c.Esp = mctx->Esp; + c.Ebp = mctx->Ebp; #endif - context = &c; + context = &c; #elif defined(JL_HAVE_UNW_CONTEXT) - context = &t->ctx.ctx; + context = &t->ctx.ctx; #elif defined(JL_HAVE_UCONTEXT) - context = jl_to_bt_context(&t->ctx.ctx); + context = jl_to_bt_context(&t->ctx.ctx); #elif defined(JL_HAVE_ASM) - bt_context_t c; - memset(&c, 0, sizeof(c)); - #if defined(_OS_LINUX_) && defined(__GLIBC__) - __jmp_buf *mctx = &t->ctx.ctx.uc_mcontext->__jmpbuf; - mcontext_t *mc = &c.uc_mcontext; - #if defined(_CPU_X86_) - // https://github.com/bminor/glibc/blame/master/sysdeps/i386/__longjmp.S - // https://github.com/bminor/glibc/blame/master/sysdeps/i386/jmpbuf-offsets.h - // https://github.com/bminor/musl/blame/master/src/setjmp/i386/longjmp.s - mc->gregs[REG_EBX] = (*mctx)[0]; - mc->gregs[REG_ESI] = (*mctx)[1]; - mc->gregs[REG_EDI] = (*mctx)[2]; - mc->gregs[REG_EBP] = (*mctx)[3]; - mc->gregs[REG_ESP] = (*mctx)[4]; - mc->gregs[REG_EIP] = (*mctx)[5]; - // ifdef PTR_DEMANGLE ? - mc->gregs[REG_ESP] = ptr_demangle(mc->gregs[REG_ESP]); - mc->gregs[REG_EIP] = ptr_demangle(mc->gregs[REG_EIP]); - context = &c; - #elif defined(_CPU_X86_64_) - // https://github.com/bminor/glibc/blame/master/sysdeps/x86_64/__longjmp.S - // https://github.com/bminor/glibc/blame/master/sysdeps/x86_64/jmpbuf-offsets.h - // https://github.com/bminor/musl/blame/master/src/setjmp/x86_64/setjmp.s - mc->gregs[REG_RBX] = (*mctx)[0]; - mc->gregs[REG_RBP] = (*mctx)[1]; - mc->gregs[REG_R12] = (*mctx)[2]; - mc->gregs[REG_R13] = (*mctx)[3]; - mc->gregs[REG_R14] = (*mctx)[4]; - mc->gregs[REG_R15] = (*mctx)[5]; - mc->gregs[REG_RSP] = (*mctx)[6]; - mc->gregs[REG_RIP] = (*mctx)[7]; - // ifdef PTR_DEMANGLE ? - mc->gregs[REG_RBP] = ptr_demangle(mc->gregs[REG_RBP]); - mc->gregs[REG_RSP] = ptr_demangle(mc->gregs[REG_RSP]); - mc->gregs[REG_RIP] = ptr_demangle(mc->gregs[REG_RIP]); - context = &c; - #elif defined(_CPU_ARM_) - // https://github.com/bminor/glibc/blame/master/sysdeps/arm/__longjmp.S - // https://github.com/bminor/glibc/blame/master/sysdeps/arm/include/bits/setjmp.h - // https://github.com/bminor/musl/blame/master/src/setjmp/arm/longjmp.S - mc->arm_sp = (*mctx)[0]; - mc->arm_lr = (*mctx)[1]; - mc->arm_r4 = (*mctx)[2]; // aka v1 - mc->arm_r5 = (*mctx)[3]; // aka v2 - mc->arm_r6 = (*mctx)[4]; // aka v3 - mc->arm_r7 = (*mctx)[5]; // aka v4 - mc->arm_r8 = (*mctx)[6]; // aka v5 - mc->arm_r9 = (*mctx)[7]; // aka v6 aka sb - mc->arm_r10 = (*mctx)[8]; // aka v7 aka sl - mc->arm_fp = (*mctx)[10]; // aka v8 aka r11 - // ifdef PTR_DEMANGLE ? - mc->arm_sp = ptr_demangle(mc->arm_sp); - mc->arm_lr = ptr_demangle(mc->arm_lr); - mc->arm_pc = mc->arm_lr; - context = &c; - #elif defined(_CPU_AARCH64_) - // https://github.com/bminor/glibc/blame/master/sysdeps/aarch64/__longjmp.S - // https://github.com/bminor/glibc/blame/master/sysdeps/aarch64/jmpbuf-offsets.h - // https://github.com/bminor/musl/blame/master/src/setjmp/aarch64/longjmp.s - // https://github.com/libunwind/libunwind/blob/ec171c9ba7ea3abb2a1383cee2988a7abd483a1f/src/aarch64/unwind_i.h#L62 - unw_fpsimd_context_t *mcfp = (unw_fpsimd_context_t*)&mc->__reserved; - mc->regs[19] = (*mctx)[0]; - mc->regs[20] = (*mctx)[1]; - mc->regs[21] = (*mctx)[2]; - mc->regs[22] = (*mctx)[3]; - mc->regs[23] = (*mctx)[4]; - mc->regs[24] = (*mctx)[5]; - mc->regs[25] = (*mctx)[6]; - mc->regs[26] = (*mctx)[7]; - mc->regs[27] = (*mctx)[8]; - mc->regs[28] = (*mctx)[9]; - mc->regs[29] = (*mctx)[10]; // aka fp - mc->regs[30] = (*mctx)[11]; // aka lr - // Yes, they did skip 12 why writing the code originally; and, no, I do not know why. - mc->sp = (*mctx)[13]; - mcfp->vregs[7] = (*mctx)[14]; // aka d8 - mcfp->vregs[8] = (*mctx)[15]; // aka d9 - mcfp->vregs[9] = (*mctx)[16]; // aka d10 - mcfp->vregs[10] = (*mctx)[17]; // aka d11 - mcfp->vregs[11] = (*mctx)[18]; // aka d12 - mcfp->vregs[12] = (*mctx)[19]; // aka d13 - mcfp->vregs[13] = (*mctx)[20]; // aka d14 - mcfp->vregs[14] = (*mctx)[21]; // aka d15 - // ifdef PTR_DEMANGLE ? - mc->sp = ptr_demangle(mc->sp); - mc->regs[30] = ptr_demangle(mc->regs[30]); - mc->pc = mc->regs[30]; - context = &c; - #else - #pragma message("jl_rec_backtrace not defined for ASM/SETJMP on unknown linux") - (void)mc; - (void)c; - (void)mctx; - #endif - #elif defined(_OS_DARWIN_) - sigjmp_buf *mctx = &t->ctx.ctx.uc_mcontext; - #if defined(_CPU_X86_64_) - // from https://github.com/apple/darwin-libplatform/blob/main/src/setjmp/x86_64/_setjmp.s - x86_thread_state64_t *mc = (x86_thread_state64_t*)&c; - mc->__rbx = ((uint64_t*)mctx)[0]; - mc->__rbp = ((uint64_t*)mctx)[1]; - mc->__rsp = ((uint64_t*)mctx)[2]; - mc->__r12 = ((uint64_t*)mctx)[3]; - mc->__r13 = ((uint64_t*)mctx)[4]; - mc->__r14 = ((uint64_t*)mctx)[5]; - mc->__r15 = ((uint64_t*)mctx)[6]; - mc->__rip = ((uint64_t*)mctx)[7]; - // added in libsystem_plaform 177.200.16 (macOS Mojave 10.14.3) - // prior to that _os_ptr_munge_token was (hopefully) typically 0, - // so x ^ 0 == x and this is a no-op - mc->__rbp = _OS_PTR_UNMUNGE(mc->__rbp); - mc->__rsp = _OS_PTR_UNMUNGE(mc->__rsp); - mc->__rip = _OS_PTR_UNMUNGE(mc->__rip); - context = &c; - #elif defined(_CPU_AARCH64_) - // from https://github.com/apple/darwin-libplatform/blob/main/src/setjmp/arm64/setjmp.s - // https://github.com/apple/darwin-xnu/blob/main/osfmk/mach/arm/_structs.h - // https://github.com/llvm/llvm-project/blob/7714e0317520207572168388f22012dd9e152e9e/libunwind/src/Registers.hpp -> Registers_arm64 - arm_thread_state64_t *mc = (arm_thread_state64_t*)&c; - mc->__x[19] = ((uint64_t*)mctx)[0]; - mc->__x[20] = ((uint64_t*)mctx)[1]; - mc->__x[21] = ((uint64_t*)mctx)[2]; - mc->__x[22] = ((uint64_t*)mctx)[3]; - mc->__x[23] = ((uint64_t*)mctx)[4]; - mc->__x[24] = ((uint64_t*)mctx)[5]; - mc->__x[25] = ((uint64_t*)mctx)[6]; - mc->__x[26] = ((uint64_t*)mctx)[7]; - mc->__x[27] = ((uint64_t*)mctx)[8]; - mc->__x[28] = ((uint64_t*)mctx)[9]; - mc->__x[10] = ((uint64_t*)mctx)[10]; - mc->__x[11] = ((uint64_t*)mctx)[11]; - mc->__x[12] = ((uint64_t*)mctx)[12]; - // 13 is reserved/unused - double *mcfp = (double*)&mc[1]; - mcfp[7] = ((uint64_t*)mctx)[14]; // aka d8 - mcfp[8] = ((uint64_t*)mctx)[15]; // aka d9 - mcfp[9] = ((uint64_t*)mctx)[16]; // aka d10 - mcfp[10] = ((uint64_t*)mctx)[17]; // aka d11 - mcfp[11] = ((uint64_t*)mctx)[18]; // aka d12 - mcfp[12] = ((uint64_t*)mctx)[19]; // aka d13 - mcfp[13] = ((uint64_t*)mctx)[20]; // aka d14 - mcfp[14] = ((uint64_t*)mctx)[21]; // aka d15 - mc->__fp = _OS_PTR_UNMUNGE(mc->__x[10]); - mc->__lr = _OS_PTR_UNMUNGE(mc->__x[11]); - mc->__x[12] = _OS_PTR_UNMUNGE(mc->__x[12]); - mc->__sp = mc->__x[12]; - // libunwind is broken for signed-pointers, but perhaps best not to leave the signed pointer lying around either - mc->__pc = ptrauth_strip(mc->__lr, 0); - mc->__pad = 0; // aka __ra_sign_state = not signed - context = &c; - #else - #pragma message("jl_rec_backtrace not defined for ASM/SETJMP on unknown darwin") - (void)mctx; - (void)c; - #endif - #elif defined(_OS_FREEBSD_) && defined(_CPU_X86_64_) - sigjmp_buf *mctx = &t->ctx.ctx.uc_mcontext; - mcontext_t *mc = &c.uc_mcontext; - // https://github.com/freebsd/freebsd-src/blob/releng/13.1/lib/libc/amd64/gen/_setjmp.S - mc->mc_rip = ((long*)mctx)[0]; - mc->mc_rbx = ((long*)mctx)[1]; - mc->mc_rsp = ((long*)mctx)[2]; - mc->mc_rbp = ((long*)mctx)[3]; - mc->mc_r12 = ((long*)mctx)[4]; - mc->mc_r13 = ((long*)mctx)[5]; - mc->mc_r14 = ((long*)mctx)[6]; - mc->mc_r15 = ((long*)mctx)[7]; - context = &c; - #else - #pragma message("jl_rec_backtrace not defined for ASM/SETJMP on unknown system") - (void)c; - #endif + memset(&c, 0, sizeof(c)); + #if defined(_OS_LINUX_) && defined(__GLIBC__) + __jmp_buf *mctx = &t->ctx.ctx.uc_mcontext->__jmpbuf; + mcontext_t *mc = &c.uc_mcontext; + #if defined(_CPU_X86_) + // https://github.com/bminor/glibc/blame/master/sysdeps/i386/__longjmp.S + // https://github.com/bminor/glibc/blame/master/sysdeps/i386/jmpbuf-offsets.h + // https://github.com/bminor/musl/blame/master/src/setjmp/i386/longjmp.s + mc->gregs[REG_EBX] = (*mctx)[0]; + mc->gregs[REG_ESI] = (*mctx)[1]; + mc->gregs[REG_EDI] = (*mctx)[2]; + mc->gregs[REG_EBP] = (*mctx)[3]; + mc->gregs[REG_ESP] = (*mctx)[4]; + mc->gregs[REG_EIP] = (*mctx)[5]; + // ifdef PTR_DEMANGLE ? + mc->gregs[REG_ESP] = ptr_demangle(mc->gregs[REG_ESP]); + mc->gregs[REG_EIP] = ptr_demangle(mc->gregs[REG_EIP]); + context = &c; + #elif defined(_CPU_X86_64_) + // https://github.com/bminor/glibc/blame/master/sysdeps/x86_64/__longjmp.S + // https://github.com/bminor/glibc/blame/master/sysdeps/x86_64/jmpbuf-offsets.h + // https://github.com/bminor/musl/blame/master/src/setjmp/x86_64/setjmp.s + mc->gregs[REG_RBX] = (*mctx)[0]; + mc->gregs[REG_RBP] = (*mctx)[1]; + mc->gregs[REG_R12] = (*mctx)[2]; + mc->gregs[REG_R13] = (*mctx)[3]; + mc->gregs[REG_R14] = (*mctx)[4]; + mc->gregs[REG_R15] = (*mctx)[5]; + mc->gregs[REG_RSP] = (*mctx)[6]; + mc->gregs[REG_RIP] = (*mctx)[7]; + // ifdef PTR_DEMANGLE ? + mc->gregs[REG_RBP] = ptr_demangle(mc->gregs[REG_RBP]); + mc->gregs[REG_RSP] = ptr_demangle(mc->gregs[REG_RSP]); + mc->gregs[REG_RIP] = ptr_demangle(mc->gregs[REG_RIP]); + context = &c; + #elif defined(_CPU_ARM_) + // https://github.com/bminor/glibc/blame/master/sysdeps/arm/__longjmp.S + // https://github.com/bminor/glibc/blame/master/sysdeps/arm/include/bits/setjmp.h + // https://github.com/bminor/musl/blame/master/src/setjmp/arm/longjmp.S + mc->arm_sp = (*mctx)[0]; + mc->arm_lr = (*mctx)[1]; + mc->arm_r4 = (*mctx)[2]; // aka v1 + mc->arm_r5 = (*mctx)[3]; // aka v2 + mc->arm_r6 = (*mctx)[4]; // aka v3 + mc->arm_r7 = (*mctx)[5]; // aka v4 + mc->arm_r8 = (*mctx)[6]; // aka v5 + mc->arm_r9 = (*mctx)[7]; // aka v6 aka sb + mc->arm_r10 = (*mctx)[8]; // aka v7 aka sl + mc->arm_fp = (*mctx)[10]; // aka v8 aka r11 + // ifdef PTR_DEMANGLE ? + mc->arm_sp = ptr_demangle(mc->arm_sp); + mc->arm_lr = ptr_demangle(mc->arm_lr); + mc->arm_pc = mc->arm_lr; + context = &c; + #elif defined(_CPU_AARCH64_) + // https://github.com/bminor/glibc/blame/master/sysdeps/aarch64/__longjmp.S + // https://github.com/bminor/glibc/blame/master/sysdeps/aarch64/jmpbuf-offsets.h + // https://github.com/bminor/musl/blame/master/src/setjmp/aarch64/longjmp.s + // https://github.com/libunwind/libunwind/blob/ec171c9ba7ea3abb2a1383cee2988a7abd483a1f/src/aarch64/unwind_i.h#L62 + unw_fpsimd_context_t *mcfp = (unw_fpsimd_context_t*)&mc->__reserved; + mc->regs[19] = (*mctx)[0]; + mc->regs[20] = (*mctx)[1]; + mc->regs[21] = (*mctx)[2]; + mc->regs[22] = (*mctx)[3]; + mc->regs[23] = (*mctx)[4]; + mc->regs[24] = (*mctx)[5]; + mc->regs[25] = (*mctx)[6]; + mc->regs[26] = (*mctx)[7]; + mc->regs[27] = (*mctx)[8]; + mc->regs[28] = (*mctx)[9]; + mc->regs[29] = (*mctx)[10]; // aka fp + mc->regs[30] = (*mctx)[11]; // aka lr + // Yes, they did skip 12 why writing the code originally; and, no, I do not know why. + mc->sp = (*mctx)[13]; + mcfp->vregs[7] = (*mctx)[14]; // aka d8 + mcfp->vregs[8] = (*mctx)[15]; // aka d9 + mcfp->vregs[9] = (*mctx)[16]; // aka d10 + mcfp->vregs[10] = (*mctx)[17]; // aka d11 + mcfp->vregs[11] = (*mctx)[18]; // aka d12 + mcfp->vregs[12] = (*mctx)[19]; // aka d13 + mcfp->vregs[13] = (*mctx)[20]; // aka d14 + mcfp->vregs[14] = (*mctx)[21]; // aka d15 + // ifdef PTR_DEMANGLE ? + mc->sp = ptr_demangle(mc->sp); + mc->regs[30] = ptr_demangle(mc->regs[30]); + mc->pc = mc->regs[30]; + context = &c; + #else + #pragma message("jl_rec_backtrace not defined for ASM/SETJMP on unknown linux") + (void)mc; + (void)c; + (void)mctx; + #endif + #elif defined(_OS_DARWIN_) + sigjmp_buf *mctx = &t->ctx.ctx.uc_mcontext; + #if defined(_CPU_X86_64_) + // from https://github.com/apple/darwin-libplatform/blob/main/src/setjmp/x86_64/_setjmp.s + x86_thread_state64_t *mc = (x86_thread_state64_t*)&c; + mc->__rbx = ((uint64_t*)mctx)[0]; + mc->__rbp = ((uint64_t*)mctx)[1]; + mc->__rsp = ((uint64_t*)mctx)[2]; + mc->__r12 = ((uint64_t*)mctx)[3]; + mc->__r13 = ((uint64_t*)mctx)[4]; + mc->__r14 = ((uint64_t*)mctx)[5]; + mc->__r15 = ((uint64_t*)mctx)[6]; + mc->__rip = ((uint64_t*)mctx)[7]; + // added in libsystem_plaform 177.200.16 (macOS Mojave 10.14.3) + // prior to that _os_ptr_munge_token was (hopefully) typically 0, + // so x ^ 0 == x and this is a no-op + mc->__rbp = _OS_PTR_UNMUNGE(mc->__rbp); + mc->__rsp = _OS_PTR_UNMUNGE(mc->__rsp); + mc->__rip = _OS_PTR_UNMUNGE(mc->__rip); + context = &c; + #elif defined(_CPU_AARCH64_) + // from https://github.com/apple/darwin-libplatform/blob/main/src/setjmp/arm64/setjmp.s + // https://github.com/apple/darwin-xnu/blob/main/osfmk/mach/arm/_structs.h + // https://github.com/llvm/llvm-project/blob/7714e0317520207572168388f22012dd9e152e9e/libunwind/src/Registers.hpp -> Registers_arm64 + arm_thread_state64_t *mc = (arm_thread_state64_t*)&c; + mc->__x[19] = ((uint64_t*)mctx)[0]; + mc->__x[20] = ((uint64_t*)mctx)[1]; + mc->__x[21] = ((uint64_t*)mctx)[2]; + mc->__x[22] = ((uint64_t*)mctx)[3]; + mc->__x[23] = ((uint64_t*)mctx)[4]; + mc->__x[24] = ((uint64_t*)mctx)[5]; + mc->__x[25] = ((uint64_t*)mctx)[6]; + mc->__x[26] = ((uint64_t*)mctx)[7]; + mc->__x[27] = ((uint64_t*)mctx)[8]; + mc->__x[28] = ((uint64_t*)mctx)[9]; + mc->__x[10] = ((uint64_t*)mctx)[10]; + mc->__x[11] = ((uint64_t*)mctx)[11]; + mc->__x[12] = ((uint64_t*)mctx)[12]; + // 13 is reserved/unused + double *mcfp = (double*)&mc[1]; + mcfp[7] = ((uint64_t*)mctx)[14]; // aka d8 + mcfp[8] = ((uint64_t*)mctx)[15]; // aka d9 + mcfp[9] = ((uint64_t*)mctx)[16]; // aka d10 + mcfp[10] = ((uint64_t*)mctx)[17]; // aka d11 + mcfp[11] = ((uint64_t*)mctx)[18]; // aka d12 + mcfp[12] = ((uint64_t*)mctx)[19]; // aka d13 + mcfp[13] = ((uint64_t*)mctx)[20]; // aka d14 + mcfp[14] = ((uint64_t*)mctx)[21]; // aka d15 + mc->__fp = _OS_PTR_UNMUNGE(mc->__x[10]); + mc->__lr = _OS_PTR_UNMUNGE(mc->__x[11]); + mc->__x[12] = _OS_PTR_UNMUNGE(mc->__x[12]); + mc->__sp = mc->__x[12]; + // libunwind is broken for signed-pointers, but perhaps best not to leave the signed pointer lying around either + mc->__pc = ptrauth_strip(mc->__lr, 0); + mc->__pad = 0; // aka __ra_sign_state = not signed + context = &c; + #else + #pragma message("jl_rec_backtrace not defined for ASM/SETJMP on unknown darwin") + (void)mctx; + (void)c; + #endif + #elif defined(_OS_FREEBSD_) && defined(_CPU_X86_64_) + sigjmp_buf *mctx = &t->ctx.ctx.uc_mcontext; + mcontext_t *mc = &c.uc_mcontext; + // https://github.com/freebsd/freebsd-src/blob/releng/13.1/lib/libc/amd64/gen/_setjmp.S + mc->mc_rip = ((long*)mctx)[0]; + mc->mc_rbx = ((long*)mctx)[1]; + mc->mc_rsp = ((long*)mctx)[2]; + mc->mc_rbp = ((long*)mctx)[3]; + mc->mc_r12 = ((long*)mctx)[4]; + mc->mc_r13 = ((long*)mctx)[5]; + mc->mc_r14 = ((long*)mctx)[6]; + mc->mc_r15 = ((long*)mctx)[7]; + context = &c; + #else + #pragma message("jl_rec_backtrace not defined for ASM/SETJMP on unknown system") + (void)c; + #endif #elif defined(JL_HAVE_ASYNCIFY) - #pragma message("jl_rec_backtrace not defined for ASYNCIFY") + #pragma message("jl_rec_backtrace not defined for ASYNCIFY") #elif defined(JL_HAVE_SIGALTSTACK) - #pragma message("jl_rec_backtrace not defined for SIGALTSTACK") + #pragma message("jl_rec_backtrace not defined for SIGALTSTACK") #else - #pragma message("jl_rec_backtrace not defined for unknown task system") + #pragma message("jl_rec_backtrace not defined for unknown task system") #endif + } if (context) - ptls->bt_size = rec_backtrace_ctx(ptls->bt_data, JL_MAX_BT_SIZE, context, t->gcstack); + ptls->bt_size = rec_backtrace_ctx(ptls->bt_data, JL_MAX_BT_SIZE, context, t->gcstack); if (old == -1) jl_atomic_store_relaxed(&t->tid, old); + else if (old != ptls->tid) + jl_thread_resume(old); } //-------------------------------------------------- @@ -1107,7 +1127,7 @@ JL_DLLEXPORT void jlbacktrace(void) JL_NOTSAFEPOINT } } -// Print backtrace for specified task +// Print backtrace for specified task to jl_safe_printf stderr JL_DLLEXPORT void jlbacktracet(jl_task_t *t) JL_NOTSAFEPOINT { jl_task_t *ct = jl_current_task; @@ -1125,34 +1145,42 @@ JL_DLLEXPORT void jl_print_backtrace(void) JL_NOTSAFEPOINT jlbacktrace(); } -// Print backtraces for all live tasks, for all threads. -// WARNING: this is dangerous and can crash if used outside of gdb, if -// all of Julia's threads are not stopped! +// Print backtraces for all live tasks, for all threads, to jl_safe_printf stderr JL_DLLEXPORT void jl_print_task_backtraces(int show_done) JL_NOTSAFEPOINT { size_t nthreads = jl_atomic_load_acquire(&jl_n_threads); jl_ptls_t *allstates = jl_atomic_load_relaxed(&jl_all_tls_states); for (size_t i = 0; i < nthreads; i++) { jl_ptls_t ptls2 = allstates[i]; - arraylist_t *live_tasks = &ptls2->heap.live_tasks; - size_t n = live_tasks->len; + if (ptls2 == NULL) + continue; + small_arraylist_t *live_tasks = &ptls2->heap.live_tasks; + size_t n = mtarraylist_length(live_tasks); + jl_task_t *t = ptls2->root_task; + int t_state = jl_atomic_load_relaxed(&t->_state); jl_safe_printf("==== Thread %d created %zu live tasks\n", - ptls2->tid + 1, n + 1); - jl_safe_printf(" ---- Root task (%p)\n", ptls2->root_task); - jl_safe_printf(" (sticky: %d, started: %d, state: %d, tid: %d)\n", - ptls2->root_task->sticky, ptls2->root_task->started, - jl_atomic_load_relaxed(&ptls2->root_task->_state), - jl_atomic_load_relaxed(&ptls2->root_task->tid) + 1); - jlbacktracet(ptls2->root_task); + ptls2->tid + 1, n + (t_state != JL_TASK_STATE_DONE)); + if (show_done || t_state != JL_TASK_STATE_DONE) { + jl_safe_printf(" ---- Root task (%p)\n", ptls2->root_task); + jl_safe_printf(" (sticky: %d, started: %d, state: %d, tid: %d)\n", + t->sticky, t->started, t_state, + jl_atomic_load_relaxed(&t->tid) + 1); + if (t->stkbuf != NULL) + jlbacktracet(t); + else + jl_safe_printf(" no stack\n"); + jl_safe_printf(" ---- End root task\n"); + } - void **lst = live_tasks->items; - for (size_t j = 0; j < live_tasks->len; j++) { - jl_task_t *t = (jl_task_t *)lst[j]; + for (size_t j = 0; j < n; j++) { + jl_task_t *t = (jl_task_t*)mtarraylist_get(live_tasks, j); + if (t == NULL) + continue; int t_state = jl_atomic_load_relaxed(&t->_state); - if (!show_done && t_state == JL_TASK_STATE_DONE) { + if (!show_done && t_state == JL_TASK_STATE_DONE) continue; - } jl_safe_printf(" ---- Task %zu (%p)\n", j + 1, t); + // n.b. this information might not be consistent with the stack printing after it, since it could start running or change tid, etc. jl_safe_printf(" (sticky: %d, started: %d, state: %d, tid: %d)\n", t->sticky, t->started, t_state, jl_atomic_load_relaxed(&t->tid) + 1); diff --git a/src/threading.c b/src/threading.c index 436e6184a6c23..b82e36f66d994 100644 --- a/src/threading.c +++ b/src/threading.c @@ -314,6 +314,8 @@ static uv_mutex_t tls_lock; // controls write-access to these variables: _Atomic(jl_ptls_t*) jl_all_tls_states JL_GLOBALLY_ROOTED; int jl_all_tls_states_size; static uv_cond_t cond; +// concurrent reads are permitted, using the same pattern as mtsmall_arraylist +// it is implemented separately because the API of direct jl_all_tls_states use is already widely prevalent // return calling thread's ID JL_DLLEXPORT int16_t jl_threadid(void) @@ -347,7 +349,7 @@ jl_ptls_t jl_init_threadtls(int16_t tid) #ifndef _OS_WINDOWS_ pthread_setspecific(jl_task_exit_key, (void*)ptls); #endif - ptls->system_id = (jl_thread_t)(uintptr_t)uv_thread_self(); + ptls->system_id = uv_thread_self(); ptls->rngseed = jl_rand(); if (tid == 0) ptls->disable_gc = 1; @@ -382,10 +384,10 @@ jl_ptls_t jl_init_threadtls(int16_t tid) uv_cond_init(&ptls->wake_signal); uv_mutex_lock(&tls_lock); - jl_ptls_t *allstates = jl_atomic_load_relaxed(&jl_all_tls_states); if (tid == -1) tid = jl_atomic_load_relaxed(&jl_n_threads); ptls->tid = tid; + jl_ptls_t *allstates = jl_atomic_load_relaxed(&jl_all_tls_states); if (jl_all_tls_states_size <= tid) { int i, newsize = jl_all_tls_states_size + tid + 2; jl_ptls_t *newpptls = (jl_ptls_t*)calloc(newsize, sizeof(jl_ptls_t)); From a16e4e1847445129e315a1723be0d91a25b665ab Mon Sep 17 00:00:00 2001 From: Kiran Date: Wed, 27 Sep 2023 06:20:30 -0400 Subject: [PATCH 214/413] Fix segfault if root task is NULL (#51471) In `jl_print_task_backtraces()`. Follow-on to https://github.com/JuliaLang/julia/pull/51430. (cherry picked from commit cde964f392659b301c6019e4ec02c07d43da2c92) --- src/stackwalk.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/stackwalk.c b/src/stackwalk.c index cd4e46c204281..dcac2c4501682 100644 --- a/src/stackwalk.c +++ b/src/stackwalk.c @@ -1152,23 +1152,30 @@ JL_DLLEXPORT void jl_print_task_backtraces(int show_done) JL_NOTSAFEPOINT jl_ptls_t *allstates = jl_atomic_load_relaxed(&jl_all_tls_states); for (size_t i = 0; i < nthreads; i++) { jl_ptls_t ptls2 = allstates[i]; - if (ptls2 == NULL) + if (ptls2 == NULL) { continue; + } small_arraylist_t *live_tasks = &ptls2->heap.live_tasks; size_t n = mtarraylist_length(live_tasks); + int t_state = JL_TASK_STATE_DONE; jl_task_t *t = ptls2->root_task; - int t_state = jl_atomic_load_relaxed(&t->_state); + if (t != NULL) + t_state = jl_atomic_load_relaxed(&t->_state); jl_safe_printf("==== Thread %d created %zu live tasks\n", ptls2->tid + 1, n + (t_state != JL_TASK_STATE_DONE)); if (show_done || t_state != JL_TASK_STATE_DONE) { jl_safe_printf(" ---- Root task (%p)\n", ptls2->root_task); - jl_safe_printf(" (sticky: %d, started: %d, state: %d, tid: %d)\n", - t->sticky, t->started, t_state, - jl_atomic_load_relaxed(&t->tid) + 1); - if (t->stkbuf != NULL) - jlbacktracet(t); - else - jl_safe_printf(" no stack\n"); + if (t != NULL) { + jl_safe_printf(" (sticky: %d, started: %d, state: %d, tid: %d)\n", + t->sticky, t->started, t_state, + jl_atomic_load_relaxed(&t->tid) + 1); + if (t->stkbuf != NULL) { + jlbacktracet(t); + } + else { + jl_safe_printf(" no stack\n"); + } + } jl_safe_printf(" ---- End root task\n"); } From e8673bd7c2c11e12ce4c1a4ef8d82bb2c0b9f575 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 17 Nov 2023 13:58:01 -0500 Subject: [PATCH 215/413] codegen: ensure i1 bool is widened to i8 before storing (#52189) Teach value_to_pointer to convert primitive types to their stored representation first, to avoid exposing undef bits later (via memcpy). Take this opportunity to also generalizes the support for zext Bool to anywhere inside any struct for changing any bitwidth to a multiple of 8 bytes. This would change a vector like <2 x i4> from occupying i8 to i16 (c.f. LLVM's LangRef), if such an operation were expressible in Julia today. And take this opportunity to do a bit of code cleanup, now that codegen is better and using helpers from LLVM. Fixes #52127 (cherry picked from commit 9aa7980358349ee7017fa614525f571ffa92c55d) --- src/cgutils.cpp | 3 -- src/codegen.cpp | 27 +++------- src/intrinsics.cpp | 119 ++++++++++++++++++++++++++++++--------------- test/llvmcall2.jl | 9 ++++ 4 files changed, 98 insertions(+), 60 deletions(-) diff --git a/src/cgutils.cpp b/src/cgutils.cpp index 7b15ef366777c..bb96805bbb72b 100644 --- a/src/cgutils.cpp +++ b/src/cgutils.cpp @@ -760,9 +760,6 @@ static Type *_julia_struct_to_llvm(jl_codegen_params_t *ctx, LLVMContext &ctxt, lty = JuliaType::get_prjlvalue_ty(ctxt); isvector = false; } - else if (ty == (jl_value_t*)jl_bool_type) { - lty = getInt8Ty(ctxt); - } else if (jl_is_uniontype(ty)) { // pick an Integer type size such that alignment will generally be correct, // and always end with an Int8 (selector byte). diff --git a/src/codegen.cpp b/src/codegen.cpp index 0528180d1b50d..5c80a78cedd0c 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -1926,9 +1926,12 @@ static bool valid_as_globalinit(const Value *v) { return isa(v); } +static Value *zext_struct(jl_codectx_t &ctx, Value *V); + static inline jl_cgval_t value_to_pointer(jl_codectx_t &ctx, Value *v, jl_value_t *typ, Value *tindex) { Value *loc; + v = zext_struct(ctx, v); if (valid_as_globalinit(v)) { // llvm can't handle all the things that could be inside a ConstantExpr assert(jl_is_concrete_type(typ)); // not legal to have an unboxed abstract type loc = get_pointer_to_constant(ctx.emission_context, cast(v), Align(julia_alignment(typ)), "_j_const", *jl_Module); @@ -2054,17 +2057,6 @@ static void alloc_def_flag(jl_codectx_t &ctx, jl_varinfo_t& vi) // --- utilities --- -static Constant *undef_value_for_type(Type *T) { - auto tracked = CountTrackedPointers(T); - Constant *undef; - if (tracked.count) - // make sure gc pointers (including ptr_phi of union-split) are initialized to NULL - undef = Constant::getNullValue(T); - else - undef = UndefValue::get(T); - return undef; -} - static void CreateTrap(IRBuilder<> &irbuilder, bool create_new_block) { Function *f = irbuilder.GetInsertBlock()->getParent(); @@ -3346,7 +3338,7 @@ static bool emit_builtin_call(jl_codectx_t &ctx, jl_cgval_t *ret, jl_value_t *f, if (f == jl_builtin_is && nargs == 2) { // emit comparison test Value *ans = emit_f_is(ctx, argv[1], argv[2]); - *ret = mark_julia_type(ctx, ctx.builder.CreateZExt(ans, getInt8Ty(ctx.builder.getContext())), false, jl_bool_type); + *ret = mark_julia_type(ctx, ans, false, jl_bool_type); return true; } @@ -3385,8 +3377,6 @@ static bool emit_builtin_call(jl_codectx_t &ctx, jl_cgval_t *ret, jl_value_t *f, if (jl_is_type_type(ty.typ) && !jl_has_free_typevars(ty.typ)) { jl_value_t *tp0 = jl_tparam0(ty.typ); Value *isa_result = emit_isa(ctx, arg, tp0, NULL).first; - if (isa_result->getType() == getInt1Ty(ctx.builder.getContext())) - isa_result = ctx.builder.CreateZExt(isa_result, getInt8Ty(ctx.builder.getContext())); *ret = mark_julia_type(ctx, isa_result, false, jl_bool_type); return true; } @@ -5271,16 +5261,15 @@ static Value *emit_condition(jl_codectx_t &ctx, const jl_cgval_t &condV, const s emit_typecheck(ctx, condV, (jl_value_t*)jl_bool_type, msg); } if (isbool) { - Value *cond = emit_unbox(ctx, getInt8Ty(ctx.builder.getContext()), condV, (jl_value_t*)jl_bool_type); - assert(cond->getType() == getInt8Ty(ctx.builder.getContext())); - return ctx.builder.CreateXor(ctx.builder.CreateTrunc(cond, getInt1Ty(ctx.builder.getContext())), ConstantInt::get(getInt1Ty(ctx.builder.getContext()), 1)); + Value *cond = emit_unbox(ctx, getInt1Ty(ctx.builder.getContext()), condV, (jl_value_t*)jl_bool_type); + return ctx.builder.CreateNot(cond); } if (condV.isboxed) { return ctx.builder.CreateICmpEQ(boxed(ctx, condV), track_pjlvalue(ctx, literal_pointer_val(ctx, jl_false))); } - // not a boolean - return ConstantInt::get(getInt1Ty(ctx.builder.getContext()), 0); // TODO: replace with Undef + // not a boolean (unreachable dead code) + return UndefValue::get(getInt1Ty(ctx.builder.getContext())); } static Value *emit_condition(jl_codectx_t &ctx, jl_value_t *cond, const std::string &msg) diff --git a/src/intrinsics.cpp b/src/intrinsics.cpp index 810982370de19..9c163458f22d2 100644 --- a/src/intrinsics.cpp +++ b/src/intrinsics.cpp @@ -174,12 +174,7 @@ static Type *INTT(Type *t, const DataLayout &DL) static Value *uint_cnvt(jl_codectx_t &ctx, Type *to, Value *x) { - Type *t = x->getType(); - if (t == to) - return x; - if (to->getPrimitiveSizeInBits() < x->getType()->getPrimitiveSizeInBits()) - return ctx.builder.CreateTrunc(x, to); - return ctx.builder.CreateZExt(x, to); + return ctx.builder.CreateZExtOrTrunc(x, to); } static Constant *julia_const_to_llvm(jl_codectx_t &ctx, const void *ptr, jl_datatype_t *bt) @@ -318,25 +313,90 @@ static Constant *julia_const_to_llvm(jl_codectx_t &ctx, jl_value_t *e) return julia_const_to_llvm(ctx, e, (jl_datatype_t*)bt); } +static Constant *undef_value_for_type(Type *T) { + auto tracked = CountTrackedPointers(T); + Constant *undef; + if (tracked.count) + // make sure gc pointers (including ptr_phi of union-split) are initialized to NULL + undef = Constant::getNullValue(T); + else + undef = UndefValue::get(T); + return undef; +} + +// rebuild a struct type with any i1 Bool (e.g. the llvmcall type) widened to i8 (the native size for memcpy) +static Type *zext_struct_type(Type *T) +{ + if (auto *AT = dyn_cast(T)) { + return ArrayType::get(AT->getElementType(), AT->getNumElements()); + } + else if (auto *ST = dyn_cast(T)) { + SmallVector Elements(ST->element_begin(), ST->element_end()); + for (size_t i = 0; i < Elements.size(); i++) { + Elements[i] = zext_struct_type(Elements[i]); + } + return StructType::get(ST->getContext(), Elements, ST->isPacked()); + } + else if (auto *VT = dyn_cast(T)) { + return VectorType::get(zext_struct_type(VT->getElementType()), VT); + } + else if (auto *IT = dyn_cast(T)) { + unsigned BitWidth = IT->getBitWidth(); + if (alignTo(BitWidth, 8) != BitWidth) + return IntegerType::get(IT->getContext(), alignTo(BitWidth, 8)); + } + return T; +} + +// rebuild a struct with any i1 Bool (e.g. the llvmcall type) widened to i8 (the native size for memcpy) +static Value *zext_struct_helper(jl_codectx_t &ctx, Value *V, Type *T2) +{ + Type *T = V->getType(); + if (T == T2) + return V; + if (auto *AT = dyn_cast(T2)) { + Value *V2 = undef_value_for_type(AT); + for (size_t i = 0; i < AT->getNumElements(); i++) { + Value *E = zext_struct_helper(ctx, ctx.builder.CreateExtractValue(V, i), AT->getElementType()); + V2 = ctx.builder.CreateInsertValue(V2, E, i); + } + return V2; + } + else if (auto *ST = dyn_cast(T2)) { + Value *V2 = undef_value_for_type(ST); + for (size_t i = 0; i < ST->getNumElements(); i++) { + Value *E = zext_struct_helper(ctx, ctx.builder.CreateExtractValue(V, i), ST->getElementType(i)); + V2 = ctx.builder.CreateInsertValue(V2, E, i); + } + return V2; + } + else if (T2->isIntegerTy() || T2->isVectorTy()) { + return ctx.builder.CreateZExt(V, T2); + } + return V; +} + +static Value *zext_struct(jl_codectx_t &ctx, Value *V) +{ + return zext_struct_helper(ctx, V, zext_struct_type(V->getType())); +} + static Value *emit_unboxed_coercion(jl_codectx_t &ctx, Type *to, Value *unboxed) { + if (unboxed->getType() == to) + return unboxed; + if (CastInst::castIsValid(Instruction::Trunc, unboxed, to)) + return ctx.builder.CreateTrunc(unboxed, to); + unboxed = zext_struct(ctx, unboxed); Type *ty = unboxed->getType(); if (ty == to) return unboxed; bool frompointer = ty->isPointerTy(); bool topointer = to->isPointerTy(); const DataLayout &DL = jl_Module->getDataLayout(); - if (ty->isIntegerTy(1) && to->isIntegerTy(8)) { - // bools may be stored internally as int8 - unboxed = ctx.builder.CreateZExt(unboxed, to); - } - else if (ty->isIntegerTy(8) && to->isIntegerTy(1)) { - // bools may be stored internally as int8 - unboxed = ctx.builder.CreateTrunc(unboxed, to); - } - else if (ty->isVoidTy() || DL.getTypeSizeInBits(ty) != DL.getTypeSizeInBits(to)) { + if (ty->isVoidTy() || DL.getTypeSizeInBits(ty) != DL.getTypeSizeInBits(to)) { // this can happen in dead code - //emit_unreachable(ctx); + CreateTrap(ctx.builder); return UndefValue::get(to); } if (frompointer && topointer) { @@ -381,7 +441,7 @@ static Value *emit_unbox(jl_codectx_t &ctx, Type *to, const jl_cgval_t &x, jl_va if (type_is_ghost(to)) { return NULL; } - //emit_unreachable(ctx); + CreateTrap(ctx.builder); return UndefValue::get(to); // type mismatch error } @@ -447,17 +507,9 @@ static void emit_unbox_store(jl_codectx_t &ctx, const jl_cgval_t &x, Value *dest return; } - Value *unboxed = nullptr; - if (!x.ispointer()) { // already unboxed, but sometimes need conversion - unboxed = x.V; - assert(unboxed); - } - - // bools stored as int8, but can be narrowed to int1 often - if (x.typ == (jl_value_t*)jl_bool_type) - unboxed = emit_unbox(ctx, getInt8Ty(ctx.builder.getContext()), x, (jl_value_t*)jl_bool_type); - - if (unboxed) { + if (!x.ispointer()) { // already unboxed, but sometimes need conversion (e.g. f32 -> i32) + assert(x.V); + Value *unboxed = zext_struct(ctx, x.V); Type *dest_ty = unboxed->getType()->getPointerTo(); if (dest->getType() != dest_ty) dest = emit_bitcast(ctx, dest, dest_ty); @@ -1455,12 +1507,7 @@ static Value *emit_untyped_intrinsic(jl_codectx_t &ctx, intrinsic f, Value **arg Intrinsic::smul_with_overflow : Intrinsic::umul_with_overflow))))); FunctionCallee intr = Intrinsic::getDeclaration(jl_Module, intr_id, makeArrayRef(t)); - Value *res = ctx.builder.CreateCall(intr, {x, y}); - Value *val = ctx.builder.CreateExtractValue(res, ArrayRef(0)); - setName(ctx.emission_context, val, "checked"); - Value *obit = ctx.builder.CreateExtractValue(res, ArrayRef(1)); - setName(ctx.emission_context, obit, "overflow"); - Value *obyte = ctx.builder.CreateZExt(obit, getInt8Ty(ctx.builder.getContext())); + Value *tupval = ctx.builder.CreateCall(intr, {x, y}); jl_value_t *params[2]; params[0] = xtyp; @@ -1468,10 +1515,6 @@ static Value *emit_untyped_intrinsic(jl_codectx_t &ctx, intrinsic f, Value **arg jl_datatype_t *tuptyp = (jl_datatype_t*)jl_apply_tuple_type_v(params, 2); *newtyp = tuptyp; - Value *tupval; - tupval = UndefValue::get(julia_type_to_llvm(ctx, (jl_value_t*)tuptyp)); - tupval = ctx.builder.CreateInsertValue(tupval, val, ArrayRef(0)); - tupval = ctx.builder.CreateInsertValue(tupval, obyte, ArrayRef(1)); return tupval; } diff --git a/test/llvmcall2.jl b/test/llvmcall2.jl index 07b27fc407433..e3e89bb916f2d 100644 --- a/test/llvmcall2.jl +++ b/test/llvmcall2.jl @@ -73,3 +73,12 @@ end jl_str = unsafe_string(str) @test length(jl_str) > 4 end + + +# boolean structs +const NT4I = NTuple{4, VecElement{Int}} +const NT4B = NTuple{4, VecElement{Bool}} +f_nt4b(x, y) = ccall("llvm.sadd.with.overflow", llvmcall, Pair{NT4B, NT4B}, (NT4B, NT4B), x, y) +f_nt4i(x, y) = ccall("llvm.sadd.with.overflow", llvmcall, Pair{NT4I, NT4B}, (NT4I, NT4I), x, y) +@test f_nt4b((false, true, false, true), (false, false, true, true)) === (NT4B((false, true, true, false)) => NT4B((false, false, false, true))) +@test f_nt4i((typemin(Int), 0, typemax(Int), typemax(Int)), (-1, typemax(Int),-1, 1)) === (NT4I((typemax(Int), typemax(Int), typemax(Int)-1, typemin(Int))) => NT4B((true, false, false, true))) From db564883ef7b252dc4129d3bc46c07cc9bd9df58 Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Sat, 26 Aug 2023 14:03:21 -0300 Subject: [PATCH 216/413] refactor GC scanning code to reflect jl_binding_t are now first class (#51035) Removes some redundant code. Credits to Eduardo for pointing this out in the GC meeting. (cherry picked from commit 5bc558c9cde5db6fa89b7b4d1d56bf3f8dbe8454) --- src/gc.c | 20 +++----------------- 1 file changed, 3 insertions(+), 17 deletions(-) diff --git a/src/gc.c b/src/gc.c index 72d878864352b..98dcdeb631784 100644 --- a/src/gc.c +++ b/src/gc.c @@ -2278,19 +2278,10 @@ STATIC_INLINE void gc_mark_excstack(jl_ptls_t ptls, jl_excstack_t *excstack, siz } // Mark module binding -STATIC_INLINE void gc_mark_module_binding(jl_ptls_t ptls, jl_module_t *mb_parent, jl_binding_t **mb_begin, - jl_binding_t **mb_end, uintptr_t nptr, +STATIC_INLINE void gc_mark_module_binding(jl_ptls_t ptls, jl_module_t *mb_parent, uintptr_t nptr, uint8_t bits) JL_NOTSAFEPOINT { jl_gc_markqueue_t *mq = &ptls->mark_queue; - for (; mb_begin < mb_end; mb_begin++) { - jl_binding_t *b = *mb_begin; - if (b == (jl_binding_t *)jl_nothing) - continue; - verify_parent1("module", mb_parent, mb_begin, "binding_buff"); - gc_assert_parent_validity((jl_value_t *)mb_parent, (jl_value_t *)b); - gc_try_claim_and_push(mq, b, &nptr); - } jl_value_t *bindings = (jl_value_t *)jl_atomic_load_relaxed(&mb_parent->bindings); gc_assert_parent_validity((jl_value_t *)mb_parent, bindings); gc_try_claim_and_push(mq, bindings, &nptr); @@ -2422,13 +2413,8 @@ FORCE_INLINE void gc_mark_outrefs(jl_ptls_t ptls, jl_gc_markqueue_t *mq, void *_ else if (foreign_alloc) objprofile_count(jl_module_type, bits == GC_OLD_MARKED, sizeof(jl_module_t)); jl_module_t *mb_parent = (jl_module_t *)new_obj; - jl_svec_t *bindings = jl_atomic_load_relaxed(&mb_parent->bindings); - jl_binding_t **table = (jl_binding_t**)jl_svec_data(bindings); - size_t bsize = jl_svec_len(bindings); - uintptr_t nptr = ((bsize + mb_parent->usings.len + 1) << 2) | (bits & GC_OLD); - jl_binding_t **mb_begin = table + 1; - jl_binding_t **mb_end = table + bsize; - gc_mark_module_binding(ptls, mb_parent, mb_begin, mb_end, nptr, bits); + uintptr_t nptr = ((mb_parent->usings.len + 1) << 2) | (bits & GC_OLD); + gc_mark_module_binding(ptls, mb_parent, nptr, bits); } else if (vtag == jl_task_tag << 4) { if (update_meta) From e77afbfb2914092d5678b7859c1d19c7d8553b21 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Fri, 24 Nov 2023 10:51:32 -0300 Subject: [PATCH 217/413] Fix multiversioning issues caused by the parallel llvm work (#52194) So after struggling with this for a long while it seems there were two different issues. The first one we lacked coverage over, but the other was a very subtle issue when we sorted the fptrs. ~I still need to add test that does multiversioning where we call between multiversioned functions~ Fixes https://github.com/JuliaLang/julia/issues/52079 (cherry picked from commit a386cd101ca8ff1775f38e2ec2fbeb7076a39c4f) --- src/llvm-multiversioning.cpp | 4 +- src/processor.cpp | 5 +- test/compiler/codegen.jl | 13 +++ test/llvmpasses/multiversioning-x86.ll | 132 +++++++++++++++++++++++++ 4 files changed, 151 insertions(+), 3 deletions(-) create mode 100644 test/llvmpasses/multiversioning-x86.ll diff --git a/src/llvm-multiversioning.cpp b/src/llvm-multiversioning.cpp index e4ebbe9d3838a..accdef0aaaa83 100644 --- a/src/llvm-multiversioning.cpp +++ b/src/llvm-multiversioning.cpp @@ -531,7 +531,7 @@ void CloneCtx::clone_decls() new_F->setVisibility(F->getVisibility()); new_F->setDSOLocal(true); auto base_func = F; - if (specs[i].flags & JL_TARGET_CLONE_ALL) + if (!(specs[i].flags & JL_TARGET_CLONE_ALL)) base_func = static_cast(linearized[specs[i].base])->base_func(F); (*linearized[i]->vmap)[base_func] = new_F; } @@ -586,7 +586,7 @@ void CloneCtx::clone_bodies() } for (auto &target : groups[i].clones) { prepare_vmap(*target.vmap); - auto target_F = cast_or_null(map_get(*target.vmap, F)); + auto target_F = cast_or_null(map_get(*target.vmap, group_F)); if (target_F) { if (!F->isDeclaration()) { clone_function(group_F, target_F, *target.vmap); diff --git a/src/processor.cpp b/src/processor.cpp index 587ff300c8d7e..c5b35f57799e8 100644 --- a/src/processor.cpp +++ b/src/processor.cpp @@ -779,7 +779,10 @@ static inline jl_image_t parse_sysimg(void *hdl, F &&callback) if (!clones.empty()) { assert(!fvars.empty()); - std::sort(clones.begin(), clones.end()); + std::sort(clones.begin(), clones.end(), + [](const std::pair &a, const std::pair &b) { + return (a.first & jl_sysimg_val_mask) < (b.first & jl_sysimg_val_mask); + }); auto clone_offsets = (int32_t *) malloc(sizeof(int32_t) * clones.size()); auto clone_idxs = (uint32_t *) malloc(sizeof(uint32_t) * clones.size()); for (size_t i = 0; i < clones.size(); i++) { diff --git a/test/compiler/codegen.jl b/test/compiler/codegen.jl index 9b34ae7321ff6..1d28b818340a4 100644 --- a/test/compiler/codegen.jl +++ b/test/compiler/codegen.jl @@ -848,3 +848,16 @@ let res = @timed a50317[:b] @test res.bytes == 0 return res end + +# Very specific test for multiversioning +if Sys.ARCH === :x86_64 + foo52079() = Core.Intrinsics.have_fma(Float64) + if foo52079() == true + let io = IOBuffer() + code_native(io,^,(Float64,Float64), dump_module=false) + str = String(take!(io)) + @test !occursin("fma_emulated", str) + @test occursin("vfmadd", str) + end + end +end diff --git a/test/llvmpasses/multiversioning-x86.ll b/test/llvmpasses/multiversioning-x86.ll new file mode 100644 index 0000000000000..ca43462e1eda9 --- /dev/null +++ b/test/llvmpasses/multiversioning-x86.ll @@ -0,0 +1,132 @@ +; This file is a part of Julia. License is MIT: https://julialang.org/license + +; RUN: opt -enable-new-pm=1 --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='JuliaMultiVersioning,CPUFeatures' -S %s | FileCheck %s + +; RUN: opt -enable-new-pm=1 --opaque-pointers=1 --load-pass-plugin=libjulia-codegen%shlibext -passes='JuliaMultiVersioning,CPUFeatures' -S %s | FileCheck %s + +; COM: This test checks that multiversioning actually happens from start to finish +; COM: We need the fvars for a proper test + + + +; CHECK: @jl_fvar_idxs = hidden constant [5 x i32] [i32 0, i32 1, i32 2, i32 3, i32 4], align 16 +; CHECK: @jl_gvar_idxs = hidden constant [0 x i32] zeroinitializer, align 16 +; TYPED: @simd_test.reloc_slot = hidden global i32 (<4 x i32>)* null +; OPAQUE: @simd_test.reloc_slot = hidden global ptr null +; TYPED: @jl_fvar_offsets = hidden constant [6 x i32] [i32 5, i32 0, i32 trunc (i64 sub (i64 ptrtoint (float (float, float)* @fastmath_test to i64), i64 ptrtoint (i32 (i32)* @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (i32 (i32)* @loop_test to i64), i64 ptrtoint (i32 (i32)* @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (i32 (<4 x i32>)* @simd_test to i64), i64 ptrtoint (i32 (i32)* @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (i32 (<4 x i32>)* @simd_test_call to i64), i64 ptrtoint (i32 (i32)* @boring to i64)) to i32)] +; OPAQUE: @jl_fvar_offsets = hidden constant [6 x i32] [i32 5, i32 0, i32 trunc (i64 sub (i64 ptrtoint (ptr @fastmath_test to i64), i64 ptrtoint (ptr @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @loop_test to i64), i64 ptrtoint (ptr @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @simd_test to i64), i64 ptrtoint (ptr @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @simd_test_call to i64), i64 ptrtoint (ptr @boring to i64)) to i32)] +; CHECK: @jl_gvar_base = hidden constant i64 0 +; CHECK: @jl_gvar_offsets = hidden constant [1 x i32] zeroinitializer +; TYPED: @jl_clone_slots = hidden constant [3 x i32] [i32 1, i32 3, i32 trunc (i64 sub (i64 ptrtoint (i32 (<4 x i32>)** @simd_test.reloc_slot to i64), i64 ptrtoint (i64* @jl_gvar_base to i64)) to i32)] +; OPAQUE: @jl_clone_slots = hidden constant [3 x i32] [i32 1, i32 3, i32 trunc (i64 sub (i64 ptrtoint (ptr @simd_test.reloc_slot to i64), i64 ptrtoint (ptr @jl_gvar_base to i64)) to i32)] +; CHECK: @jl_clone_idxs = hidden constant [10 x i32] [i32 -2147483647, i32 3, i32 -2147483647, i32 3, i32 4, i32 1, i32 1, i32 2, i32 -2147483645, i32 4] +; TYPED: @jl_clone_offsets = hidden constant [9 x i32] [i32 trunc (i64 sub (i64 ptrtoint (i32 (i32)* @boring.1 to i64), i64 ptrtoint (i32 (i32)* @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (float (float, float)* @fastmath_test.1 to i64), i64 ptrtoint (i32 (i32)* @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (i32 (i32)* @loop_test.1 to i64), i64 ptrtoint (i32 (i32)* @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (i32 (<4 x i32>)* @simd_test.1 to i64), i64 ptrtoint (i32 (i32)* @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (i32 (<4 x i32>)* @simd_test_call.1 to i64), i64 ptrtoint (i32 (i32)* @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (float (float, float)* @fastmath_test.2 to i64), i64 ptrtoint (i32 (i32)* @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (i32 (i32)* @loop_test.2 to i64), i64 ptrtoint (i32 (i32)* @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (i32 (<4 x i32>)* @simd_test.2 to i64), i64 ptrtoint (i32 (i32)* @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (i32 (<4 x i32>)* @simd_test_call.2 to i64), i64 ptrtoint (i32 (i32)* @boring to i64)) to i32)] +; OPAQUE: @jl_clone_offsets = hidden constant [9 x i32] [i32 trunc (i64 sub (i64 ptrtoint (ptr @boring.1 to i64), i64 ptrtoint (ptr @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @fastmath_test.1 to i64), i64 ptrtoint (ptr @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @loop_test.1 to i64), i64 ptrtoint (ptr @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @simd_test.1 to i64), i64 ptrtoint (ptr @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @simd_test_call.1 to i64), i64 ptrtoint (ptr @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @fastmath_test.2 to i64), i64 ptrtoint (ptr @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @loop_test.2 to i64), i64 ptrtoint (ptr @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @simd_test.2 to i64), i64 ptrtoint (ptr @boring to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint (ptr @simd_test_call.2 to i64), i64 ptrtoint (ptr @boring to i64)) to i32)] +; TYPED: @jl_fvar_base = hidden alias i64, bitcast (i32 (i32)* @boring to i64*) +; OPAQUE: @jl_fvar_base = hidden alias i64, ptr @boring + + +target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128-ni:10:11:12:13" +target triple = "x86_64-linux-gnu" + +@jl_fvars = global [5 x i64*] [i64* bitcast (i32 (i32)* @boring to i64*), + i64* bitcast (float (float, float)* @fastmath_test to i64*), + i64* bitcast (i32 (i32)* @loop_test to i64*), + i64* bitcast (i32 (<4 x i32>)* @simd_test to i64*), + i64* bitcast (i32 (<4 x i32>)* @simd_test_call to i64*) + ], align 16 +@jl_gvars = global [0 x i64*] zeroinitializer, align 16 +@jl_fvar_idxs = hidden constant [5 x i32] [i32 0, i32 1, i32 2, i32 3, i32 4], align 16 +@jl_gvar_idxs = hidden constant [0 x i32] zeroinitializer, align 16 + +declare i1 @julia.cpu.have_fma.f32() + +; CHECK: @boring{{.*}}#[[BORING_BASE:[0-9]+]] +define noundef i32 @boring(i32 noundef %0) { + ret i32 %0 +} + +; CHECK: @fastmath_test{{.*}}#[[NOT_BORING_BASE:[0-9]+]] +; CHECK: %3 = sitofp i1 false to float +define noundef float @fastmath_test(float noundef %0, float noundef %1) { + %3 = call i1 @julia.cpu.have_fma.f32() + %4 = sitofp i1 %3 to float + %5 = fadd fast float %0, %4 + ret float %5 +} + +; CHECK: @loop_test{{.*}}#[[NOT_BORING_BASE:[0-9]+]] +define noundef i32 @loop_test(i32 noundef %0) { + %2 = icmp sgt i32 %0, 0 + br i1 %2, label %5, label %3 + +3: ; preds = %5, %1 + %4 = phi i32 [ 0, %1 ], [ %9, %5 ] + ret i32 %4 + +5: ; preds = %1, %5 + %6 = phi i32 [ %10, %5 ], [ 0, %1 ] + %7 = phi i32 [ %9, %5 ], [ 0, %1 ] + %8 = lshr i32 %6, 1 + %9 = add nuw nsw i32 %8, %7 + %10 = add nuw nsw i32 %6, 1 + %11 = icmp eq i32 %10, %0 + br i1 %11, label %3, label %5;, !llvm.loop - +} + +; CHECK: @simd_test{{.*}}#[[SIMD_BASE_RELOC:[0-9]+]] +define noundef i32 @simd_test(<4 x i32> noundef %0) { + %2 = extractelement <4 x i32> %0, i64 0 + ret i32 %2 +} + +; CHECK: @simd_test_call{{.*}}#[[NOT_BORING_BASE:[0-9]+]] +define noundef i32 @simd_test_call(<4 x i32> noundef %0) { + %2 = call noundef i32 @simd_test(<4 x i32> noundef %0) + ret i32 %2 +} + +; CHECK: @boring{{.*}}#[[BORING_CLONE:[0-9]+]] + +; CHECK: @fastmath_test{{.*}}#[[NOT_BORING_CLONE1:[0-9]+]] +; CHECK: %3 = sitofp i1 false to float + +; CHECK: @fastmath_test{{.*}}#[[NOT_BORING_CLONE2:[0-9]+]] +; CHECK: %3 = sitofp i1 true to float + +; CHECK: @loop_test{{.*}}#[[NOT_BORING_CLONE1:[0-9]+]] + +; CHECK: @loop_test{{.*}}#[[NOT_BORING_CLONE2:[0-9]+]] + +; CHECK: @simd_test{{.*}}#[[SIMD_CLONE1:[0-9]+]] + +; CHECK: @simd_test{{.*}}#[[SIMD_CLONE2:[0-9]+]] + +; CHECK: @simd_test_call{{.*}}#[[NOT_BORING_CLONE1:[0-9]+]] +; TYPED: %2 = load i32 (<4 x i32>)*, i32 (<4 x i32>)** @simd_test.reloc_slot, align 8, !tbaa !8, !invariant.load !12 +; OPAQUE: %2 = load ptr, ptr @simd_test.reloc_slot, align 8, !tbaa !8, !invariant.load !12 +; CHECK: %3 = call noundef i32 %2(<4 x i32> noundef %0) + +; CHECK: @simd_test_call{{.*}}#[[NOT_BORING_CLONE2:[0-9]+]] +; CHECK: %2 = call noundef i32 @simd_test.2(<4 x i32> noundef %0) + +; CHECK-DAG: attributes #[[BORING_BASE]] = { "julia.mv.clone"="0" "julia.mv.clones"="2" "julia.mv.fvar" "target-cpu"="x86-64" "target-features"="+cx16,-sse3,-pclmul,-ssse3,-fma,-sse4.1,-sse4.2,-movbe,-popcnt,-aes,-xsave,-avx,-f16c,-rdrnd,-fsgsbase,-bmi,-avx2,-bmi2,-rtm,-avx512f,-avx512dq,-rdseed,-adx,-avx512ifma,-clflushopt,-clwb,-avx512pf,-avx512er,-avx512cd,-sha,-avx512bw,-avx512vl,-prefetchwt1,-avx512vbmi,-pku,-waitpkg,-avx512vbmi2,-shstk,-gfni,-vaes,-vpclmulqdq,-avx512vnni,-avx512bitalg,-avx512vpopcntdq,-rdpid,-cldemote,-movdiri,-movdir64b,-enqcmd,-uintr,-avx512vp2intersect,-serialize,-tsxldtrk,-pconfig,-amx-bf16,-avx512fp16,-amx-tile,-amx-int8,-sahf,-lzcnt,-sse4a,-prfchw,-xop,-fma4,-tbm,-mwaitx,-xsaveopt,-xsavec,-xsaves,-clzero,-wbnoinvd,-avxvnni,-avx512bf16,-ptwrite,+sse2,+mmx,+fxsr,+64bit,+cx8" } +; CHECK-DAG: attributes #[[NOT_BORING_BASE]] = { "julia.mv.clone"="0" "julia.mv.clones"="6" "julia.mv.fvar" "target-cpu"="x86-64" "target-features"="+cx16,-sse3,-pclmul,-ssse3,-fma,-sse4.1,-sse4.2,-movbe,-popcnt,-aes,-xsave,-avx,-f16c,-rdrnd,-fsgsbase,-bmi,-avx2,-bmi2,-rtm,-avx512f,-avx512dq,-rdseed,-adx,-avx512ifma,-clflushopt,-clwb,-avx512pf,-avx512er,-avx512cd,-sha,-avx512bw,-avx512vl,-prefetchwt1,-avx512vbmi,-pku,-waitpkg,-avx512vbmi2,-shstk,-gfni,-vaes,-vpclmulqdq,-avx512vnni,-avx512bitalg,-avx512vpopcntdq,-rdpid,-cldemote,-movdiri,-movdir64b,-enqcmd,-uintr,-avx512vp2intersect,-serialize,-tsxldtrk,-pconfig,-amx-bf16,-avx512fp16,-amx-tile,-amx-int8,-sahf,-lzcnt,-sse4a,-prfchw,-xop,-fma4,-tbm,-mwaitx,-xsaveopt,-xsavec,-xsaves,-clzero,-wbnoinvd,-avxvnni,-avx512bf16,-ptwrite,+sse2,+mmx,+fxsr,+64bit,+cx8" } +; CHECK-DAG: attributes #[[SIMD_BASE_RELOC]] = { "julia.mv.clone"="0" "julia.mv.clones"="6" "julia.mv.reloc" "target-cpu"="x86-64" "target-features"="+cx16,-sse3,-pclmul,-ssse3,-fma,-sse4.1,-sse4.2,-movbe,-popcnt,-aes,-xsave,-avx,-f16c,-rdrnd,-fsgsbase,-bmi,-avx2,-bmi2,-rtm,-avx512f,-avx512dq,-rdseed,-adx,-avx512ifma,-clflushopt,-clwb,-avx512pf,-avx512er,-avx512cd,-sha,-avx512bw,-avx512vl,-prefetchwt1,-avx512vbmi,-pku,-waitpkg,-avx512vbmi2,-shstk,-gfni,-vaes,-vpclmulqdq,-avx512vnni,-avx512bitalg,-avx512vpopcntdq,-rdpid,-cldemote,-movdiri,-movdir64b,-enqcmd,-uintr,-avx512vp2intersect,-serialize,-tsxldtrk,-pconfig,-amx-bf16,-avx512fp16,-amx-tile,-amx-int8,-sahf,-lzcnt,-sse4a,-prfchw,-xop,-fma4,-tbm,-mwaitx,-xsaveopt,-xsavec,-xsaves,-clzero,-wbnoinvd,-avxvnni,-avx512bf16,-ptwrite,+sse2,+mmx,+fxsr,+64bit,+cx8" } +; CHECK-DAG: attributes #[[BORING_CLONE]] = { "julia.mv.clone"="1" "julia.mv.clones"="2" "julia.mv.fvar" "target-cpu"="sandybridge" "target-features"="+sahf,+avx,+xsave,+popcnt,+sse4.2,+sse4.1,+cx16,+ssse3,+pclmul,+sse3,-fma,-movbe,-aes,-f16c,-rdrnd,-fsgsbase,-bmi,-avx2,-bmi2,-rtm,-avx512f,-avx512dq,-rdseed,-adx,-avx512ifma,-clflushopt,-clwb,-avx512pf,-avx512er,-avx512cd,-sha,-avx512bw,-avx512vl,-prefetchwt1,-avx512vbmi,-pku,-waitpkg,-avx512vbmi2,-shstk,-gfni,-vaes,-vpclmulqdq,-avx512vnni,-avx512bitalg,-avx512vpopcntdq,-rdpid,-cldemote,-movdiri,-movdir64b,-enqcmd,-uintr,-avx512vp2intersect,-serialize,-tsxldtrk,-pconfig,-amx-bf16,-avx512fp16,-amx-tile,-amx-int8,-lzcnt,-sse4a,-prfchw,-xop,-fma4,-tbm,-mwaitx,-xsaveopt,-xsavec,-xsaves,-clzero,-wbnoinvd,-avxvnni,-avx512bf16,-ptwrite,+sse2,+mmx,+fxsr,+64bit,+cx8" } +; CHECK-DAG: attributes #[[NOT_BORING_CLONE1]] = { "julia.mv.clone"="1" "julia.mv.clones"="6" "julia.mv.fvar" "target-cpu"="sandybridge" "target-features"="+sahf,+avx,+xsave,+popcnt,+sse4.2,+sse4.1,+cx16,+ssse3,+pclmul,+sse3,-fma,-movbe,-aes,-f16c,-rdrnd,-fsgsbase,-bmi,-avx2,-bmi2,-rtm,-avx512f,-avx512dq,-rdseed,-adx,-avx512ifma,-clflushopt,-clwb,-avx512pf,-avx512er,-avx512cd,-sha,-avx512bw,-avx512vl,-prefetchwt1,-avx512vbmi,-pku,-waitpkg,-avx512vbmi2,-shstk,-gfni,-vaes,-vpclmulqdq,-avx512vnni,-avx512bitalg,-avx512vpopcntdq,-rdpid,-cldemote,-movdiri,-movdir64b,-enqcmd,-uintr,-avx512vp2intersect,-serialize,-tsxldtrk,-pconfig,-amx-bf16,-avx512fp16,-amx-tile,-amx-int8,-lzcnt,-sse4a,-prfchw,-xop,-fma4,-tbm,-mwaitx,-xsaveopt,-xsavec,-xsaves,-clzero,-wbnoinvd,-avxvnni,-avx512bf16,-ptwrite,+sse2,+mmx,+fxsr,+64bit,+cx8" } +; CHECK-DAG: attributes #[[NOT_BORING_CLONE2]] = { "julia.mv.clone"="2" "julia.mv.clones"="6" "julia.mv.fvar" "target-cpu"="haswell" "target-features"="+lzcnt,+sahf,+bmi2,+avx2,+bmi,+fsgsbase,+f16c,+avx,+xsave,+popcnt,+movbe,+sse4.2,+sse4.1,+cx16,+fma,+ssse3,+pclmul,+sse3,-aes,-rdrnd,-rtm,-avx512f,-avx512dq,-rdseed,-adx,-avx512ifma,-clflushopt,-clwb,-avx512pf,-avx512er,-avx512cd,-sha,-avx512bw,-avx512vl,-prefetchwt1,-avx512vbmi,-pku,-waitpkg,-avx512vbmi2,-shstk,-gfni,-vaes,-vpclmulqdq,-avx512vnni,-avx512bitalg,-avx512vpopcntdq,-rdpid,-cldemote,-movdiri,-movdir64b,-enqcmd,-uintr,-avx512vp2intersect,-serialize,-tsxldtrk,-pconfig,-amx-bf16,-avx512fp16,-amx-tile,-amx-int8,-sse4a,-prfchw,-xop,-fma4,-tbm,-mwaitx,-xsaveopt,-xsavec,-xsaves,-clzero,-wbnoinvd,-avxvnni,-avx512bf16,-ptwrite,+sse2,+mmx,+fxsr,+64bit,+cx8" } +; CHECK-DAG: attributes #[[SIMD_CLONE1]] = { "julia.mv.clone"="1" "julia.mv.clones"="6" "julia.mv.reloc" "target-cpu"="sandybridge" "target-features"="+sahf,+avx,+xsave,+popcnt,+sse4.2,+sse4.1,+cx16,+ssse3,+pclmul,+sse3,-fma,-movbe,-aes,-f16c,-rdrnd,-fsgsbase,-bmi,-avx2,-bmi2,-rtm,-avx512f,-avx512dq,-rdseed,-adx,-avx512ifma,-clflushopt,-clwb,-avx512pf,-avx512er,-avx512cd,-sha,-avx512bw,-avx512vl,-prefetchwt1,-avx512vbmi,-pku,-waitpkg,-avx512vbmi2,-shstk,-gfni,-vaes,-vpclmulqdq,-avx512vnni,-avx512bitalg,-avx512vpopcntdq,-rdpid,-cldemote,-movdiri,-movdir64b,-enqcmd,-uintr,-avx512vp2intersect,-serialize,-tsxldtrk,-pconfig,-amx-bf16,-avx512fp16,-amx-tile,-amx-int8,-lzcnt,-sse4a,-prfchw,-xop,-fma4,-tbm,-mwaitx,-xsaveopt,-xsavec,-xsaves,-clzero,-wbnoinvd,-avxvnni,-avx512bf16,-ptwrite,+sse2,+mmx,+fxsr,+64bit,+cx8" } +; CHECK-DAG: attributes #[[SIMD_CLONE2]] = { "julia.mv.clone"="2" "julia.mv.clones"="6" "julia.mv.reloc" "target-cpu"="haswell" "target-features"="+lzcnt,+sahf,+bmi2,+avx2,+bmi,+fsgsbase,+f16c,+avx,+xsave,+popcnt,+movbe,+sse4.2,+sse4.1,+cx16,+fma,+ssse3,+pclmul,+sse3,-aes,-rdrnd,-rtm,-avx512f,-avx512dq,-rdseed,-adx,-avx512ifma,-clflushopt,-clwb,-avx512pf,-avx512er,-avx512cd,-sha,-avx512bw,-avx512vl,-prefetchwt1,-avx512vbmi,-pku,-waitpkg,-avx512vbmi2,-shstk,-gfni,-vaes,-vpclmulqdq,-avx512vnni,-avx512bitalg,-avx512vpopcntdq,-rdpid,-cldemote,-movdiri,-movdir64b,-enqcmd,-uintr,-avx512vp2intersect,-serialize,-tsxldtrk,-pconfig,-amx-bf16,-avx512fp16,-amx-tile,-amx-int8,-sse4a,-prfchw,-xop,-fma4,-tbm,-mwaitx,-xsaveopt,-xsavec,-xsaves,-clzero,-wbnoinvd,-avxvnni,-avx512bf16,-ptwrite,+sse2,+mmx,+fxsr,+64bit,+cx8" } + + +!llvm.module.flags = !{!0, !2} + + +!0 = !{i32 1, !"julia.mv.enable", i32 1} +!1 = !{!1} +!2 = !{i32 1, !"julia.mv.specs", !3} +!3 = !{!4, !5, !6} +!4 = !{!"x86-64", !"+cx16,-sse3,-pclmul,-ssse3,-fma,-sse4.1,-sse4.2,-movbe,-popcnt,-aes,-xsave,-avx,-f16c,-rdrnd,-fsgsbase,-bmi,-avx2,-bmi2,-rtm,-avx512f,-avx512dq,-rdseed,-adx,-avx512ifma,-clflushopt,-clwb,-avx512pf,-avx512er,-avx512cd,-sha,-avx512bw,-avx512vl,-prefetchwt1,-avx512vbmi,-pku,-waitpkg,-avx512vbmi2,-shstk,-gfni,-vaes,-vpclmulqdq,-avx512vnni,-avx512bitalg,-avx512vpopcntdq,-rdpid,-cldemote,-movdiri,-movdir64b,-enqcmd,-uintr,-avx512vp2intersect,-serialize,-tsxldtrk,-pconfig,-amx-bf16,-avx512fp16,-amx-tile,-amx-int8,-sahf,-lzcnt,-sse4a,-prfchw,-xop,-fma4,-tbm,-mwaitx,-xsaveopt,-xsavec,-xsaves,-clzero,-wbnoinvd,-avxvnni,-avx512bf16,-ptwrite,+sse2,+mmx,+fxsr,+64bit,+cx8", i32 0, i32 0} +!5 = !{!"sandybridge", !"+sahf,+avx,+xsave,+popcnt,+sse4.2,+sse4.1,+cx16,+ssse3,+pclmul,+sse3,-fma,-movbe,-aes,-f16c,-rdrnd,-fsgsbase,-bmi,-avx2,-bmi2,-rtm,-avx512f,-avx512dq,-rdseed,-adx,-avx512ifma,-clflushopt,-clwb,-avx512pf,-avx512er,-avx512cd,-sha,-avx512bw,-avx512vl,-prefetchwt1,-avx512vbmi,-pku,-waitpkg,-avx512vbmi2,-shstk,-gfni,-vaes,-vpclmulqdq,-avx512vnni,-avx512bitalg,-avx512vpopcntdq,-rdpid,-cldemote,-movdiri,-movdir64b,-enqcmd,-uintr,-avx512vp2intersect,-serialize,-tsxldtrk,-pconfig,-amx-bf16,-avx512fp16,-amx-tile,-amx-int8,-lzcnt,-sse4a,-prfchw,-xop,-fma4,-tbm,-mwaitx,-xsaveopt,-xsavec,-xsaves,-clzero,-wbnoinvd,-avxvnni,-avx512bf16,-ptwrite,+sse2,+mmx,+fxsr,+64bit,+cx8", i32 0, i32 2} +!6 = !{!"haswell", !"+lzcnt,+sahf,+bmi2,+avx2,+bmi,+fsgsbase,+f16c,+avx,+xsave,+popcnt,+movbe,+sse4.2,+sse4.1,+cx16,+fma,+ssse3,+pclmul,+sse3,-aes,-rdrnd,-rtm,-avx512f,-avx512dq,-rdseed,-adx,-avx512ifma,-clflushopt,-clwb,-avx512pf,-avx512er,-avx512cd,-sha,-avx512bw,-avx512vl,-prefetchwt1,-avx512vbmi,-pku,-waitpkg,-avx512vbmi2,-shstk,-gfni,-vaes,-vpclmulqdq,-avx512vnni,-avx512bitalg,-avx512vpopcntdq,-rdpid,-cldemote,-movdiri,-movdir64b,-enqcmd,-uintr,-avx512vp2intersect,-serialize,-tsxldtrk,-pconfig,-amx-bf16,-avx512fp16,-amx-tile,-amx-int8,-sse4a,-prfchw,-xop,-fma4,-tbm,-mwaitx,-xsaveopt,-xsavec,-xsaves,-clzero,-wbnoinvd,-avxvnni,-avx512bf16,-ptwrite,+sse2,+mmx,+fxsr,+64bit,+cx8", i32 1, i32 284} From 1e3842c6fc819c3d76d5b32dc628e414477f80c9 Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Mon, 27 Nov 2023 15:52:54 +0100 Subject: [PATCH 218/413] bump SparseArrays to latest v1.10 --- .../md5 | 1 + .../sha512 | 1 + .../md5 | 1 - .../sha512 | 1 - stdlib/SparseArrays.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/SparseArrays-279b363ca8d3129d4742903d37c8b11545fa08a2.tar.gz/md5 create mode 100644 deps/checksums/SparseArrays-279b363ca8d3129d4742903d37c8b11545fa08a2.tar.gz/sha512 delete mode 100644 deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/md5 delete mode 100644 deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/sha512 diff --git a/deps/checksums/SparseArrays-279b363ca8d3129d4742903d37c8b11545fa08a2.tar.gz/md5 b/deps/checksums/SparseArrays-279b363ca8d3129d4742903d37c8b11545fa08a2.tar.gz/md5 new file mode 100644 index 0000000000000..dbb5746626e3e --- /dev/null +++ b/deps/checksums/SparseArrays-279b363ca8d3129d4742903d37c8b11545fa08a2.tar.gz/md5 @@ -0,0 +1 @@ +ab41f62c0b16f5464c548e648f05cb94 diff --git a/deps/checksums/SparseArrays-279b363ca8d3129d4742903d37c8b11545fa08a2.tar.gz/sha512 b/deps/checksums/SparseArrays-279b363ca8d3129d4742903d37c8b11545fa08a2.tar.gz/sha512 new file mode 100644 index 0000000000000..1c67c8110b375 --- /dev/null +++ b/deps/checksums/SparseArrays-279b363ca8d3129d4742903d37c8b11545fa08a2.tar.gz/sha512 @@ -0,0 +1 @@ +9fa813d057415c3eba1941dd15634a5d4798015b6b72e7524112aeb57522ec54aee653fb1531574441fea08cd472c76f6964e1a0d75fa48a116000196a061d17 diff --git a/deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/md5 b/deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/md5 deleted file mode 100644 index afeeed49f2e21..0000000000000 --- a/deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -85c5dcb49f11bce2d6bb75ef620ea892 diff --git a/deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/sha512 b/deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/sha512 deleted file mode 100644 index 7cab3aeec5ca9..0000000000000 --- a/deps/checksums/SparseArrays-fa6269b0dc5660cbaddb9365c7d89b206fc55992.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -a1810991895650263c33c3e9c2b3089c66948b86b4de16c4c06ed49841cf5500814641576a6b735d5cf3841991684e908c4828a56ee218be216424e6aa9d5f43 diff --git a/stdlib/SparseArrays.version b/stdlib/SparseArrays.version index b30b1002d5285..8ff55582ca9df 100644 --- a/stdlib/SparseArrays.version +++ b/stdlib/SparseArrays.version @@ -1,4 +1,4 @@ SPARSEARRAYS_BRANCH = main -SPARSEARRAYS_SHA1 = fa6269b0dc5660cbaddb9365c7d89b206fc55992 +SPARSEARRAYS_SHA1 = 279b363ca8d3129d4742903d37c8b11545fa08a2 SPARSEARRAYS_GIT_URL := https://github.com/JuliaSparse/SparseArrays.jl.git SPARSEARRAYS_TAR_URL = https://api.github.com/repos/JuliaSparse/SparseArrays.jl/tarball/$1 From 46617e502bdc9c04d3adc2e1ccaae78aeaa1dbe3 Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Mon, 27 Nov 2023 15:54:11 +0100 Subject: [PATCH 219/413] bump Pkg to latest v1.10 --- .../Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/md5 | 1 + .../Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/sha512 | 1 + .../Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/md5 | 1 - .../Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/sha512 | 1 - stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/md5 create mode 100644 deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/sha512 delete mode 100644 deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/sha512 diff --git a/deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/md5 b/deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/md5 new file mode 100644 index 0000000000000..985e7ef06f2a5 --- /dev/null +++ b/deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/md5 @@ -0,0 +1 @@ +769c5379f1ded5529d82d83e092e954c diff --git a/deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/sha512 b/deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/sha512 new file mode 100644 index 0000000000000..d5f705de6d9d9 --- /dev/null +++ b/deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/sha512 @@ -0,0 +1 @@ +585760a1c104391bb08f920b6944b88762e942388fd6ca6bf3bfa6a0bf050f99d304c21165a3b82c96dea5a6711af3ddf0cf9b83bf5fd5f015b26f412b24015a diff --git a/deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/md5 b/deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/md5 deleted file mode 100644 index bddd4fc615336..0000000000000 --- a/deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -a68258944ba3c7b8a31864ad5dc6e320 diff --git a/deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/sha512 b/deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/sha512 deleted file mode 100644 index 0f89a4347a7d6..0000000000000 --- a/deps/checksums/Pkg-e63c601bd3a00a8e6062d926673337c8a659542d.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -e7ea74323f873e6ff0b92b19d368a16df768f21474222ef38918d36d827c92a5597e7fa243e9ef985b02f3bcf65d41904cfeeae9aca64612fdfbb9483c3cbd12 diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 7c2d80c35fe19..b43eb592268ab 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = e63c601bd3a00a8e6062d926673337c8a659542d +PKG_SHA1 = 563a3387acddad6c427b2f675aa70531c4324cc2 PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 0e96c9cf193615d303a6968089025217d3351b60 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Thu, 7 Sep 2023 21:36:30 +0200 Subject: [PATCH 220/413] Fix getfield codegen for tuple inputs and unknown symbol fields. (#51234) (cherry picked from commit eab8d6b96b05f7e84103f66a902e4ee7ad395b48) --- src/codegen.cpp | 2 +- test/compiler/codegen.jl | 15 +++------------ 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index 5c80a78cedd0c..53a278d42d102 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -3830,7 +3830,7 @@ static bool emit_builtin_call(jl_codectx_t &ctx, jl_cgval_t *ret, jl_value_t *f, } else if (fld.typ == (jl_value_t*)jl_symbol_type) { // Known type but unknown symbol if (jl_is_datatype(utt) && (utt != jl_module_type) && jl_struct_try_layout(utt)) { - if ((jl_datatype_nfields(utt) == 1 && !jl_is_namedtuple_type(utt))) { + if ((jl_datatype_nfields(utt) == 1 && !jl_is_namedtuple_type(utt) && !jl_is_tuple_type(utt))) { jl_svec_t *fn = jl_field_names(utt); assert(jl_svec_len(fn) == 1); Value *typ_sym = literal_pointer_val(ctx, jl_svecref(fn, 0)); diff --git a/test/compiler/codegen.jl b/test/compiler/codegen.jl index 1d28b818340a4..88f9948bb30a5 100644 --- a/test/compiler/codegen.jl +++ b/test/compiler/codegen.jl @@ -849,15 +849,6 @@ let res = @timed a50317[:b] return res end -# Very specific test for multiversioning -if Sys.ARCH === :x86_64 - foo52079() = Core.Intrinsics.have_fma(Float64) - if foo52079() == true - let io = IOBuffer() - code_native(io,^,(Float64,Float64), dump_module=false) - str = String(take!(io)) - @test !occursin("fma_emulated", str) - @test occursin("vfmadd", str) - end - end -end +# https://github.com/JuliaLang/julia/issues/51233 +obj51233 = (1,) +@test_throws ErrorException obj51233.x From 332d9f3cc039cfa679ffbb798d0c25a99875c7b8 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 16 Nov 2023 21:55:10 -0500 Subject: [PATCH 221/413] jitlayers: replace sharedbytes intern pool with one that respects alignment (#52182) The llvm optimizations may increase alignment beyond the initial MAX_ALIGN. This pool's alignment was previously only `sizeof(struct { atomic RefCount; size_t Length; char Data[]; })` however, potentially resulting in segfaults at runtime. Fixes #52118. Should make CI much happier. (cherry picked from commit a65bc9a267837fcf9813bef2fc6eb79d02e25ea5) --- src/gc.c | 3 +- src/jitlayers.cpp | 92 ++++++++++++++++++++++++++++++-------------- src/jitlayers.h | 43 ++++++++++++++++++++- src/julia_internal.h | 2 +- 4 files changed, 108 insertions(+), 32 deletions(-) diff --git a/src/gc.c b/src/gc.c index 98dcdeb631784..197d1c6ad75c2 100644 --- a/src/gc.c +++ b/src/gc.c @@ -3854,8 +3854,7 @@ static void *gc_perm_alloc_large(size_t sz, int zero, unsigned align, unsigned o errno = last_errno; jl_may_leak(base); assert(align > 0); - unsigned diff = (offset - (uintptr_t)base) % align; - return (void*)((char*)base + diff); + return (void*)(LLT_ALIGN((uintptr_t)base + offset, (uintptr_t)align) - offset); } STATIC_INLINE void *gc_try_perm_alloc_pool(size_t sz, unsigned align, unsigned offset) JL_NOTSAFEPOINT diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index 1a385403e9672..099d74ccb37c1 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -1301,6 +1301,69 @@ namespace { JuliaOJIT::ResourcePool> TMs; }; + + struct JITPointersT { + + JITPointersT(SharedBytesT &SharedBytes, std::mutex &Lock) JL_NOTSAFEPOINT + : SharedBytes(SharedBytes), Lock(Lock) {} + + void operator()(Module &M) JL_NOTSAFEPOINT { + std::lock_guard locked(Lock); + for (auto &GV : make_early_inc_range(M.globals())) { + if (auto *Shared = getSharedBytes(GV)) { + ++InternedGlobals; + GV.replaceAllUsesWith(Shared); + GV.eraseFromParent(); + } + } + + // Windows needs some inline asm to help + // build unwind tables + jl_decorate_module(M); + } + + private: + // optimize memory by turning long strings into memoized copies, instead of + // making a copy per object file of output. + // we memoize them using a StringSet with a custom-alignment allocator + // to ensure they are properly aligned + Constant *getSharedBytes(GlobalVariable &GV) JL_NOTSAFEPOINT { + // We could probably technically get away with + // interning even external linkage globals, + // as long as they have global unnamedaddr, + // but currently we shouldn't be emitting those + // except in imaging mode, and we don't want to + // do this optimization there. + if (GV.hasExternalLinkage() || !GV.hasGlobalUnnamedAddr()) { + return nullptr; + } + if (!GV.hasInitializer()) { + return nullptr; + } + if (!GV.isConstant()) { + return nullptr; + } + auto CDS = dyn_cast(GV.getInitializer()); + if (!CDS) { + return nullptr; + } + StringRef Data = CDS->getRawDataValues(); + if (Data.size() < 16) { + // Cutoff, since we don't want to intern small strings + return nullptr; + } + Align Required = GV.getAlign().valueOrOne(); + Align Preferred = MaxAlignedAlloc::alignment(Data.size()); + if (Required > Preferred) + return nullptr; + StringRef Interned = SharedBytes.insert(Data).first->getKey(); + assert(llvm::isAddrAligned(Preferred, Interned.data())); + return literal_static_pointer_val(Interned.data(), GV.getType()); + } + + SharedBytesT &SharedBytes; + std::mutex &Lock; + }; } llvm::DataLayout jl_create_datalayout(TargetMachine &TM) { @@ -1493,8 +1556,7 @@ void JuliaOJIT::addModule(orc::ThreadSafeModule TSM) ++ModulesAdded; orc::SymbolLookupSet NewExports; TSM.withModuleDo([&](Module &M) JL_NOTSAFEPOINT { - jl_decorate_module(M); - shareStrings(M); + JITPointersT(SharedBytes, RLST_mutex)(M); for (auto &F : M.global_values()) { if (!F.isDeclaration() && F.getLinkage() == GlobalValue::ExternalLinkage) { auto Name = ES.intern(getMangledName(F.getName())); @@ -1820,32 +1882,6 @@ void jl_merge_module(orc::ThreadSafeModule &destTSM, orc::ThreadSafeModule srcTS }); } -// optimize memory by turning long strings into memoized copies, instead of -// making a copy per object file of output. -void JuliaOJIT::shareStrings(Module &M) -{ - ++InternedGlobals; - std::vector erase; - for (auto &GV : M.globals()) { - if (!GV.hasInitializer() || !GV.isConstant()) - continue; - ConstantDataSequential *CDS = dyn_cast(GV.getInitializer()); - if (CDS == nullptr) - continue; - StringRef data = CDS->getRawDataValues(); - if (data.size() > 16) { // only for long strings: keep short ones as values - Type *T_size = Type::getIntNTy(GV.getContext(), sizeof(void*) * 8); - Constant *v = ConstantExpr::getIntToPtr( - ConstantInt::get(T_size, (uintptr_t)(*ES.intern(data)).data()), - GV.getType()); - GV.replaceAllUsesWith(v); - erase.push_back(&GV); - } - } - for (auto GV : erase) - GV->eraseFromParent(); -} - //TargetMachine pass-through methods std::unique_ptr JuliaOJIT::cloneTargetMachine() const diff --git a/src/jitlayers.h b/src/jitlayers.h index 380694af60742..b5160ba1863e8 100644 --- a/src/jitlayers.h +++ b/src/jitlayers.h @@ -1,6 +1,8 @@ // This file is a part of Julia. License is MIT: https://julialang.org/license #include +#include +#include #include #include @@ -298,6 +300,44 @@ static const inline char *name_from_method_instance(jl_method_instance_t *li) JL return jl_is_method(li->def.method) ? jl_symbol_name(li->def.method->name) : "top-level scope"; } +template +class MaxAlignedAllocImpl + : public AllocatorBase> { + +public: + MaxAlignedAllocImpl() JL_NOTSAFEPOINT = default; + + static Align alignment(size_t Size) JL_NOTSAFEPOINT { + // Define the maximum alignment we expect to require, from offset bytes off + // the returned pointer, this is >= alignof(std::max_align_t), which is too + // small often to actually use. + const size_t MaxAlignment = JL_CACHE_BYTE_ALIGNMENT; + return Align(std::min((size_t)llvm::PowerOf2Ceil(Size), MaxAlignment)); + } + + LLVM_ATTRIBUTE_RETURNS_NONNULL void *Allocate(size_t Size, Align Alignment) { + Align MaxAlign = alignment(Size); + assert(Alignment < MaxAlign); (void)Alignment; + return jl_gc_perm_alloc(Size, 0, MaxAlign.value(), offset); + } + + inline LLVM_ATTRIBUTE_RETURNS_NONNULL + void * Allocate(size_t Size, size_t Alignment) { + return Allocate(Size, Align(Alignment)); + } + + // Pull in base class overloads. + using AllocatorBase::Allocate; + + void Deallocate(const void *Ptr, size_t Size, size_t /*Alignment*/) { abort(); } + + // Pull in base class overloads. + using AllocatorBase::Deallocate; + +private: +}; +using MaxAlignedAlloc = MaxAlignedAllocImpl<>; + typedef JITSymbol JL_JITSymbol; // The type that is similar to SymbolInfo on LLVM 4.0 is actually // `JITEvaluatedSymbol`. However, we only use this type when a JITSymbol @@ -306,6 +346,7 @@ typedef JITSymbol JL_SymbolInfo; using CompilerResultT = Expected>; using OptimizerResultT = Expected; +using SharedBytesT = StringSet::MapEntryTy)>>; class JuliaOJIT { public: @@ -538,7 +579,6 @@ class JuliaOJIT { private: std::string getMangledName(StringRef Name) JL_NOTSAFEPOINT; std::string getMangledName(const GlobalValue *GV) JL_NOTSAFEPOINT; - void shareStrings(Module &M) JL_NOTSAFEPOINT; const std::unique_ptr TM; const DataLayout DL; @@ -551,6 +591,7 @@ class JuliaOJIT { std::mutex RLST_mutex{}; int RLST_inc = 0; DenseMap ReverseLocalSymbolTable; + SharedBytesT SharedBytes; //Compilation streams jl_locked_stream dump_emitted_mi_name_stream; diff --git a/src/julia_internal.h b/src/julia_internal.h index 51661fa1835f9..4a845350424d4 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -351,7 +351,7 @@ JL_DLLEXPORT int jl_gc_classify_pools(size_t sz, int *osize) JL_NOTSAFEPOINT; extern uv_mutex_t gc_perm_lock; void *jl_gc_perm_alloc_nolock(size_t sz, int zero, unsigned align, unsigned offset) JL_NOTSAFEPOINT; -void *jl_gc_perm_alloc(size_t sz, int zero, +JL_DLLEXPORT void *jl_gc_perm_alloc(size_t sz, int zero, unsigned align, unsigned offset) JL_NOTSAFEPOINT; void gc_sweep_sysimg(void); From 465ff74aa3cfd8c991f7cd86c0850dae2cd80ca4 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Sun, 19 Nov 2023 22:03:15 -0500 Subject: [PATCH 222/413] jitlayers: reduce excess alignment of #52182 (#52210) (cherry picked from commit 72cd63ce28c50c8c72e009df03dfec608802450e) --- src/jitlayers.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/jitlayers.h b/src/jitlayers.h index b5160ba1863e8..f57861fa56794 100644 --- a/src/jitlayers.h +++ b/src/jitlayers.h @@ -312,7 +312,9 @@ class MaxAlignedAllocImpl // the returned pointer, this is >= alignof(std::max_align_t), which is too // small often to actually use. const size_t MaxAlignment = JL_CACHE_BYTE_ALIGNMENT; - return Align(std::min((size_t)llvm::PowerOf2Ceil(Size), MaxAlignment)); + if (Size <= offset) + return Align(1); + return Align(std::min((size_t)llvm::PowerOf2Ceil(Size - offset), MaxAlignment)); } LLVM_ATTRIBUTE_RETURNS_NONNULL void *Allocate(size_t Size, Align Alignment) { From b497f44d8d7b98932f9fde1627686fef9a096675 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 1 Sep 2023 14:50:26 -0400 Subject: [PATCH 223/413] simplify call to promote_eltype with repeated elements (#51135) Helps to short-circuit calls to large splat calls, since those have all the same type elements. Fixes #51011 (cherry picked from commit 3527213ccb1bfe0c48feab5da64d30cadbd4c526) --- base/abstractarray.jl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/base/abstractarray.jl b/base/abstractarray.jl index c9a544425d8d0..8b8e4a760eb9b 100644 --- a/base/abstractarray.jl +++ b/base/abstractarray.jl @@ -1591,10 +1591,14 @@ eltypeof(x::AbstractArray) = eltype(x) promote_eltypeof() = error() promote_eltypeof(v1) = eltypeof(v1) promote_eltypeof(v1, vs...) = promote_type(eltypeof(v1), promote_eltypeof(vs...)) +promote_eltypeof(v1::T, vs::T...) where {T} = eltypeof(v1) +promote_eltypeof(v1::AbstractArray{T}, vs::AbstractArray{T}...) where {T} = T promote_eltype() = error() promote_eltype(v1) = eltype(v1) promote_eltype(v1, vs...) = promote_type(eltype(v1), promote_eltype(vs...)) +promote_eltype(v1::T, vs::T...) where {T} = eltype(T) +promote_eltype(v1::AbstractArray{T}, vs::AbstractArray{T}...) where {T} = T #TODO: ERROR CHECK _cat(catdim::Int) = Vector{Any}() From dbb9c46795b0e45b770254542854526f3db119b5 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Sun, 3 Dec 2023 16:25:58 +0100 Subject: [PATCH 224/413] Update VERSION to 1.10.0-rc2 (#52375) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 70cd4f3fd92ce..01281a7553fa5 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.0-rc1 +1.10.0-rc2 From 14677ae505b224ad6f472ebec2e078c4681fc331 Mon Sep 17 00:00:00 2001 From: Hendrik Ranocha Date: Tue, 28 Nov 2023 13:19:12 +0100 Subject: [PATCH 225/413] fix invalidations related to `ismutable` (#52170) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Related to #52134. It would be nice if the underlying inference issue was fixed but this seems to be a hotfix for now. I have seen this inference problem occurring in Julia v1.9, v1.10, and current `master`. For example, on Julia v1.9.3, I get ```julia julia> code_warntype(ismutable, (Function,)) MethodInstance for ismutable(::Function) from ismutable(x) @ Base reflection.jl:521 Arguments #self#::Core.Const(ismutable) x::Function Body::Any 1 ─ nothing │ nothing │ %3 = Base.typeof(x)::Type{<:Function} │ %4 = Base.getproperty(%3, :name)::Any │ %5 = Base.getproperty(%4, :flags)::Any │ %6 = (%5 & 0x02)::Any │ %7 = (%6 == 0x02)::Any └── return %7 ``` This causes some invalidations when `using OrdinaryDiffEq`. (cherry picked from commit df40bab2dadf6ad46b822e5ea3e71ac3ee238628) --- base/reflection.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/base/reflection.jl b/base/reflection.jl index bbcd6cad27128..adcba82709491 100644 --- a/base/reflection.jl +++ b/base/reflection.jl @@ -514,7 +514,9 @@ true !!! compat "Julia 1.5" This function requires at least Julia 1.5. """ -ismutable(@nospecialize(x)) = (@_total_meta; typeof(x).name.flags & 0x2 == 0x2) +ismutable(@nospecialize(x)) = (@_total_meta; (typeof(x).name::Core.TypeName).flags & 0x2 == 0x2) +# The type assertion above is required to fix some invalidations. +# See also https://github.com/JuliaLang/julia/issues/52134 """ ismutabletype(T) -> Bool From ea88b8c5ea7730cdf171e9bf48110b0a6a963279 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Tue, 5 Dec 2023 15:35:31 +0530 Subject: [PATCH 226/413] Add single-term multiplication for `AbstractQ` on v1.10 and above (#52342) (cherry picked from commit 150c1adfd6f1a54e6a74393c7bb73af8f772fa30) --- stdlib/LinearAlgebra/src/abstractq.jl | 3 +++ stdlib/LinearAlgebra/test/abstractq.jl | 1 + 2 files changed, 4 insertions(+) diff --git a/stdlib/LinearAlgebra/src/abstractq.jl b/stdlib/LinearAlgebra/src/abstractq.jl index 2aa333beef2b2..b0d53320f4aa3 100644 --- a/stdlib/LinearAlgebra/src/abstractq.jl +++ b/stdlib/LinearAlgebra/src/abstractq.jl @@ -157,6 +157,9 @@ qsize_check(Q::AbstractQ, P::AbstractQ) = size(Q, 2) == size(P, 1) || throw(DimensionMismatch("second dimension of A, $(size(Q,2)), must coincide with first dimension of B, $(size(P,1))")) +# mimic the AbstractArray fallback +*(Q::AbstractQ{<:Number}) = Q + (*)(Q::AbstractQ, J::UniformScaling) = Q*J.λ function (*)(Q::AbstractQ, b::Number) T = promote_type(eltype(Q), typeof(b)) diff --git a/stdlib/LinearAlgebra/test/abstractq.jl b/stdlib/LinearAlgebra/test/abstractq.jl index 83a26c6050484..19b872d685668 100644 --- a/stdlib/LinearAlgebra/test/abstractq.jl +++ b/stdlib/LinearAlgebra/test/abstractq.jl @@ -34,6 +34,7 @@ n = 5 T <: Complex && @test_throws ErrorException transpose(Q) @test convert(AbstractQ{complex(T)}, Q) isa MyQ{complex(T)} @test convert(AbstractQ{complex(T)}, Q') isa AdjointQ{<:complex(T),<:MyQ{complex(T)}} + @test *(Q) == Q @test Q*I ≈ Q.Q*I rtol=2eps(real(T)) @test Q'*I ≈ Q.Q'*I rtol=2eps(real(T)) @test I*Q ≈ Q.Q*I rtol=2eps(real(T)) From e94785fa73843d3221eea11dae8a65cc1b91fa3d Mon Sep 17 00:00:00 2001 From: "Steven G. Johnson" Date: Tue, 5 Dec 2023 05:26:21 -0500 Subject: [PATCH 227/413] bugfix for dot of Hermitian{noncommutative} (#52333) Co-authored-by: Daniel Karrasch (cherry picked from commit 53f1eb82b8a4265def61ab677746b63a583ef865) --- stdlib/LinearAlgebra/src/symmetric.jl | 2 +- stdlib/LinearAlgebra/test/symmetric.jl | 16 ++++++++++++++++ test/testhelpers/Quaternions.jl | 5 ++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/stdlib/LinearAlgebra/src/symmetric.jl b/stdlib/LinearAlgebra/src/symmetric.jl index fa3464e93230b..40e37f7bec22c 100644 --- a/stdlib/LinearAlgebra/src/symmetric.jl +++ b/stdlib/LinearAlgebra/src/symmetric.jl @@ -452,7 +452,7 @@ function triu(A::Symmetric, k::Integer=0) end end -for (T, trans, real) in [(:Symmetric, :transpose, :identity), (:Hermitian, :adjoint, :real)] +for (T, trans, real) in [(:Symmetric, :transpose, :identity), (:(Hermitian{<:Union{Real,Complex}}), :adjoint, :real)] @eval begin function dot(A::$T, B::$T) n = size(A, 2) diff --git a/stdlib/LinearAlgebra/test/symmetric.jl b/stdlib/LinearAlgebra/test/symmetric.jl index 224b7b31a50df..82236c2a677eb 100644 --- a/stdlib/LinearAlgebra/test/symmetric.jl +++ b/stdlib/LinearAlgebra/test/symmetric.jl @@ -4,6 +4,11 @@ module TestSymmetric using Test, LinearAlgebra, Random +const BASE_TEST_PATH = joinpath(Sys.BINDIR, "..", "share", "julia", "test") + +isdefined(Main, :Quaternions) || @eval Main include(joinpath($(BASE_TEST_PATH), "testhelpers", "Quaternions.jl")) +using .Main.Quaternions + Random.seed!(1010) @testset "Pauli σ-matrices: $σ" for σ in map(Hermitian, @@ -462,6 +467,17 @@ end end end +# bug identified in PR #52318: dot products of quaternionic Hermitian matrices, +# or any number type where conj(a)*conj(b) ≠ conj(a*b): +@testset "dot Hermitian quaternion #52318" begin + A, B = [Quaternion.(randn(3,3), randn(3, 3), randn(3, 3), randn(3,3)) |> t -> t + t' for i in 1:2] + @test A == Hermitian(A) && B == Hermitian(B) + @test dot(A, B) ≈ dot(Hermitian(A), Hermitian(B)) + A, B = [Quaternion.(randn(3,3), randn(3, 3), randn(3, 3), randn(3,3)) |> t -> t + transpose(t) for i in 1:2] + @test A == Symmetric(A) && B == Symmetric(B) + @test dot(A, B) ≈ dot(Symmetric(A), Symmetric(B)) +end + #Issue #7647: test xsyevr, xheevr, xstevr drivers. @testset "Eigenvalues in interval for $(typeof(Mi7647))" for Mi7647 in (Symmetric(diagm(0 => 1.0:3.0)), diff --git a/test/testhelpers/Quaternions.jl b/test/testhelpers/Quaternions.jl index 1eddad322ec40..81b7a0c2d0121 100644 --- a/test/testhelpers/Quaternions.jl +++ b/test/testhelpers/Quaternions.jl @@ -20,6 +20,7 @@ Base.abs2(q::Quaternion) = q.s*q.s + q.v1*q.v1 + q.v2*q.v2 + q.v3*q.v3 Base.float(z::Quaternion{T}) where T = Quaternion(float(z.s), float(z.v1), float(z.v2), float(z.v3)) Base.abs(q::Quaternion) = sqrt(abs2(q)) Base.real(::Type{Quaternion{T}}) where {T} = T +Base.real(q::Quaternion) = q.s Base.conj(q::Quaternion) = Quaternion(q.s, -q.v1, -q.v2, -q.v3) Base.isfinite(q::Quaternion) = isfinite(q.s) & isfinite(q.v1) & isfinite(q.v2) & isfinite(q.v3) Base.zero(::Type{Quaternion{T}}) where T = Quaternion{T}(zero(T), zero(T), zero(T), zero(T)) @@ -33,7 +34,9 @@ Base.:(*)(q::Quaternion, w::Quaternion) = Quaternion(q.s*w.s - q.v1*w.v1 - q.v2* q.s*w.v2 - q.v1*w.v3 + q.v2*w.s + q.v3*w.v1, q.s*w.v3 + q.v1*w.v2 - q.v2*w.v1 + q.v3*w.s) Base.:(*)(q::Quaternion, r::Real) = Quaternion(q.s*r, q.v1*r, q.v2*r, q.v3*r) -Base.:(*)(q::Quaternion, b::Bool) = b * q # remove method ambiguity +Base.:(*)(q::Quaternion, r::Bool) = Quaternion(q.s*r, q.v1*r, q.v2*r, q.v3*r) # remove method ambiguity +Base.:(*)(r::Real, q::Quaternion) = q * r +Base.:(*)(r::Bool, q::Quaternion) = q * r # remove method ambiguity Base.:(/)(q::Quaternion, w::Quaternion) = q * conj(w) * (1.0 / abs2(w)) Base.:(\)(q::Quaternion, w::Quaternion) = conj(q) * w * (1.0 / abs2(q)) From 4f09b547652b2feaf836b92f71a28cf8197e98c2 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 6 Dec 2023 10:35:44 -0500 Subject: [PATCH 228/413] channels: fix memory ordering violation in iterate (#52407) Channel `iterate` calls might miss trailing items without this patch. I have not seen proof of this reaching a failure, but we do appear to be missing this ordering specification in visual review. Should not make a difference to generated code on x86, which already has TSO guaranteed, but may alter optimizations and other CPUs with weaker memory orderings. (cherry picked from commit 856e1120a8f255e4907a05f0146a2026a6665dd4) --- base/channels.jl | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/base/channels.jl b/base/channels.jl index 90dac37f41cb6..75207e9fac76b 100644 --- a/base/channels.jl +++ b/base/channels.jl @@ -211,7 +211,12 @@ function close(c::Channel, @nospecialize(excp::Exception)) end nothing end -isopen(c::Channel) = ((@atomic :monotonic c.state) === :open) + +# Use acquire here to pair with release store in `close`, so that subsequent `isready` calls +# are forced to see `isready == true` if they see `isopen == false`. This means users must +# call `isopen` before `isready` if you are using the race-y APIs (or call `iterate`, which +# does this right for you). +isopen(c::Channel) = ((@atomic :acquire c.state) === :open) """ bind(chnl::Channel, task::Task) From 1e66ce2de71e1215f9021a300ad30ef95427a765 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Thu, 7 Dec 2023 11:21:38 -0500 Subject: [PATCH 229/413] Bump LLVM to 15.0.7+10 to fix GC issue (#52405) (cherry picked from commit e5046b4579cf571931714abbe14a3a049ca6383b) --- deps/checksums/clang | 216 ++++++++-------- deps/checksums/lld | 216 ++++++++-------- deps/checksums/llvm | 436 ++++++++++++++++---------------- deps/clang.version | 2 +- deps/lld.version | 2 +- deps/llvm-tools.version | 4 +- deps/llvm.version | 6 +- stdlib/LLD_jll/Project.toml | 2 +- stdlib/libLLVM_jll/Project.toml | 2 +- 9 files changed, 443 insertions(+), 443 deletions(-) diff --git a/deps/checksums/clang b/deps/checksums/clang index f0f458c6cce9a..78743a32a2956 100644 --- a/deps/checksums/clang +++ b/deps/checksums/clang @@ -1,108 +1,108 @@ -Clang.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/f11d13e193ab5e18c88652012d0313fd -Clang.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/513a14b0a99695ef330c1109e53d2f9ebd44f9d189e2fac691f4dd3502dea0b1437dbad58fecfc99549d64c90237f5143a0d31b8d05dbd747eb9d2570ed85763 -Clang.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/97c7f0c55a0943ef658960aa6b8ad6fe -Clang.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/7a655675d0d3b3a18f031effbfcd60b171d880ebbe14c64d82f3017e537d56deb19e7a613dbfe619dbd4e8c9db1a2d4e14eefa984f11efd086332eed5d141d06 -Clang.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/3ae704a7c7be76ce32bba7c29ef34bc7 -Clang.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/93550af832e64603431a4e87ef90af227f9e376184a839e073ccb8880399b83bb748f4dc0525a69ddcf2bae0a31a010bd27884a9b8f9462f8439899080bd83f7 -Clang.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/6bebcf58049da1baa3689f9b5b4c0508 -Clang.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/68dce1abe90fd6df3facf19f0e430f27a3d27426c6d5673b82e671a252e08f3bed435bbf571e0c203cb95f2b5311dfb948f9a4da81eeec4f53b3c27dd692b049 -Clang.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/ac81a4b721024af1f63a006047b23d61 -Clang.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/48673b058ceb6c022f553c567ee303154cc587adfb6d5e2c60bf3594a47515cfee01bf6abda54a9f54e49b3bbc40bef372f2cd25e4eca4966834fdf5cc1ce150 -Clang.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/51ec3b7ad77d6a525a433cd9044046f7 -Clang.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b67f6c782734d5a1b3bac8b4f93d0bbe49cc2a1fde095c1d13517d19b1631a926f31291c92058d560b4cd69a6161891b1808ad8f6f6e30e8c103e7183d5f59d8 -Clang.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/bb3218601635220ded4b8285d991b88a -Clang.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/0c60978c8b09a9cfdb7042dbfa61b5147748e968c08508df535a26b8d6ce199837b2ca7aee483d940ddb60aa601a191247e31c89e89d9f1eb427e28358a8c0cb -Clang.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/53631f7d2506def52ff0bdc9b60e703c -Clang.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/5a0362e15e3ab1b39e88ebf1c5fd8c179e72d784516d6fdf0139180f3e59806ae07f0bf11f92d0313baf3340b77d872d8f6ce04f1d9f2fe1ba15cbf4b7ae3c61 -Clang.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/8a4061b3454b411f05c8c375b3af4f44 -Clang.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/2ee66b4a16821f0fc5f8a2aad92017f71767d5f12374425162c0ba9440ad40082780f21114f61e51ee35be4f0eccd8d61e28c964e2b724046c572945e9410740 -Clang.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/eb3d9c2224594d96c2b735ebb420f24a -Clang.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/1ea760423afcb28d306f1bcd67d25d1bdc88dee21445f397bfe5b2fdddd84c8343fc4e5fbedb006640546b28643946aff766d7660e75e2d25c3fde51f64e35d7 -Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/ee4b539db8439cf3eb480f4f86b67588 -Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/fe73b6d62a39e8724bf3cc7ddad385958ef1fc80bce8a6c7a4f57c4bb383736b2ed4a59da228683101bf2f16d4673d9012a30973c22b4b9dbad4be75872a4a95 -Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/27e36fa4a5173cdb6179c27299e80128 -Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/9b078f25921f2208fb2cf7ffadeb7f451be772527a6a9a268f44c20a17b8369b9e0b7f55b48ca38ccfa77f9f2a4209a6168001300ebf63ae09a50bc19e1a5403 -Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/76086701d89bd10682c0f937571af5be -Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/0d637913b61dcab5aa32e7d2b1315e1d597114f9c5a9dd8f9c50bf26ca8260cd76a9cf4e4992bf7a502ce6ae682222a41f6d44e5a5676f329837d4ec5151dddd -Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/9151fa6e2a3d3cf51f1ccc0023ea7e23 -Clang.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/56ebc1653607e623d4a1ecba4a66865b069b548a5d3ff3410e712da6e20e9ae222d5ed6fafe50c924fdd927a6052cc02287aeb5a49fd6a404d7ead243f04d230 -Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/cc22ad5247ded68dd2b22f49d9a9da0b -Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/9f42403c94ec2978f252a38215b0feeb9e2e1131a777bab52bfdec1fbd0399e12008e4012254a53c92b31e7db4d9dcaccd47be40f37d5e23596648ba89e77f9f -Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/ac2fbc3060d46a0ff2b1536db0d87461 -Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/a5db6ffeabaeaf20cb8b9b61530094fcca442de249265f9bd5d62067aab663fc42ed65ee87fea91e427648340e3a8a739a6b38363ced69aa2c6f50bc2a14dee9 -Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/916988129901ce50be35b29ca2969ba4 -Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/e37769b80134a14ffca04f85e4a82b36c61395f1459a0122fd07505561aefe0fa8e681d428bfd58fe4c40bb8d4c201e8fc7a1029de2527eb78728ab8d0513981 -Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/d57074a9cd8d0a99db44026a75bbed52 -Clang.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/2bd80d0d5ee6d3fa14d1c5e1c5838f5fef13f0d31012ed0ecaefce66f35d2918faad2444eeedddc64a699b1843b705d002f95ef7f8d82a2dbbe55fe1ff545591 -Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/2aeda3d3dbb3c4d294d3cdfad028aca5 -Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/597ac2c8fa1e00f157af7555f82f7f011a74f6e24ec6dbfca31f5e104b67d6fc157f59b03689afe16cc35f3b8840a22867766d17b92750891e5fcdd0b6027ffd -Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/8318580861648c955f488eed4c2beb87 -Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/6b4f85bfa1bc804666c8e25f15c49dd67c665a261e6a5e79b1d72f079a9cb02ce4c929855e342aa0c0a08fb7ff8891eb93468dc4dad598367eac0314823d398f -Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/d8c1f0aaa04b0a7b8795477a67fad0c0 -Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/5ca6f1ab1e17a4e4712397be9dd040641ee8583c21670a2c26881bd917b1d54420d193efe039ea1aa929b7647b0672838c9309d011c733aa5d060598a985a84b -Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/6dccafa2ab530b162b42948e4e089fc3 -Clang.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/c4a9e1703a1b4c4f7753d16d1dd9cb6159c7199a9217ff01ae2e5b29bf1cbc4eb7e3c9549afe84c23cb767bf095d2f19635dd6451bbf16e7716561b317f6adbc -Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/cf3a71a9368cafd9c90d0949069715ef -Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/b3a6fd1bc2ce52a96915e8095a0ccaf9c9234446336249cf796fe2853f5a95808de7bdec126032135ef4ed202dd83058a055fae95dc06a7c4aef575715d17177 -Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/f15f065e1e759d94576373023cfda5e7 -Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/94903b6220ceb155f1407e822e0449584f9a39ed899c753146736884cebf054b3ce0fc3da657ece6e9573b2699829ebce8b5737c329e67e78fc12fda7a6bbbed -Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/7047338e3cdff0e9bd52d04160ef0ac2 -Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/fa48444ab31826eb06a9eca8c209d7beef952b11e1448bfc2e4dd1906ac5a12fa84fd0f048069cbdecf0ddebf6fe12bfc44d2dd6c117d3d17befb17d05ef0efb -Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/3497b263dc6af14911baf3457f0e002d -Clang.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/44853f230ed408744fb79911f7fa94843a6dc034dd52ecae86710325f9c6ce635771bd3e54b573f021d30542cf1a72cc92a338454633990c25ef51eb741cd63a -Clang.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/9ecbe0287e26e692377b249e7b56943e -Clang.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/ac1ad5ea8e31d68231fa83d54bb8bc63d14b906682590e209fb50dbb6bb41349c1683fa08f4cdcd381f0c05eb7b80443af26e3557110fceb075f392f6cba3acf -Clang.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/83a7ace018fd7c1ff108b74f71064e00 -Clang.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/8ccb3e34e6d5e92b30024877db4df2d697420a3318eda2413442d10b7e8541a25ffe1b8b4133d37882ed6ddbd0ef7aff984315946538946484150f5b8d7307c1 -Clang.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/2ebc196f9c8d210d7e99f9674cf92c38 -Clang.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/d6a236854893629a5e318dd3b4cfc99ae75849fa3677c466d06355a3e6ba002db07fc0cee74ab2abf17a56cb58b37bb58e65d9c1f760d1d900dab35372afadc3 -Clang.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/48f329f4721bb4a5c805291449f397b6 -Clang.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/5e781a7e1ca0a8fdf8065d1ca9b5ecc6f2b85cb3ce6544d7aace5d86c7dccfb25ad46caf39b9231def435c0a61f7466638c3de5878bb20830fbf77e25d39347a -Clang.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/b44457db229714204cdc46862511a8f9 -Clang.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/fab8fa3518106d833aa03e83b17db2e19d57894d5061459376a13de9c825ca3d500d0ea5dede65455f0cd35e00e8e92ed2da9c7c6f085cc0d6b0efd9b755c9b1 -Clang.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/16821bd1660dddb0b807023a00106fc0 -Clang.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/30a3ff94e6a41a719d3b8cec64d9445f69f5ec697b2496dd0f637ae6ed3d6398df34bed47676d1ca8d96a9d83bb59c803246c64d65cbcc19f1c4536c4a83a010 -Clang.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/1d1640575d3ae6ec8c8119c01d48e4d0 -Clang.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/0094a40618ccaa6a1abb5f90f8ded22b9b13f3e1fdb49d71e5cd32666a96ccc02fe2555101b747eb2599178428841d97f273e9f275a2f7ec1666337788a50898 -Clang.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/c2e562ab1853b204ae278286bd08a174 -Clang.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/d668546ab19a6f101aa5fdf3ac81010663b3d1b05870ab413e6ca227901b4653c4ad7f198ed1f97ab33b7c679d4589451f7ba2acc0d17033f9402ab48c8179b9 -Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/259877c60e0bd46d38fa6f442e3adc2a -Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/697fbb22251008dc0af7b85cd4aaf7213e7ab1c1c546df0d5df1a5e9bd7ee7d3acf7008059ffe6ad904719c520aaa7e11464b4bf639f5c15a752ba1ebeadc45e -Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/7a3e2d4a5e1e81ff723629f0f4213623 -Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/6d5cb30265751e4486ac0ff8f46bcc305cc52129130ef2f2d79fb000ec375a402de80302ba42ce381342e52e31e3827dd3958bc4cb125e28b1890b0b6ff16f45 -Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/fc86537fbf358dbb05142e34a60a6677 -Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/14915a943536fde5a27e26d3b1d067739cd456f274f16772fa3e5dd114813a73b556663e406ce5370b3ca7ece201dae74db5c9c76e26488611b2e551e26a71c4 -Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/5efc569392f8892668f4b7c6b23f4234 -Clang.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/01a7a29a9587ea9b0bf78cfec86a4f458466dd9fa3237a9caf55c96ab58fde10c60d5d8148b00cdff7cb74d43b93a806d704ca064aeb631d4cff3f2a5b63e547 -Clang.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/9b9db8d4a19045a4f9f9f6d443564bfa -Clang.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/d32d1f731752e1f39fd5cd5c671d439249092ca2a7002c1d29ad152a273a56df03c197489dc7c52a3a2b94b7368934f93f3602cfe5a50eb949a8cfa902f4edfe -Clang.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/e05b07aca51f3f463b2d77cce7fc3e50 -Clang.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/c17c396462785ebac988c52679517edddf15ccaa46357c4b8e21c939c4a23aa82503f5fada360d003e087b03b0978141780af8504dc7d87c61e0f41ea0a5cc43 -Clang.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/b28a8a689f053b5bc2427f9f2843a82f -Clang.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/e7acc5e7eaff6fe784ed94240f4b9a7e3cd550b9c8cfd5bac7c9e8b6697a78ef876c52a2e593caa09938b629734361c30317ec748366fe26800c7b0419e86cc5 -Clang.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/12551be7929fb3bd8cbe3bc6346d17e5 -Clang.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/0c3650ddf008768300b4da3119667207c78bdef2dcb185d0986cf5c0eac87d59a772261de97f8afe2e872178f98bb0483f81e577d7398dbbef8d1cc01c97bf87 -Clang.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/38ae5bb94d4bfd9ae0cdd4adc7c46241 -Clang.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/035735f1724f93dd96fa60c0fb64453f309e3628da2a7373a76418a22c74d5770e99ac52d460559420454bd4d4e95d0291bd35308c542f3b4004efd61a528646 -Clang.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/5e2744c263f84a40e78526ab456b625a -Clang.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/d3eebce8107972f693b2aac8d27ca724e8c0de382c3bf9ab2063590ef694c3177d2c7e9cc73bb359fe480413c817ce24df4994cb2f7cd14c325baa8e329ce84a -Clang.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/5b35d50b46f46f84937207cbbe53f361 -Clang.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/7b1ff511a59e93aba410c2fae82c12a732efa8c6978e48a2d0ba480e3f5bed305c30b25a169555e4f23d2fc4c257e2a04150bb17b19c28469825e549c7a0ffcc -Clang.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/89d5bc6e2ed559b89b1e69a062b2b0bf -Clang.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/658da15ad6615e406e2f4117d6c447ca819383a2add6c236c8e57f150742ab4512c2f198b92c3d51f4236745aa40b8bf63d0b78f6ed0f3c748771717bc8eceba -Clang.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/4a18a0ea6afd7708adb6023e92f81549 -Clang.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/2bc99affd9098c10ea35a90245006f25c10249616cea5395974502e5c82a5c48569e064c5c2436ed01348675b2b590b50fc6d493407ddf63a953309c225705b9 -Clang.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/f257257f8c4b05983e802bb32701ab3e -Clang.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/3090e623585702693ea93b17564f5393f54a839f3e655aaea3461dc8cf6ba71a5191cc87a7043da4bde1c1bd5a7caeadc36b99c64e524e60c85aa95557a9b07e -Clang.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/8550b772d168d5b8ef760c58bdf6897a -Clang.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/bc35342a4587dff85acfd059415790b2a05bdfcf4e5657aabfce48fed34fc1ced89eb5924f4a03159736da2538954e049f2293ed307912d50e47aab3118b7fc7 -Clang.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/8c2124c8edc3e8e0d48b4cc55247b6b7 -Clang.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/a9282c87c8bb658f3f52ee2fa8c8636dded015b456d42a8edfec9f395185180b783b9dbe75d6bad4dc977571dcafcdeff162d5bb100f447c883b135246d8324e -Clang.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/a4cbc590373f57422eef9f29d4174b87 -Clang.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/3286759915cc733f7aa3784e9cfa0e88c69a2fc6c3bf1bd34f401f7ada9db63c51f51e138c0086a4eeaafa8fa36bc90e11a56f57857daa4772e9c4d45ad5fc9a -Clang.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/ebd1348b93fa59b64750230ae6c84977 -Clang.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/10f742b2db05da287ab7eea5d2c75f4c6dfd7798f2f5b13a6ec1da166aedf5d591a40bcc2df3383072eaf12584901e56f177d8fbfcbbc5b3b0db06e2d829c4cd -Clang.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/739f8ba3cdc2afb4e03b9f03d4872cd5 -Clang.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/25df8931176dd77881494d94ecd52c4fccabf72e8d34d646016fc3cd3eb151a59cf994a796fd1f7bb776f62ca51cd03640c1c1817c857c117445e2c1ba3c8c41 -Clang.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/62714b3305623018e2c8c774509a8514 -Clang.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/cc95aed610963b63aaa7267c0d77fd57e29e19730d369135a27a9b3956837f34197b69af8239d38498cd004e9723ad78d279ed159aeef655dfb173f426420375 +Clang.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/b064c4494822dc829611629c4f2bd5eb +Clang.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/6f4fcfebbea9df7964eb6f7b4c33b91baaa2abb03c44e0c51150d894d22d4f99e1ccb6b6f9acfb45f532bbb61e2ff11515d306a56004be46f67d60134259bdfd +Clang.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/8a17e03287b24b2e9e08a4f753e12fe0 +Clang.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/065a53430ddfc2cf202ad0d18933967af3f4ebe07bd59ac41856d0ea9e67a59f958850b7bb2312f98b1927d5e74bdd9015867145eebd242930a081c58a9bbd19 +Clang.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/d7d43a6f98be3c09c3c5b9cebd6fc930 +Clang.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/290cc24e1278b7e6648d006669bccfec1c41d797718e16c9996588969b7fc9eda360cfa0d2a7d100b0c5e403fabdc77487c11d0a812fe51e9cc2ec2a814192e7 +Clang.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/95036da7fb8a37330ea3a74f721460e7 +Clang.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/7d1df0c6c8514153a7295a75b79f827d724d53542f39773d0572be9cc24d8793ab02e35ca818f17661bd777bae7e346e8318f139e9f141736f10214b80d7461f +Clang.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/81854d7e53af48122a80448106a5cec9 +Clang.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/0744f60891c18a8fdfe8e4c11b827fa42ed98285bb0557837f7b6dafcb1eabcf763d787c4b4b541d0a3e40905008c6e7b2d76d76ac7edf8a470cfc39e635f43d +Clang.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/e381e3ec37796905cf0d1863f34d316e +Clang.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/417218e1447ffcdf642d9e28e7ffae98138efafe5292f6dae83cf2490eb89b3cf39cbff5c77b6c442a0e04173f9eb22ff0dbb0469cdfc622f7eefe8bdd65a5ef +Clang.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/7972214282a5b81512a185e023488970 +Clang.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/01483ffbb7e5878ed95843d8e750ae163018fb7fd2bc044aa42d55024248d17fbc094154968b7297aad6131aa7976630af282be4dbda1b9b6114cd660d8cb075 +Clang.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/22d08b77071e480d81a1e3c0b7ad7f66 +Clang.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/b7e3c2b1cb6f00fe1280b0bb9f72f43e5883df37fc50b750e663845083d7c797f4a4a47c4703169a29a0c70899e92b8f9d861674563164590b4689d7bf39cf4f +Clang.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/abb72f91e3ee55c95a5364e1ec22c161 +Clang.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/899fb8b9734c0041b524d6e8befe61d7c0980fb697be82297f4c091a71c30e1f56c1f8fd76149853d7f7a4026148d934aef906ef4a35fb00d9dbc51a56bdb5e7 +Clang.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/745d75f7eb0d8b905182f08c0c1f9911 +Clang.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/9f249ad4078fc023874c8d8990b981aef1663828533c41841bb5ed860832fde7f9b37f19d78dcf06bbbff73b24286204a686d051abeada7dc484a1fc5bf8d9ee +Clang.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/d2b4126d32ff0b9e28b85d91feeced15 +Clang.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/d319064266d2d264ffec849d44efddc6f1835058a7a0e33d3e78dd2122ddc18b0303c38a265d86145debfc5cae9b98c3794b447fa688e042bbcb4f75119f9788 +Clang.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/4161a2b194e54c35badc65124a19b81f +Clang.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/7302ecb2f05b697ad212fe1d3a1d24740d3d5a8bd1b01a61955ba84c1592f80e7ca3b5ceb7b62361ee61eaadec762a2eb7c899c53b7b4e06fccd8c71ab3ead46 +Clang.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/c2d179b7b8d9afd783e9be03f258884b +Clang.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/4455aed97627d50caaa28624ab15a099b9e174988bddd13ca558e1796791606c25a22689beec358e03d4e2760f6778a2d54a76538e370637169e3b9120e664a8 +Clang.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/c6aa69e3061de0bc80b17108ac89f6d6 +Clang.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/012aa640b4359842081c06c76bf51c208bba6a494e6c8167c1abf57b8a01677376c23917b0bf66edc7afd5dcf83f08090fb5a51ac1604213d6e3ed48bdd64118 +Clang.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/1abf2235894e554d19b1e5372149f38f +Clang.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/f35cceb0f39dc444435e9db90c6bd8d39adf49cc9c885bc190df051e38c13379e5d5ea5618034763c608abcce06f363c93397fcccc493989f4fdb910e800aa7e +Clang.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/5ecd609bac911e14fd7e36fef5ad8e65 +Clang.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/d05457ce07abd12eeee5a036742f66ec4dac99190e98e4fa26c7b59d00b5c90a98bfc65352355ccc609ffb7114106f66dfea166de1eff1d3553180c2cc5484c7 +Clang.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/49a60af7a47d4a5ba9838594af44b695 +Clang.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/06bc663411ea5b156fee0deab246abbce42d8c180489cd38cc0a1bfa9c73c4d21e382407decec65750423269bb71c758bf2401788aea884394e8ce40aa75f9bc +Clang.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/b555bc479f57daae26101118b71e5b9a +Clang.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/aabe9e63b6f11101d6b9be4c56b945014c49373ddf670346baec1ef255c504341c9c3f8e729684c17df8ca50b108e0f4b2441b7d5b55a8e2afde3934866b5f6c +Clang.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/5ef0a90f103a00c80c68309b5bcf1f4d +Clang.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/37266e4253e853b68a41d4ae21e3c6f8b76d9799f8b802d347b8de72e33e529364c4ff48de0e11fabfb85f5d982a3b0fba594f4098f6b428c883fced9767517c +Clang.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/915cacbf726988039454f100fd007f76 +Clang.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/15bfafb2b04655617190f8ba8cf1f5a92ed277eefb84e22b8ebbe05f19b384cf296db893e2d2abffb1228749c07e3e5a59e42d8becb3c32591970d060beb71db +Clang.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/dc2c2c78c6446cd17fc55e7499ebd9b5 +Clang.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/a4713dc6fabe3b374632534452a4ffc997588d2e15f4ba08087a9c0dc23b1f447ab5d33557f56eb0523433ce534da2def7de76600021825781d662bfbe09e094 +Clang.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/855f38cf2d8b2761319ed6670897a32a +Clang.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/eca1511c2eaaca9a538efe2f04f17234dc2c0920d2e4081b7e1b92565000028749f7d379574c636f04754e51baa04c193437e9bf755fcdbbfd5ce3a96c7c5a1e +Clang.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/8601f1d8e99af31a38e044daeddc3622 +Clang.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/dca2e5434f83ed1829e16e6cf7abed86bdd3251492998bfc808dd117a253a08886234d5e1086bcec76a38f3373ae76a36a4c1a81a1967fda567b95aadbc354c7 +Clang.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/82c18bf06d579467d7eebeb646238b25 +Clang.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/4669a4a7e62af66271259bc15b38dc63e72227097eab35b93d44c483d48205b45403a83fa779c10f926bed2fab1347a73d93956930550194343525e3ff642855 +Clang.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/99f9eb32064c66ad460fbf73d4ec379b +Clang.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/074773e19ba60ddf152e7a65689bcb2c0ff255813cd4079190ddad14442be698edbf9917a9f042b005a666a879261c026f265309254d2c4e6ac07e85dfefddee +Clang.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/ab5c8cac975d0348bdab3f55850db1a8 +Clang.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/f8ded9ea7c2209a63349e5ba221adfc76689c1299087680108939474c6bc965506245632788c9af4975b3cf099c9a85e94aa3fdf0f2f139b8462ee2f9b306704 +Clang.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/9cd24f4c1519ed384dbe5a5325943e86 +Clang.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/579177600090fe900edf8e6bd5ab7e8617d74c411769e6726a424492f468c3fa9938101673ee2a13ae1e3ce5b0fc22d74589e4eb6e31e6a411d2f0b50eac05f2 +Clang.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/970230c1742c8005358514ff5c44e6b5 +Clang.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/f24e1bf1c92bea7519a6b767c4391566bc80d1668e2562f4c083f7d68b7166e9330b83fa45406129ba3a0caba5ff8d18a90273e9c7992d93f4b915ee54c6f5a9 +Clang.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/6b331d43437f38918216388402529ff4 +Clang.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/d302d08b7ed46a7c907a0b04e25947ba0f84e5e12486d3dcd4b0b875e9d686902fffe89eb7db631b9be33606c05b83a13181295bcde45653c6959f7f5c1ba9d8 +Clang.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/46e24960499c926aa047f1b29da282e3 +Clang.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/6efddeb8de7bb9f6245c604c1f80a1a1449278b1b63ac8787b27092713324e4cfb483a03684b7e58e2dd14d15f39fe6e315bd654d2cf788c03b333fe5068ed10 +Clang.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/1540ce6fb7925df9124ebfe27ace9ae1 +Clang.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/9acc77743c34ccab9f362dcd5cdf761ecfc2dc0c7974d3f62b4dde852427de327e9c53981988cf5ebd6c29ea89221d938bfd23783ba64522fcb7bad5cff7f79c +Clang.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/2bc9b9a0d15a35e7311ea30d6240d04d +Clang.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/4ec99c6c90a870485bc4eb526bbed1cc1aba5f35f23ff47d32c86e64871806d6ff94244869b14600f82d5e8f0dc91ae307e87d808c3b89ec92b1e9c8519fbec1 +Clang.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/73b8c5fee1a5c1f3a59d75e4ab7482fd +Clang.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/f4eb27d2dac224585e274ae5bd9012e60c044220d39daa2a46e00da54e8cb26b20f9447f111c71364d05594683773d73fd22e06cacd465c64ce5c0fe0b51eb43 +Clang.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/7c2c723aebc97f0df6a06ab04117e7a6 +Clang.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/e2d28c9a69c7d384cc82c077138fad2f8c87c89ae4400a6ebb468dd8c26695db42e4889542fb91f515cd53d9e7d71859ff7b9614cdbb6a6c6a40a67402737495 +Clang.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/e58dfa6c7f5647eeb320e12b0be71e94 +Clang.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/1817b521f096597b8be1a08ba4cff23725c4191988844423c1ee13c62202093c9fdc677554c8a416e68c2c8efadcf39b7b2011d4ef6662704f2793121827508b +Clang.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/a617b5275ee7b13a9ca8d45a8a1bbcc4 +Clang.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/074b61e67d6ac161912ac8cba8dad2b5d0daa310dc7a23a91659f9734248c94a31f1a3af97aa02cc3aa8d226bed6cd25d80a4dcd15024b68b417df973a37e59b +Clang.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/2fc553d70042a737fb6f8919ba8c7586 +Clang.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/98a4ac67f40d48c86819ceb5fe7692f367207b039bcaea7068d04137e529c7019d7369f7495ee8aadec66968736e665e81185732da26be12ba06be331f7e9bff +Clang.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7191ddb4f1263b75b475a4ca7e258dad +Clang.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/91dc613500fa03aa0f972800ea33a5602b25542314ed47f4e3457aed1d218b14f988f3d6a6a66d0ff14df152aab7df4ff798a5725078edb208c06540e9ec93e2 +Clang.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/5c8b2900fe9fc12db25ee97dcb489f85 +Clang.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/bc7b36f3ba8f7ba3463a36b49f2eed6e5a3683c50f02c2901f6828d0e8ef31e61850aeb2f3668df206703123b34281a1038820be9ea38381a4be1204b5af1325 +Clang.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/f4567028c971108cb7f6970041eb58eb +Clang.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/9f6f5e65480720bebefd46a207ce32958304ded6f6ba6135ab700ee6263bf9e5fca55cba6eebb9f651fa8b6bd03de5df1bcdcddd17ce33c3b19ef137e998eb20 +Clang.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/6e3487ee5dc66c1d30bc269b53f78176 +Clang.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/0479baed38a2810e0ccb813f00d40c1159acaa54270d7074df364e7d39dcfab524cd83a63b712ed3bd992792eee596a53202ec5363097f019fbaa07a7a5123e6 +Clang.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/ac5de702c96c77d8257d72dc003ab347 +Clang.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/f74a9ba8cef5cb0fdc4a2229ccd911c4c9f612a6f2446a85fdca13918a034a6e43f365e0b46580a0a0a690c871a07a17ef8cd0d40da74ed210b78de8cfa6c253 +Clang.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/1889148c5bef3f759430f78c9806ffaf +Clang.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/7e5f5a3834abd1a95b03bc5b2bd095d4c16950d6a67d015d82e7985f5b918cc879ae1197a636ec6582fb71929d392a5758dba48d8a9ab6563454170caeb46421 +Clang.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/1c2833125dea9030c8d36c372367ed4b +Clang.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/0399915bd90fc8d798494b4eaf21dcc8587b8634003bd0bff0be66f4986587b8fdec3fb324defc3fd2ebf6793db8d3444e1188d2d300b8b1aacd3d1eb5a48114 +Clang.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/64c0ac9f6a4a4f8a47c9a944f79f6760 +Clang.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/901ac11e5f210c0a6f06e88e816333316c880f0b92df482eef7154393535b3a4342534167b1e572b529284d42adbb251e5522dfec1ca027443cba346bb89c467 +Clang.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/bbf33438b1316d8900155c74583e9bcf +Clang.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/5c3eb14173b1bd623007820d8731cf15a2e30cc02cb28d0552bc2e79029cdeaa8e86a516e980fdbd87988acb3667254902287e7a78e1a753f1b338e17e1e183f +Clang.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/725287948e706bfc5749b0bc0844980d +Clang.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/e419a863044afc67471b5f0f1f53dc19f26cd0ee06cbe6aa3f5367e5e8056564abc6625b9323cf24a0a625bf07a9783b0a569738e4ab8c2ee841c0c37c0f6b17 +Clang.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/55adeeb7f199bdfdb0c72e50420bbc38 +Clang.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/94272d7b12ec6342c03865b6f8eda72d71119bc153aa14958f6c324e9844f870feeb97adb2e7950162897aa606c74e95f37aeaaefb1b37985025055212255aea +Clang.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/a8e552a0a30f6f764a40c525bebdd220 +Clang.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/ccd1d96adfb4aeba8b8502c25f747acb0a33c8806c956898ad80f1289077a5ea3f16877129db76af965d7cb232f8ff029b35319bf331ebc3fb4d4f291f11ac65 +Clang.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/182c624c223b3b50be67c59293b990c0 +Clang.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/3e60390a5d20812998554836f249e404ef3e3b63c86852a710c3a47794fe8cd661632f5e0ffbbb7ed71df003491255a4c05ae7bc64fbcef07fe8556c98c294fa +Clang.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/a181cc98814d4a0725664e9e8a1f785d +Clang.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/d19646a1d9413048fed8e63786a5e4a2adabb36bba625c4be02ef3302780e3e67bc1096f94d265aeb77e146986cfc86513004c19962de7bed156e3e2779270fc +Clang.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/7ea1ff3c09bc37acee30d727a81dde09 +Clang.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/b862b29b4fba7d218e5dcb7a4c4bd48d5fdd7417032f1caa9f9c0889d934a1f9bae6bedc25194feece6a768bdc28fce319c7ff5e0bdce2540e3c6e6904eb1a89 +Clang.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/df89bf4ab33ec28f42994939e793388e +Clang.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/e68f083291a3b8f16132dadb779c35b23e3755fd401a86ba8f4619245c3f5e3bd13a8f938800941853fe8fd508e8844b8dcaf061b6ebc9fb0adb955636680123 +Clang.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/f77f3bfa69a9f2e0e8f7191a364d720a +Clang.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/3502d48863f5936cf136a9c61cc56dd4efb92ddf11ef4cc07f9e49f3ee420403bb9dc2480247052e5a99ed467d6e4fc83d1251ed6873787e994693c4b8dc2011 diff --git a/deps/checksums/lld b/deps/checksums/lld index 6936b85224dc4..63a7d923451d0 100644 --- a/deps/checksums/lld +++ b/deps/checksums/lld @@ -1,108 +1,108 @@ -LLD.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/2515c9282eb379601ab7087dba9c121d -LLD.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/0d0a6bee7fa181fe84bdcf75342397416bce00a3f6d40f0df34e9a0c4814a3e15aefb4a8fb1f8f63b2b4f2e8f41691398fc545d67c3783577840379a07d6002b -LLD.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/988278a56d1709f9a52d4e59fc7b1dd6 -LLD.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/96f5c8ccdefa8dff272236af684b430c60bded64ddb9d2d814e9420992fd8c25e6938f155be8c47bccf3717ceff8213ba7b33642dc2c15866e70163bc13af1a2 -LLD.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/4760ca32d06be9bed2f18d8ce397bc84 -LLD.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/e4178ed3826c513be62ab51f10e9660afc5bdd7802f8d2a8130de4a8c948640525f85ad946758626946d63f55325004feefce2af08b6aa90aa0a908c24d47b9c -LLD.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/7b88bdfb8fa1f3160b60b02fa0b7fee4 -LLD.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/05a5815ea20948a41ee506911a6d0c7e03d0a169b8c714720de466b48483bfd887960c454946878ac8040f64fcbd36f30657419b8b7051f7c67b2f9e5067b8f1 -LLD.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/4ef7e0fef18afef96790a1d8d85c8ece -LLD.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/68813d3f7c10d64696435abd8d978257b5edd51b0aa8f8325a4add5dc4abcd9e14452bd208c1bc8396336d2fd7d7037b1b8b4f56cd995cb65406949afa0fb4b9 -LLD.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/128fd145cf30d49d24293866923d25cc -LLD.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/faaea140bd122019e4914d5a6fca1af30a5dfbc5015c4650ac9734d489fe51db46428b3f58983c381b7d56802a1487ebe66d3b8536ebfa3d7b9a527eb7e5357d -LLD.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/d78d58fc905b18232cbcce6521740756 -LLD.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/65190392bd91801269d7f65437da95ca98665264c9815223ee32bf6dd95d3abbf3c2404184d7b3d04ff37907dc901dc827cc92e63b58d119d42b08736728ed11 -LLD.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/0853474ca6d0150937b882578d488abf -LLD.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/38a4898aff7d41553c2dabb4e81a0e8ba373ef4b7a6536281772aba4a1ae6f7df7b3ef80bc7e65c8e3c4f609462ea8ff96eac21822d7d17e043e020332ab325b -LLD.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/81809aff70e22c183da2d369bdccc667 -LLD.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/eb291e31221a227c370d60c6ff7ab609ad4766a0b0e107bfac049d798873398d78206ef69fb5a1cccd14f8827cbbe15e12fca1882d14adbb2ecfe6f096411b21 -LLD.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/c9865ba23de7443bb0a135898eac573d -LLD.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/1af80988614295b11b4263d1e27d182c6646137fb76b295524fa82ff5012a3333df8a07992c155ed2eb285d0b7c402560348ff7716dd31978edad5ead95a295b -LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/d02a04c53ffc1426243b848dfa9c00fd -LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/0a1b933af79f045a8538b4a694c02014ac8c3017ed76b5e675c77fcb3b01371cbecf0260fe92e1f141388bff8be6ef271b6e889837051e66c08f14198df87022 -LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/911765f28d1e96d8540ad52a8a6a0ca8 -LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/55705692f7be598160fae7b8663d8f4394e40a016b0caf99132c1799081dc8f6f296abcc23505966a8a1247a468dc95e27fb072448ed7eb90a8ef022410a9898 -LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/7dbbcbcfceabb11f227f5f8a3fcbc15b -LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/08912bd251628d429986b4e032d9ac0e6e3608318e8c3c3207ce241ffcfadfb7ab1d6b17065ee88965730ab3090e26014231ed3ae7681c5512a0cab8c1455bf2 -LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/01b0d73f4cff765c20fe3dea05b0b925 -LLD.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/10e30133f5b68e7d425c9407d80c6b2704ebf2e4df7cf0594f0f6fad3d4dfac47dc7268503bd97e1fb679971b622116c95f4d66d502c4ffd5a0be995e014ae65 -LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/a162866a5d4830debf30e1a7e594cb37 -LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/28fd908126506cfdec748947a34de59943215ed922299ceb2cbdbcfcd75559fd3e8c0f8eb656fab05dde0a94aa73475643e71db0140c18e885d60b0474fa50fb -LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/a937f25494a6221ba62caf1863067bf4 -LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/74bbc42376571135ea3f37bbb9ccb54c3c7cf4d5181a7e5ce958e2eb85071859510247b8c2d1ccf1435b5e93820c66c5fc0751457b318530fba388e69ca7e40e -LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/46cbfd0c17be90082e03e9b365b6528e -LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/5d2d9d6fbc4439c6aa6e5af196c900efd66c65e91c06d2f88ec7a58d0a4a23d6659b9ba655f6c17450ff09cac73d6816012bc1b56907238ba6e4b8fef18cc553 -LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/dba008662626e1ffff3be471a6f336c4 -LLD.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/03ef05fa73d8d867f619e7268266ba8afdbe1b91cdd1afba04f48889bd69152bbb73ebf7cb4b465472d5851ff764ba50c033ea7da1430f32647fd3c32504f033 -LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/fe5707850e6572458579a652b62ef375 -LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/9575326ae0110aa0f6d6e6611628b40b49db19c2397154fe66aa8ce538ddeb517abbbe72f20f71a3e4de588d730916b556ab949ebf04c45e3c79c03519b73064 -LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/46ca92e8392d0e66189add3e07e0176e -LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/b62ecc665d731a4e5397efcba784853dd94a5b0ca2b036c17f17910531ed96b5cb07332f13383f27ec9751a0066d6cce1f4f77a1f06f42629060e3017e280195 -LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/4ad63e824cf246445ae363145efc5977 -LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/914c388e41b467b59b5cd3f53a135662c689f62c367e0b010d7faa01a94338b36c3ca23115b37562bcbb2060914603646999351efb2672992d393135bda8debf -LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/64964540adbc4da2d9b3734ffb3b5414 -LLD.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/19190d022c9aa733b2a3be1ad523c291ee187569ace0594eb2d18959486e91aa56e8440f3ee715801ed7214bab6cd348679f2851c6418f6133f84479a5980587 -LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/014f16cfe047ba26323d730171b63efa -LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/0eb6a94107b88675a9cb5c6e514f9b326a6d8067ff32062e10ab63961eccd6b44fe784b888caf0e5b1a297641b2a9f943caccbce18df76a100b1183b6fb78177 -LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/3041df8d07f840a18f9a3712ba165a11 -LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/01954c0c500eb2dc85a896fd0604672a432c86781a1a25818bf6849e350e5e0751a0d3e124a5dcc3cc5ddfd6130816f00024b5bf0bf062c3fa143b27f7cfc7cf -LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/00c8d0195d3bb52158e25d96f9667cf0 -LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/504b79e64929b8f21b05e9fbaa4a2eb60b565ba6b4ade3369dc1e38678bc094344f4ffdde657b41c062e951f97701c6ed58841b66f2060a21274202e2cbbfc69 -LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/a81af919513dc7103d5f65748e99a932 -LLD.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/9d6c0311113d998a2e2f93afaad2b0155bae6e37dcaa0778879259d61ce1d37d54ccb169c06dc7911f63b0184499cf208a72d4b330198cf5282df15baa307bdd -LLD.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/39bc3ee14a07b7a19149e74ef678b2d1 -LLD.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/19ae60bf3efe9347eb7fb510437d0aa97039bba7f9ac0e0ca50fb5222348c6e8fa74920960d97e421306c9764921f3b00e6e79410bfd355719304709b3424a3c -LLD.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/ae563cfd3b9ce5ca8de3d63c9f956d29 -LLD.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/11b036eafb2f2037382af2a6e76901ecfef70c120f2b33d7d9621d2047cade9082e184580c684e1d6a70f92d2c33fcb75a8fcd78ce047e04d57165d532e191c9 -LLD.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/2fb700351f0a990f8b61ee854b1cf52b -LLD.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/474cb28550056d2a51d95ad6ae806f032a872e69d72eddcf039cbfed21d1d3c182caad73a720f11c2173f20c63043e352d618761a15535ec3e8071b3fdd88cd3 -LLD.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/5ccc80802c4053ad1a5fe351b45d33f3 -LLD.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b7349862fb03d4c29b1018ad7ef90ce056e8d40a3340b10af754a1cbb06d4ab494d7837c274de2a7e13028d3b044f11c39ca3bbe969569adf4557e6402191993 -LLD.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/bd4b518e05a13241809a0cdefe05cf3a -LLD.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/6c327220fad9cbaec397078232c6e800cdc824d6706a4453ec03e016baf0a86ef2c082df2b980196d1b10ebd2d22c74fbb7b92cd90e7fd902372a3a176630bfb -LLD.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/ff60ea3e401a5315560d77990eb1261d -LLD.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/f018c307b47779cc97368762e1edfa63e0f9c354166eefe706f2c398599b30be7041161e08ea5276b75a826c8bceaf250330e1231591b96ca430bf674c51dbb1 -LLD.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/9ff7c7f20eaf5ab1a8053037e5b50e23 -LLD.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/f3508b68727c2c7890928975fa4387009edcce957f6942c1ac9db0554c7b3dc3c6d9b22bbe543910d7354717bb292d30d4468f48b9451adb0f305ececfd5a528 -LLD.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/48f6fe99a0d2f67ef378b06ffa6a1386 -LLD.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/59096b2f9067d49e9eefa3d5e4356e0bf0a6cb2c7b8fc477ebc74603f2ba0c6a5e7c44b65080fa73ad4d2ebe4377b9788e370e311cafaabd2a95f76be383c240 -LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/adbac48e6ea29783d7e0e0a34b0a74f1 -LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/c589a430dc42d2f2fa8334dcc6a992e2776d4a3d1e76c435759b99b200117710c4afbac56e02d7c0a6285817e404a62b11833b570eacafb1ef871cec0c3c7c30 -LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/a215122469aca265bff80e6c8948aaa2 -LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/519f835a62ba7c3e27169d94e95f3a2671a82ce37ab67af79061b1ae15811d6974f6e0788a9979d510cef4aa2e444ce90b358c8655265b26b4c569e3899700ae -LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/6cdeb73fb0f6a1d305111382b1074b16 -LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/8a86e431e5d6ddedc52a38bafadafef4cdfeeea2b3be34793ffefe240ae1a0347adae2a4efe783a493377fe8fc30a0646e68a1acd868bcee9e50a2b486611a42 -LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/d8b6577c4f0c6286641599cb0a0b7abc -LLD.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/fb6262eb94adfb3ed1e81c69706600d00e267176d40c3ae6247dd7c0cdb4248d041083a5ad7c83fd9f307352f4a22d1d3b10274b4d43c4fd5c47a68189f22de2 -LLD.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/60bd90c33a864d74a6c2e16a43599e78 -LLD.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/1f6b39e41a892cbaf1435d6ffc4ed8f80c2418f1a7f6feeb1175b38620e8294b00a96213e5c3c13ca33dd2e57493b03cc4417fb786e98577fe35224a0d4fe8fb -LLD.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/0b003a8140dba5e1c0f4dcc9dc56f83d -LLD.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/f56334c7d2bf42390feb02e3b4e4261940fcf731a5d6083d9d8d52f75006f72866b8271951f2ce8a0208ed624fb45f5254978e12ae805b75a391b9130fd3af68 -LLD.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/5e755233a506d16ee5b83e84bc776351 -LLD.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/4ab51f3375fd33857e3ab7d58f8d59f3038747a40e14473236b830fb8924f8e8460e44dd9a26c545e6b0f236591d72fb23f0ad0d59ebf60ccd3dbf268922bb23 -LLD.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/fb0cc1fefe0795f3b401959a2ff2ec42 -LLD.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/de8899449b864b698db37acffcf94e4f9dc14b920b108b4289c3bf1dbae87d0374361e83242f7f964983117f2978d2c7ba1509111395c063b70de57ee71ff632 -LLD.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/d86e2f57b0b19326c99d8bb24ce70238 -LLD.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/e0cc6552b92f9246b19032d18a0a2edfc65950cabab3ddd8a5d24eb56b34bd735a3d1875714a8cf1a7771fe3cf3845de53d99198ecf3c3298d152e1598f57c5b -LLD.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/b7a713da29369a24ab4c293280527552 -LLD.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/de33a4d3134c339c7669275018e18bd1ee34b64fd58dd7ac509fffdfcd364732fc8c2319a6664cbbefd9f2461b5e83538adf3214564c7cf932cf705de6fef709 -LLD.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/6b2a3d6b923387a5667ac8f2347f1351 -LLD.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/d4a6df10c8d537866e85676b116c1ae6140c1169cee866ea1b5c45831f3610f872a85eef9e925651dcd9070cec53ae297de93870f29a582e8bb83678b0d3bd7a -LLD.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/b0179804d9ba8ee1567558264c18263e -LLD.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/d836ed00ca3486496488d7913de68609dd664924da65ae5bfc1df2ace7a7a8c79674340e219c3d1ca62e9c9d4d7f3deb4b56b3e19b19ce2cee2ba33a07bbfe32 -LLD.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/af12ad9a93df90946b85872ac6b9ef79 -LLD.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/894a5f2f3599cf9a88260bf07fb0ef382ba829e9bd8aef98770adeef995f524e8f8e35e5877181371a02a2e9035f9b5cf995532299dbd645ce946739900be711 -LLD.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/b1161814ecafd0897ec8bba22a9dfb8c -LLD.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/e1c6b33320c50d68914b530add1d5321baf385f19a4392bd1babae98abb2ec8b155e18015d712f6e33f7c9c08c8a27b565ffb986989373c98773bf4991a8b963 -LLD.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/75ab6b8e7ddfedf97d5a97027be1d390 -LLD.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/56c8dc096650756c0dcbcbcab1fd528755873b8fd4e502c0179ff83dd01c4832f7b8a2b474b62bd2fe7eb2550daeb9bc4999906e84fd99598b15a199c5c83443 -LLD.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/45b91d8869d97e7ba12cd125fb2ccda5 -LLD.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/e88eeb4d357cdf57a739803897fec1365cd43cb57d62f54b479031b1c2d1ae52511397c4c66f1cc1465580f077e5b121275bd70c5fac29c841cbaab599679173 -LLD.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/c2e9acb2ad5943920e045baea06d1ff1 -LLD.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/07eca55d28508fa500a7a93d3fc599460f4c894bd6c1979507a725f066d5d17b692e501d56861dee9bbf002629e3841d48eef2b65b3120ef05d3daefdba8f19a -LLD.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/1b3227e17ea0a65c2879439094e2bc2f -LLD.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/68b939ee717f9f751359e6ef4141ec4608be6926f72158b8f02128876fc97be8c255b7a27f8a89906de8e9f5f3f77eb0b83861ff46d614c2a33f349a254179ff -LLD.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/f2280fb244942fc505285aa415359409 -LLD.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/770abd9b2be1adec57442b4bde0dbc1dedbf78e60a8589e3e146bb44b2af3fe48cbc8ddd7036a8c0eeafed81b45c5d0dcd3a298876e98a1b0039a77a210f6778 -LLD.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/b12f9686b2bf8bf1022ddfe5647cc32c -LLD.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/bf6738aa1f8cbf749fb110fadabb23e02a137c5e55e8ca0e1cec94b517ca6a314affc3da4899cc6e6f58a7f920dc87e4de939069590b5e516176bde07458df43 +LLD.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/09c320b356e69a8d2c91aafdb0d735c8 +LLD.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/42d0ef4bce4425832c535f16b83a86570c0851736ec671f94248b3216600e0c0d8fb0a9f7133d9f1ed6a3bb95e9ea5536db99b35f2f29050faa77a13db21d5a9 +LLD.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/ed7b9ba513235c91d96e0258355eefec +LLD.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/4cfbb5198a0f59c54f81c3bac4d880b09e02531c113b985bb512a161dfb66d28e1ebe5a2d27eb567e067545141d25c5b6f7658439dc20c39f0cb324b406d87d4 +LLD.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/0fccd87c8d6016a812c842255b4318ca +LLD.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/6b44fe0337b74bc80f387ef41dc11b06f7277375ddae3de079071cc0bb743b42a90068453c3d9e2613d7cbced47d134c67297fb7dce6ce098673354fe49a6292 +LLD.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/bbce3af58d39cb571ca851bf86c38ca6 +LLD.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/e577f2ec2f1a15115d850a850bc0679c80e2dcff6a9f3982ac84cea6497c71d7bc269ff1fd262d427d3a98bff9f72eb4a127ea841471af96078f7e43bea6c5c5 +LLD.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/a461bae1e190f5f7f72a64336db88df8 +LLD.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/312f465093817c39f8b17cd004108166241322bd6559545f64bcc5b0c3247f7f7b85e618587a37e51cbeb8decaaebdc69d60f34bf8ddc53e5efebc4d9192ca9b +LLD.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/017a1ffae7b74dc5ae069c00b4ee16e9 +LLD.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/62cc6fced8358ac46562887fa03c4196d77b61031b4f80ce3ad339bc6b8ff1f6079b99a862bfbf899d11201b744bc495f7b44315672e72886ae6046c6130d488 +LLD.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/417d35e8169ef5ab07ba41d2de46d7e4 +LLD.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/fff169fe51910680110fd3df8d369fe529f69785a151b4274b127223fe9c660f160366044b74c17a63c24abc8f8c659cfec50624e98c99e7d60ab84716f12888 +LLD.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/a2bedb0bfad8a556040b7e5ca0e2848e +LLD.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/0bcc2183e787547d5181d203f1c132b63186a100f1b9348886443eb268eff70086009c3dce17266d6cfcf6285bd15c50e18bbe1a30517cbdc5b1769e5f01ea94 +LLD.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/773083d5c46259aab09522dd7be7586c +LLD.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/d6e240cdb8fef431f88ff80364c0c493eb198ef599db13e91628da08b624ed13070a1add19d2507fc4bc006f3fb9709a4de601a4e2adbb30b3967c72082da583 +LLD.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/b44023d4e9557f997fba9fdcbedabc2e +LLD.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/1a4f92bf5eb73919384c89d84ad3059c3ac585258662f8b450c1cb878c7271659cf1a3e90ed7337123348399580b39fbd29e9a68b64e94a66ac56f1637b6f9d1 +LLD.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/f6fa081c30f619170b9607d9c374a19e +LLD.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/4ce50a67739d5aebd8b96ee6c7441685a7fb00e816b23f685c102c84300b9da98b83b8f9f2d7bcdfd1ddc288c1b7a03e884dbdeedb665aa16108e97e58a8f4d9 +LLD.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/ac3a61e234e6ad8d6a7b8f56ea3fdd59 +LLD.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/45a6ffaffd514628569f9463a4467d07049c9c115fae7cdffe8881e1151968e5b5f1f196b969e4a4319fdf7af4e667e5bba5401b98b26038fba72fbed95d9fe3 +LLD.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/8843ae687a9a697c49e7b2718a819fc5 +LLD.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/6eddcb1ceaeada1134c4b8cc8641e4c7c8998b975b98adf6c0b460bfb891f0ea7bdfa086bc41f58d0c9ffadcd44d8ccb9e15895cdf7127317d9bb11659c3e0b9 +LLD.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/d21e19634ba816b5d8ed06e8e29fe264 +LLD.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/098c299191c527ca953a201e27e9ca7202c5a8093e3f338b31c5f54fafb243bf2aaa366eb32b18a3770f86036f7583bc5d55d7ae39cb7bd61af280e20d57a5c7 +LLD.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/5962ef5d8db691edc3483e8b94ac445b +LLD.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/076f1b0995e1ad40a4237a25c5de03ce29025eed9e65db33a935537bc93e84b886af6ecf88ff1a5efd075c3837ab2b80addde99580325043a190a4cd6864cf59 +LLD.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/e8c0db4a2c24728314fa5d338144277e +LLD.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/703fc4caf03390afea0dc070c6ca9b2b402bee87d8c62053503395e858a67eeab369bae4ec3ec52fbb618856fd582aaa10db1b3843648e5343ba10359e2846dd +LLD.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/eb595bc0386677a420f356ffa2eb16a0 +LLD.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/a9c6c1b8464332ec5ab9eaf405ae18efd06a339a970f8f28cc88fe8d45712b1420e5b8add02e97f82204c49b653ed1c7f3fc87a0b4eada873e46e53d0e132f0c +LLD.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/553a1eaa6982bcd82dea38f81c6e024a +LLD.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/9e0007d255c01dbd08e0c51355200d53219850b0ea60d5747a99a4f3241a79f5c171315f7b9fa2529ab6f870d281c76d9b5a4ec3e10d58e41b3d2486d3a38861 +LLD.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/713c09bb19b6f47ede0b4ced61d5039b +LLD.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/553b9d20b7291521e607b2df7a2964e69a58599622ca3084f795bcb77239617a88c08bbf0bde07cd7e37cab0f53dc6d500bebad957415a5e66223af9acd0373b +LLD.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/f878e4d2464cc1a70eeb5fa57e80978e +LLD.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/3e341e44f54434d70b99ac1d71a9e79999a31656b0d442c1692731e4bdca9b95863ea9f83c3da968a774f6f693c9088374aad25836da924846f5ba05f05f968a +LLD.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/2e4fae7565ddd6717a34c8240dab8115 +LLD.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/f1bc27876f546e0f926a63c0e0b878bc33c2836e5902809f186c54a148f9c96f2f88d892910d4cac14ab4697723212ce0389a79364d74420aec075f034bb3867 +LLD.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/e064f11cf58b6a870212a9082a2a4844 +LLD.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/75bb485d234b077ef3cd607d30568943559cc50ccc5d5aabe9556c7fc104a1cbab24ada562cd6b8b1060af58bed10da6697fcd9f05fc7d669ae694ca5fe010fd +LLD.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/b0754db228f635d247ffb5ea9938aab9 +LLD.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/650b7ebcc5aca07b1a9a4a8d7c2d1dac60bb61586279aafebaa718283933735929dc2fc8b08c8901626533d1834be4071fc03cb5a8183311e519d245cff33bad +LLD.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/ddd06a6b9f67a95053f4f06d85ad118d +LLD.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/e7e87fb0e2c394dce36134bf0024c6ed613ab6707da6a472a708771f7f2915ccbe4539aeaf3fef2c5db08eb5cd5b9fadc30c18f6b34cadc9d56e1aca89fc0b25 +LLD.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/89673b45e8b6ad861df5c469ce9e0dc4 +LLD.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/ad654354e7da47d6d1db8b9acc26a02412ed02e842e0c6eb8c403785fa502bf75453d575ee01927db4f39e4803549b25b3ed4cd2e0354b01292877b45a4a7b84 +LLD.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/84a8693bdf7a669b523bcc1475b6e868 +LLD.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/d784c66624069a51b7df50773e9946db73e7015af617ba745c8dd7e926936295e88bdbdaeb175c363903340c422193ef0437e035a15cc7595c4fbc0fd3bd56c1 +LLD.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/d4005209edfb3793556a946c6a6943a7 +LLD.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/80c21eee46810d4a5dae35cd42604266c463e73f399e7d0c9cc62b90ae14f3c8fb49b34254612b0efc7af2bc52213c35f1a50c3a4b4fb30d4b9f06273e31d7fe +LLD.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/0563df5ee7aa191b4c1054fed3ed228c +LLD.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/578dc162a37c38a3ebc9f45f5ce220ded71df1104a1bd830fd5055ae78d634e3110fe6a0b8c86bc08aae145c16e7c964dbe301a1df752db4a597f98b653a5e17 +LLD.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/d0e448c7694f03e7221020a5deac6fe8 +LLD.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/f1e1605bc9a0872d19e74dfde78982b39fb0cd3b28c8af65b2960ac292c4910afc84328ac1edbf70fd2c20e697d2e826b729a6325949831aa008d3ac565d4d4b +LLD.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/881ca8f1640a296af635e255f671b3cf +LLD.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/67146381b1debe7cd71d819d3d4e930b5e9f904b30a41cbd87681675e6a263ee8008347f1b6879d13098f2f261555eda7e67494e111536b11299561d9bde4b08 +LLD.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/3054aa99b31c9fe01f018542b1ee1628 +LLD.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/57326651e05dc18436166dbe31cc2e373de78a705d1c12204db6126a905092cb81e81f66d81229b6694b82ae279049ccdc3a1decc14dd0e5d9706b9079aefcd2 +LLD.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/2ba48f3fb8db80e4145e5495583279d5 +LLD.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/ddb3ffb64a7326ae511e65bc825b01cc14a403fd129b29e9b01f00f87346cec127ffb4eadb994d4c00ae49b78f59f8d32f2ab131ed7dc59e636f83aa182ca2f7 +LLD.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/03df4914136836a7ac62e5f9c74e2c58 +LLD.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/0e5d0e32a1c817cb81169503a94ee428a4fde8b39cc2174f749e8df2b23526e738e21b028e66b44c8abba1e0be0d93ef3f341c7ae7d20fbc22bac60c38ee887b +LLD.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/58c367d5d536469831b740d6181e1909 +LLD.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/e55d2a0152fcc7629007416f8af7601de163da794939c0f1bff9b9083641b15fb365f7ab9e78f984e77246d994781a74c56397da26d81aa66cf926ed280cc2e7 +LLD.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/c822be796e7e20e1b081a1c6c9fcb4c6 +LLD.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/a057a957b55f97c0da5991d0f8f73049ac30733aad062645614b32db17e4f6efced6c82b77a689c90bbc37b610219f235bb02b6b29d1476ed1b5f615b30b5267 +LLD.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/8dad1af20464f8e3e96f77d8acf7b180 +LLD.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/f6769fecba508ec9136dbe03035ce0bbf7eea14f3c806b3e21b2e32de449fd9a698a489507412f6f603af86e8139dd67f2c91d51ac3385d82fae02ae4bf41531 +LLD.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/454a8a9c011d795de525c088b0fdc329 +LLD.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/904f8846ccd8885d15eeca2ce08d327f3b13cead1368f50cbee3986edba590bfd6d696b9e0fc081f7a8a127a3b83daaa99dd74a0597027c84797099c9b0c807e +LLD.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/36302281868d2a02af18601d5b7625a1 +LLD.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/fcbb43e37308c99dcc7e2e152923eaf3413e4143124dc598d18467fdb6e8c561c0b99ef19d5d0797565f6a18f86a087de95bc21599c65ccdba42089a678b9796 +LLD.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/4468fed82218b2380295799030f1fad6 +LLD.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/37cddefa5e24c8451e9ae2d64a931f4dd2bffea498cc818a9b7dd08d4df57ac81f96dc573e18e90449e63cb104cb641286cd755e24d6749c8f9bc943e248c5c4 +LLD.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/3089a2c2700d0a645d1ef4cc26a7dca8 +LLD.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/e935b01349d844e8c6cb9693e6d0dcb8a99973bb63b53df010a207833c4ea78da3493421c28f26122e92bc109f4fbfd55c547a7459bea2fc39ebb3c9318571dd +LLD.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/aa3aa224c3403e9a955e8cabd4efab4b +LLD.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/255f6f5eba7835041d510a57cf706b273f87153bfa402b4e0950a418c71a582232a99c94cec4262fb8e3e2ece973f5ef9197a625425515541c61fce398f439b1 +LLD.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/363e88347921c781d163844446f78f0c +LLD.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/2e12a0d74cfe145a2c12224d9a2fc5be0a0e7f1332d17b89fcd694b0d72c1bfe7dfff030cbee16d02cc7c9df1d350541685fcfe1ebfac38e4fa4d6172216bba6 +LLD.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/7abf726bc36460e40dc2799b65dcb0b4 +LLD.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/19b4a38448d503a6dbfd5f972f8bb60df4d54735541559271be242d977519436d83a9558b42984a4128a2b467bc3e22bf5c37725db2e03c8bd3fc4369a526d7d +LLD.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/f1f685b8f111ab299a3979de7f5b3718 +LLD.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/657d404e9295170696830f94bedffc7a3b638ce5e515c24b3a60e3da1ee9ef9d00919db6bf324f9fe9692b916394ea1d93a47840358ec1d56a9734fff0c6f9f0 +LLD.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/7968b42dd7370573a820c3a4aa9765fa +LLD.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/716a6ded0379cdb441b51031919814afab5ead38cd8004491e022b20c2a2aaf6a1481d4b6396e70e30a8f2c4b81f03450ac5c1591e001bfac345d492933c1556 +LLD.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/8a375261e55943a26956036a3f99b72b +LLD.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/4678ef639b1b4ecdf9bd818881f3f01b134f19b3f43c152f2f05cc8ee2b2f8f68526788cab1b0f0d3154bf55683488ce05e21df93767e749eecfa78e7c5146b5 +LLD.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/9e654f59807553bc6b63649561d42db1 +LLD.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/bb4401fc7733e00469d73a761e7eb9e1c6c4a2a9ebd420bd048fbd189b25a6d17e3eec177479b63e8e71471189de1d5becc68022cd9e4d8b0ef96890400eff24 +LLD.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/967160242a405064609a4828e5506e53 +LLD.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/a2e02f065dff865c2447e689d1a080073fc0a160a8a4492912633f8748b0637cbc6bf6923560fc7f31091bfbb968f339f48ffa62e768440dbfcc8f1c7ea2ef38 +LLD.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/89be1c975c0c240608f40fc89de9cc79 +LLD.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/86fa05bdd9f544dee43dd5ed701a43bbaac137d0f05e3bccb0ff32cb51fba790a6446c814f7dfe644ee82661a25e34ae4fa905b88bd65c71978d905489240c5f +LLD.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/b8dafd04d9213317e7c6c99e2cc02c4f +LLD.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/107d0a97eece870f86d658531478a5930597210fb05458fdf5ceee48953b126a206c910837caa3637cd7b626a343ca5bf6684f2da47ab9a3e83166d4d0de4b86 +LLD.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/249c60b944d6ee16c4b28fec414353ac +LLD.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/2ff5ae01910b33c49331cd60d1f3eb9906d28f81c1c8e6a56c4079c74d56bfedd316707a7fec38385112e873e0be4a05d587f9863394d7d62945bdfc8c1e81e1 +LLD.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/a331a6f81958efc3ef061f1282ae63dd +LLD.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/aa93b56e06f8e0ffbe15f50c36b1d7bb5f77022d731fafbbb6d502f93dc229ccd79f44adf6f6d1dd0ea94ecc5a05490c326533a8d25bb1df316922f86c6371b1 +LLD.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/72427b0c7a896027a47c27b0ab2bafab +LLD.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/5aaa2fdf91385133bcb0b563a7f2ed3c8c5ff3fb307b02387c94afea863759b78de097855a7949ba41449e7ee444f166fa4f6867f41ed3a561bb6c53bd747729 +LLD.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/6985692a2c8a41b34c5d2d103a969348 +LLD.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/8339b3aa2143b105c7133171ecfdb375a19fb9358e9fde0c41fcb57baca9a5603c23cbe8ee70936fba86452c1a57b4c84ba20250805513445ac609804f35adc9 diff --git a/deps/checksums/llvm b/deps/checksums/llvm index c0386f3377a85..715ba89ad559e 100644 --- a/deps/checksums/llvm +++ b/deps/checksums/llvm @@ -1,111 +1,111 @@ -LLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/a70ce2a3f17c7f1a5ca012cb54824961 -LLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/fe882bdeac640beba174498dfd2ecb388db1fa1265555047588d0ad250bc673088b9611bfdfc14689e65fc874b60e91474f912600c395a25c81b53e69f298f7d -LLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/dfe8b093925d73e04b8fe20ab1f03db9 -LLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/09dbe669fd5cb3680e1ede7e3f2bd2efa50d30a231a459ef498f172c9066ee2360d9012bb080abaa880aa38a01db9808ba5ac656edf395857b3ed683e688c514 -LLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/5ef95fa3fa21127f2445652c22dece6e -LLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/e5c3e014a987ec0b7699941ca1543035cd8b1d67f3498826fc2df48944579ab008a8edd8b8bffed8ba0ffeb543e815e8a26495de028ad86cb5a1aaa160338866 -LLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/1a9e4424b89695dec44dd683557e2849 -LLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/6de91e4ba3a8c8cdb04f6c829890a6bb74ddae1fb90076000ac11031746129ff818910adf7f9e6300550efd190b9fda5f2493ff3e4bef3fdac8ca3bf97e6ccaa -LLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/0b05b71ad4721dea3815e1e2454d0133 -LLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/a191e2d7a4dd3a967fdf7b1e8f27a5ac2a0738008026351a27bb2aa188b2cb086b18848c99ad73ad2e1a350863137619c9bc1a51371baab29f1f1698e15d03d1 -LLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/a80354c67defce5ad7b989c4f3366008 -LLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/82fd3e66b46ec56d2affeae043462d01933ea20677ce44f7d1e25a3983ba2e34c018a7287125a55e62d9a3346bd330a2df8c3c94326a393ef04a9d8f01beecdf -LLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/e0400469dbc86855fae49afa2de33734 -LLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/52acee4ac93c17596e430865ce877c92afaaae194d616af930003e51972dc05348d0019325af83d0949b7188e3043d7f8b893837a65751cf55ecf4985cde8fcc -LLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/39e6aed193941fa8cb05140071443492 -LLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/c9e565abbcc25a3cd731ff1af92de94c3fadd83e6ebed8c9d9d25b259b32f22014404027fcd433484ee0eef2b5bbc9398f218a805f8205cb5dfa61257a034c90 -LLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/ed14d5afbf2b8b3654a683ad1e04af31 -LLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/4124a866e55f5b397d1ead170548c13e004105b2947ec0c8ecb20d021c6eba2206cefb63fb005e899c338583b56c9a0bd17c94724ceac7edae844a84a77c0a8f -LLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/8361fcfe223d65680625c5a20159dae7 -LLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/385be5df02cb44746365da98feaf7caa2360cd3203fcb4f63809dd88c52c90a479b4ddad592b46f1fce025fb305aaa7b1a02ceb57059f598c95495cdaf52da66 -LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/a3852342bd1ae33e7af332008c279654 -LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/a6b97c22ba365176ad17071b91546fc361b28ac03f1ef521f41106eaa1f66daa06a90d7d483e8e64bcf9778a9ed74ffb2cea908f1d53e8000886554a2674cf59 -LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/4175eea371b3c2087838761f90af9e80 -LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/ad6d824d03d262098348f04a8de59354b8cba1ead11c3b3c48b74dbf78b5e03219f6cfd7cc9eb48bd13b624a20fb524560565bc06290620d0583c4218fd8ce4d -LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/b58769dd16d41cc232e0af0745db0c0d -LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/aa3a9dd18439977ee2a9946325e873bfc65f01d8787ac9ac42f44b6780e0d8908c072ea410679dd463bf08ce539154bdf5a5139d6ce8032462137126abfaeb25 -LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/f06631ff471f4abc3ac775f4160c7d43 -LLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/67ab50784ff858cc705ed2748898b1892c21a9ce21065cead4a62c2361c7a9f053e562ee27a629348ebe66f41fe078aadeca67526c0ed70148bab7369d8bfdb0 -LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/9a3cf1e8cbdfe3ed895defe91c184107 -LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/d1fb7496f60d152c35e5974b15958f96ef30eae118d2fa09fe48058db4310ddaf88a20eeea995b6fb882412ee9d23760e087836f7f93b3ac64818f5badfa3dba -LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/743bfb035a17bbc85de8202e46631fd9 -LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/86a737660325089d9973ff1de39d471d54cd2994ab3b8b24dfffc5ce2db2188ed11af4c4cbb7d6eee2c55760d736b00974eec7352c36ed5afaaeec65b83c2f72 -LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/6a64360208288c31ea44ac4f7f6e7f73 -LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/186da02c1bea8f65e9107bf1712db4b93acc78622c0a57534e7c342e40ffbc7fb4daf675e66879ae2a58835657a673f3fa61b08452fbb809838ca65469f75aba -LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/50af8192ae03a8c2586a6e3c66490df1 -LLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/44e41c8064bba44705bdf1ac8e31a795cfe86c6697f48c26b8b87fcc0dad1083bd4ea203894a06530cf59ee646259694dd7732c7d3d99c7c1632c8ea3be56635 -LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/a2263b7edb6ca4d1654d264169fc1a34 -LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/c95c8bb2eb823eae849d04235bd2754c0368fbb91933deb4103cbdad4f49437f2dfa9a59a656fd6b5e7016de189ead3961e5c2bcaa60b0511d8b9667e84bddf7 -LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/72fd40f0f2a14d6dda0ab0ea76587b3b -LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/1ab3af3fdb4442f6b9dd1b954ccc775f4815159c3af913c6101319d76715c691216818f9c35e6d92be95d457f198d7dde6b4fc81fe8af71f47a1dcaa74a35ae6 -LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/29329543013995dedb79661591fdbe08 -LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/40f75b4409a5def7f41b39c4e4cdb31dc81ed027005281da2ec8ed5ebbd477929d2a1aa1177c33b6c981ef6616194e0b267fc5d9d0e8717c05e7bbea490ff257 -LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/2f21a287b77d37fdfd03d20e21ed1378 -LLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/24a396cf3d963f476a02939e8d666112ef2fcab1883e46243ef166dc13bf354356fd1db9ca8081a2107ea08d015bfec3456f8a4ee33b029b8b7958db7d631400 -LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/0289c0b501b8bcb693a1c92e10613727 -LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/ed91a1785a193f1ad88f4c25467916a9c97cdff470b6bf86b640e296193d338f1ccbf380f1a89751b7be31ed12485665d0a77abf31b879a789582f5196f50406 -LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/2b01d3ed13d8d6c2f1981f6ae2969405 -LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/eba25bf68431d480df175706a6a02612aeb38cfbea08b9171e6da019b4bdb1f5fad2f357a7b1cdd1b06353558e371868bd5678275cf5cfaef3095f261f401134 -LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/0721db7911f73b5806d467d769ea7a8c -LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/f38d2e09f01b566a845e067514cd653ace5398578148cd8700d27077abd4d3d71cab29aa9025dd7e7f0383b0307c5a88a0666b3978600d2ea3840a5bccdd22bf -LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/bdfe5c46ef0b04930c5ab2595945e5d3 -LLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/ad783a4b1b1f5d54e740cf42840d7ed24ff9d2e512900c08ea16356def2c8158d5d1c70f3026f8cb5a0b4b4802857c6f5090dd83ea871f9d5d3c4a7a22cf0e73 -LLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/f72efb9dba006c308cc791389b6eabc4 -LLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/dce1dd64311f840fadfba85a52f41a8a4eeb90244a1261de5360cc911cdc19371a0f12b7d67384ea251105a6eedc91a4fc615b87f63fd9ecb6a4d2ae9346cc53 -LLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/8fd06e11639cacc71ba363017cc9a82f -LLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/6f32b44bd4e910aca8a9359eeedc8fd038001e0eaf0c12b34c07fed78546ca6d06ac54e0a1cb43846b19a1c7389729616fcf1f39db41450fc5cb7e54a8572129 -LLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/2ad4cda8bb5528f1b187fc66f5c74aea -LLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/199fafa07917f05b4b9f3e18a8a59235aa3491c79ffe1b54ac4acee41b90df8bb630e789584c8bfce6d60c454e5c7b24c7b424db63458de0916dffa3b28ced21 -LLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/781bd8b1e041bc05600e4d0fe70fe125 -LLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/02bda3d17a509980e3a1b1464e64ea80879e0759eb5c5f706c913164af5bf83b19da96f05adcbebdc02566ee953e69adc41da7d752e41533ae6781d22daf4404 -LLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/6a09756d6d1c4a2fdafad07a55a4199d -LLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/f55038c9446cf6f2fd305e26097ca208766ea4a5ef0e875510b43390fc749b1a123376aa629287dd2df0608160c37bc8c5d7579c2c63abbd798839b5e628dcc8 -LLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/39f7f5a20d035a78305f0923009b4bc8 -LLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/22ecc841945137e2dcfaffef5cdb51fa19a9b7554367f4c0735f2d9399adef591af234b0c9aced763fd8f8135dbfad5f04dc915175af8c7f1853a961e67e3f85 -LLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/ddb8c15c549c4dd1d886f0e3e3b01c9e -LLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/c484efa3ca5fc9e1e570a97b02f06ce7470ef46fb445f04118dee460682194de2363b55b0d7217c4535bcd0fc2dc5d7f032a91de75ed028c37fedb8955f1275f -LLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/6f9957228785593507affbb5751d855f -LLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/ee45945e4133c12b16d12ffc761eadbf218f2d527e54722d48aab60f6574f57c13f21846f2d786a9389eeeb32908fb11c438e38a2932b1711c9cfd880ee5440f -LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/c51b915e22e90204f7309fbdffcfe8a1 -LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/5a44fea5b9caa9c933350d29b23c8819f0ad040d62c7235f4612fa8ddc51c352803c7b9a4c92d7eace8543e7138cfea639e68e8529208291dfd443c4810a397e -LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/28d9ad7228add4db7a12545df5d1a35d -LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/6b7e3b6a4523a66237dc26563b8706769cc6b7228fbf61e4e6804678ced42243434e42c7c92421bafa88c0bd761fc8a57cb0c5225ab3c00a83c719edb2d7776d -LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/256222a8980ee3d8aeae284ceb9e9704 -LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/fa61dbf7051ec054e2e85e6d486ef8522536512a092ff10f0d46fe975aa3e2ba3d7e8ec98b3bc99d7d066b5c694f07b97c46ea42ecac9119d108e403ed05c83f -LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/ff364000aa8025b973923dbc89f419b9 -LLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/0c90ea208dac7f3e96f4547565cce4a965cf27eabe79e1bc557593524e9f723eef8e4a1cbad1fab9004a1b94d34e8a71622fed40feed693240d1c923cf1be18f -LLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/95b33cdcd79b499f8d862c85a81acf71 -LLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/8f89c44f53b5561a8d949089bb3237e1f82952f45cc540c42e3f784c399ac0435edca90ad08966a200dbe194026fd459c63750aba930e11cc6da5e2ec1cbd475 -LLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/1693403dc93ca962bd081ad8271c569d -LLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/8364ef2a49fbf6442b32279326e5494491a501e466105842f8ccb7d9b259b91fdbd296d0984222d56cc9e4be87464b9d6f279553a967a148b2a6fac662ee6d68 -LLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/859698c3451608193f1bacbd3d893a12 -LLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/284094eaa0b76092cb62ea1a55ca03d983f1b1a904ce52aad12b4dd6adfd139d738e8dd9df0f004c544f905d5454dc166e9e783646c7b60367fbd2788a108ba7 -LLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/95c7e9fb2a344e6ac0252878fc12a7b5 -LLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/b023f2b762efd971c825bb1d34d591caa198ec8ea75742beab0b0bcecd50173a09fdfdd1dc5e8aa448ea5244c2c1c34218c96005452b95461cdd26c76619ac53 -LLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/43de4986e07102480c22658cb3ae8592 -LLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/4a55b9983d19f1b012d80303291420a0e98e9d61644ddc94b694faac7e0dd575a45417d177ee822d9fc9f001c23e5b6ca3c9feee0e49f34088f657cae7278cc4 -LLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/8698009378fe086c50243d908d45a085 -LLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/f264e5663d65cf6856547fde0e6800b8b828ae77c49cf87c73226bedbd95f71f4c12598bd26b0a47e3424bf710a79650b255935eb5e82c4e3b7c6845066c77d8 -LLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/1ebed3977c754042d3fad1c8a2b5c471 -LLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/b374a6cc383df97c71ed16503d8af7e0713217705a5b38fe9b137eb2c0df1a69f28fe7e8a96e496ce8cc63546e63ae262fca139fdffa0cfcef3c9b2b0a412f7d -LLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/7a7440b35ed8484efb1a7a66929e7a68 -LLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/9856dd0395ff5340f3c3d4198f901dd11e024af72cb61cf146aa177c18c06926b00b9848248c1d360f8b550d8f0a7b291966ca089591655aff865519d152bf4e -LLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/8a3b05772a16c58fd37df033adfb68ca -LLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/62ca5be9abcd355e18ee3ea3d120dae336076b84ab877d2a796e8f138f9d9084353b592c221762d6e4af7beb64587497d4e27edbc6b371afdbc09e926fcb23cd -LLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/9e88bc5575372bde26d67342b375d41f -LLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/e1b377008b3ff6626608410eb6d6cd77cae32a73ff3e2bd042cb9212529089c80223aee8196fc04966072e1dcad46ba4d980a80426f0b5247da3e4087dc7fa24 -LLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/749af273a95500e67ee926c30bc6bbe4 -LLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/961550ab92e51cdabffe31c4210953f49dffdb962a29ac3f02b64f523e70434a0c0c842077d2eb9bf064b52fb14eae0c345e80c3d602c7ac49ef982222c2abfe -LLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/65052109742b92529cddde9c21003e9b -LLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/7e7992f8ac36b427a3639c58109743d7c7134f42eff768bab248a33c7d890e731704de949d107c63b30d1644497eaa230150c575d059fce50e2eea2a9f8c2ee5 -LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/0655017c0caa7d90e1d36b2bf5f6672b -LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/1b78ebd6dbf6b83045f9d4df7b45b84e930cc905b1cdc2204ccc5b550230fde3c1e61eae60edd3821cf9d0854a072d03975956a188fc6f64d50cfe62046cfcb3 -LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/755c270d98e648dff4e1a53bf6c11e94 -LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/3bb2bba0bf41f0d5a6cd92b7fd4f39e2b336f10f3011b0240b14c5e90769d6d77f6d0efa81f577e6801748cd20da525c0f4b21449c5d8c014f7f94ec30490670 -LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/006b00b828e176f8f29f292fcc247297 -LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/519e9d529e27111522eb5ab7c1b12b14c7a0063c4d1d74a5522fd387f52f7349b975ceb23c687b39837752afefe154ceb325d206fe376813f5be626f8f7552f7 -LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/f5644910d8072e24ec4e0126721a01bd -LLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/b8bc06cd12e56d2d82db8f960172a99af1aba51748eef369cf95cad57107b95cdf3c21f534b48cfdea714e0e23df1a29ea82d961a69060b3649c0b043c20021f +LLVM.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/0d30873e7f66a55acee43d5948fa9c1f +LLVM.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/5e18d759332b99aa4af44d4c74215e5bad61bda576681f9347a6824b12cc9920fd9c6e87aa73f8acf1f484184e21bf0929fde66f25a091c1189f946f10ff9e18 +LLVM.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/def878000c77970c9fd35071788d73b2 +LLVM.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/3b47f231f283d0a15171e3e8d3f41dd6354a86a5f986e85c739d5413426d0731afcdf0464b7d6c127a895d3d351aa867996004f69f9e8fb74a324421ad85c0f8 +LLVM.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/d507299a26c0a7a4f3d7c7e06a97fd63 +LLVM.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/56cc59f05e595c44a8ef9209f2760db1c312394d91afb09d37ad403cfedab956bb0dfc28c9c461d15e97f000037379404d3a14bc551b579c592f5f3d5f43af93 +LLVM.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/8b587dcc1feb233e7c503f3e89d707c0 +LLVM.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/592158975df17c5156ca1fc94518af938cdf76920eca4dd02cf15d8c6bf2a8e98588689ef863bbc24d1a538abdb11e15dd53444d9ce54c1d517902d4cdcdea4c +LLVM.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/c0c9f2db22ca738bb71e11735a469d7b +LLVM.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/0901683e377aae6ccc649103dcaad238968ef750c569b530c77f775dd6320343cb0337eeb99e5c69fca0de907705630994073025db288d267215624cb5993d77 +LLVM.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/91933ede30f956f2cbc66aa42760e5c8 +LLVM.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b4388126af2c542471cba0a6224aec92c59dc0376a7733a890e020fa267710ef3f77b73d7d1a4013c865d9ae3ddd80814b7c55e451cf930ca37a0bdb20f22a43 +LLVM.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/9bd64f73682db24333e149ffeb909ba9 +LLVM.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/5d2eaac3976de1a29dcce8dffa0ce49fe839d68ba288f6e06e902f359095fc6a0c40d22533ad49401629c21e0363f82c34d8ac0d8c348b201c5a0738390f97da +LLVM.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/4893c85dc5294deb7d13932bd396569b +LLVM.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/25f3d4596fea8e3a7375ea1e8cc282fb7ac4afaa68d1c9b02947457d53dd78aa5d0b4ba97ee7d5c2c7138fb78a25e16c3075e113465b70b73f99e9b553d19079 +LLVM.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/dfd4fbfcdf9d114982a8a332879ff69a +LLVM.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/11d00cb09fb1d73dc55a4fe4dbaedabb266c56b7fdb0254f5c003b27d77373c1823322b2b03d40e06fab1a5015a0370b867e88e53a28c2e9714b66e97ea61c40 +LLVM.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/7f4da380cdfb8285c3449b97abdd89ba +LLVM.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/714f50b99a44c00d4a03782c5472c6bafbaba8e2c35c82e1a94c82ef74a1cad94675ba58f5e414ff9ed53bd2ca0baf6b96d8a044ab88eeaed68ca9b1d80aa27d +LLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/7061ed8e6c7ff30e641d09a986a6d48a +LLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/96e50a24a5ce85fc2a8f784fb8c6fac027d01ef6236790dadae565c6d7abbf2733747263a6d32da4a01d26042786d960d9dfbb1a8817f3c8dc247e8f27007fec +LLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/5f3d4e151c628eb1ea81fd0b56af9847 +LLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/8ec01f93cc7234abf710ff43025bc19661747cc2844dd1f93464802f3f42c83eb1f200ad2855e01657b7bcd3123d786de9a54c4687a62c499b326a40aa555590 +LLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/5a744d9068877b4455c26a0cf1ae2ead +LLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/c1ca99bf3516eceb06409a428e6b988e6b5fc3f6097dd3800f6cdac8ea90278977b0b494285ef4c59bf34f52d17648d4ff46c119b46b6048235869cefaa08c8c +LLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/b0cd7594ce3ace35ca733df1524df121 +LLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/1b856a2283a676162574f42acba2b59c2bd7e12888a83b21dd656774afad6cf40240bb1dfd2e544ab5f13d43d7b103d03886594f42ea31866b6f7bb0cdb84801 +LLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/d3d114c4c3dbf78c4657bb35472b9626 +LLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/8834f6685accdda8a64f16a907e7f980c435d327c19d6beb01dcd792b99db7e3f4e2b218a63dbf8b90079821a5c21b5c57b761484956d2f9f2547068fc03079e +LLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/ffcb4dea25ca467e2c2ea448caf697f3 +LLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/41927a4ada35a543653c4dc10161b3186e826f7eb49507fb02bdcb7ac06c68685114cddeb7d5d0449e7407eda162522549d4597d1c216c2dbbe2bb8ace86724c +LLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/d64410cb9328a1056bfa4244d6ec1ef8 +LLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/24b41c566851d0b98e4432657221f60e57f1cf04c073483401a8ea9b928d8e0676b5ce484bbf25209e2ff71d24ba7bef2b327f56be936fef1c7db7e75f3e4306 +LLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/34c1baed09eb46be39a532b305d1edc1 +LLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/53c5c59d773057296f4b51a32abaea949326ddbbe2c8342beef3939ee13778361012d0b6826bbbd8d8a4e7959e52bde5b4791b5d689bc1b0adfd264215b217b0 +LLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/785db67d3898a9ba9621259053e170b4 +LLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/3dfea783f30e85c51129d025912b50a57e9c8275096d6cc52fa1a93752b8c39c804f26dd8dc6fd4db01deaf283c48ebb5671ea45816f3d4d3d507e764b5e3281 +LLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/f4bc8c6adc9b21e3b034199c8585c50d +LLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/2eb3a4d559d7885894e787942a719a433d955abfd9587af0e910a75ef77330c557bbaea3db600488e008696f05a56ffd24d367e1b91d692b31cf28d4ac3212de +LLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/b7eb28506784b718d6dd9654ac9742c6 +LLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/6ed8273693c7b8947ff20d130c09e9d945fc39f50c2c306b0c5437ac97eaf29befca180e6e8f61f7eb7b4c5193f647032f9846aac68327e8194453d765791426 +LLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/4a6b352370dd9dfb5536d6a6788d4072 +LLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/289ad6c530ed1fc43ad355fce7420335e30df4cbd02b5b27373008f91a4f8415eee2681dd7a0c5704da83d4a21752089f5f7202cdbb2a9d3b3ece8fcb26d46b9 +LLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/1675466bc589ffb48c4626d7aca1e061 +LLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/1d36039fa1d9ccc4715a2bb6db76bc238c65a7416d5e31c15bc9526bfb6c3171d8f2541d5958710837009b95ff315ea09126f1d8ed1c41016352a40ac268b13b +LLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/37525ca67fbaaf5e125f95943e804377 +LLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/30a1679e8bfb392a8ff66e30a7f704bff88da4fdbfb0694b0384451148219ee2fc9c256306775ce655ff193b993f11cf6ccaebde2bc8fe2b1553945400e32aa4 +LLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/aaf3be684e78fedc69be62ea69cc31ec +LLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/8c6c9b027913439c3456a209539f25e30cb247b297523de18530aac51649717522c5d14ec531a9053f9c82392ef7e36e03d53bd32e329e90fbd9966467a560e0 +LLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/2514cd3b344b1c1df29b6ed42bb4e78d +LLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/5ecbf336054fa831a1aecdb29c01641b3c5a67d44faf64fec1d4b9c86f997b561e58fd011ebb450234371257680222f12ec6bd24aa29b0cc1b4578f8692d4239 +LLVM.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/eb1c80df14af9b80176bcf3e9798e1ce +LLVM.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/7e4f70d61e2e8b05e8561253968ff3677ea818314753101488f6df8c3024027ff5189b09d42a3b71855a9b919527e7d1a099463f77d21af5bac143acb50cad93 +LLVM.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/50b6ea315963df2469e7d014a0e190dd +LLVM.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/f57ccc09f6ec82a9bb93626953a3ec07a0c1fe265c5b862e16c65751c5ef1d7a34d2c8d32275e2b140ea5ef0657abc0408a9f3f770c6ba615e057bfb63c5c99f +LLVM.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/4b31b77bda90b61804fb82e75f3df05e +LLVM.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/dcaa8dc33b02eed25e6a5b7315e56ac65b81352c8cb7966007a4018e54f29f02f4ead95e723e6ea70a378b893fc1036f3df7aac792f5a44552f4b0e2d4ee5dad +LLVM.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/25a8fec502b17af9b56896436c8c9815 +LLVM.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/05f05b128c151a0946470ac2f609899299e74102817e7e46176728b6ce96612a32b9255603bc770d7f64976dbed0a06ccd289ca30d2d3cabec2a835b8756c750 +LLVM.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/464e16e268b36f7a9edf4a281cc83fa9 +LLVM.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/bec094bf52d95de0f6c49ed4e18be75e5cd655a7e9246c49b361d72db82ac7aa5838c154cf70eba4c6f292fbc867ad83ac0cedea6a278a4c4acca994226a9742 +LLVM.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/18dbfb7b104d56a1167e66e0de830287 +LLVM.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/71c0d3aa067d8a397ab55cd18621124fbe02038dbdac8b67e44485a49c4c5a55cecbda5827f87311448030e1ac98ebb5cfec242e8697907ced74ccde3b41e254 +LLVM.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/cb44e73504c3704c0909f55fe63a3e92 +LLVM.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/e1889df0eced29d82e20087169fcb8cf82fd9e230a9911ec49ff365a76b2cfc3e19ca7c7d14ab9a537d7abce9c169104f400b2756dd032a20fc5e8b211d1b52e +LLVM.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/df717a78c5393e4a954047e8fe22814d +LLVM.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/1957b6f3bb3f570f918e13a387c55b294808c3b690b99db4062be6321d4f8336911b17535fa04b359b6943a842ee9b54f136d203b1397d99e780c41c95876249 +LLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/92d555d261eda37e9e6cb078e3c2c6eb +LLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/b89b748241bfe4537ff8b64686fa63dc495e64a5ba011240297add47adedb74547547dc2f80b87c686e36218471770ea3253b5b117bfc2e990eb7a524a774ccd +LLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/8fec352d4d5499426c978be761d3ce82 +LLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/3dcd842bb640a2772f802bae326e92a09be33a25be51931c4bb1b7ec75b9f839a29fedb857aa86ef2b674d6265b1251589572debcacdb02ee7452bd5896af932 +LLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/96603a41127d3ccd9b832dfae5b26a30 +LLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/088473b8c712fa9e21d70515a7f829456970f0a93f592754905b107adeab5c144b5761382fe1e67fcfab911584e481133ea1f705207f8868e9ae2cc408fd14d4 +LLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/252df3705f7ae6544f502f0fd67701b5 +LLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/6c75f1f5e2539c50b6d8d35b483c8d24d1d701e6dbfc59d169d69e5db24c654dae021e1e7ae9c1e7f693ecb296ad08abbc6091f3c8d1df8edf0fc7bf973d1223 +LLVM.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/34c6138393b5407126f43f308d735b41 +LLVM.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/abee7517a142ca79041ef4a669969d86e93f421a40a25530ba21d92f88e13e91958002c967f1911ddfcb5950fa095e3f5e9b60ef8ed305439990f9ad6a697297 +LLVM.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/6e6baa28e352134d12b03326597866d4 +LLVM.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/20c259ce68504c318e3d2789090dcad5a2ca247b9ed3e5d2a6714193b117033003c4df262015fb86b3a2d2fcfc72d2135dff7bdcf71126e50182d2c608863b24 +LLVM.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/a97ee35283986ae5ce0f57ec58d459e9 +LLVM.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/6e529cb46a5d7f9be12c7c9fbb4e0db4d0cb009d55655fefcdf901923f9636f28110de7ae18fe634d551aebf4990c1f5c350b5c9d705daa2e30b08e35a218360 +LLVM.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/1d09d79c4c30ec32b7dc1f513cc6ba3b +LLVM.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/91024fd81157e0d496fe5c4fdb9f2812a19eb87ffdba009a819ac0e2c6f60145631509f200286369826db707e03825dc62c8c2af02176d10d266e2230cade81d +LLVM.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/81f2a02cb792bd664b782d7734029d66 +LLVM.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/ddad49a9fbbe902e7efc4849e4980d98b21be0e8af0be71b6e66ac50da01e73058984784863b2a4f4aa12ae62f8b3806a6298e8de38198547d03ab0ada17d853 +LLVM.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/bf7683be32c7792e1947e00062d7b8ef +LLVM.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/b3ebeeed5c428fd5ed2643ef45511b74ee0bf0b02653b9211f002e7ecc9f8ff5437139ca0b282c7f25a0918b0e25d316e97b2522a69099d7614d3d1cbe243f84 +LLVM.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/371fd22021c2d6a150e7a7500dea52d7 +LLVM.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/635cc4cfbf7809b679d5fde80b3af72e22dc056778eb7fc66ff80dcb7706809b4819655e922ea3a1b78c913c116444805b05b8fb98ce84c062ea67b12bac417c +LLVM.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/a60ed90e12ec86fd71be1e7c00626429 +LLVM.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/d86264d3d89c647ba75b919b338f2ce6dc496536970a3459abb88b3850216561603e4ef43e821d64a1db8cb53f27be12a2a462648b8aa8e5478290e78fc1b66c +LLVM.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/8f6abe2c11ecadc4e7aced1373bab7b9 +LLVM.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/8746bf3261aeefd3af48b6cb277530add2d1ad7988140d0c086c386213d9c7e0c81c04569237d1f6194b6c7636166b78e87d19ab231a6963aa460e557e94ab3e +LLVM.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/d81588b9e5be65ee8099f5ff063421d7 +LLVM.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/23f35975c450e0ad84617ed61d0a8fbe0c52e2152fb3f2207913e8c9ea4ec4cd7e1ecbfef283ea8c69ddf453e9978f9015965ac18bbedb95b8f802cea2a44c56 +LLVM.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/bb23932f8c246ba09182c9f35c714714 +LLVM.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/78ab81475ad9e62eae7068a7e0def61c9e10e5f1f97182de3fd1dbc5f4925b05c7f239a151035b086ea7bab97e697073643c26d762be63a0da67b1c1cb03a9a7 +LLVM.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/5c84a61bc941cb920e09a195080195a9 +LLVM.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/083fe443b5b8223ebc12e9f3393394ae790f2a9defcb81b8a1ccbbdb9d2631a6e5e8b4f3b000744d6cd2db6bafce18a1919da80bb563b79b7b008484eb5b4997 +LLVM.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/5078269b5db1fd0ba11b9dab936ec538 +LLVM.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/69ac651d6229cf4cdc1360ffd17a2a0b5ee3c1efcb13b70f651c3d58d50e9dceb6c53acf0d1f05fdeacf7361460be564662340b4e6eef82cc2422f8f46eede94 +LLVM.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/96c2dd5b8c37c516a45d30088bc9c67f +LLVM.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/9f9904cbf0ecbe5e599cf6fee2c689d1b9bf28b1fcb434f98f732af9f02c8ed69fe6107abe12247dc50f7a7f7900a6b5d6e5ea38a0153d4f4e0238dcdecee7b6 +LLVM.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/45ac91912beee2f1a348c300830dba87 +LLVM.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/034dfb8ede8e63d208d7b07102108f1d69e28644d21919d5478e894d42f77e8bcd54774eb85080cb0b03dfd76f70fbd218d94b0d77867f78a8db5ec492d39545 +LLVM.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/82701bc015acc0ab092fac5eb1b7c854 +LLVM.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/1e72b2ed04759607907a9931b8180fbde059f04b1066f4eb3272e16752ab854aca1ce3579cb58853bf87a3ecf2b1acfe14fbad324b5bcfa31824987d45ecc225 LLVMLibUnwind.v12.0.1+0.aarch64-apple-darwin.tar.gz/md5/b95ad4844e649bf46db43683b55b9f4f LLVMLibUnwind.v12.0.1+0.aarch64-apple-darwin.tar.gz/sha512/15e0996aebe6db91fe58121001aa7ea4b23685ead3c26b5d89afae34b535e34b4e801a971f4854d8e1a1fbc805cece06272470622eef863e225358113a127913 LLVMLibUnwind.v12.0.1+0.aarch64-linux-gnu.tar.gz/md5/6d8783dc9b86c9884e0877f0d8ac4167 @@ -138,115 +138,115 @@ LLVMLibUnwind.v12.0.1+0.x86_64-unknown-freebsd.tar.gz/md5/54ac594b4c8e7f261034a8 LLVMLibUnwind.v12.0.1+0.x86_64-unknown-freebsd.tar.gz/sha512/a43756afd92081e6dd7244d162862fc318b41ca110a5e8be6e4ee2d8fdfd8fb0f79961ae55e48913e055779791bd1c0ecd34fd59281fb66b3c4f24a1f44128f0 LLVMLibUnwind.v12.0.1+0.x86_64-w64-mingw32.tar.gz/md5/83cf8fc2a085a73b8af4245a82b7d32f LLVMLibUnwind.v12.0.1+0.x86_64-w64-mingw32.tar.gz/sha512/297a5c7b33bd3f57878871eccb3b9879ea5549639523a1b9db356b710cafb232906a74d668315340d60ba0c5087d3400f14ab92c3704e32e062e6b546abf7df6 -libLLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/119e6752a47c65f2eb26becb92b0d1b6 -libLLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/f83e594967feaf6b5aea1b81db28f36386f2c33b28c63454123c4563e235526cad50446d153d0cafc41a39252fb13c62b9a9d9489429bb263e61d9ba54712a62 -libLLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/946e446b392d33f6c42a3d6f8d854079 -libLLVM.v15.0.7+9.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/f5fd00286b65101b644837fae104c24cd8c99c79aa5b952c0fb3855a25377626295cd839cdecab7b839e3a75d5b2b852fc3a886c71fe0f5f4ab78ad348609c45 -libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/55f9c6f7a51f5310da2d0205ce181c26 -libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/89cdb450885dbb4f511ffe3939afbee607bcc2e8568e5ce6ac34bb36431db3c7c8ca3e9d59a27e2ccccddda13ecc3c5d5ffe7a19ae63f909718a731f5c27067b -libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/8600b413e657ad169370d2e07d168aa7 -libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/ca35d96928ae93ed36ab8274c67e5e8a9a971d2b11a3363313f3160579871856cf5c92a8246edc404e10bd44a21c1dbe66941995d87af5efe34b10882aae1df1 -libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/504427a6bf7adf4178891c37a2cbee09 -libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/3a4e40d3ce7ab47987ef604275759cadc171a168638781e74396e2cd48bb6a8a8bc0983ccbe099c2bbb43584d405df63a214d5426830863db773487733688121 -libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/75dbde809013a444c1d9db1556b7e14b -libLLVM.v15.0.7+9.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/37a72c7dc0333fb6be67023447e82a8f98ec3b74c64a3f08b5b047feb585fa8f35cf397ab3db3eef512ff0a7ace6556c3c4e685df7ff22dd095515b77b3ef8ca -libLLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/e92dafe7f987c44f2a860db03bb6df05 -libLLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/31bc73561d6ee24bf8eaad8b7cbbcf1a3713814058a3db47624a05ce572e407241cb7857a851a4f12f93be0df4f2341102e0d68c8371505fd36ce19069e48918 -libLLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/6b978e264a0a1131907c817d4f259534 -libLLVM.v15.0.7+9.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/bdb4976a3d4fdde5885f930a411da895600ef1ef76c8c0f5d6929c9495062600dc422e87f7fea4af12e169f508740fb0701df50ba7e9c4c1c332387a9b7d4c6d -libLLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/ab22578145e661333b4e4d7369e5ff7f -libLLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/4598533c15224a1543fcdd84edbf11ef9611dc4cb22e16f4bef66ffec65e5a9b5a0993bea9bfe25c7af4bb0447af0f31ec82b1eca01cd96d8065bf82007e58b2 -libLLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/9ceb4fc78861ca7d687646350a3d18b8 -libLLVM.v15.0.7+9.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/158f0bf1cf555e5c0b79c1bb8ab9cf8a2c434236f5795c70e9c08c2b5c01da4d88a59cf61a1215f40e4046d3875dcfe2fe89c56e9f6ca7088d10c1fc044de22c -libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/0172fc1ff16552478bf00bbb480b08a2 -libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/710d392dbd708208eb0e2149d87603e2aa4fa99722d50fef2e2ed8c9ba5fbb3b4dff3208a1ee390635eb885aab91a7b228083424a9ca320578b25d8e391d0a8a -libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/c9583dd988c03827d08afb42342a4893 -libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/0954a6c774befd092d59ae228b7a48cfc509fc89e215e79958f460ab2dadc5f7fbd46e00d9c3f0032ab96cd0300aab4f6cdb92488cdf8619513f82cf56f512a0 -libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/5fbe9ce9d7cad44dc57757ce537e098f -libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/b275a24bcc051c25fe57f042518749afae00df2ce61491a70227a7e2e5fdd793e069597a1d19d148462149e3bc0e7d7f5d6b578187dae4e791ae70fbe063e14c -libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/42b7d81dc8084eeb385c22cd4b43e34b -libLLVM.v15.0.7+9.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/75ca00734dd52ef00f3603bb8b89d9ffbb45ff145d2557c460dc856802d814e3ff8e02af1179a18ee32edb0552ccd4fcb44cf5b23b682af164969433916c2d47 -libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/a138c265db068e53752ed917ef9afeab -libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/b66106cc2d348b262d097158ecc0a5ce604460b2de6e1f2c04c24f30a3e7a4103a2c775f0ac1b9f9ba2ad23c8b9a472d0dcb5a266222149deb6fe77611a245a1 -libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/d1e2420d0c90443a2e9ed805e7f36bdd -libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/641f40c2bc485a09f69c38afed880987562549342a71d8626daceb444d76d71d2ec7bcdfd23e870cc9e216791be223599d29e885856a8be4f394b59750b23a0b -libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/03e52f6937072c2bb6ec1fe6e62e6181 -libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/30399baaaf445c45b70f0fd4c95b7d9b63b0f0b2213d4817913b2ea28c35cd1906c398c8cfd9fffde077fcebc43445d6b5bd992ecbe9859e74a3122318ef3628 -libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/12301c5764dd64d924ef617547dc9b8a -libLLVM.v15.0.7+9.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/3d11ba6018f67712483cbb9c52e686d69000b39964e908e13e6695832eb1e6e9f8c764669cbe487fc8a9ef11b4619bddbc9da42210f43e4f60984813cd81b1b7 -libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/06c8c80bff9e49ee05f8024f527b925a -libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/671c47b9f03856641eb0e24cb4d08fdfc2993bc739d5cf11857b0bbad517fab490b2259501d2efad84efd295ad7bcdfa9d0b4991425f7bfc2538b13f7958b556 -libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/a7d88848fd4ef9dff68aa4f1294a272a -libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/25e243b38a1a5bcc1c01f9fcb69d7fa08ded91856de0c626bad22d472c3af77c3ac91d4dbbfef198fb90d21a7cc100eb461f66a21764adbd867fcb889121aa9b -libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/c6cc7b104317544312531f2acda37610 -libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/e732b0af56e5c0efb9bf15996bb398ba6ed49bd5a97517b742d54cd16415830e6bbdf4427ea6e07f316c720a31a279220e72e360128cbcd867520a8322690594 -libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/2318d50e1541d7d319ee23ce1eed268d -libLLVM.v15.0.7+9.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/3ff0a6d43cf26af45e51d966a4212cd3a7b4127cb7dfe6742ead34c489f1a6487c06721591db4e26848b0d42abd49b0a970231f2a1d655c46686f163c7fd3c0a -libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/560bdfdfef0fcab6cb71eefe82412f30 -libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/8d1960d83544e4f6c1a421f4f74f17cf05503c52cd3b5bc2f3dd544aeb7b533af812e1ec1dc113a68396ea66adba5ce01019c97507f8115ec087c95456cb8bb8 -libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/b4765514e48975aa73a9694f3bdca5e5 -libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/085aa81d1542b50b247120b08866775ce3a13dd23e9b649282c902bd2ba8d4581a4571c09d241340a29bc8413a7e749c5f37c1063af4f5b450cf5b271be1e24e -libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/78000c16b21ae1b67610976a26ef201f -libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/1a053a22f183b7b04b4ce8fbcc24393612ace7479a60b73f2a58f54b1ae8632fb9679daf10662347d17ece27d4f64be10d28a6b7f21cedb1131c174754e77660 -libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/12ec163e43b1247a37b3edd5662b0317 -libLLVM.v15.0.7+9.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/44a8a3a68f63a2858a190d2e6ab80952d233f1c86adcb9e6acb23a7f7719ac710a3aadc89053433baf33b435db191b67132f52ccb1ac0f731aa5088400f7a7b4 -libLLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/41bda0ee2f4bc2fbd5b9ee19648249c6 -libLLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/df36876b425dc1ad4639171c61bb82ad0f13405e192cff4d015dd98a2360970ccf096a865c0e8ffc94db829f928ce6323fe54c2db58532b5417ff36da69a1023 -libLLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/335e0c093c6df8d38a0543c5ac7da915 -libLLVM.v15.0.7+9.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/384bb24b12d99896ee617bb54c5a76714df667b41de39dc83bbcfd7e94c8aa2e0e8af9f82570c828f395cf363fbb7b8989413618b0222da373bbeb37a60925ac -libLLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/6255fd402da3174d3256558b719b0ed2 -libLLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/df45f55a4c9f0b235dd741e85e7c353300fdc3dc7b0746b1627b2925d14aba8420ffd669529441b8decd8227dca7821e3efb7c5311368cafd2ef1e1c985a5546 -libLLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/c07fd8ab5524bdc8480bc3255b36b44f -libLLVM.v15.0.7+9.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/015cdc9f78ad1caa90d22abe46314e7ef685ef6da3fc842de5dc641edecb6e41a1329ecd6a9b1450ab50649318320ec0960ae5baad1724c5d938ed97e6fcda17 -libLLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/f7f778128d4bf9982a4b2d8fadece45f -libLLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/622eabb90a99c34b02784303cb09a9ae2670d839f9ca0307c7034abe7e03ac2dc637eb60c084f4cc59e88b184a9dc174493e812b40a4935b05dcab8b4ae23f1e -libLLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/899150cd028d99652e2e390c9afefff3 -libLLVM.v15.0.7+9.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/834d8ce87a58e876c5589ab05389ddfb7dd898cc90a2a8138f31d5bb65d01821a4da4ad70b747b506cca6119cdf70146aa7448307655681aeb7e58012dabdc2f -libLLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/152a7b0c440560edfe0e20a5c8eedb15 -libLLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/344f2ecd173d198d3bfaa7400f46de57822219345234157ae9c901d929e0a32628339989eafeaff716763d26b4c66ca9cb5f55696fa3ad9f236d537f21e26b0b -libLLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/3755794024285e1a3e9dd716e5a0c47b -libLLVM.v15.0.7+9.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/245c5cfce819dcc128925bd40ebc3b39eb2b9760a400c3604168a13434ab6ca96e9067df19acaabc031205d59996e677bc1d804be3c63e7d9a0a88fee6e4d518 -libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/fedb5c68002a0827e4172ba59ebd3efb -libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/4137e0254c8176a9e5ac1d36160a27c1a0d67ec1c21970e115cdea831211ae1258fdfa8f8f7382bfccd08b467777421458e74274979f1e1c2c4c163cb9e51d06 -libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/b6ce8039dd59ade65a12087fc9a507ea -libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/06a351fa2e1dfe1d762908bfbc9c350b15758be77766b8c2fbe9d3208f4385304fce31051966c3073e3cb8aba7a1c15aac12b725fa8b552fb30ac3ebe69f7379 -libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/fb15051e20aa736d745c75af41e1ac72 -libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/4bdb341710510e07a2a7151f2f612229269b12d6bd6b3f61d9ecf5ae02001bee1e24cf0fa29ca36f105f5b003544b95c47858da59c201e49ba3a067dad7abc7d -libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/4fcb319068cd0dce43619eee69c3ae04 -libLLVM.v15.0.7+9.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/f576e9d47a6b12026d7b765b28fbe8fc88a64fa0d4d4b76640cfcc25648ba1894d0bed31a1c23c3a2086d9fc9db7e17c944c9f22cca3d8142656b12cabe1556d -libLLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/b4a3dcd7838f363c67ffccf926e2607d -libLLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/1b72a72de7a14a15a9748820c44f75f3ec6b0ef59f25e9a0a3416205014076f4503781a8738770af2fa3b02ca8445be09bd873bf1d37fb56ad92ba690624f4d0 -libLLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/3af7ad02cfedb3ae47b3bc9748abe5d0 -libLLVM.v15.0.7+9.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/18e6a2bbafa7f7381b5a063db3769aedf952f21bb97e6d26a7b55fced146cfd34ab16d300ca9d42be8d703e4e91426b21174f119fb0348179651d1689ff07c7b -libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/f6f5e31aa1047ab6afce0ffcac90ac14 -libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/d4235fb8858d5f696e0ac6252d54e7ae54abe18336f6e962631c83feeb6a1c1c87cb3a65900dc4d41a2f2ecf4eaf63a914392c151d26003aa5ae6b1858d417c6 -libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/34a53675cb20a6c2114091dc4b500202 -libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/ec81f180f3241c4936a0374b5eee9e1336bb16dd69b403c9c8a4d2bec6207a197a55d0d6b487b7ec694d18db09267f7cbee4efb09b13d32d57927381b5dd09dd -libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/5a392fd27d729a834fff3536dd3a11b0 -libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/152a79331508858070bfa62444c45a66eba488522739369886c277cf597e3b7e5d24b74b371b87e3c92383aea3ffa259a18f6d216f27388babf5baf46a3bf352 -libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/d275153e2738e0517d42e9dd1594c1f5 -libLLVM.v15.0.7+9.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/16362cc75e79e7f19819a2d6b46af96d4ce152bf3a733eb5b573932ad09b3c46700036839978e5f968e14d7c6e5e96b53b051bbe0e1f644421bf8cb1078d3010 -libLLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/8f6f6f101db3da2a422239db48d80228 -libLLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/82950bb2b6e3f4cf4832c73df72753246476ae0c923fe2d1c0abfaee52bdf47dd307e478594163a50633c248d7b86b64ff43a6fd0601616425b0d44eaae1cf55 -libLLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/dcf7c1df5048db10ff97ac0639a4e567 -libLLVM.v15.0.7+9.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/99bfab8c2f954c889b63623e9426bd6e378b51a3bd414c6ce844e8464f026ca21de2e6cdfa313e678b6bf93a62af39b39bfeeb4154e7362604dd5216323fae4e -libLLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/4475f2fe1521a0cc8213a7ef53052a3b -libLLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/82a0f70ffa92e7f43d8c07a0c64dc5ef0d628b3150c285d87926e49bf66017f1ca4cd8a372b1c9842154c8e47db933e95305626501f481d2b837119e843cea7a -libLLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/0f13558877d79581c2d302fc2480fd2b -libLLVM.v15.0.7+9.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/cc8343fabdc2569982b65c55dca33c290b3d72ebcd7126006fd13f1b216d2803c502f6a5e9839c69d22e642031db711b2dca23ccf1ca3b7c481c55dda1159630 -libLLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/854190a61038ca020a18ef5fa5cdd0a1 -libLLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/f39ec16b2e8aef564b8cc7e523ab2b38de7f18705915140f1769e003bab3871259c8ba3403c0896b3cd78b2cf30bcf2c2d2f5f649329dd35c0e4fc706cee203e -libLLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/3c58b4d61518cf6a53b1035f4fc9b13e -libLLVM.v15.0.7+9.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/b706427edd2fe21ca527da587f1cac37b0e36857c6006b1263115bf3e6eb9bc4524b7afd68aebad42d28eafb22fde8c373c460e31a123e8ae4cde3b2fb249d7b -libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/1d5d1f85a7ad52636b550fd0c449130a -libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/4bb34be432bcb752561068b9b99756910bcce1ebc91a54761fc67ce08536e807d61cfa238a0df02026e1a4131cfb2feb1137f449fb16aac76eb4697befd94a6c -libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/b39be2b3fd55154523d6cefc9eec82c9 -libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/ee38ba17a790caeb3997e872eaea2dc81a2e9cfbb70caf900c65052be859ce798b008d545b1cc3c0025d880e069fe4287a37862f1920c4e0c7abbd11a811a080 -libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/4197b06616c8a56ea25dd16fc5cb3b68 -libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/cf2a1868f0b68b76b00bf97bf9ea89f5054ab89e5177b112b8c958ec1c9545bc6ed912c3b4b5038368cd6447ec295d3ae0fe6b9abc4f53c91239644a3bd1a95c -libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/608053656f194352fb58dd00a3168a41 -libLLVM.v15.0.7+9.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/8f4688db666fd2342f57887aeb64b85cf000321c6cd9d27f9a685d61136a27055cff426d3eda1a8beaafb8a178250ba0e4736f435baf3e6f1cf31e20720a3a8d -llvm-julia-15.0.7-9.tar.gz/md5/930ebd05cf54da65ae2142aa2833e2be -llvm-julia-15.0.7-9.tar.gz/sha512/f9f4d2e28379470f7b7785be2782f8295aaee2c1587d7678fa1f43747a1dabff6b065e4ce778def2ebf6471595b6c072a9650b4a61d019e34fde8a1fb7bdee5a +libLLVM.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/aafac8a677723e932e6a4cdb6bbb4411 +libLLVM.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/b584923d317db14a72434ec9d684a34e0c7df2c9b88fc4f005922784fa0fea6975894fd5aae3842b81dd7c7cabd34ecc8faadfa0b808bbb582c7eac0ca94ebd0 +libLLVM.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.tar.gz/md5/d890bc7254bf75563c79261b35feb8fd +libLLVM.v15.0.7+10.aarch64-apple-darwin-llvm_version+15.tar.gz/sha512/55a6bdc18476cb2b98b6e9370da8efd519c2a25624eda32fd301cdd3f9d9863f4a113b631536b6e982d551bb3a0f3e8cdb690699ef0513926ae5c86f65db1f8a +libLLVM.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/f4c53b8cea77f992d3c24088cf0c49ed +libLLVM.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/2b61db1a554f33c5f46b00f4032c722922755267de8f05de04165907329b6b4e33986255084699291be8a2faa7aa5e36aa0bcb5eec2aa324cb8c16e451518adf +libLLVM.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/52c355a71a585f09aef28ad4605cb51e +libLLVM.v15.0.7+10.aarch64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/3a010828b7a6fb51101cf08a74702d2d3d5d85579a3e23a91dff1b3622ca6fd8f04948cefbbf74d03e3cf7955b566dc439f04ce73ba77efce9d8c8e1cc37d790 +libLLVM.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/bb96ff22c46a5587b066e5994c1d806d +libLLVM.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/d643d142777122cc745dfe853070007f70abcb32a9fe5bdaff3ca0eae77f5b774323ccf1c51340ad2f18c72fbbf83bece673dde0c48f94b1ee4204a69bbcdbe4 +libLLVM.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/9a68655b71b38c61b59959ee890199f0 +libLLVM.v15.0.7+10.aarch64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/1b9e20d00114819029aad078aa201a1bcabbf5a5b66bf9867019479180a37cc930cd50127657f87474ae045d1ee808298378e3ac2b8079492a8a3ce4663bdd60 +libLLVM.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/ad4fb8227d147a16b19442b194a22467 +libLLVM.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/fb9c1184de6ea663b3c1b20ba5a5f65afa6bd2a0ea70472db8dd15246b7f0cbe7a0d29eb3dda66d969a6a9b48269f34c200431279e2215760f64e74de6f865c7 +libLLVM.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/8981bd41cb59d4680fff276a5cea6b17 +libLLVM.v15.0.7+10.aarch64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/5992cce6b5bfd38f62b3b370f1ac72d106ffe42c075d26cb6462651f4e9ca1d8bf8a91a254ae4d36b656643f5926229d5ff6fe96e1b31151c7e96f85160a2571 +libLLVM.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/f25e87b0d1c66dff45971bb6c5d2a6d1 +libLLVM.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/581ea7266aa711b355f3a0c676bb3e7bdd33e0297e24afdf420bc5e2ac9cc4bd9330150b8f49af977c9fbfad3c0987bf6f901e93743c844a3a1ee3a4d7902717 +libLLVM.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/a6a0cc01bdaafc1f34d35453ecc89fd7 +libLLVM.v15.0.7+10.aarch64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/cea08396c6617a6ab8ef8749c4af9d15b60171462fded556726f35dbccab888b763637002987f95dcccead210f70c947458068c9ab1fef696cba61334010ee9a +libLLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/d0694876f0a4af8f738b1ef5b15b7483 +libLLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/9dc388988ad1a05212e7306a494a8800be76378bb797c01bb9148b8db02f6734d7bf74b1ac2d19eead331aee4121c0eeda7e05635196f5eb44ae4fada1e8f2be +libLLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/92868cf79a7e9af62d91f4d1418aad4a +libLLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/093ec44f15ec8f8cd855f4c56a70f51b244837cabff3804cd8d5513b3ba7a1ce4d021009a2cd1e484e8705aeab2af5c3f470af2d03b9c21cc3619ba3e5e80621 +libLLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/9ef52c4ddb07b6edb399fd6050af7067 +libLLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/e109335b53f7bc98dc837c4f90c085ba37864ee9e4c9b8c0888b6f00c5f083a2639e3af6c4a29287b3e9b0da6af555832b1cd4a8a514a963d8f45458d70bc291 +libLLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/894ceace311aad57cde915bc4f7e3068 +libLLVM.v15.0.7+10.armv6l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/a075d62dbcec46612ee7b58e00698a8aabcb53705396e8aaae9488517eca34c52bdb5daadd6d21ba721f87a0a46b79bfbbf2268e545020fd60bbd8222249f939 +libLLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/3a6cb7ab61c9739915ff6697ca6584ae +libLLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/7e50687474b0cf3b1d01737b82d5d8076b2559e43a3fbdd9fd376d2f0e68cfb6535e458d7b8781a4a0535f00f28b3b29d0fe390cdceddb84ca4bfd360e814b66 +libLLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/3213bdb23eacbbf1dbb21e5758c038f1 +libLLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/51fb41605c5167486c866885eead1c95ccc11e9b96ca222875fc0965fd97c020afd11aea52abb883870138d5029434cdc5a27d6b5fd5d7966a61a9a11c5d1fe0 +libLLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/0ebd2f002adbfd00a1a39959b45dd4d1 +libLLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/01793b10cab22b3a78c53a9394655572696b2bad368d0f9432582109cd363432ce709c2de04130395ef66453479f154cef1d6a2249340ab6391f85ba4111ab1a +libLLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/8ff3ccd7327e47d1772f6a7ed2d33bf4 +libLLVM.v15.0.7+10.armv6l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/cb01d95f48f41e17b3b4c6549d5fdf5b1c6c8d0e38462796eef6966ad75a81e05a829ed732b189d34e2d3af7f70dcc2530b6b2692cf151f43d804c88a1ce466e +libLLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/dd9e9d296953f7cf32cbe39b519c9e59 +libLLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/e2e3d398c83bf3b7a0cb084577493455ce24ef551edc59297761a8df4007c07e6a7e3727a33f3a650a69639ba3d5de96051fdb6230a985a907582db3ef0e5d2f +libLLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/md5/62df2ac64bb8195960a93cf1f1fee8b4 +libLLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx03-llvm_version+15.tar.gz/sha512/ba01d9e1e6ed1096a04fedec5f319497620a8df655535104726a1497f27a2df4766955d4ac1e161296c313bbd5f0cd8c2d524c41aec234a8c38a1717caf56a63 +libLLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/69e44d007b7f44fefb1622533e2964f9 +libLLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/9d934d951c3e67c6f008438db3159f7a4628b22db25e5f47fde21669120ae766bcea839adfee748a9b1dd7f3f3d758e88fd7bcf95e0d9289d378062805bfb954 +libLLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/md5/0a8eb8bac53734bec7f153ec6a46bd34 +libLLVM.v15.0.7+10.armv7l-linux-gnueabihf-cxx11-llvm_version+15.tar.gz/sha512/1ffab09538ec5267840d4d74f8b9fccc1213707471b19ed7a45789da49bcda2d78a4da0d6954de828b444a33fb020b771d3453fe943334ee12af62984a96b409 +libLLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/md5/320247c2e5d1bfbe966ff93e194bc6ca +libLLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.asserts.tar.gz/sha512/4b38a64de0794befd2be7256419de25eb0be7642db922f15dc359c1ecbfd647e3e1e75f0671f71e66455853af34912dfc2960d313f269d9318040583d48d05e1 +libLLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/md5/1a15e742f9109325842b08296b900d73 +libLLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx03-llvm_version+15.tar.gz/sha512/1c3844c7eb23b7829bdc9d5928199cdaff42e98ee0a931912e9931724e110b965e7ec5b8443c3af79f4694397fa5093786e7e7257344df895cbb22cd827df86e +libLLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/md5/d88d9d0e9eab5681bf92c91cf5d8ddde +libLLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.asserts.tar.gz/sha512/a956df66e3a71fd995aeee43cd2ff8838c346de0a12ea4ec849742bf2f9530e9959a316b16c4ecdf184d5692293125309ac7668d2992f81f17b207657e2c1bf4 +libLLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/md5/1c0ce845334af339b4e797af5bda727f +libLLVM.v15.0.7+10.armv7l-linux-musleabihf-cxx11-llvm_version+15.tar.gz/sha512/8be9c57a67331cdd5dbcf9466bd2346d21fcb100beae0e2027961d8b7b57d26ba03e785dc701f2cbbff60cc298e6aff54a8890fdafe4f4e505d3e91b8ac6adcb +libLLVM.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/2bbbd07363fda9e70bfce36a6c5ad6eb +libLLVM.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/0e4be179ecff5be8a715b744ac441a73cd742d98ee7ac521de4cec1d150fbb2485c29138d6f489289c7a15f74b5a68418133375162caa324a72f4ab1f95232f4 +libLLVM.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/dd655c71803ffae63e89e44f627a1649 +libLLVM.v15.0.7+10.i686-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/467974be3051359de81e2d08c7895cfdcac9ec9d6ba850c7515915b2358745795ed2ddd3c5cc12744942fa72a0eb28ce5f4ad4f622106d4a19f9e289e5357a27 +libLLVM.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/79c051e8492e8c6696f356bf450c641d +libLLVM.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/da679eea0673b1c117363785147d08f372e3be95c8e00bfc5277e662784be3232a1a66c1552c9bb538a5343fcdca0f7a4131805acd239216b26c05b81eedd97d +libLLVM.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/7d910217dcf88c9c59d3a1c4383c5067 +libLLVM.v15.0.7+10.i686-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/10ad390312d937f40e05c3444509f8adfbe0ee8fb6829d35a9a8ec7736106e75d6d5f48b9154e140e4cb59ce4d659dff624ae4a3f6353523d462f63fde4122d2 +libLLVM.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/168402080c3d56f85a298bbaea1c1b17 +libLLVM.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/27c29f50968c01adca981939bf1aba2010341ab4aafe60c4554b954209ef04e793a572404028a63f51ad9ed962bc72540f2270486b9a1f4501535fb547df11b3 +libLLVM.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/92a55a6891a199d49b1d523a3fb24766 +libLLVM.v15.0.7+10.i686-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/82e52b2b177758ee8c410407c6dc4a5f72816e2b97f9c971b6250e27d9bca1ebf73c5700dfd67c648a0ab0a48c48d6eabee0ee9bfa820ee8cf4fec64a708fc43 +libLLVM.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/441231777c430560297c930f1e41191c +libLLVM.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/6ecbb8a014ab4e9ba5c930d81020d9ca47feb2105335e874a5f46a08aa0a2d8ad3622434a21d4361191baf5868e1fd6b9a04a69ada27d3ec1dac4334e92cd640 +libLLVM.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/5418d900f7eaecaa8d0258a498757fda +libLLVM.v15.0.7+10.i686-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/fb25c480cc1826b3aa4a4d861281b6e701b1c792ac4030ad25265ab9510a159994a74aaf33d20fb8ed545526ca11eb693ae7cb0e79499d3248097d39f9691073 +libLLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/06b1e8271b1551b32c1cdadee06c40c1 +libLLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/7c8c10225e9cf75a6b23317e8a277cd548e8f2de41ccfef91cbc66338f94ba59c520c7fa3b4baecce8dbca6ec3e0f241aa09f898d44b1b459b738b7c243f636c +libLLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/527a5f29eb6141c2ae43c186cd6c9f2c +libLLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/466c863bde18d1ff889379ff18c79b7566b755a8207fe09e7a3faa770de242345e781aaa446bd2b656136905f0d2462f9062061052d0472c1079c966a03c68b1 +libLLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/bc24a37e40f45480aa5e458f022cc7ce +libLLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/83121dad17e11c6bb2984ff1e7232ad77da362d3699f7ee1c15a8778d21635d87d89d483cb5848034552f23c2448f47c05419247a326c1b843eacd6cb9e99d0a +libLLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/0b0ee5ee232cf0da7ad227609d1c09d1 +libLLVM.v15.0.7+10.powerpc64le-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/8465b942c400e7a811bd4d46596ca57bcb5ddfed80358f7256d5671db3f797342e9a8ca800d74785874c8643c45367c952f4109d63cebce4cba897db3671e0db +libLLVM.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/md5/558e9e1ca9306d382a32f7fdd076a509 +libLLVM.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.asserts.tar.gz/sha512/7d1d0e8366a3541edeae36ef0a198db9bfaf7eaf54064c8b3eff34fc5efa5628d41001a7a94cea4ba6f960b64ab6849780ac79d25bfb5e30fb7255439c2fa012 +libLLVM.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.tar.gz/md5/8c5afffc8d684d7fc42ad46d2b3e0eb8 +libLLVM.v15.0.7+10.x86_64-apple-darwin-llvm_version+15.tar.gz/sha512/7a857e2b4842c2520600b245f9f3aa44e5206959fd013ab36ca2a9274862f04f5953d460e6024ed572f1ee9099d4afbc74187c310546476e6e3763cb4a68ac14 +libLLVM.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/md5/97b51e70fb151f680d268ef348f4e8ba +libLLVM.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.asserts.tar.gz/sha512/5da888921c4bd3bb801c136c02a37f8866e468a02e7716290dc73ba85cfc3adb42c66c881e7bc55366b3d98f4190aa8aa10c5477464e1f53b6c3dbffd9b396a4 +libLLVM.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/md5/c505b9ab36ce3f2c3f22a03edd8c17ad +libLLVM.v15.0.7+10.x86_64-linux-gnu-cxx03-llvm_version+15.tar.gz/sha512/c69f17c49286c352557bf2d5d34a6872184558612f435d0cda2b55892d3cbad91862f19cd0dd2129d5e8ccf6172127445b17a5d9b7c8a136abb15175f49b1c78 +libLLVM.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/md5/9aabdd2b8c2c448fa346727c89468d93 +libLLVM.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.asserts.tar.gz/sha512/25372337eb7b55bcd51407e9ee202d55633786b6742e38ad12677b0939c824bbcb2e10cef0d6f1bff6f4c0ad8b461c30fde862daf4ddc8a4bc4ea3d91436d4e7 +libLLVM.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/md5/58466a504b06dbfb8dc48c15184193c8 +libLLVM.v15.0.7+10.x86_64-linux-gnu-cxx11-llvm_version+15.tar.gz/sha512/d1d76bdaf3e74a1003fef3a623675be7a9ec0c64f7c5a0c88e7da0bd0384791b39e46dc297b3544f634a1820ffd051a3843c2e91d9f53319609d66542ea30e23 +libLLVM.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/md5/6b6f0d707452691ba0c3504616f2548b +libLLVM.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.asserts.tar.gz/sha512/6c4bad2ab972cc89316f246b0af6c1907650d17685c0923ca2f23144aac7ecc4fdbc29308fcb76d1c67ec99b6148cb0e48f49319d62834c8cbe750a68735d604 +libLLVM.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/md5/319a680fa35212f8327c5f3cf8348241 +libLLVM.v15.0.7+10.x86_64-linux-musl-cxx03-llvm_version+15.tar.gz/sha512/c9ba68a75a3491320e9e7c6eae378ce30cb504450fca5e7e3953175182ba4ef7347fc5aff0219617200b508244aa8691427469cfc49a230ac70a690504ffee6a +libLLVM.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/md5/230bf82575576a349873550a4e3f3f40 +libLLVM.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.asserts.tar.gz/sha512/1a7cab070cc58b5bc1d5c3397f0218fb7c24758d0a1b0e1f8ed3baf71e45b3014afc6c0ff94b3f9c8627dbd62603240a320a84888b4c69df1cfc485e16c9c1f6 +libLLVM.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/md5/bce28b0fde016756db056611d119b49a +libLLVM.v15.0.7+10.x86_64-linux-musl-cxx11-llvm_version+15.tar.gz/sha512/8247dcba4f31dcc22d9771b3c5e6e96b29c5019df24a5b3f026c88a822877bbab75987e512108523951ec938b47113b0f6c161067b2935e9fb5735839b18fee2 +libLLVM.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/md5/7ac5d8081c414e6ca91bedb0f5cd5f78 +libLLVM.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.asserts.tar.gz/sha512/86899309b86b542dae0812e4ba78ba9dfb7dd6c5d9a9db3fb868d78930a906cd70e2dc63bcadf8a085b0fd5690af1df80c0cec9df3c1dabe2c312c049defff39 +libLLVM.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.tar.gz/md5/b5c2edca868b332968d63d161ad7a0fa +libLLVM.v15.0.7+10.x86_64-unknown-freebsd-llvm_version+15.tar.gz/sha512/352e5abb30d78cae34d10d25f3cc0f856d79ff034a8905610ae6c25944216d3dd78444593f3b1355a7e541fb47adcb88df312ffb374604638cd08d3105c7dcca +libLLVM.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/md5/3a818c98e5b2dcb086a58390ef61d82d +libLLVM.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.asserts.tar.gz/sha512/c238fd4f9cb573f5b47c3b71e3d7b7a26457267a049f318295f3e2ab2498ac6418d79e0734dde6dc47df859b670d8e8588ab29dc47fd7bd6e4f49db1c4b252b6 +libLLVM.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/md5/3533470b13310d9cff7e7a7c3619d921 +libLLVM.v15.0.7+10.x86_64-w64-mingw32-cxx03-llvm_version+15.tar.gz/sha512/89a533d3485dba9611ad799f9b3f26af83ed5dede874943c230236a09c2e6ab36df167dbe34f7121af5f291d0720d0975096df46b5f5db34c9822602654572e5 +libLLVM.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/md5/bfa2faaee4ffa22513c5109e7c76e788 +libLLVM.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.asserts.tar.gz/sha512/dbc995dfcc6da651c990b2b9254aab4d46a8dc05fc2961d5fb7199fc9af3b44d0e90b3206f605d9f0e3e9acfac6b534c3e9e5b8d05f0dd17f5c3c664e72c6d7f +libLLVM.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/md5/e92c1827d1e7b815675740bbc5000cde +libLLVM.v15.0.7+10.x86_64-w64-mingw32-cxx11-llvm_version+15.tar.gz/sha512/b098df199c1f30b0a5084c91af8cc444fbf9699474ea78513489a5cc434f8235952359f0d769871c7a8b344216c8de4893c517ec7a6b12c4098b585cfa67666a +llvm-julia-15.0.7-10.tar.gz/md5/e74093b6e760645ca1567aecce27d463 +llvm-julia-15.0.7-10.tar.gz/sha512/9d2b466c0368996bfa825cdc4fb8e00d0cd43521761946b310c8bc6fff461771f4454bf0b7f8be44d723462a9a2c3721504c4250a3fccdf969ffa789ee40d058 llvmunwind-12.0.1.tar.xz/md5/4ec327cee517fdb1f6a20e83748e2c7b llvmunwind-12.0.1.tar.xz/sha512/847b6ba03010a43f4fdbfdc49bf16d18fd18474d01584712e651b11191814bf7c1cf53475021d9ee447ed78413202b4ed97973d7bdd851d3e49f8d06f55a7af4 diff --git a/deps/clang.version b/deps/clang.version index 18e40bbd2c434..6e50e2413f622 100644 --- a/deps/clang.version +++ b/deps/clang.version @@ -1,4 +1,4 @@ ## jll artifact # Clang (paired with LLVM, only here as a JLL download) CLANG_JLL_NAME := Clang -CLANG_JLL_VER := 15.0.7+9 +CLANG_JLL_VER := 15.0.7+10 diff --git a/deps/lld.version b/deps/lld.version index 106ffc05fecf3..56303e3dc0292 100644 --- a/deps/lld.version +++ b/deps/lld.version @@ -1,3 +1,3 @@ ## jll artifact LLD_JLL_NAME := LLD -LLD_JLL_VER := 15.0.7+9 +LLD_JLL_VER := 15.0.7+10 diff --git a/deps/llvm-tools.version b/deps/llvm-tools.version index d7ae53fca1fc1..e7fd7ae57622a 100644 --- a/deps/llvm-tools.version +++ b/deps/llvm-tools.version @@ -1,5 +1,5 @@ ## jll artifact # LLVM_tools (downloads LLVM_jll to get things like `lit` and `opt`) LLVM_TOOLS_JLL_NAME := LLVM -LLVM_TOOLS_JLL_VER := 15.0.7+9 -LLVM_TOOLS_ASSERT_JLL_VER := 15.0.7+9 +LLVM_TOOLS_JLL_VER := 15.0.7+10 +LLVM_TOOLS_ASSERT_JLL_VER := 15.0.7+10 diff --git a/deps/llvm.version b/deps/llvm.version index ba0b900233bfb..918889e016f2c 100644 --- a/deps/llvm.version +++ b/deps/llvm.version @@ -2,14 +2,14 @@ ## jll artifact LLVM_JLL_NAME := libLLVM -LLVM_ASSERT_JLL_VER := 15.0.7+9 +LLVM_ASSERT_JLL_VER := 15.0.7+10 ## source build # Version number of LLVM LLVM_VER := 15.0.7 # Git branch name in `LLVM_GIT_URL` repository -LLVM_BRANCH=julia-15.0.7-9 +LLVM_BRANCH=julia-15.0.7-10 # Git ref in `LLVM_GIT_URL` repository -LLVM_SHA1=julia-15.0.7-9 +LLVM_SHA1=julia-15.0.7-10 ## Following options are used to automatically fetch patchset from Julia's fork. This is ## useful if you want to build an external LLVM while still applying Julia's patches. diff --git a/stdlib/LLD_jll/Project.toml b/stdlib/LLD_jll/Project.toml index 30d0c6625a28e..454da0a0b221b 100644 --- a/stdlib/LLD_jll/Project.toml +++ b/stdlib/LLD_jll/Project.toml @@ -1,6 +1,6 @@ name = "LLD_jll" uuid = "d55e3150-da41-5e91-b323-ecfd1eec6109" -version = "15.0.7+9" +version = "15.0.7+10" [deps] Zlib_jll = "83775a58-1f1d-513f-b197-d71354ab007a" diff --git a/stdlib/libLLVM_jll/Project.toml b/stdlib/libLLVM_jll/Project.toml index a8e628438e170..92867293c3116 100644 --- a/stdlib/libLLVM_jll/Project.toml +++ b/stdlib/libLLVM_jll/Project.toml @@ -1,6 +1,6 @@ name = "libLLVM_jll" uuid = "8f36deef-c2a5-5394-99ed-8e07531fb29a" -version = "15.0.7+9" +version = "15.0.7+10" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" From af11859cfdc871ccbb26134454f4900e9e31b450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hamza=20Yusuf=20=C3=87ak=C4=B1r?= <32282514+hycakir@users.noreply.github.com> Date: Fri, 8 Dec 2023 15:37:11 +0100 Subject: [PATCH 230/413] Remove `Pkg` dependency from `SuiteSparse_jll` (#52441) This dependency seems to be superfluous, and `Pkg` brings lots of dependencies into the project (Downloads, LibGit2, etc.) which makes it hard to create leaner binary packages via `PackageCompiler` for projects that depend on `SuiteSparse_jll`. (cherry picked from commit 3b9c39ac1cbb46688d7b3597e70b9ae591e3b0ec) --- stdlib/SuiteSparse_jll/Project.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/stdlib/SuiteSparse_jll/Project.toml b/stdlib/SuiteSparse_jll/Project.toml index ccd1d06d9a7bb..7518d64e80200 100644 --- a/stdlib/SuiteSparse_jll/Project.toml +++ b/stdlib/SuiteSparse_jll/Project.toml @@ -4,7 +4,6 @@ version = "7.2.1+1" [deps] libblastrampoline_jll = "8e850b90-86db-534c-a0d3-1478176c7d93" -Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" Artifacts = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" From 1dd88d1431963636d8c76866db8249094c9945e8 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Fri, 8 Dec 2023 09:46:55 -0500 Subject: [PATCH 231/413] docs: add notes about scratchspaces in depot (#52367) Co-authored-by: Fredrik Ekre (cherry picked from commit bf6c31ceb5c4da5839026463bc29d00458d80a75) --- base/initdefs.jl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/base/initdefs.jl b/base/initdefs.jl index ed0aa3856f339..e674bd347bd52 100644 --- a/base/initdefs.jl +++ b/base/initdefs.jl @@ -73,13 +73,21 @@ environment variable if set. Each entry in `DEPOT_PATH` is a path to a directory which contains subdirectories used by Julia for various purposes. Here is an overview of some of the subdirectories that may exist in a depot: +* `artifacts`: Contains content that packages use for which Pkg manages the installation of. * `clones`: Contains full clones of package repos. Maintained by `Pkg.jl` and used as a cache. +* `config`: Contains julia-level configuration such as a `startup.jl` * `compiled`: Contains precompiled `*.ji` files for packages. Maintained by Julia. * `dev`: Default directory for `Pkg.develop`. Maintained by `Pkg.jl` and the user. * `environments`: Default package environments. For instance the global environment for a specific julia version. Maintained by `Pkg.jl`. * `logs`: Contains logs of `Pkg` and `REPL` operations. Maintained by `Pkg.jl` and `Julia`. * `packages`: Contains packages, some of which were explicitly installed and some which are implicit dependencies. Maintained by `Pkg.jl`. * `registries`: Contains package registries. By default only `General`. Maintained by `Pkg.jl`. +* `scratchspaces`: Contains content that a package itself installs via the [`Scratch.jl`](https://github.com/JuliaPackaging/Scratch.jl) package. `Pkg.gc()` will delete content that is known to be unused. + +!!! note + Packages that want to store content should use the `scratchspaces` subdirectory via + [`Scratch.jl`](https://github.com/JuliaPackaging/Scratch.jl) instead of creating new + subdirectories in the depot root. See also [`JULIA_DEPOT_PATH`](@ref JULIA_DEPOT_PATH), and [Code Loading](@ref code-loading). From 6627b9188c46a8a1f88524930aba4849f042749d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Drvo=C5=A1t=C4=9Bp?= Date: Mon, 11 Dec 2023 18:25:46 +0100 Subject: [PATCH 232/413] Make `jl_write_coverage_data` dllexported again (#52456) Closes #52452 (cherry picked from commit 8cf7598ebd0c120f50db2f5d6bbd091855a4836c) --- src/coverage.cpp | 2 +- src/julia_internal.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/coverage.cpp b/src/coverage.cpp index 95924f326524b..ab3bc193eb2a0 100644 --- a/src/coverage.cpp +++ b/src/coverage.cpp @@ -192,7 +192,7 @@ static void write_lcov_data(logdata_t &logData, const std::string &outfile) outf.close(); } -extern "C" void jl_write_coverage_data(const char *output) +extern "C" JL_DLLEXPORT void jl_write_coverage_data(const char *output) { if (output) { StringRef output_pattern(output); diff --git a/src/julia_internal.h b/src/julia_internal.h index 4a845350424d4..f96f4db9d611e 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -1603,7 +1603,7 @@ JL_DLLEXPORT enum jl_memory_order jl_get_atomic_order_checked(jl_sym_t *order, c struct _jl_image_fptrs_t; -void jl_write_coverage_data(const char*); +JL_DLLEXPORT void jl_write_coverage_data(const char*); void jl_write_malloc_log(void); #if jl_has_builtin(__builtin_unreachable) || defined(_COMPILER_GCC_) || defined(_COMPILER_INTEL_) From 4241d4c064f0415ebb621968d09d813efbab7d80 Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Tue, 5 Dec 2023 13:47:15 -0300 Subject: [PATCH 233/413] GC scheduler refinements (#52294) Supersedes https://github.com/JuliaLang/julia/pull/51061 and https://github.com/JuliaLang/julia/pull/51414. Still needs more perf analysis. (cherry picked from commit e26c257b28ec6285c8687aef466b64f9ce23c3c7) --- src/gc.c | 117 +++++++++++++++++++++++++++++++++++++++++++++++-------- src/gc.h | 13 ------- 2 files changed, 101 insertions(+), 29 deletions(-) diff --git a/src/gc.c b/src/gc.c index 197d1c6ad75c2..daf00a441fae0 100644 --- a/src/gc.c +++ b/src/gc.c @@ -27,6 +27,8 @@ uv_mutex_t gc_threads_lock; uv_cond_t gc_threads_cond; // To indicate whether concurrent sweeping should run uv_sem_t gc_sweep_assists_needed; +// Mutex used to coordinate entry of GC threads in the mark loop +uv_mutex_t gc_queue_observer_lock; // Linked list of callback functions @@ -2706,8 +2708,10 @@ void gc_mark_and_steal(jl_ptls_t ptls) jl_gc_markqueue_t *mq = &ptls->mark_queue; jl_gc_markqueue_t *mq_master = NULL; int master_tid = jl_atomic_load(&gc_master_tid); - if (master_tid != -1) - mq_master = &gc_all_tls_states[master_tid]->mark_queue; + if (master_tid == -1) { + return; + } + mq_master = &gc_all_tls_states[master_tid]->mark_queue; void *new_obj; jl_gc_chunk_t c; pop : { @@ -2782,28 +2786,108 @@ void gc_mark_and_steal(jl_ptls_t ptls) } } +size_t gc_count_work_in_queue(jl_ptls_t ptls) JL_NOTSAFEPOINT +{ + // assume each chunk is worth 256 units of work and each pointer + // is worth 1 unit of work + size_t work = 256 * (jl_atomic_load_relaxed(&ptls->mark_queue.chunk_queue.bottom) - + jl_atomic_load_relaxed(&ptls->mark_queue.chunk_queue.top)); + work += (jl_atomic_load_relaxed(&ptls->mark_queue.ptr_queue.bottom) - + jl_atomic_load_relaxed(&ptls->mark_queue.ptr_queue.top)); + return work; +} + +/** + * Correctness argument for the mark-loop termination protocol. + * + * Safety properties: + * - No work items shall be in any thread's queues when `gc_mark_loop_barrier` observes + * that `gc_n_threads_marking` is zero. + * + * - No work item shall be stolen from the master thread (i.e. mutator thread which started + * GC and which helped the `jl_n_markthreads` - 1 threads to mark) after + * `gc_mark_loop_barrier` observes that `gc_n_threads_marking` is zero. This property is + * necessary because we call `gc_mark_loop_serial` after marking the finalizer list in + * `_jl_gc_collect`, and want to ensure that we have the serial mark-loop semantics there, + * and that no work is stolen from us at that point. + * + * Proof: + * - Suppose the master thread observes that `gc_n_threads_marking` is zero in + * `gc_mark_loop_barrier` and there is a work item left in one thread's queue at that point. + * Since threads try to steal from all threads' queues, this implies that all threads must + * have tried to steal from the queue which still has a work item left, but failed to do so, + * which violates the semantics of Chase-Lev's work-stealing queue. + * + * - Let E1 be the event "master thread writes -1 to gc_master_tid" and E2 be the even + * "master thread observes that `gc_n_threads_marking` is zero". Since we're using + * sequentially consistent atomics, E1 => E2. Now suppose one thread which is spinning in + * `gc_should_mark` tries to enter the mark-loop after E2. In order to do so, it must + * increment `gc_n_threads_marking` to 1 in an event E3, and then read `gc_master_tid` in an + * event E4. Since we're using sequentially consistent atomics, E3 => E4. Since we observed + * `gc_n_threads_marking` as zero in E2, then E2 => E3, and we conclude E1 => E4, so that + * the thread which is spinning in `gc_should_mark` must observe that `gc_master_tid` is -1 + * and therefore won't enter the mark-loop. + */ + +int gc_should_mark(jl_ptls_t ptls) +{ + int should_mark = 0; + int n_threads_marking = jl_atomic_load(&gc_n_threads_marking); + // fast path + if (n_threads_marking == 0) { + return 0; + } + uv_mutex_lock(&gc_queue_observer_lock); + while (1) { + int tid = jl_atomic_load(&gc_master_tid); + // fast path + if (tid == -1) { + break; + } + n_threads_marking = jl_atomic_load(&gc_n_threads_marking); + // fast path + if (n_threads_marking == 0) { + break; + } + size_t work = gc_count_work_in_queue(gc_all_tls_states[tid]); + for (tid = gc_first_tid; tid < gc_first_tid + jl_n_markthreads; tid++) { + work += gc_count_work_in_queue(gc_all_tls_states[tid]); + } + // if there is a lot of work left, enter the mark loop + if (work >= 16 * n_threads_marking) { + jl_atomic_fetch_add(&gc_n_threads_marking, 1); + should_mark = 1; + break; + } + jl_cpu_pause(); + } + uv_mutex_unlock(&gc_queue_observer_lock); + return should_mark; +} + +void gc_wake_all_for_marking(jl_ptls_t ptls) +{ + jl_atomic_store(&gc_master_tid, ptls->tid); + uv_mutex_lock(&gc_threads_lock); + jl_atomic_fetch_add(&gc_n_threads_marking, 1); + uv_cond_broadcast(&gc_threads_cond); + uv_mutex_unlock(&gc_threads_lock); +} + void gc_mark_loop_parallel(jl_ptls_t ptls, int master) { - int backoff = GC_BACKOFF_MIN; if (master) { - jl_atomic_store(&gc_master_tid, ptls->tid); - // Wake threads up and try to do some work - uv_mutex_lock(&gc_threads_lock); - jl_atomic_fetch_add(&gc_n_threads_marking, 1); - uv_cond_broadcast(&gc_threads_cond); - uv_mutex_unlock(&gc_threads_lock); + gc_wake_all_for_marking(ptls); gc_mark_and_steal(ptls); jl_atomic_fetch_add(&gc_n_threads_marking, -1); } - while (jl_atomic_load(&gc_n_threads_marking) > 0) { - // Try to become a thief while other threads are marking - jl_atomic_fetch_add(&gc_n_threads_marking, 1); - if (jl_atomic_load(&gc_master_tid) != -1) { - gc_mark_and_steal(ptls); + while (1) { + int should_mark = gc_should_mark(ptls); + if (!should_mark) { + break; } + gc_mark_and_steal(ptls); jl_atomic_fetch_add(&gc_n_threads_marking, -1); - // Failed to steal - gc_backoff(&backoff); } } @@ -3543,6 +3627,7 @@ void jl_gc_init(void) uv_mutex_init(&gc_threads_lock); uv_cond_init(&gc_threads_cond); uv_sem_init(&gc_sweep_assists_needed, 0); + uv_mutex_init(&gc_queue_observer_lock); jl_gc_init_page(); jl_gc_debug_init(); diff --git a/src/gc.h b/src/gc.h index a00157c0d34ba..fe8aadee71ad8 100644 --- a/src/gc.h +++ b/src/gc.h @@ -187,19 +187,6 @@ extern jl_gc_global_page_pool_t global_page_pool_lazily_freed; extern jl_gc_global_page_pool_t global_page_pool_clean; extern jl_gc_global_page_pool_t global_page_pool_freed; -#define GC_BACKOFF_MIN 4 -#define GC_BACKOFF_MAX 12 - -STATIC_INLINE void gc_backoff(int *i) JL_NOTSAFEPOINT -{ - if (*i < GC_BACKOFF_MAX) { - (*i)++; - } - for (int j = 0; j < (1 << *i); j++) { - jl_cpu_pause(); - } -} - // Lock-free stack implementation taken // from Herlihy's "The Art of Multiprocessor Programming" From c61b27f02d03e8d0c9eef13f337c966e7771758e Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Sat, 2 Dec 2023 09:36:18 -0500 Subject: [PATCH 234/413] make custom log macros work (#52359) (cherry picked from commit 641f717a15cf89964db446c1bb32d0d672763786) --- base/logging.jl | 34 ++++++++++++++++----------------- stdlib/Logging/test/runtests.jl | 17 +++++++++++++++++ 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/base/logging.jl b/base/logging.jl index c42af08d8f4ae..96c133a239cc0 100644 --- a/base/logging.jl +++ b/base/logging.jl @@ -159,6 +159,9 @@ Alias for [`LogLevel(2000)`](@ref LogLevel). const Error = LogLevel( 2000) const AboveMaxLevel = LogLevel( 1000001) +# Global log limiting mechanism for super fast but inflexible global log limiting. +const _min_enabled_level = Ref{LogLevel}(Debug) + function show(io::IO, level::LogLevel) if level == BelowMinLevel print(io, "BelowMinLevel") elseif level == Debug print(io, "Debug") @@ -319,6 +322,15 @@ function issimplekw(@nospecialize val) return false end +# helper function to get the current logger, if enabled for the specified message type +@noinline Base.@constprop :none function current_logger_for_env(std_level::LogLevel, group, _module) + logstate = @inline current_logstate() + if std_level >= logstate.min_enabled_level || env_override_minlevel(group, _module) + return logstate.logger + end + return nothing +end + # Generate code for logging macros function logmsg_code(_module, file, line, level, message, exs...) @nospecialize @@ -370,23 +382,23 @@ function logmsg_code(_module, file, line, level, message, exs...) let level = $level # simplify std_level code emitted, if we know it is one of our global constants - std_level = $(level isa Symbol ? :level : :(level isa LogLevel ? level : convert(LogLevel, level)::LogLevel)) - if std_level >= _min_enabled_level[] + std_level = $(level isa Symbol ? :level : :(level isa $LogLevel ? level : convert($LogLevel, level)::$LogLevel)) + if std_level >= $(_min_enabled_level)[] group = $(log_data._group) _module = $(log_data._module) - logger = current_logger_for_env(std_level, group, _module) + logger = $(current_logger_for_env)(std_level, group, _module) if !(logger === nothing) id = $(log_data._id) # Second chance at an early bail-out (before computing the message), # based on arbitrary logger-specific logic. - if invokelatest(shouldlog, logger, level, _module, group, id) + if invokelatest($shouldlog, logger, level, _module, group, id) file = $(log_data._file) if file isa String file = Base.fixup_stdlib_path(file) end line = $(log_data._line) local msg, kwargs - $(logrecord) && invokelatest(handle_message, + $(logrecord) && invokelatest($handle_message, logger, level, msg, _module, group, id, file, line; kwargs...) end @@ -481,9 +493,6 @@ function logmsg_shim(level, message, _module, group, id, file, line, kwargs) nothing end -# Global log limiting mechanism for super fast but inflexible global log limiting. -const _min_enabled_level = Ref{LogLevel}(Debug) - # LogState - a cache of data extracted from the logger, plus the logger itself. struct LogState min_enabled_level::LogLevel @@ -497,15 +506,6 @@ function current_logstate() return (logstate !== nothing ? logstate : _global_logstate)::LogState end -# helper function to get the current logger, if enabled for the specified message type -@noinline Base.@constprop :none function current_logger_for_env(std_level::LogLevel, group, _module) - logstate = current_logstate() - if std_level >= logstate.min_enabled_level || env_override_minlevel(group, _module) - return logstate.logger - end - return nothing -end - function with_logstate(f::Function, logstate) @nospecialize t = current_task() diff --git a/stdlib/Logging/test/runtests.jl b/stdlib/Logging/test/runtests.jl index b6b4813964536..3a793c4e0bc33 100644 --- a/stdlib/Logging/test/runtests.jl +++ b/stdlib/Logging/test/runtests.jl @@ -6,6 +6,10 @@ import Logging: min_enabled_level, shouldlog, handle_message @noinline func1() = backtrace() +# see "custom log macro" testset +CustomLog = LogLevel(-500) +macro customlog(exs...) Base.CoreLogging.logmsg_code((Base.CoreLogging.@_sourceinfo)..., esc(CustomLog), exs...) end + @testset "Logging" begin @testset "Core" begin @@ -275,4 +279,17 @@ end @test m.run() end +@testset "custom log macro" begin + @test_logs (CustomLog, "a") min_level=CustomLog @customlog "a" + + buf = IOBuffer() + io = IOContext(buf, :displaysize=>(30,80), :color=>false) + logger = ConsoleLogger(io, CustomLog) + + with_logger(logger) do + @customlog "a" + end + @test occursin("LogLevel(-500): a", String(take!(buf))) +end + end From 5a0bda4867f0b180b44248d0ed02c542e80b612f Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Sat, 16 Dec 2023 05:29:26 +0900 Subject: [PATCH 235/413] fix #52531, fix the effects modeling of `QuoteNode` (#52548) What observed in #52531 is that `QuoteNode` can embed global variables that users can modify. Therefore, when dealing with `QuoteNode`, it's necessary to taint its `:inaccessiblememonly` just like we do for `GlobalRef`. - fixes #52531 - replaces #52536 --- base/compiler/abstractinterpretation.jl | 2 ++ test/compiler/effects.jl | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 11d81dc3d0935..0ef21bc28fb50 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -2268,6 +2268,8 @@ end function abstract_eval_special_value(interp::AbstractInterpreter, @nospecialize(e), vtypes::Union{VarTable,Nothing}, sv::AbsIntState) if isa(e, QuoteNode) + merge_effects!(interp, sv, Effects(EFFECTS_TOTAL; + inaccessiblememonly = is_mutation_free_argtype(typeof(e.value)) ? ALWAYS_TRUE : ALWAYS_FALSE)) return Const(e.value) elseif isa(e, SSAValue) return abstract_eval_ssavalue(e, sv) diff --git a/test/compiler/effects.jl b/test/compiler/effects.jl index 44554690b1b98..cab498e863985 100644 --- a/test/compiler/effects.jl +++ b/test/compiler/effects.jl @@ -1023,3 +1023,19 @@ end isinf(y) && return zero(y) irinterp_nothrow_override(true, y) end |> Core.Compiler.is_nothrow + +# https://github.com/JuliaLang/julia/issues/52531 +const a52531 = Core.Ref(1) +@eval getref52531() = $(QuoteNode(a52531)).x +@test !Core.Compiler.is_consistent(Base.infer_effects(getref52531)) +let + global set_a52531!, get_a52531 + _a::Int = -1 + set_a52531!(a::Int) = (_a = a; return get_a52531()) + get_a52531() = _a +end +@test !Core.Compiler.is_consistent(Base.infer_effects(set_a52531!, (Int,))) +@test !Core.Compiler.is_consistent(Base.infer_effects(get_a52531, ())) +@test get_a52531() == -1 +@test set_a52531!(1) == 1 +@test get_a52531() == 1 From ed79752b939c0150e1e47fa6c3fb4cd646824395 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Mon, 18 Dec 2023 10:57:58 +0100 Subject: [PATCH 236/413] set VERSION to 1.10.0-rc3 (#52568) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 01281a7553fa5..527d1242118b0 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.0-rc2 +1.10.0-rc3 From b6dd52757c63f73d9285444000f0daa60d18c18e Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Fri, 22 Dec 2023 14:56:37 -0300 Subject: [PATCH 237/413] [release 1.10] backport GC developer docs to 1.10 (#52616) The current GC developer docs are fairly out-of-date with the actual implementation. This PR should be strictly a NFC. --- doc/src/devdocs/gc.md | 89 +++++++------------ doc/src/devdocs/img/gc-tiered-allocation.jpg | Bin 0 -> 354128 bytes 2 files changed, 34 insertions(+), 55 deletions(-) create mode 100644 doc/src/devdocs/img/gc-tiered-allocation.jpg diff --git a/doc/src/devdocs/gc.md b/doc/src/devdocs/gc.md index 942535f426b34..d11fafe744f14 100644 --- a/doc/src/devdocs/gc.md +++ b/doc/src/devdocs/gc.md @@ -2,77 +2,56 @@ ## Introduction -Julia has a serial, stop-the-world, generational, non-moving mark-sweep garbage collector. -Native objects are precisely scanned and foreign ones are conservatively marked. +Julia has a non-moving, partially concurrent, parallel, generational and mostly precise mark-sweep collector (an interface +for conservative stack scanning is provided as an option for users who wish to call Julia from C). -## Memory layout of objects and GC bits +## Allocation -An opaque tag is stored in the front of GC managed objects, and its lowest two bits are -used for garbage collection. The lowest bit is set for marked objects and the second -lowest bit stores age information (e.g. it's only set for old objects). +Julia uses two types of allocators, the size of the allocation request determining which one is used. Objects up to 2k +bytes are allocated on a per-thread free-list pool allocator, while objects larger than 2k bytes are allocated through libc +malloc. -Objects are aligned by a multiple of 4 bytes to ensure this pointer tagging is legal. +Julia’s pool allocator partitions objects on different size classes, so that a memory page managed by the pool allocator +(which spans 4 operating system pages on 64bit platforms) only contains objects of the same size class. Each memory +page from the pool allocator is paired with some page metadata stored on per-thread lock-free lists. The page metadata contains information such as whether the page has live objects at all, number of free slots, and offsets to the first and last objects in the free-list contained in that page. These metadata are used to optimize the collection phase: a page which has no live objects at all may be returned to the operating system without any need of scanning it, for example. -## Pool allocation +While a page that has no objects may be returned to the operating system, its associated metadata is permanently +allocated and may outlive the given page. As mentioned above, metadata for allocated pages are stored on per-thread lock-free +lists. Metadata for free pages, however, may be stored into three separate lock-free lists depending on whether the page has been mapped but never accessed (`page_pool_clean`), or whether the page has been lazily sweeped and it's waiting to be madvised by a background GC thread (`page_pool_lazily_freed`), or whether the page has been madvised (`page_pool_freed`). -Sufficiently small objects (up to 2032 bytes) are allocated on per-thread object -pools. +Julia's pool allocator follows a "tiered" allocation discipline. When requesting a memory page for the pool allocator, Julia will: -A three-level tree (analogous to a three-level page-table) is used to keep metadata -(e.g. whether a page has been allocated, whether contains marked objects, number of free objects etc.) -about address ranges spanning at least one page. -Sweeping a pool allocated object consists of inserting it back into the free list -maintained by its pool. +- Try to claim a page from `page_pool_lazily_freed`, which contains pages which were empty on the last stop-the-world phase, but not yet madivsed by a concurrent sweeper GC thread. -## Malloc'd arrays and big objects +- If it failed claiming a page from `page_pool_lazily_freed`, it will try to claim a page from `the page_pool_clean`, which contains pages which were mmaped on a previous page allocation request but never accessed. -Two lists are used to keep track of the remaining allocated objects: -one for sufficiently large malloc'd arrays (`mallocarray_t`) and one for -sufficiently large objects (`bigval_t`). +- If it failed claiming a page from `pool_page_clean` and from `page_pool_lazily_freed`, it will try to claim a page +from `page_pool_freed`, which contains pages which have already been madvised by a concurrent sweeper GC thread and whose underlying virtual address can be recycled. -Sweeping these objects consists of unlinking them from their list and calling `free` on the -corresponding address. +- If it failed in all of the attempts mentioned above, it will mmap a batch of pages, claim one page for itself, and +insert the remaining pages into `page_pool_clean`. -## Generational and remembered sets +![Diagram of tiered pool allocation](./img/gc-tiered-allocation.jpg) -Field writes into old objects trigger a write barrier if the written field -points to a young object and if a write barrier has not been triggered on the old object yet. -In this case, the old object being written to is enqueued into a remembered set, and -its mark bit is set to indicate that a write barrier has already been triggered on it. +## Marking and Generational Collection -There is no explicit flag to determine whether a marking pass will scan the -entire heap or only through young objects and remembered set. -The mark bits of the objects themselves are used to determine whether a full mark happens. -The mark-sweep algorithm follows this sequence of steps: +Julia’s mark phase is implemented through a parallel iterative depth-first-search over the object graph. Julia’s collector is non-moving, so object age information can’t be determined through the memory region in which the object resides alone, but has to be somehow encoded in the object header or on a side table. The lowest two bits of an object’s header are used to store, respectively, a mark bit that is set when an object is scanned during the mark phase and an age bit for the generational collection. -- Objects in the remembered set have their GC mark bits reset -(these are set once write barrier is triggered, as described above) and are enqueued. +Generational collection is implemented through sticky bits: objects are only pushed to the mark-stack, and therefore +traced, if their mark-bits are not set. When objects reach the oldest generation, their mark-bits are not reset during +the so-called "quick-sweep", which leads to these objects not being traced in a subsequent mark phase. A "full-sweep", +however, causes the mark-bits of all objects to be reset, leading to all objects being traced in a subsequent mark phase. +Objects are promoted to the next generation during every sweep phase they survive. On the mutator side, field writes +are intercepted through a write barrier that pushes an object’s address into a per-thread remembered set if the object is +in the last generation, and if the object at the field being written is not. Objects in this remembered set are then traced +during the mark phase. -- Roots (e.g. thread locals) are enqueued. +## Sweeping -- Object graph is traversed and mark bits are set. +Sweeping of object pools for Julia may fall into two categories: if a given page managed by the pool allocator contains at least one live object, then a free-list must be threaded through its dead objects; if a given page contains no live objects at all, then its underlying physical memory may be returned to the operating system through, for instance, the use of madvise system calls on Linux. -- Object pools, malloc'd arrays and big objects are sweeped. On a full sweep, -the mark bits of all marked objects are reset. On a generational sweep, -only the mark bits of marked young objects are reset. - -- Mark bits of objects in the remembered set are set, -so we don't trigger the write barrier on them again. - -After these stages, old objects will be left with their mark bits set, -so that references from them are not explored in a subsequent generational collection. -This scheme eliminates the need of explicitly keeping a flag to indicate a full mark -(though a flag to indicate a full sweep is necessary). +The first category of sweeping is currently serial and performed in the stop-the-world phase. For the second category of sweeping, if concurrent page sweeping is enabled through the flag `--gcthreads=X,1` we perform the madvise system calls in a background sweeper thread, concurrently with the mutator threads. During the stop-the-world phase of the collector, pool allocated pages which contain no live objects are initially pushed into the `pool_page_lazily_freed`. The background sweeping thread is then woken up and is responsible for removing pages from `pool_page_lazily_freed`, calling madvise on them, and inserting them into `pool_page_freed`. As described above, `pool_page_lazily_freed` is also shared with mutator threads. This implies that on allocation-heavy multithreaded workloads, mutator threads would often avoid a page fault on allocation (coming from accessing a fresh mmaped page or accessing a madvised page) by directly allocating from a page in `pool_page_lazily_freed`, while the background sweeper thread needs to madvise a reduce number of pages given some of them were already claimed by the mutators. ## Heuristics -GC heuristics tune the GC by changing the size of the allocation interval between garbage collections. - -The GC heuristics measure how big the heap size is after a collection and set the next -collection according to the algorithm described by https://dl.acm.org/doi/10.1145/3563323, -in summary, it argues that the heap target should have a square root relationship with the live heap, and that it should also be scaled by how fast the GC is freeing objects and how fast the mutators are allocating. -The heuristics measure the heap size by counting the number of pages that are in use and the objects that use malloc. Previously we measured the heap size by counting -the alive objects, but that doesn't take into account fragmentation which could lead to bad decisions, that also meant that we used thread local information (allocations) to make -decisions about a process wide (when to GC), measuring pages means the decision is global. - -The GC will do full collections when the heap size reaches 80% of the maximum allowed size. +GC heuristics tune the GC by changing the size of the allocation interval between garbage collections. If a GC was unproductive, then we increase the size of the allocation interval to allow objects more time to die. If a GC returns a lot of space we can shrink the interval. The goal is to find a steady state where we are allocating just about the same amount as we are collecting. diff --git a/doc/src/devdocs/img/gc-tiered-allocation.jpg b/doc/src/devdocs/img/gc-tiered-allocation.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ab0e1298364cb755953421e89a574bcd8b6cfca GIT binary patch literal 354128 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 z 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

84XU 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 Date: Fri, 22 Dec 2023 12:21:11 -0800 Subject: [PATCH 238/413] Fix `show` for `MethodList` when methods are from another module (#52354) When a type is defined in one module but its methods are defined elsewhere, `show_method_table` errors due to an incorrect lookup of the defining module used to determine colors for printing. In particular, the code had been assuming that the type is defined in the module in which its constructor's first method (in the sense of `first(methods())`) is defined, which isn't always true. The color used for printing the module name needs to be determined on a per-method basis and can't be correctly done based on the method table's module. For each method, we attempt to derive the module for the method table to which the method was added, then determine whether it's the same as the defining module for the method. Fixes #49382 Fixes #49403 Fixes #52043 Co-Authored-By: Jameson Nash (cherry picked from commit 40bc64c2c213f0e3bf6c91f9b5868221ec4b0c05) --- base/methodshow.jl | 37 ++++++++++++++++++++++++------------- base/reflection.jl | 6 +++++- test/show.jl | 7 +++++++ 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/base/methodshow.jl b/base/methodshow.jl index 0eb99dc88303f..477acd2960c48 100644 --- a/base/methodshow.jl +++ b/base/methodshow.jl @@ -286,6 +286,29 @@ function show_method_list_header(io::IO, ms::MethodList, namefmt::Function) !iszero(n) && print(io, ":") end +# Determine the `modulecolor` value to pass to `show_method` +function _modulecolor(method::Method) + mmt = get_methodtable(method) + if mmt === nothing || mmt.module === parentmodule(method) + return nothing + end + # `mmt` is only particularly relevant for external method tables. Since the primary + # method table is shared, we now need to distinguish "primary" methods by trying to + # check if there is a primary `DataType` to identify it with. c.f. how `jl_method_def` + # would derive this same information (for the name). + ft = argument_datatype((unwrap_unionall(method.sig)::DataType).parameters[1]) + # `ft` should be the type associated with the first argument in the method signature. + # If it's `Type`, try to unwrap it again. + if isType(ft) + ft = argument_datatype(ft.parameters[1]) + end + if ft === nothing || parentmodule(method) === parentmodule(ft) !== Core + return nothing + end + m = parentmodule_before_main(method) + return get!(() -> popfirst!(STACKTRACE_MODULECOLORS), STACKTRACE_FIXEDCOLORS, m) +end + function show_method_table(io::IO, ms::MethodList, max::Int=-1, header::Bool=true) mt = ms.mt name = mt.name @@ -300,12 +323,6 @@ function show_method_table(io::IO, ms::MethodList, max::Int=-1, header::Bool=tru last_shown_line_infos = get(io, :last_shown_line_infos, nothing) last_shown_line_infos === nothing || empty!(last_shown_line_infos) - modul = if mt === _TYPE_NAME.mt && length(ms) > 0 # type constructor - which(ms.ms[1].module, ms.ms[1].name) - else - mt.module - end - digit_align_width = length(string(max > 0 ? max : length(ms))) for meth in ms @@ -315,13 +332,7 @@ function show_method_table(io::IO, ms::MethodList, max::Int=-1, header::Bool=tru print(io, " ", lpad("[$n]", digit_align_width + 2), " ") - modulecolor = if parentmodule(meth) == modul - nothing - else - m = parentmodule_before_main(meth) - get!(() -> popfirst!(STACKTRACE_MODULECOLORS), STACKTRACE_FIXEDCOLORS, m) - end - show_method(io, meth; modulecolor) + show_method(io, meth; modulecolor=_modulecolor(meth)) file, line = updated_methodloc(meth) if last_shown_line_infos !== nothing diff --git a/base/reflection.jl b/base/reflection.jl index adcba82709491..7a1a9836b3681 100644 --- a/base/reflection.jl +++ b/base/reflection.jl @@ -2033,7 +2033,11 @@ function delete_method(m::Method) end function get_methodtable(m::Method) - return ccall(:jl_method_get_table, Any, (Any,), m)::Core.MethodTable + mt = ccall(:jl_method_get_table, Any, (Any,), m) + if mt === nothing + return nothing + end + return mt::Core.MethodTable end """ diff --git a/test/show.jl b/test/show.jl index 25c5a49372054..688ee452a4813 100644 --- a/test/show.jl +++ b/test/show.jl @@ -2630,3 +2630,10 @@ end ir = Core.Compiler.complete(compact) verify_display(ir) end + +module Issue49382 + abstract type Type49382 end +end +using .Issue49382 +(::Type{Issue49382.Type49382})() = 1 +@test sprint(show, methods(Issue49382.Type49382)) isa String From a7dbaad2e423fe93818b0d8bf9e44e8791b0b880 Mon Sep 17 00:00:00 2001 From: Hendrik Ranocha Date: Fri, 15 Dec 2023 16:53:35 +0100 Subject: [PATCH 239/413] Document environment variable JULIA_PKG_PRESERVE_TIERED_INSTALLED (#52362) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is based on ```julia julia> using Pkg help?> Pkg.add ... │ Note │ │ To change the default strategy to PRESERVE_TIERED_INSTALLED set the env var │ JULIA_PKG_PRESERVE_TIERED_INSTALLED to true. ... ``` I suggest to backport this so that it becomes available in the release docs of Julia v1.9 and newer. (cherry picked from commit 2c2ea3aa649fcea7a7b889c80e211b84cf6f2510) --- doc/src/manual/environment-variables.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/src/manual/environment-variables.md b/doc/src/manual/environment-variables.md index ce6d628b2f0e7..660bd08bfb846 100644 --- a/doc/src/manual/environment-variables.md +++ b/doc/src/manual/environment-variables.md @@ -240,6 +240,15 @@ If set to `true`, Pkg operations which use the git protocol will use an external The accuracy of the package resolver. This should be a positive integer, the default is `1`. +### [`JULIA_PKG_PRESERVE_TIERED_INSTALLED`](@id JULIA_PKG_PRESERVE_TIERED_INSTALLED) + +Change the default package installation strategy to `Pkg.PRESERVE_TIERED_INSTALLED` +to let the package manager try to install versions of packages while keeping as many +versions of packages already installed as possible. + +!!! compat "Julia 1.9" + This only affects Julia 1.9 and above. + ## Network transport ### `JULIA_NO_VERIFY_HOSTS` / `JULIA_SSL_NO_VERIFY_HOSTS` / `JULIA_SSH_NO_VERIFY_HOSTS` / `JULIA_ALWAYS_VERIFY_HOSTS` From 5bf09bb4797d24e230119c1bf1e39361a88b8064 Mon Sep 17 00:00:00 2001 From: "Steven G. Johnson" Date: Tue, 19 Dec 2023 07:55:04 -0500 Subject: [PATCH 240/413] fix isequal_normalized for combining-char reordering (#52447) Fixes #52408. (Note that this function was added in Julia 1.8, in #42493.) In the future it would be good to further optimize this function by adding a fast path for the common case of strings that are mostly ASCII characters. Perhaps simply skip ahead to the first byte that doesn't match before we begin doing decomposition etcetera. (cherry picked from commit 3b250c73dc686cb3857067582f47be336ac788ef) --- stdlib/Unicode/src/Unicode.jl | 81 ++++++++++++++++++++++++++++----- stdlib/Unicode/test/runtests.jl | 67 +++++++++++++++++++++++++++ 2 files changed, 137 insertions(+), 11 deletions(-) diff --git a/stdlib/Unicode/src/Unicode.jl b/stdlib/Unicode/src/Unicode.jl index e0ae78bd911a7..914ca21d642f3 100644 --- a/stdlib/Unicode/src/Unicode.jl +++ b/stdlib/Unicode/src/Unicode.jl @@ -208,12 +208,19 @@ end using Base.Unicode: utf8proc_error, UTF8PROC_DECOMPOSE, UTF8PROC_CASEFOLD, UTF8PROC_STRIPMARK -function _decompose_char!(codepoint::Union{Integer,Char}, dest::Vector{UInt32}, options::Integer) - ret = @ccall utf8proc_decompose_char(codepoint::UInt32, dest::Ptr{UInt32}, length(dest)::Int, options::Cint, C_NULL::Ptr{Cint})::Int +function _decompose_char!(codepoint::Union{Integer,Char}, dest::Vector{UInt32}, offset::Integer, options::Integer) + ret = GC.@preserve dest @ccall utf8proc_decompose_char(codepoint::UInt32, pointer(dest, 1+offset)::Ptr{UInt32}, (length(dest)-offset)::Int, options::Cint, C_NULL::Ptr{Cint})::Int ret < 0 && utf8proc_error(ret) return ret end +# would be good to have higher-level accessor functions in utf8proc. alternatively, +# we could mirror the whole utf8proc_property_t struct in Julia, but that is annoying +# because of the bitfields. +combining_class(uc::Integer) = + 0x000301 ≤ uc ≤ 0x10ffff ? unsafe_load(ccall(:utf8proc_get_property, Ptr{UInt16}, (UInt32,), uc), 2) : 0x0000 +combining_class(c::AbstractChar) = ismalformed(c) ? 0x0000 : combining_class(UInt32(c)) + """ isequal_normalized(s1::AbstractString, s2::AbstractString; casefold=false, stripmark=false, chartransform=identity) @@ -225,6 +232,9 @@ As with [`Unicode.normalize`](@ref), you can also pass an arbitrary function via the `chartransform` keyword (mapping `Integer` codepoints to codepoints) to perform custom normalizations, such as [`Unicode.julia_chartransform`](@ref). +!!! compat "Julia 1.8" + The `isequal_normalized` function was added in Julia 1.8. + # Examples For example, the string `"noël"` can be constructed in two canonically equivalent ways @@ -251,29 +261,78 @@ julia> isequal_normalized(s1, "NOËL", casefold=true) true ``` """ -function isequal_normalized(s1::AbstractString, s2::AbstractString; casefold::Bool=false, stripmark::Bool=false, chartransform=identity) - function decompose_next_char!(c, state, d, options, s) - n = _decompose_char!(c, d, options) - if n > length(d) # may be possible in future Unicode versions? - n = _decompose_char!(c, resize!(d, n), options) +isequal_normalized(s1::AbstractString, s2::AbstractString; casefold::Bool=false, stripmark::Bool=false, chartransform=identity) = + _isequal_normalized!(s1, s2, Vector{UInt32}(undef, 4), Vector{UInt32}(undef, 4), chartransform; casefold, stripmark) + +# like isequal_normalized, but takes pre-allocated codepoint buffers as arguments, and chartransform is a positional argument +function _isequal_normalized!(s1::AbstractString, s2::AbstractString, + d1::Vector{UInt32}, d2::Vector{UInt32}, chartransform::F=identity; + casefold::Bool=false, stripmark::Bool=false) where {F} + function decompose_next_chars!(state, d, options, s) + local n + offset = 0 + @inbounds while true + # read a char and decompose it to d + c = chartransform(UInt32(state[1])) + state = iterate(s, state[2]) + if c < 0x80 # fast path for common ASCII case + n = 1 + offset + n > length(d) && resize!(d, 2n) + d[n] = casefold ? (0x41 ≤ c ≤ 0x5A ? c+0x20 : c) : c + break # ASCII characters are all zero combining class + else + while true + n = _decompose_char!(c, d, offset, options) + offset + if n > length(d) + resize!(d, 2n) + continue + end + break + end + end + + # decomposed chars must be sorted in ascending order of combining class, + # which means we need to keep fetching chars until we get to non-combining + (iszero(combining_class(d[n])) || isnothing(state)) && break # non-combining + offset = n end - return 1, n, iterate(s, state) + + # sort by combining class + if n < 32 # almost always true + for j1 = 2:n # insertion sort + cc = combining_class(d[j1]) + iszero(cc) && continue # don't re-order non-combiners + for j2 = j1:-1:2 + combining_class(d[j2-1]) ≤ cc && break + d[j2-1], d[j2] = d[j2], d[j2-1] + end + end + else # avoid n^2 complexity in crazy large-n case + j = 1 + @views while j < n + j₀ = j + something(findnext(iszero ∘ combining_class, d[j+1:n], 1), n+1-j) + sort!(d[j:j₀-1], by=combining_class) + j = j₀ + end + end + + # split return statement to help type inference: + return state === nothing ? (1, n, nothing) : (1, n, state) end options = UTF8PROC_DECOMPOSE casefold && (options |= UTF8PROC_CASEFOLD) stripmark && (options |= UTF8PROC_STRIPMARK) i1,i2 = iterate(s1),iterate(s2) - d1,d2 = Vector{UInt32}(undef, 4), Vector{UInt32}(undef, 4) # codepoint buffers n1 = n2 = 0 # lengths of codepoint buffers j1 = j2 = 1 # indices in d1, d2 while true if j1 > n1 i1 === nothing && return i2 === nothing && j2 > n2 - j1, n1, i1 = decompose_next_char!(chartransform(UInt32(i1[1])), i1[2], d1, options, s1) + j1, n1, i1 = decompose_next_chars!(i1, d1, options, s1) end if j2 > n2 i2 === nothing && return false - j2, n2, i2 = decompose_next_char!(chartransform(UInt32(i2[1])), i2[2], d2, options, s2) + j2, n2, i2 = decompose_next_chars!(i2, d2, options, s2) end d1[j1] == d2[j2] || return false j1 += 1; j2 += 1 diff --git a/stdlib/Unicode/test/runtests.jl b/stdlib/Unicode/test/runtests.jl index 573d5da6167ba..5248bd1e1fd27 100644 --- a/stdlib/Unicode/test/runtests.jl +++ b/stdlib/Unicode/test/runtests.jl @@ -3,6 +3,9 @@ using Test using Unicode using Unicode: normalize, isassigned, julia_chartransform +import Random + +Random.seed!(12345) @testset "string normalization" begin # normalize (Unicode normalization etc.): @@ -455,6 +458,9 @@ end @test !Base.Unicode.isvalid(Char, overlong_char) end +# the obvious, but suboptimal, algorithm: +isequal_normalized_naive(s1, s2; kws...) = normalize(s1; kws...) == normalize(s2; kws...) + @testset "Unicode equivalence" begin @test isequal_normalized("no\u00EBl", "noe\u0308l") @test !isequal_normalized("no\u00EBl", "noe\u0308l ") @@ -466,4 +472,65 @@ end @test isequal_normalized("no\u00EBl", "noel", stripmark=true) @test isequal_normalized("no\u00EBl", "NOEL", stripmark=true, casefold=true) @test isequal_normalized("\u00B5\u0302m", "\u03BC\u0302m", chartransform=julia_chartransform) + + # issue #52408 + @testset "Sorting combining characters" begin + for str in ("\u5bc\u5b0", "j\u5ae\u5bf\u5b2\u5b4") # julia#52408 examples + @test isequal_normalized(str, normalize(str)) + end + + # first codepoint in every possible Unicode combining class + let cc_chars = UInt32[0x00000334, 0x00016ff0, 0x0000093c, 0x00003099, 0x0000094d, 0x000005b0, 0x000005b1, 0x000005b2, 0x000005b3, 0x000005b4, 0x000005b5, 0x000005b6, 0x000005b7, 0x000005b8, 0x000005b9, 0x000005bb, 0x000005bc, 0x000005bd, 0x000005bf, 0x000005c1, 0x000005c2, 0x0000fb1e, 0x0000064b, 0x0000064c, 0x0000064d, 0x00000618, 0x00000619, 0x0000061a, 0x00000651, 0x00000652, 0x00000670, 0x00000711, 0x00000c55, 0x00000c56, 0x00000e38, 0x00000e48, 0x00000eb8, 0x00000ec8, 0x00000f71, 0x00000f72, 0x00000f74, 0x00000321, 0x00001dce, 0x0000031b, 0x00001dfa, 0x00000316, 0x0000059a, 0x0000302e, 0x0001d16d, 0x000005ae, 0x00000301, 0x00000315, 0x0000035c, 0x0000035d, 0x00000345], + vowels = ['a', 'e', 'i', 'o', 'u', 'å', 'é', 'î', 'ö', 'ü'], Vowels = [vowels; uppercase.(vowels)] + function randcc(n, n_cc) # random string with lots of combining chars + buf = IOBuffer() + for _ = 1:n + print.(buf, rand(Vowels, rand(1:5))) + print.(buf, Char.(rand(cc_chars, rand(0:n_cc)))) + end + return String(take!(buf)) + end + for _ = 1:100 + s = randcc(10,10) + ns = normalize(s) + cs = normalize(s, casefold=true) + @test isequal_normalized(s, s) + if !isequal_normalized(s, ns) + @show s + end + @test isequal_normalized(s, ns) + @test isequal_normalized(cs, ns) == isequal_normalized_naive(cs, ns) + @test isequal_normalized(cs, ns, casefold=true) == + isequal_normalized_naive(cs, ns, casefold=true) + end + for _ = 1:3 + s = randcc(5,1000) # exercise sort!-based fallback + @test isequal_normalized(s, normalize(s)) + end + function randcc2(n, n_cc) # 2 strings with equivalent reordered combiners + buf1 = IOBuffer() + buf2 = IOBuffer() + p = n_cc / length(cc_chars) + for _ = 1:n + a = join(rand(Vowels, rand(1:5))) + print(buf1, a) + print(buf2, a) + + # chars from distinct combining classes + # are canonically equivalent when re-ordered + c = Random.randsubseq(cc_chars, p) + print.(buf1, Char.(Random.shuffle!(c))) + print.(buf2, Char.(Random.shuffle!(c))) + end + return String(take!(buf1)), String(take!(buf2)) + end + for _ = 1:100 + s1, s2 = randcc2(10,10) + @test isequal_normalized(s1, s2) + end + end + + # combining characters in the same class are inequivalent if re-ordered: + @test !isequal_normalized("x\u0334\u0335", "x\u0335\u0334") + end end From e38f117cfa3cff84d8b0b4caedb7b82e8eb218a3 Mon Sep 17 00:00:00 2001 From: Lionel Zoubritzky Date: Wed, 20 Dec 2023 11:17:51 +0100 Subject: [PATCH 241/413] Fix ?(#TAB method search name exploration (#52555) Fix #52551. This PR ensures that a `SomeModule.?(...#TAB` completion can only suggests method `foo` such that `SomeModule.foo` exists (by checking `isdefined(SomeModule, :foo)`). This is equivalent, I believe, to the initial implementation of https://github.com/JuliaLang/julia/pull/38791, less the bug. Now that we have #51345, we may want to relax the above condition somewhat to include public names present in modules loaded into `SomeModule`, so that, for instance, a direct completion of `?(` would include `@assume_effects`. This could be good for method exploration because even though typing `@assume_effects` with no qualification in `Main` will error, the error now includes the helpful message ``` Hint: a global variable of this name also exists in Base. ``` But that can wait for a later PR anyway, this one is just the bugfix. The bug mentioned at https://github.com/JuliaLang/julia/issues/52551#issuecomment-1858543413 dates from the initial #38791 so this could be backported as far back as v1.8. --------- Co-authored-by: Shuhei Kadowaki (cherry picked from commit a987f56bf35da093c6b93e98eea8e09dd06dcc20) --- stdlib/REPL/src/REPLCompletions.jl | 50 +++++++++++++---------------- stdlib/REPL/test/replcompletions.jl | 7 ++++ 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/stdlib/REPL/src/REPLCompletions.jl b/stdlib/REPL/src/REPLCompletions.jl index b94ea3da2890b..729334feed7c9 100644 --- a/stdlib/REPL/src/REPLCompletions.jl +++ b/stdlib/REPL/src/REPLCompletions.jl @@ -7,7 +7,7 @@ export completions, shell_completions, bslash_completions, completion_text using Core: CodeInfo, MethodInstance, CodeInstance, Const const CC = Core.Compiler using Base.Meta -using Base: propertynames, something +using Base: propertynames, something, IdSet abstract type Completion end @@ -659,6 +659,26 @@ function complete_methods(ex_org::Expr, context_module::Module=Main, shift::Bool end MAX_ANY_METHOD_COMPLETIONS::Int = 10 +function recursive_explore_names!(seen::IdSet, callee_module::Module, initial_module::Module, exploredmodules::IdSet{Module}=IdSet{Module}()) + push!(exploredmodules, callee_module) + for name in names(callee_module; all=true, imported=true) + if !Base.isdeprecated(callee_module, name) && !startswith(string(name), '#') && isdefined(initial_module, name) + func = getfield(callee_module, name) + if !isa(func, Module) + funct = Core.Typeof(func) + push!(seen, funct) + elseif isa(func, Module) && func ∉ exploredmodules + recursive_explore_names!(seen, func, initial_module, exploredmodules) + end + end + end +end +function recursive_explore_names(callee_module::Module, initial_module::Module) + seen = IdSet{Any}() + recursive_explore_names!(seen, callee_module, initial_module) + seen +end + function complete_any_methods(ex_org::Expr, callee_module::Module, context_module::Module, moreargs::Bool, shift::Bool) out = Completion[] args_ex, kwargs_ex, kwargs_flag = try @@ -674,32 +694,8 @@ function complete_any_methods(ex_org::Expr, callee_module::Module, context_modul # semicolon for the ".?(" syntax moreargs && push!(args_ex, Vararg{Any}) - seen = Base.IdSet() - for name in names(callee_module; all=true) - if !Base.isdeprecated(callee_module, name) && isdefined(callee_module, name) && !startswith(string(name), '#') - func = getfield(callee_module, name) - if !isa(func, Module) - funct = Core.Typeof(func) - if !in(funct, seen) - push!(seen, funct) - complete_methods!(out, funct, args_ex, kwargs_ex, MAX_ANY_METHOD_COMPLETIONS, false) - end - elseif callee_module === Main && isa(func, Module) - callee_module2 = func - for name in names(callee_module2) - if !Base.isdeprecated(callee_module2, name) && isdefined(callee_module2, name) && !startswith(string(name), '#') - func = getfield(callee_module, name) - if !isa(func, Module) - funct = Core.Typeof(func) - if !in(funct, seen) - push!(seen, funct) - complete_methods!(out, funct, args_ex, kwargs_ex, MAX_ANY_METHOD_COMPLETIONS, false) - end - end - end - end - end - end + for seen_name in recursive_explore_names(callee_module, callee_module) + complete_methods!(out, seen_name, args_ex, kwargs_ex, MAX_ANY_METHOD_COMPLETIONS, false) end if !shift diff --git a/stdlib/REPL/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl index 63b629c5aa784..0c0ff08f2c3f1 100644 --- a/stdlib/REPL/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -140,6 +140,10 @@ let ex = quote struct WeirdNames end Base.propertynames(::WeirdNames) = (Symbol("oh no!"), Symbol("oh yes!")) + # https://github.com/JuliaLang/julia/issues/52551#issuecomment-1858543413 + export exported_symbol + exported_symbol(::WeirdNames) = nothing + end # module CompletionFoo test_repl_comp_dict = CompletionFoo.test_dict test_repl_comp_customdict = CompletionFoo.test_customdict @@ -740,6 +744,9 @@ end #TODO: @test_nocompletion("CompletionFoo.?(3; len2=5; ") +# https://github.com/JuliaLang/julia/issues/52551 +@test !isempty(test_complete("?(")) + ################################################################# # Test method completion with varargs From 24b525d173160a2fb76b3c90e35555be9cf4cb35 Mon Sep 17 00:00:00 2001 From: N5N3 <2642243996@qq.com> Date: Wed, 20 Dec 2023 22:17:32 +0800 Subject: [PATCH 242/413] inference: fix `istuple` check in `apply_type_tfunc` (#52585) close #51927 (cherry picked from commit 58fac69cfa1277c6f9db9a5cb475d08ce267f725) --- base/compiler/tfuncs.jl | 2 +- test/compiler/inference.jl | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/base/compiler/tfuncs.jl b/base/compiler/tfuncs.jl index eae04021342d0..9dfda5f1e4eea 100644 --- a/base/compiler/tfuncs.jl +++ b/base/compiler/tfuncs.jl @@ -1731,7 +1731,7 @@ const _tvarnames = Symbol[:_A, :_B, :_C, :_D, :_E, :_F, :_G, :_H, :_I, :_J, :_K, end return allconst ? Const(ty) : Type{ty} end - istuple = isa(headtype, Type) && (headtype == Tuple) + istuple = headtype === Tuple if !istuple && !isa(headtype, UnionAll) && !isvarargtype(headtype) return Union{} end diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index cfd44967a5081..393d8cfd47548 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -5129,3 +5129,8 @@ let TV = TypeVar(:T) some = Some{Any}((TV, t)) @test abstract_call_unionall_vararg(some) isa UnionAll end + +# Issue #51927 +let 𝕃 = Core.Compiler.fallback_lattice + @test apply_type_tfunc(𝕃, Const(Tuple{Vararg{Any,N}} where N), Int) == Type{NTuple{_A, Any}} where _A +end From 1f3c4244417dfd46624cb44756c34f4299dbaa03 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Fri, 22 Dec 2023 11:09:56 +0100 Subject: [PATCH 243/413] Lowering: Insert QuoteNode for captured boxed value (#52596) `Core.Box` is not self-quoting so it should be captured in a QuoteNode. This has been benign until the improved effect system, we handle `QuoteNode` of a mutable value as a global access, whereas a direct reference to a value is treated as inaccessible memory. Fixes #52531 --------- Co-authored-by: Gabriel Baraldi Co-authored-by: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> (cherry picked from commit 1290b51a478602f4672e481ba6e5b1eed706843a) --- src/julia-syntax.scm | 2 +- test/compiler/effects.jl | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/julia-syntax.scm b/src/julia-syntax.scm index b5705c55b6e61..251a041438a6b 100644 --- a/src/julia-syntax.scm +++ b/src/julia-syntax.scm @@ -3580,7 +3580,7 @@ f(x) = yt(x) (rhs (convert-for-type-decl rhs1 (cl-convert vt fname lam #f #f #f interp opaq (table) locals) #t lam)) (ex (cond (closed `(call (core setfield!) ,(if interp - `($ ,var) + `($ (call (core QuoteNode) ,var)) (capt-var-access var fname opaq)) (inert contents) ,rhs)) diff --git a/test/compiler/effects.jl b/test/compiler/effects.jl index cab498e863985..8370cecddccad 100644 --- a/test/compiler/effects.jl +++ b/test/compiler/effects.jl @@ -1030,12 +1030,25 @@ const a52531 = Core.Ref(1) @test !Core.Compiler.is_consistent(Base.infer_effects(getref52531)) let global set_a52531!, get_a52531 - _a::Int = -1 + _a::Int = -1 set_a52531!(a::Int) = (_a = a; return get_a52531()) - get_a52531() = _a + get_a52531() = _a end @test !Core.Compiler.is_consistent(Base.infer_effects(set_a52531!, (Int,))) @test !Core.Compiler.is_consistent(Base.infer_effects(get_a52531, ())) @test get_a52531() == -1 @test set_a52531!(1) == 1 @test get_a52531() == 1 + +let + global is_initialized52531, set_initialized52531! + _is_initialized = false + set_initialized52531!(flag::Bool) = (_is_initialized = flag) + is_initialized52531() = _is_initialized +end +top_52531(_) = (set_initialized52531!(true); nothing) +@test !Core.Compiler.is_consistent(Base.infer_effects(is_initialized52531)) +@test !Core.Compiler.is_removable_if_unused(Base.infer_effects(set_initialized52531!, (Bool,))) +@test !is_initialized52531() +top_52531(0) +@test is_initialized52531() From 3fd8baea1e39db58654f29a784b1ecbc3c3f6c50 Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Sat, 23 Dec 2023 22:20:04 +0100 Subject: [PATCH 244/413] update NEWS file --- NEWS.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/NEWS.md b/NEWS.md index 576c38e79cefc..e6b2a3b950a21 100644 --- a/NEWS.md +++ b/NEWS.md @@ -32,8 +32,6 @@ Language changes Compiler/Runtime improvements ----------------------------- -* Updated GC heuristics to count allocated pages instead of object sizes ([#50144]). This should help - some programs that consumed excessive memory before. * The mark phase of the garbage collector is now multi-threaded ([#48600]). * [JITLink](https://llvm.org/docs/JITLink.html) is enabled by default on Linux aarch64 when Julia is linked to LLVM 15 or later versions ([#49745]). This should resolve many segmentation faults previously observed on this platform. @@ -158,6 +156,7 @@ Deprecated or removed [#48899]: https://github.com/JuliaLang/julia/issues/48899 [#48979]: https://github.com/JuliaLang/julia/issues/48979 [#49020]: https://github.com/JuliaLang/julia/issues/49020 +[#49052]: https://github.com/JuliaLang/julia/issues/49052 [#49110]: https://github.com/JuliaLang/julia/issues/49110 [#49266]: https://github.com/JuliaLang/julia/issues/49266 [#49405]: https://github.com/JuliaLang/julia/issues/49405 @@ -167,5 +166,4 @@ Deprecated or removed [#49745]: https://github.com/JuliaLang/julia/issues/49745 [#49795]: https://github.com/JuliaLang/julia/issues/49795 [#49959]: https://github.com/JuliaLang/julia/issues/49959 -[#50144]: https://github.com/JuliaLang/julia/issues/50144 [#50218]: https://github.com/JuliaLang/julia/issues/50218 From 3120989f39bb7ef7863c4aab8ab1227cf71eec66 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Mon, 25 Dec 2023 19:01:13 +0100 Subject: [PATCH 245/413] set VERSION to 1.10.0 (#52584) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 527d1242118b0..81c871de46b3e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.0-rc3 +1.10.0 From a2e405413cc4d7b486262d81c72f50eeaa1cc503 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Mon, 25 Dec 2023 18:21:49 +0530 Subject: [PATCH 246/413] Don't access parent of triangular matrix in powm (#52583) Since the values stored in the parent corresponding to the structural zeros of a tridiagonal matrix aren't well-defined, using it in `ldiv!` is a footgun that may lead to heisenbugs (one seen in https://buildkite.com/julialang/julia-master/builds/31285#018c7cc7-6c77-41ac-a01b-1c7d14cb1b15). This PR changes it to using the tridiagonal matrix directly in `ldiv!`, which should lead to predictable results, and be bug-free. The failing tests for #52571 pass locally with this change. (cherry picked from commit ef549aef46c52ea616d99a3717a55656894c81cf) --- stdlib/LinearAlgebra/src/triangular.jl | 8 ++++---- stdlib/LinearAlgebra/test/dense.jl | 5 +++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/stdlib/LinearAlgebra/src/triangular.jl b/stdlib/LinearAlgebra/src/triangular.jl index 07a28f7f575a0..20353d25ff9d3 100644 --- a/stdlib/LinearAlgebra/src/triangular.jl +++ b/stdlib/LinearAlgebra/src/triangular.jl @@ -1551,7 +1551,7 @@ end # Higham and Lin, "An improved Schur-Padé algorithm for fractional powers of # a matrix and their Fréchet derivatives", SIAM. J. Matrix Anal. & Appl., # 34(3), (2013) 1341–1360. -function powm!(A0::UpperTriangular{<:BlasFloat}, p::Real) +function powm!(A0::UpperTriangular, p::Real) if abs(p) >= 1 throw(ArgumentError("p must be a real number in (-1,1), got $p")) end @@ -1583,7 +1583,7 @@ function powm!(A0::UpperTriangular{<:BlasFloat}, p::Real) end copyto!(Stmp, S) mul!(S, A, c) - ldiv!(Stmp, S.data) + ldiv!(Stmp, S) c = (p - j) / (j4 - 2) for i = 1:n @@ -1591,14 +1591,14 @@ function powm!(A0::UpperTriangular{<:BlasFloat}, p::Real) end copyto!(Stmp, S) mul!(S, A, c) - ldiv!(Stmp, S.data) + ldiv!(Stmp, S) end for i = 1:n S[i, i] = S[i, i] + 1 end copyto!(Stmp, S) mul!(S, A, -p) - ldiv!(Stmp, S.data) + ldiv!(Stmp, S) for i = 1:n @inbounds S[i, i] = S[i, i] + 1 end diff --git a/stdlib/LinearAlgebra/test/dense.jl b/stdlib/LinearAlgebra/test/dense.jl index efeedf93ebd1f..ad887dd85a0d3 100644 --- a/stdlib/LinearAlgebra/test/dense.jl +++ b/stdlib/LinearAlgebra/test/dense.jl @@ -1067,6 +1067,11 @@ end end end +@testset "BigFloat triangular real power" begin + A = Float64[3 1; 0 3] + @test A^(3/4) ≈ big.(A)^(3/4) +end + @testset "diagonal integer matrix to real power" begin A = Matrix(Diagonal([1, 2, 3])) @test A^2.3 ≈ float(A)^2.3 From 5de62a42511367fd521f87224240e2e955a437a5 Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Wed, 27 Dec 2023 15:59:53 -0300 Subject: [PATCH 247/413] update --gcthreads section in command line options (#52645) Make these consistent with what's shown by `julia --help`. Fixes https://github.com/JuliaLang/www.julialang.org/issues/1997. (cherry picked from commit e7e8b8900d471f38f90d7150c5123c503aa1ac36) --- doc/man/julia.1 | 6 +++--- doc/src/manual/command-line-interface.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/man/julia.1 b/doc/man/julia.1 index fa9f641b1e76f..b112cb80d94c3 100644 --- a/doc/man/julia.1 +++ b/doc/man/julia.1 @@ -119,9 +119,9 @@ process affinity is not configured, it uses the number of CPU threads. .TP ---gcthreads -Enable n GC threads; If unspecified is set to half of the -compute worker threads. +--gcthreads=N[,M] +Use N threads for the mark phase of GC and M (0 or 1) threads for the concurrent sweeping phase of GC. +N is set to half of the number of compute threads and M is set to 0 if unspecified. .TP -p, --procs {N|auto} diff --git a/doc/src/manual/command-line-interface.md b/doc/src/manual/command-line-interface.md index e1651c61a3ec3..0210e81520998 100644 --- a/doc/src/manual/command-line-interface.md +++ b/doc/src/manual/command-line-interface.md @@ -107,7 +107,7 @@ The following is a complete list of command-line switches available when launchi |`-E`, `--print ` |Evaluate `` and display the result| |`-L`, `--load ` |Load `` immediately on all processors| |`-t`, `--threads {N\|auto}` |Enable N threads; `auto` tries to infer a useful default number of threads to use but the exact behavior might change in the future. Currently, `auto` uses the number of CPUs assigned to this julia process based on the OS-specific affinity assignment interface, if supported (Linux and Windows). If this is not supported (macOS) or process affinity is not configured, it uses the number of CPU threads.| -| `--gcthreads {N}` |Enable N GC threads; If unspecified is set to half of the compute worker threads.| +| `--gcthreads=N[,M]` |Use N threads for the mark phase of GC and M (0 or 1) threads for the concurrent sweeping phase of GC. N is set to half of the number of compute threads and M is set to 0 if unspecified.| |`-p`, `--procs {N\|auto}` |Integer value N launches N additional local worker processes; `auto` launches as many workers as the number of local CPU threads (logical cores)| |`--machine-file ` |Run processes on hosts listed in ``| |`-i` |Interactive mode; REPL runs and `isinteractive()` is true| From 79684ad60f2da0e5d38aa9e0693f77b9da202a48 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Thu, 28 Dec 2023 07:42:28 -0500 Subject: [PATCH 248/413] update nthreads info in versioninfo (#52423) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes https://github.com/JuliaLang/julia/issues/52404 @nilshg I opted to make it one line as it fits. ``` julia> versioninfo() Julia Version 1.11.0-DEV.1011 Commit bb7091c6f2* (2023-12-04 14:58 UTC) Platform Info: OS: macOS (arm64-apple-darwin23.0.0) CPU: 10 × Apple M2 Pro WORD_SIZE: 64 LLVM: libLLVM-15.0.7 (ORCJIT, apple-m1) Threads: 1 default, 0 interactive, 1 GC (on 6 virtual cores) Environment: JULIA_EDITOR = code ``` (cherry picked from commit e96c13aa5b2e2b41e618ac009d43e1fdea0a70d4) --- stdlib/InteractiveUtils/src/InteractiveUtils.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/stdlib/InteractiveUtils/src/InteractiveUtils.jl b/stdlib/InteractiveUtils/src/InteractiveUtils.jl index 6cbfc23ac905d..f4557689122c6 100644 --- a/stdlib/InteractiveUtils/src/InteractiveUtils.jl +++ b/stdlib/InteractiveUtils/src/InteractiveUtils.jl @@ -161,7 +161,8 @@ function versioninfo(io::IO=stdout; verbose::Bool=false) println(io, " WORD_SIZE: ", Sys.WORD_SIZE) println(io, " LIBM: ",Base.libm_name) println(io, " LLVM: libLLVM-",Base.libllvm_version," (", Sys.JIT, ", ", Sys.CPU_NAME, ")") - println(io, " Threads: ", Threads.maxthreadid(), " on ", Sys.CPU_THREADS, " virtual cores") + println(io, """Threads: $(Threads.nthreads(:default)) default, $(Threads.nthreads(:interactive)) interactive, \ + $(Threads.ngcthreads()) GC (on $(Sys.CPU_THREADS) virtual cores)""") function is_nonverbose_env(k::String) return occursin(r"^JULIA_|^DYLD_|^LD_", k) From 6eb535dc97dfc6561157a4edb85274728c63b3a2 Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Thu, 4 Jan 2024 16:51:49 +0100 Subject: [PATCH 249/413] inference: Guard TypeVar special case against vararg (#52721) Fix #52613 by making the TypeVar special case in inference check for vararg first. There's nothing the special case can really do with vararg anyway, so fall back to the ordinary abstract call handling. --- base/compiler/abstractinterpretation.jl | 4 ++-- test/compiler/inference.jl | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 0ef21bc28fb50..58002602d95a5 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -2021,10 +2021,10 @@ function abstract_call_known(interp::AbstractInterpreter, @nospecialize(f), elseif isa(f, Core.OpaqueClosure) # calling an OpaqueClosure about which we have no information returns no information return CallMeta(typeof(f).parameters[2], Effects(), NoCallInfo()) - elseif f === TypeVar + elseif f === TypeVar && !isvarargtype(argtypes[end]) # Manually look through the definition of TypeVar to # make sure to be able to get `PartialTypeVar`s out. - (la < 2 || la > 4) && return CallMeta(Bottom, EFFECTS_THROWS, NoCallInfo()) + 2 ≤ la ≤ 4 || return CallMeta(Bottom, EFFECTS_THROWS, NoCallInfo()) n = argtypes[2] ub_var = Const(Any) lb_var = Const(Union{}) diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index 393d8cfd47548..cd883bb70884e 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -5134,3 +5134,6 @@ end let 𝕃 = Core.Compiler.fallback_lattice @test apply_type_tfunc(𝕃, Const(Tuple{Vararg{Any,N}} where N), Int) == Type{NTuple{_A, Any}} where _A end + +# Issue #52613 +@test (code_typed((Any,)) do x; TypeVar(x...); end)[1][2] === TypeVar From 6a107d082cd403fbb42cd7585acc021be39611e3 Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Sat, 6 Jan 2024 00:09:43 -0600 Subject: [PATCH 250/413] Use `jl_types_egal` in `equiv_field_types` (#52748) Fixes #52686 Fixes https://github.com/timholy/Revise.jl/issues/770 --------- Co-authored-by: Jameson Nash Co-authored-by: Kristoffer Carlsson Co-authored-by: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> --- src/builtins.c | 2 +- test/core.jl | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/builtins.c b/src/builtins.c index e2169abb704fc..6d32c439d5b6e 100644 --- a/src/builtins.c +++ b/src/builtins.c @@ -1678,7 +1678,7 @@ static int equiv_field_types(jl_value_t *old, jl_value_t *ft) jl_value_t *ta = jl_svecref(old, i); jl_value_t *tb = jl_svecref(ft, i); if (jl_has_free_typevars(ta)) { - if (!jl_has_free_typevars(tb) || !jl_egal(ta, tb)) + if (!jl_has_free_typevars(tb) || !jl_types_egal(ta, tb)) return 0; } else if (jl_has_free_typevars(tb) || jl_typetagof(ta) != jl_typetagof(tb) || diff --git a/test/core.jl b/test/core.jl index 0e58b7e157fde..34d0e762e2ec1 100644 --- a/test/core.jl +++ b/test/core.jl @@ -107,6 +107,21 @@ let abcd = ABCDconst(1, 2, 3, 4) abcd.d = nothing) @test (1, 2, "not constant", 4) === (abcd.a, abcd.b, abcd.c, abcd.d) end +# Issue #52686 +struct A52686{T} end +struct B52686{T, S} + a::A52686{<:T} +end +function func52686() + @eval begin + struct A52686{T} end + struct B52686{T, S} + a::A52686{<:T} + end + end + return true +end +@test func52686() # test `===` handling null pointer in struct #44712 struct N44712 From 5c0a2a61cbc182baccba60313565ead01f179ef0 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Sun, 7 Jan 2024 19:26:18 +0900 Subject: [PATCH 251/413] release 1.10: backport the lattice fix for array op type checks (#52773) (#52774) --- .../compiler/ssair/EscapeAnalysis/EscapeAnalysis.jl | 4 ++-- base/compiler/tfuncs.jl | 13 +++++++------ 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/base/compiler/ssair/EscapeAnalysis/EscapeAnalysis.jl b/base/compiler/ssair/EscapeAnalysis/EscapeAnalysis.jl index 2469507fd3699..a7778f0ef1381 100644 --- a/base/compiler/ssair/EscapeAnalysis/EscapeAnalysis.jl +++ b/base/compiler/ssair/EscapeAnalysis/EscapeAnalysis.jl @@ -1615,7 +1615,7 @@ function escape_builtin!(::typeof(arrayref), astate::AnalysisState, pc::Int, arg argtypes = Any[argextype(args[i], astate.ir) for i in 2:length(args)] boundcheckt = argtypes[1] aryt = argtypes[2] - if !array_builtin_common_typecheck(boundcheckt, aryt, argtypes, 3) + if !array_builtin_common_typecheck(𝕃ₒ, boundcheckt, aryt, argtypes, 3) add_thrown_escapes!(astate, pc, args, 2) end ary = args[3] @@ -1679,7 +1679,7 @@ function escape_builtin!(::typeof(arrayset), astate::AnalysisState, pc::Int, arg boundcheckt = argtypes[1] aryt = argtypes[2] valt = argtypes[3] - if !(array_builtin_common_typecheck(boundcheckt, aryt, argtypes, 4) && + if !(array_builtin_common_typecheck(𝕃ₒ, boundcheckt, aryt, argtypes, 4) && arrayset_typecheck(aryt, valt)) add_thrown_escapes!(astate, pc, args, 2) end diff --git a/base/compiler/tfuncs.jl b/base/compiler/tfuncs.jl index 9dfda5f1e4eea..708db9c98d814 100644 --- a/base/compiler/tfuncs.jl +++ b/base/compiler/tfuncs.jl @@ -2034,12 +2034,12 @@ function array_type_undefable(@nospecialize(arytype)) end end -function array_builtin_common_nothrow(argtypes::Vector{Any}, isarrayref::Bool) +function array_builtin_common_nothrow(𝕃::AbstractLattice, argtypes::Vector{Any}, isarrayref::Bool) first_idx_idx = isarrayref ? 3 : 4 length(argtypes) ≥ first_idx_idx || return false boundscheck = argtypes[1] arytype = argtypes[2] - array_builtin_common_typecheck(boundscheck, arytype, argtypes, first_idx_idx) || return false + array_builtin_common_typecheck(𝕃, boundscheck, arytype, argtypes, first_idx_idx) || return false if isarrayref # If we could potentially throw undef ref errors, bail out now. arytype = widenconst(arytype) @@ -2056,8 +2056,9 @@ function array_builtin_common_nothrow(argtypes::Vector{Any}, isarrayref::Bool) return false end -@nospecs function array_builtin_common_typecheck(boundscheck, arytype, - argtypes::Vector{Any}, first_idx_idx::Int) +@nospecs function array_builtin_common_typecheck(𝕃::AbstractLattice, + boundscheck, arytype, argtypes::Vector{Any}, first_idx_idx::Int) + ⊑ = Core.Compiler.:⊑(𝕃) (boundscheck ⊑ Bool && arytype ⊑ Array) || return false for i = first_idx_idx:length(argtypes) argtypes[i] ⊑ Int || return false @@ -2080,11 +2081,11 @@ end @nospecs function _builtin_nothrow(𝕃::AbstractLattice, f, argtypes::Vector{Any}, rt) ⊑ = Core.Compiler.:⊑(𝕃) if f === arrayset - array_builtin_common_nothrow(argtypes, #=isarrayref=#false) || return false + array_builtin_common_nothrow(𝕃, argtypes, #=isarrayref=#false) || return false # Additionally check element type compatibility return arrayset_typecheck(argtypes[2], argtypes[3]) elseif f === arrayref || f === const_arrayref - return array_builtin_common_nothrow(argtypes, #=isarrayref=#true) + return array_builtin_common_nothrow(𝕃, argtypes, #=isarrayref=#true) elseif f === Core._expr length(argtypes) >= 1 || return false return argtypes[1] ⊑ Symbol From fd13cf006733b650938319a4772885909bc8da5e Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki Date: Thu, 11 Jan 2024 17:52:56 +0900 Subject: [PATCH 252/413] effects: fix #52843, account for mutable values directly embedded to IR Fixes another variant of #52531. --- base/compiler/abstractinterpretation.jl | 12 ++++++------ test/compiler/effects.jl | 6 ++++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 58002602d95a5..9acddad45721a 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -2267,11 +2267,7 @@ function abstract_eval_value_expr(interp::AbstractInterpreter, e::Expr, vtypes:: end function abstract_eval_special_value(interp::AbstractInterpreter, @nospecialize(e), vtypes::Union{VarTable,Nothing}, sv::AbsIntState) - if isa(e, QuoteNode) - merge_effects!(interp, sv, Effects(EFFECTS_TOTAL; - inaccessiblememonly = is_mutation_free_argtype(typeof(e.value)) ? ALWAYS_TRUE : ALWAYS_FALSE)) - return Const(e.value) - elseif isa(e, SSAValue) + if isa(e, SSAValue) return abstract_eval_ssavalue(e, sv) elseif isa(e, SlotNumber) if vtypes !== nothing @@ -2293,7 +2289,11 @@ function abstract_eval_special_value(interp::AbstractInterpreter, @nospecialize( elseif isa(e, GlobalRef) return abstract_eval_globalref(interp, e, sv) end - + if isa(e, QuoteNode) + e = e.value + end + merge_effects!(interp, sv, Effects(EFFECTS_TOTAL; + inaccessiblememonly = is_mutation_free_argtype(typeof(e)) ? ALWAYS_TRUE : ALWAYS_FALSE)) return Const(e) end diff --git a/test/compiler/effects.jl b/test/compiler/effects.jl index 8370cecddccad..6ad9ad0ba4f8a 100644 --- a/test/compiler/effects.jl +++ b/test/compiler/effects.jl @@ -1052,3 +1052,9 @@ top_52531(_) = (set_initialized52531!(true); nothing) @test !is_initialized52531() top_52531(0) @test is_initialized52531() + +const ref52843 = Ref{Int}() +@eval func52843() = ($ref52843[] = 1; nothing) +@test !Core.Compiler.is_foldable(Base.infer_effects(func52843)) +let; Base.Experimental.@force_compile; func52843(); end +@test ref52843[] == 1 From 0cea48eb21520bc95aafcc8c868482abc4e73bed Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Fri, 12 Jan 2024 22:27:05 -0500 Subject: [PATCH 253/413] change Downloads branch to release-1.10 --- stdlib/Downloads.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/Downloads.version b/stdlib/Downloads.version index c6db08779e947..0320fb2c09c0e 100644 --- a/stdlib/Downloads.version +++ b/stdlib/Downloads.version @@ -1,4 +1,4 @@ -DOWNLOADS_BRANCH = master +DOWNLOADS_BRANCH = release-1.10 DOWNLOADS_SHA1 = f97c72fbd726e208a04c53791b35cc34c747569f DOWNLOADS_GIT_URL := https://github.com/JuliaLang/Downloads.jl.git DOWNLOADS_TAR_URL = https://api.github.com/repos/JuliaLang/Downloads.jl/tarball/$1 From df9062baa4ae959773705d67152263ff49fec9ce Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Sat, 13 Jan 2024 17:48:12 +0900 Subject: [PATCH 254/413] lowering: remove `QuoteNode` wrapping for captured variables (#52878) Issues like #52531 were more broadly fixed by #52856. This commit partially reverts #52596, while leaving the added tests. --- src/julia-syntax.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/julia-syntax.scm b/src/julia-syntax.scm index 251a041438a6b..b5705c55b6e61 100644 --- a/src/julia-syntax.scm +++ b/src/julia-syntax.scm @@ -3580,7 +3580,7 @@ f(x) = yt(x) (rhs (convert-for-type-decl rhs1 (cl-convert vt fname lam #f #f #f interp opaq (table) locals) #t lam)) (ex (cond (closed `(call (core setfield!) ,(if interp - `($ (call (core QuoteNode) ,var)) + `($ ,var) (capt-var-access var fname opaq)) (inert contents) ,rhs)) From 813bfacfbe59a8a5656432e32508870f6482d87b Mon Sep 17 00:00:00 2001 From: Nicholas Bauer Date: Sat, 13 Jan 2024 21:54:05 -0500 Subject: [PATCH 255/413] Revert inlined method signature stacktrace lookup code (#52754) The fallback code that was written for #41099 is causing unintended issues with some inlined stack frames (one previous #51405, new #52709), since the main piece, linetable storage and lookup, was removed in #50546. Probably better to strip it all back to how it was previously, until it can all be revisited more fully. Should be backported to 1.10. --- base/stacktraces.jl | 99 +-------------------------------------------- 1 file changed, 2 insertions(+), 97 deletions(-) diff --git a/base/stacktraces.jl b/base/stacktraces.jl index bb70b7ea1c099..e82fd8118b2d7 100644 --- a/base/stacktraces.jl +++ b/base/stacktraces.jl @@ -97,87 +97,6 @@ function hash(frame::StackFrame, h::UInt) return h end -get_inlinetable(::Any) = nothing -function get_inlinetable(mi::MethodInstance) - isdefined(mi, :def) && mi.def isa Method && isdefined(mi, :cache) && isdefined(mi.cache, :inferred) && - mi.cache.inferred !== nothing || return nothing - linetable = ccall(:jl_uncompress_ir, Any, (Any, Any, Any), mi.def, mi.cache, mi.cache.inferred).linetable - return filter!(x -> x.inlined_at > 0, linetable) -end - -get_method_instance_roots(::Any) = nothing -function get_method_instance_roots(mi::Union{Method, MethodInstance}) - m = mi isa MethodInstance ? mi.def : mi - m isa Method && isdefined(m, :roots) || return nothing - return filter(x -> x isa MethodInstance, m.roots) -end - -function lookup_inline_frame_info(func::Symbol, file::Symbol, linenum::Int, inlinetable::Vector{Core.LineInfoNode}) - #REPL frames and some base files lack this prefix while others have it; should fix? - filestripped = Symbol(lstrip(string(file), ('.', '\\', '/'))) - linfo = nothing - #= - Some matching entries contain the MethodInstance directly. - Other matching entries contain only a Method or Symbol (function name); such entries - are located after the entry with the MethodInstance, so backtracking is required. - If backtracking fails, the Method or Module is stored for return, but we continue - the search in case a MethodInstance is found later. - TODO: If a backtrack has failed, do we need to backtrack again later if another Method - or Symbol match is found? Or can a limit on the subsequent backtracks be placed? - =# - for (i, line) in enumerate(inlinetable) - Base.IRShow.method_name(line) === func && line.file ∈ (file, filestripped) && line.line == linenum || continue - if line.method isa MethodInstance - linfo = line.method - break - elseif line.method isa Method || line.method isa Symbol - linfo = line.method isa Method ? line.method : line.module - # backtrack to find the matching MethodInstance, if possible - for j in (i - 1):-1:1 - nextline = inlinetable[j] - nextline.inlined_at == line.inlined_at && Base.IRShow.method_name(line) === Base.IRShow.method_name(nextline) && line.file === nextline.file || break - if nextline.method isa MethodInstance - linfo = nextline.method - break - end - end - end - end - return linfo -end - -function lookup_inline_frame_info(func::Symbol, file::Symbol, miroots::Vector{Any}) - # REPL frames and some base files lack this prefix while others have it; should fix? - filestripped = Symbol(lstrip(string(file), ('.', '\\', '/'))) - matches = filter(miroots) do x - x.def isa Method || return false - m = x.def::Method - return m.name == func && m.file ∈ (file, filestripped) - end - if length(matches) > 1 - # ambiguous, check if method is same and return that instead - all_matched = true - for m in matches - all_matched = m.def.line == matches[1].def.line && - m.def.module == matches[1].def.module - all_matched || break - end - if all_matched - return matches[1].def - end - # all else fails, return module if they match, or give up - all_matched = true - for m in matches - all_matched = m.def.module == matches[1].def.module - all_matched || break - end - return all_matched ? matches[1].def.module : nothing - elseif length(matches) == 1 - return matches[1] - end - return nothing -end - """ lookup(pointer::Ptr{Cvoid}) -> Vector{StackFrame} @@ -189,25 +108,11 @@ Base.@constprop :none function lookup(pointer::Ptr{Cvoid}) infos = ccall(:jl_lookup_code_address, Any, (Ptr{Cvoid}, Cint), pointer, false)::Core.SimpleVector pointer = convert(UInt64, pointer) isempty(infos) && return [StackFrame(empty_sym, empty_sym, -1, nothing, true, false, pointer)] # this is equal to UNKNOWN - parent_linfo = infos[end][4] - inlinetable = get_inlinetable(parent_linfo) - miroots = inlinetable === nothing ? get_method_instance_roots(parent_linfo) : nothing # fallback if linetable missing res = Vector{StackFrame}(undef, length(infos)) - for i in reverse(1:length(infos)) + for i in 1:length(infos) info = infos[i]::Core.SimpleVector @assert(length(info) == 6) - func = info[1]::Symbol - file = info[2]::Symbol - linenum = info[3]::Int - linfo = info[4] - if i < length(infos) - if inlinetable !== nothing - linfo = lookup_inline_frame_info(func, file, linenum, inlinetable) - elseif miroots !== nothing - linfo = lookup_inline_frame_info(func, file, miroots) - end - end - res[i] = StackFrame(func, file, linenum, linfo, info[5]::Bool, info[6]::Bool, pointer) + res[i] = StackFrame(info[1]::Symbol, info[2]::Symbol, info[3]::Int, info[4], info[5]::Bool, info[6]::Bool, pointer) end return res end From e5ccc447ccbb15a80a1491fd4337b1c0239b405c Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Tue, 16 Jan 2024 10:15:22 +0900 Subject: [PATCH 256/413] inference: always bail out const-prop' with non-const result limited (#52836) Investigating into #52763, I've found that `AbstractInterpreters` which enables the `aggressive_constprop` option, such as `REPLInterpreter`, might perform const-prop' even if the result of a non-const call is `LimitedAccuracy`. This can lead to an unintended infinite loop with a custom aggressive const-prop' implementation. This commit restricts const-prop' for such cases where the non-const call result is limited to avoid the issue. This fix is conservative, but given that accurate inference is mostly impossible when there are unresolvable cycles (which is indicated by limited result), aggressive const-prop' isn't necessary for such cases, and I don't anticipate this leading to any obvious regression. fix #52763 --- base/compiler/abstractinterpretation.jl | 54 +++++++++++++------------ test/compiler/inference.jl | 13 +++++- 2 files changed, 41 insertions(+), 26 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 9acddad45721a..ab1d8c7c570f9 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -785,11 +785,7 @@ end function abstract_call_method_with_const_args(interp::AbstractInterpreter, result::MethodCallResult, @nospecialize(f), arginfo::ArgInfo, si::StmtInfo, match::MethodMatch, sv::AbsIntState, invokecall::Union{Nothing,InvokeCall}=nothing) - if !const_prop_enabled(interp, sv, match) - return nothing - end - if bail_out_const_call(interp, result, si) - add_remark!(interp, sv, "[constprop] No more information to be gained") + if !const_prop_enabled(interp, match, sv) || bail_out_const_call(interp, result, si, sv) return nothing end eligibility = concrete_eval_eligible(interp, f, result, arginfo, sv) @@ -822,7 +818,7 @@ function abstract_call_method_with_const_args(interp::AbstractInterpreter, return const_prop_call(interp, mi, result, arginfo, sv, concrete_eval_result) end -function const_prop_enabled(interp::AbstractInterpreter, sv::AbsIntState, match::MethodMatch) +function const_prop_enabled(interp::AbstractInterpreter, match::MethodMatch, sv::AbsIntState) if !InferenceParams(interp).ipo_constant_propagation add_remark!(interp, sv, "[constprop] Disabled by parameter") return false @@ -834,9 +830,11 @@ function const_prop_enabled(interp::AbstractInterpreter, sv::AbsIntState, match: return true end -function bail_out_const_call(interp::AbstractInterpreter, result::MethodCallResult, si::StmtInfo) +function bail_out_const_call(interp::AbstractInterpreter, result::MethodCallResult, + si::StmtInfo, sv::AbsIntState) if is_removable_if_unused(result.effects) if isa(result.rt, Const) || call_result_unused(si) + add_remark!(interp, sv, "[constprop] No more information to be gained (const)") return true end end @@ -937,7 +935,10 @@ function maybe_get_const_prop_profitable(interp::AbstractInterpreter, match::MethodMatch, sv::AbsIntState) method = match.method force = force_const_prop(interp, f, method) - force || const_prop_entry_heuristic(interp, result, si, sv) || return nothing + if !const_prop_entry_heuristic(interp, result, si, sv, force) + # N.B. remarks are emitted within `const_prop_entry_heuristic` + return nothing + end nargs::Int = method.nargs method.isva && (nargs -= 1) length(arginfo.argtypes) < nargs && return nothing @@ -964,8 +965,17 @@ function maybe_get_const_prop_profitable(interp::AbstractInterpreter, return mi end -function const_prop_entry_heuristic(interp::AbstractInterpreter, result::MethodCallResult, si::StmtInfo, sv::AbsIntState) - if call_result_unused(si) && result.edgecycle +function const_prop_entry_heuristic(interp::AbstractInterpreter, result::MethodCallResult, + si::StmtInfo, sv::AbsIntState, force::Bool) + if result.rt isa LimitedAccuracy + # optimizations like inlining are disabled for limited frames, + # thus there won't be much benefit in constant-prop' here + # N.B. don't allow forced constprop' for safety (xref #52763) + add_remark!(interp, sv, "[constprop] Disabled by entry heuristic (limited accuracy)") + return false + elseif force + return true + elseif call_result_unused(si) && result.edgecycle add_remark!(interp, sv, "[constprop] Disabled by entry heuristic (edgecycle with unused result)") return false end @@ -978,27 +988,21 @@ function const_prop_entry_heuristic(interp::AbstractInterpreter, result::MethodC if rt === Bottom add_remark!(interp, sv, "[constprop] Disabled by entry heuristic (erroneous result)") return false - else - return true end + return true elseif isa(rt, PartialStruct) || isa(rt, InterConditional) || isa(rt, InterMustAlias) # could be improved to `Const` or a more precise wrapper return true - elseif isa(rt, LimitedAccuracy) - # optimizations like inlining are disabled for limited frames, - # thus there won't be much benefit in constant-prop' here - add_remark!(interp, sv, "[constprop] Disabled by entry heuristic (limited accuracy)") - return false - else - if isa(rt, Const) - if !is_nothrow(result.effects) - # Could still be improved to Bottom (or at least could see the effects improved) - return true - end + elseif isa(rt, Const) + if is_nothrow(result.effects) + add_remark!(interp, sv, "[constprop] Disabled by entry heuristic (nothrow const)") + return false end - add_remark!(interp, sv, "[constprop] Disabled by entry heuristic (unimprovable result)") - return false + # Could still be improved to Bottom (or at least could see the effects improved) + return true end + add_remark!(interp, sv, "[constprop] Disabled by entry heuristic (unimprovable result)") + return false end # determines heuristically whether if constant propagation can be worthwhile diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index cd883bb70884e..0fbf4e9b0fd7d 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -4845,10 +4845,21 @@ g() = empty_nt_values(Base.inferencebarrier(Tuple{})) # This is somewhat sensitive to the exact recursion level that inference is willing to do, but the intention # is to test the case where inference limited a recursion, but then a forced constprop nevertheless managed # to terminate the call. +@newinterp RecurseInterpreter +let CC = Core.Compiler + function CC.const_prop_entry_heuristic(interp::RecurseInterpreter, result::CC.MethodCallResult, + si::CC.StmtInfo, sv::CC.AbsIntState, force::Bool) + if result.rt isa CC.LimitedAccuracy + return force # allow forced constprop to recurse into unresolved cycles + end + return @invoke CC.const_prop_entry_heuristic(interp::CC.AbstractInterpreter, result::CC.MethodCallResult, + si::CC.StmtInfo, sv::CC.AbsIntState, force::Bool) + end +end Base.@constprop :aggressive type_level_recurse1(x...) = x[1] == 2 ? 1 : (length(x) > 100 ? x : type_level_recurse2(x[1] + 1, x..., x...)) Base.@constprop :aggressive type_level_recurse2(x...) = type_level_recurse1(x...) type_level_recurse_entry() = Val{type_level_recurse1(1)}() -@test Base.return_types(type_level_recurse_entry, ()) |> only == Val{1} +@test only(Base.return_types(type_level_recurse_entry, (); interp=RecurseInterpreter())) == Val{1} # Test that inference doesn't give up if it can potentially refine effects, # even if the return type is Any. From aaaf5de5e690f782c22d42109cdf70387c1fa99b Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Tue, 16 Jan 2024 05:10:18 -0500 Subject: [PATCH 257/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20Downloads=20stdlib=20from=20f97c72f=20to=20ead2?= =?UTF-8?q?89a=20(#52886)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stdlib: Downloads URL: https://github.com/JuliaLang/Downloads.jl.git Stdlib branch: release-1.10 Julia branch: backports-release-1.10 Old commit: f97c72f New commit: ead289a Julia version: 1.10.0 Downloads version: 1.6.0(It's okay that it doesn't match) Bump invoked by: @IanButterworth Powered by: [BumpStdlibs.jl](https://github.com/JuliaLang/BumpStdlibs.jl) Diff: https://github.com/JuliaLang/Downloads.jl/compare/f97c72fbd726e208a04c53791b35cc34c747569f...ead289a7f1be7689738aaea9b12d919424a106ef ``` $ git log --oneline f97c72f..ead289a ead289a Close Multi timers atexit. Add 1.6 CI (#234) 8a614d5 Skip flakey "concurrent requests" tests on windows (#228) 246504e add a small precompile workload (#226) 3ed0f08 Document how to bypass the 20-second timeout (#222) ``` Co-authored-by: Dilum Aluthge --- .../md5 | 1 + .../sha512 | 1 + .../md5 | 1 - .../sha512 | 1 - stdlib/Downloads.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/Downloads-ead289a7f1be7689738aaea9b12d919424a106ef.tar.gz/md5 create mode 100644 deps/checksums/Downloads-ead289a7f1be7689738aaea9b12d919424a106ef.tar.gz/sha512 delete mode 100644 deps/checksums/Downloads-f97c72fbd726e208a04c53791b35cc34c747569f.tar.gz/md5 delete mode 100644 deps/checksums/Downloads-f97c72fbd726e208a04c53791b35cc34c747569f.tar.gz/sha512 diff --git a/deps/checksums/Downloads-ead289a7f1be7689738aaea9b12d919424a106ef.tar.gz/md5 b/deps/checksums/Downloads-ead289a7f1be7689738aaea9b12d919424a106ef.tar.gz/md5 new file mode 100644 index 0000000000000..f1a816385c931 --- /dev/null +++ b/deps/checksums/Downloads-ead289a7f1be7689738aaea9b12d919424a106ef.tar.gz/md5 @@ -0,0 +1 @@ +da2061b0d47363871498a106db7dd87c diff --git a/deps/checksums/Downloads-ead289a7f1be7689738aaea9b12d919424a106ef.tar.gz/sha512 b/deps/checksums/Downloads-ead289a7f1be7689738aaea9b12d919424a106ef.tar.gz/sha512 new file mode 100644 index 0000000000000..746d7d92d77be --- /dev/null +++ b/deps/checksums/Downloads-ead289a7f1be7689738aaea9b12d919424a106ef.tar.gz/sha512 @@ -0,0 +1 @@ +15a82d0afd7661a0d003af8ff23e92982221e53d886239550e05a4202a646f13f00d86325023f1dccc9dbb871152a54e4977fd5be3c5bf3aa27e5439e1b265df diff --git a/deps/checksums/Downloads-f97c72fbd726e208a04c53791b35cc34c747569f.tar.gz/md5 b/deps/checksums/Downloads-f97c72fbd726e208a04c53791b35cc34c747569f.tar.gz/md5 deleted file mode 100644 index 4e70641a4a08b..0000000000000 --- a/deps/checksums/Downloads-f97c72fbd726e208a04c53791b35cc34c747569f.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -fa2c90db0e7aa73186c491aa2f03bb2b diff --git a/deps/checksums/Downloads-f97c72fbd726e208a04c53791b35cc34c747569f.tar.gz/sha512 b/deps/checksums/Downloads-f97c72fbd726e208a04c53791b35cc34c747569f.tar.gz/sha512 deleted file mode 100644 index 3f54f39d35ac6..0000000000000 --- a/deps/checksums/Downloads-f97c72fbd726e208a04c53791b35cc34c747569f.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -d36737b946af5e720402ce4f25e4c69c740bdbdc174385d6448c3660b26fffe34c14af7c4dd4d26ad864ad12771cabdf922c8b3cf4423167a46cdf3001ede125 diff --git a/stdlib/Downloads.version b/stdlib/Downloads.version index 0320fb2c09c0e..5196584fb229c 100644 --- a/stdlib/Downloads.version +++ b/stdlib/Downloads.version @@ -1,4 +1,4 @@ DOWNLOADS_BRANCH = release-1.10 -DOWNLOADS_SHA1 = f97c72fbd726e208a04c53791b35cc34c747569f +DOWNLOADS_SHA1 = ead289a7f1be7689738aaea9b12d919424a106ef DOWNLOADS_GIT_URL := https://github.com/JuliaLang/Downloads.jl.git DOWNLOADS_TAR_URL = https://api.github.com/repos/JuliaLang/Downloads.jl/tarball/$1 From 788eff9a609edc840ca8f05d4e6932b6f6afc20a Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Tue, 16 Jan 2024 18:16:45 -0300 Subject: [PATCH 258/413] Correctly port realloc from 1.9 to 1.10 (#52929) I think when we backed off the new heuristics for 1.10 this got missed in the meanwhile. Should fix https://github.com/JuliaLang/julia/issues/52923 --- src/gc.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gc.c b/src/gc.c index daf00a441fae0..beb4b7e96f1a8 100644 --- a/src/gc.c +++ b/src/gc.c @@ -3729,7 +3729,10 @@ JL_DLLEXPORT void *jl_gc_counted_realloc_with_old_size(void *p, size_t old, size if (data != NULL && pgcstack != NULL && ct->world_age) { jl_ptls_t ptls = ct->ptls; maybe_collect(ptls); - if (!(sz < old)) + if (sz < old) + jl_atomic_store_relaxed(&ptls->gc_num.freed, + jl_atomic_load_relaxed(&ptls->gc_num.freed) + (old - sz)); + else jl_atomic_store_relaxed(&ptls->gc_num.allocd, jl_atomic_load_relaxed(&ptls->gc_num.allocd) + (sz - old)); jl_atomic_store_relaxed(&ptls->gc_num.realloc, @@ -3856,7 +3859,10 @@ static void *gc_managed_realloc_(jl_ptls_t ptls, void *d, size_t sz, size_t olds ptls->gc_cache.perm_scanned_bytes += allocsz - oldsz; inc_live_bytes(allocsz - oldsz); } - else if (!(allocsz < oldsz)) + else if (allocsz < oldsz) + jl_atomic_store_relaxed(&ptls->gc_num.freed, + jl_atomic_load_relaxed(&ptls->gc_num.freed) + (oldsz - allocsz)); + else jl_atomic_store_relaxed(&ptls->gc_num.allocd, jl_atomic_load_relaxed(&ptls->gc_num.allocd) + (allocsz - oldsz)); jl_atomic_store_relaxed(&ptls->gc_num.realloc, From f9c2461a70b6c51b1363652d709da396d9fed0e8 Mon Sep 17 00:00:00 2001 From: N5N3 <2642243996@qq.com> Date: Sun, 19 Nov 2023 02:00:46 +0800 Subject: [PATCH 259/413] Widen diagonal var during `Type` unwrapping in `instanceof_tfunc` (#52228) --- base/compiler/tfuncs.jl | 14 ++- base/essentials.jl | 5 + src/subtype.c | 206 +++++++++++++++++++++++++++++++++++++ test/compiler/inference.jl | 13 +++ test/core.jl | 11 ++ 5 files changed, 245 insertions(+), 4 deletions(-) diff --git a/base/compiler/tfuncs.jl b/base/compiler/tfuncs.jl index 708db9c98d814..24b4c00250b80 100644 --- a/base/compiler/tfuncs.jl +++ b/base/compiler/tfuncs.jl @@ -95,7 +95,7 @@ add_tfunc(throw, 1, 1, @nospecs((𝕃::AbstractLattice, x)->Bottom), 0) # if isexact is false, the actual runtime type may (will) be a subtype of t # if isconcrete is true, the actual runtime type is definitely concrete (unreachable if not valid as a typeof) # if istype is true, the actual runtime value will definitely be a type (e.g. this is false for Union{Type{Int}, Int}) -function instanceof_tfunc(@nospecialize(t)) +function instanceof_tfunc(@nospecialize(t), @nospecialize(troot) = t) if isa(t, Const) if isa(t.val, Type) && valid_as_lattice(t.val) return t.val, true, isconcretetype(t.val), true @@ -103,6 +103,7 @@ function instanceof_tfunc(@nospecialize(t)) return Bottom, true, false, false # runtime throws on non-Type end t = widenconst(t) + troot = widenconst(troot) if t === Bottom return Bottom, true, true, false # runtime unreachable elseif t === typeof(Bottom) || !hasintersect(t, Type) @@ -110,10 +111,15 @@ function instanceof_tfunc(@nospecialize(t)) elseif isType(t) tp = t.parameters[1] valid_as_lattice(tp) || return Bottom, true, false, false # runtime unreachable / throws on non-Type + if troot isa UnionAll + # Free `TypeVar`s inside `Type` has violated the "diagonal" rule. + # Widen them before `UnionAll` rewraping to relax concrete constraint. + tp = widen_diagonal(tp, troot) + end return tp, !has_free_typevars(tp), isconcretetype(tp), true elseif isa(t, UnionAll) t′ = unwrap_unionall(t) - t′′, isexact, isconcrete, istype = instanceof_tfunc(t′) + t′′, isexact, isconcrete, istype = instanceof_tfunc(t′, rewrap_unionall(t, troot)) tr = rewrap_unionall(t′′, t) if t′′ isa DataType && t′′.name !== Tuple.name && !has_free_typevars(tr) # a real instance must be within the declared bounds of the type, @@ -128,8 +134,8 @@ function instanceof_tfunc(@nospecialize(t)) end return tr, isexact, isconcrete, istype elseif isa(t, Union) - ta, isexact_a, isconcrete_a, istype_a = instanceof_tfunc(t.a) - tb, isexact_b, isconcrete_b, istype_b = instanceof_tfunc(t.b) + ta, isexact_a, isconcrete_a, istype_a = instanceof_tfunc(t.a, troot) + tb, isexact_b, isconcrete_b, istype_b = instanceof_tfunc(t.b, troot) isconcrete = isconcrete_a && isconcrete_b istype = istype_a && istype_b # most users already handle the Union case, so here we assume that diff --git a/base/essentials.jl b/base/essentials.jl index ad6e02cab145c..f7c2a1429e374 100644 --- a/base/essentials.jl +++ b/base/essentials.jl @@ -411,6 +411,11 @@ function rename_unionall(@nospecialize(u)) return UnionAll(nv, body{nv}) end +# remove concrete constraint on diagonal TypeVar if it comes from troot +function widen_diagonal(@nospecialize(t), troot::UnionAll) + body = ccall(:jl_widen_diagonal, Any, (Any, Any), t, troot) +end + function isvarargtype(@nospecialize(t)) return isa(t, Core.TypeofVararg) end diff --git a/src/subtype.c b/src/subtype.c index efff6218dfb71..74c82e72b8002 100644 --- a/src/subtype.c +++ b/src/subtype.c @@ -4304,6 +4304,212 @@ int jl_subtype_matching(jl_value_t *a, jl_value_t *b, jl_svec_t **penv) return sub; } +// type utils +static void check_diagonal(jl_value_t *t, jl_varbinding_t *troot, int param) +{ + if (jl_is_uniontype(t)) { + int i, len = 0; + jl_varbinding_t *v; + for (v = troot; v != NULL; v = v->prev) + len++; + int8_t *occurs = (int8_t *)alloca(len); + for (v = troot, i = 0; v != NULL; v = v->prev, i++) + occurs[i] = v->occurs_inv | (v->occurs_cov << 2); + check_diagonal(((jl_uniontype_t *)t)->a, troot, param); + for (v = troot, i = 0; v != NULL; v = v->prev, i++) { + int8_t occurs_inv = occurs[i] & 3; + int8_t occurs_cov = occurs[i] >> 2; + occurs[i] = v->occurs_inv | (v->occurs_cov << 2); + v->occurs_inv = occurs_inv; + v->occurs_cov = occurs_cov; + } + check_diagonal(((jl_uniontype_t *)t)->b, troot, param); + for (v = troot, i = 0; v != NULL; v = v->prev, i++) { + if (v->occurs_inv < (occurs[i] & 3)) + v->occurs_inv = occurs[i] & 3; + if (v->occurs_cov < (occurs[i] >> 2)) + v->occurs_cov = occurs[i] >> 2; + } + } + else if (jl_is_unionall(t)) { + assert(troot != NULL); + jl_varbinding_t *v1 = troot, *v2 = troot->prev; + while (v2 != NULL) { + if (v2->var == ((jl_unionall_t *)t)->var) { + v1->prev = v2->prev; + break; + } + v1 = v2; + v2 = v2->prev; + } + check_diagonal(((jl_unionall_t *)t)->body, troot, param); + v1->prev = v2; + } + else if (jl_is_datatype(t)) { + int nparam = jl_is_tuple_type(t) ? 1 : 2; + if (nparam < param) nparam = param; + for (size_t i = 0; i < jl_nparams(t); i++) { + check_diagonal(jl_tparam(t, i), troot, nparam); + } + } + else if (jl_is_vararg(t)) { + jl_value_t *T = jl_unwrap_vararg(t); + jl_value_t *N = jl_unwrap_vararg_num(t); + int n = (N && jl_is_long(N)) ? jl_unbox_long(N) : 2; + if (T && n > 0) check_diagonal(T, troot, param); + if (T && n > 1) check_diagonal(T, troot, param); + if (N) check_diagonal(N, troot, 2); + } + else if (jl_is_typevar(t)) { + jl_varbinding_t *v = troot; + for (; v != NULL; v = v->prev) { + if (v->var == (jl_tvar_t *)t) { + if (param == 1 && v->occurs_cov < 2) v->occurs_cov++; + if (param == 2 && v->occurs_inv < 2) v->occurs_inv++; + break; + } + } + if (v == NULL) + check_diagonal(((jl_tvar_t *)t)->ub, troot, 0); + } +} + +static jl_value_t *insert_nondiagonal(jl_value_t *type, jl_varbinding_t *troot, int widen2ub) +{ + if (jl_is_typevar(type)) { + int concretekind = widen2ub > 1 ? 0 : 1; + jl_varbinding_t *v = troot; + for (; v != NULL; v = v->prev) { + if (v->occurs_inv == 0 && + v->occurs_cov > concretekind && + v->var == (jl_tvar_t *)type) + break; + } + if (v != NULL) { + if (widen2ub) { + type = insert_nondiagonal(((jl_tvar_t *)type)->ub, troot, 2); + } + else { + // we must replace each covariant occurrence of newvar with a different newvar2<:newvar (diagonal rule) + if (v->innervars == NULL) + v->innervars = jl_alloc_array_1d(jl_array_any_type, 0); + jl_value_t *newvar = NULL, *lb = v->var->lb, *ub = (jl_value_t *)v->var; + jl_array_t *innervars = v->innervars; + JL_GC_PUSH4(&newvar, &lb, &ub, &innervars); + newvar = (jl_value_t *)jl_new_typevar(v->var->name, lb, ub); + jl_array_ptr_1d_push(innervars, newvar); + JL_GC_POP(); + type = newvar; + } + } + } + else if (jl_is_unionall(type)) { + jl_value_t *body = ((jl_unionall_t*)type)->body; + jl_tvar_t *var = ((jl_unionall_t*)type)->var; + jl_varbinding_t *v = troot; + for (; v != NULL; v = v->prev) { + if (v->var == var) + break; + } + if (v) v->var = NULL; // Temporarily remove `type->var` from binding list. + jl_value_t *newbody = insert_nondiagonal(body, troot, widen2ub); + if (v) v->var = var; // And restore it after inner insertation. + jl_value_t *newvar = NULL; + JL_GC_PUSH2(&newbody, &newvar); + if (body == newbody || jl_has_typevar(newbody, var)) { + if (body != newbody) + newbody = jl_new_struct(jl_unionall_type, var, newbody); + // n.b. we do not widen lb, since that would be the wrong direction + newvar = insert_nondiagonal(var->ub, troot, widen2ub); + if (newvar != var->ub) { + newvar = (jl_value_t*)jl_new_typevar(var->name, var->lb, newvar); + newbody = jl_apply_type1(newbody, newvar); + newbody = jl_type_unionall((jl_tvar_t*)newvar, newbody); + } + } + type = newbody; + JL_GC_POP(); + } + else if (jl_is_uniontype(type)) { + jl_value_t *a = ((jl_uniontype_t*)type)->a; + jl_value_t *b = ((jl_uniontype_t*)type)->b; + jl_value_t *newa = NULL; + jl_value_t *newb = NULL; + JL_GC_PUSH2(&newa, &newb); + newa = insert_nondiagonal(a, troot, widen2ub); + newb = insert_nondiagonal(b, troot, widen2ub); + if (newa != a || newb != b) + type = simple_union(newa, newb); + JL_GC_POP(); + } + else if (jl_is_vararg(type)) { + // As for Vararg we'd better widen it's var to ub as otherwise they are still diagonal + jl_value_t *t = jl_unwrap_vararg(type); + jl_value_t *n = jl_unwrap_vararg_num(type); + if (widen2ub == 0) + widen2ub = !(n && jl_is_long(n)) || jl_unbox_long(n) > 1; + jl_value_t *newt; + JL_GC_PUSH2(&newt, &n); + newt = insert_nondiagonal(t, troot, widen2ub); + if (t != newt) + type = (jl_value_t *)jl_wrap_vararg(newt, n, 0); + JL_GC_POP(); + } + else if (jl_is_datatype(type)) { + if (jl_is_tuple_type(type)) { + jl_svec_t *newparams = NULL; + jl_value_t *newelt = NULL; + JL_GC_PUSH2(&newparams, &newelt); + for (size_t i = 0; i < jl_nparams(type); i++) { + jl_value_t *elt = jl_tparam(type, i); + newelt = insert_nondiagonal(elt, troot, widen2ub); + if (elt != newelt) { + if (!newparams) + newparams = jl_svec_copy(((jl_datatype_t*)type)->parameters); + jl_svecset(newparams, i, newelt); + } + } + if (newparams) + type = (jl_value_t*)jl_apply_tuple_type(newparams); + JL_GC_POP(); + } + } + return type; +} + +static jl_value_t *_widen_diagonal(jl_value_t *t, jl_varbinding_t *troot) { + check_diagonal(t, troot, 0); + int any_concrete = 0; + for (jl_varbinding_t *v = troot; v != NULL; v = v->prev) + any_concrete |= v->occurs_cov > 1 && v->occurs_inv == 0; + if (!any_concrete) + return t; // no diagonal + return insert_nondiagonal(t, troot, 0); +} + +static jl_value_t *widen_diagonal(jl_value_t *t, jl_unionall_t *u, jl_varbinding_t *troot) +{ + jl_varbinding_t vb = { u->var, NULL, NULL, 1, 0, 0, 0, 0, 0, 0, 0, 0, NULL, troot }; + jl_value_t *nt; + JL_GC_PUSH2(&vb.innervars, &nt); + if (jl_is_unionall(u->body)) + nt = widen_diagonal(t, (jl_unionall_t *)u->body, &vb); + else + nt = _widen_diagonal(t, &vb); + if (vb.innervars != NULL) { + for (size_t i = 0; i < jl_array_nrows(vb.innervars); i++) { + jl_tvar_t *var = (jl_tvar_t*)jl_array_ptr_ref(vb.innervars, i); + nt = jl_type_unionall(var, nt); + } + } + JL_GC_POP(); + return nt; +} + +JL_DLLEXPORT jl_value_t *jl_widen_diagonal(jl_value_t *t, jl_unionall_t *ua) +{ + return widen_diagonal(t, ua, NULL); +} // specificity comparison diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index 0fbf4e9b0fd7d..106abc695247e 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -5148,3 +5148,16 @@ end # Issue #52613 @test (code_typed((Any,)) do x; TypeVar(x...); end)[1][2] === TypeVar + +# Issue #52168 +f52168(x, t::Type) = x::NTuple{2, Base.inferencebarrier(t)::Type} +@test f52168((1, 2.), Any) === (1, 2.) + +# Issue #27031 +let x = 1, _Any = Any + @noinline bar27031(tt::Tuple{T,T}, ::Type{Val{T}}) where {T} = notsame27031(tt) + @noinline notsame27031(tt::Tuple{T, T}) where {T} = error() + @noinline notsame27031(tt::Tuple{T, S}) where {T, S} = "OK" + foo27031() = bar27031((x, 1.0), Val{_Any}) + @test foo27031() == "OK" +end diff --git a/test/core.jl b/test/core.jl index 34d0e762e2ec1..2f5c6f734a9a1 100644 --- a/test/core.jl +++ b/test/core.jl @@ -8072,3 +8072,14 @@ end # `SimpleVector`-operations should be concrete-eval eligible @test Core.Compiler.is_foldable(Base.infer_effects(length, (Core.SimpleVector,))) @test Core.Compiler.is_foldable(Base.infer_effects(getindex, (Core.SimpleVector,Int))) + +# Test correctness of widen_diagonal +let widen_diagonal(x::UnionAll) = Base.rewrap_unionall(Base.widen_diagonal(Base.unwrap_unionall(x), x), x), + check_widen_diagonal(x, y) = !<:(x, y) && x <: widen_diagonal(y) + @test Tuple{Int,Float64} <: widen_diagonal(NTuple) + @test Tuple{Int,Float64} <: widen_diagonal(Tuple{T,T} where {T}) + @test Tuple{Real,Int,Float64} <: widen_diagonal(Tuple{S,Vararg{T}} where {S, T<:S}) + @test Tuple{Int,Int,Float64,Float64} <: widen_diagonal(Tuple{S,S,Vararg{T}} where {S, T<:S}) + @test Union{Tuple{T}, Tuple{T,Int}} where {T} === widen_diagonal(Union{Tuple{T}, Tuple{T,Int}} where {T}) + @test Tuple === widen_diagonal(Union{Tuple{Vararg{S}}, Tuple{Vararg{T}}} where {S, T}) +end From 47999ab81ac959b3cc441415229667eb1aeced22 Mon Sep 17 00:00:00 2001 From: N5N3 <2642243996@qq.com> Date: Tue, 16 Jan 2024 21:04:54 +0800 Subject: [PATCH 260/413] Fix `widen_diagonal` bug for nested `UnionAll` (#52924) --- src/subtype.c | 9 ++++----- test/core.jl | 4 ++-- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/subtype.c b/src/subtype.c index 74c82e72b8002..86b441f9aaec0 100644 --- a/src/subtype.c +++ b/src/subtype.c @@ -4415,19 +4415,18 @@ static jl_value_t *insert_nondiagonal(jl_value_t *type, jl_varbinding_t *troot, jl_value_t *newbody = insert_nondiagonal(body, troot, widen2ub); if (v) v->var = var; // And restore it after inner insertation. jl_value_t *newvar = NULL; - JL_GC_PUSH2(&newbody, &newvar); + JL_GC_PUSH3(&newbody, &newvar, &type); if (body == newbody || jl_has_typevar(newbody, var)) { if (body != newbody) - newbody = jl_new_struct(jl_unionall_type, var, newbody); + type = jl_new_struct(jl_unionall_type, var, newbody); // n.b. we do not widen lb, since that would be the wrong direction newvar = insert_nondiagonal(var->ub, troot, widen2ub); if (newvar != var->ub) { newvar = (jl_value_t*)jl_new_typevar(var->name, var->lb, newvar); - newbody = jl_apply_type1(newbody, newvar); - newbody = jl_type_unionall((jl_tvar_t*)newvar, newbody); + newbody = jl_apply_type1(type, newvar); + type = jl_type_unionall((jl_tvar_t*)newvar, newbody); } } - type = newbody; JL_GC_POP(); } else if (jl_is_uniontype(type)) { diff --git a/test/core.jl b/test/core.jl index 2f5c6f734a9a1..eefeeb8d1240d 100644 --- a/test/core.jl +++ b/test/core.jl @@ -8074,12 +8074,12 @@ end @test Core.Compiler.is_foldable(Base.infer_effects(getindex, (Core.SimpleVector,Int))) # Test correctness of widen_diagonal -let widen_diagonal(x::UnionAll) = Base.rewrap_unionall(Base.widen_diagonal(Base.unwrap_unionall(x), x), x), - check_widen_diagonal(x, y) = !<:(x, y) && x <: widen_diagonal(y) +let widen_diagonal(x::UnionAll) = Base.rewrap_unionall(Base.widen_diagonal(Base.unwrap_unionall(x), x), x) @test Tuple{Int,Float64} <: widen_diagonal(NTuple) @test Tuple{Int,Float64} <: widen_diagonal(Tuple{T,T} where {T}) @test Tuple{Real,Int,Float64} <: widen_diagonal(Tuple{S,Vararg{T}} where {S, T<:S}) @test Tuple{Int,Int,Float64,Float64} <: widen_diagonal(Tuple{S,S,Vararg{T}} where {S, T<:S}) @test Union{Tuple{T}, Tuple{T,Int}} where {T} === widen_diagonal(Union{Tuple{T}, Tuple{T,Int}} where {T}) @test Tuple === widen_diagonal(Union{Tuple{Vararg{S}}, Tuple{Vararg{T}}} where {S, T}) + @test Tuple{Vararg{Val{<:Set}}} == widen_diagonal(Tuple{Vararg{T}} where T<:Val{<:Set}) end From ddb9d0d6bebaa3d09bf5c2215b421b30ecb7943b Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Mon, 22 Jan 2024 15:34:34 -0500 Subject: [PATCH 261/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20Pkg=20stdlib=20from=20563a3387a=20to=2011cf00df?= =?UTF-8?q?7=20(#53008)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/md5 | 1 + .../Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/sha512 | 1 + .../Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/md5 | 1 - .../Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/sha512 | 1 - stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/md5 create mode 100644 deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/sha512 delete mode 100644 deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/sha512 diff --git a/deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/md5 b/deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/md5 new file mode 100644 index 0000000000000..574c4f7c76d11 --- /dev/null +++ b/deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/md5 @@ -0,0 +1 @@ +ec3d53a5eca90356146dbbaa44658dcb diff --git a/deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/sha512 b/deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/sha512 new file mode 100644 index 0000000000000..f986511d696ab --- /dev/null +++ b/deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/sha512 @@ -0,0 +1 @@ +7398e2a5b2b148aa1cbe96c0874cccdd24f7c380351013c05dc11be1ae7fd8cb829d0b8ab696eb516373c46e1cb5cfc29afb12b2c31e7e71a64fad4bc37bb6ff diff --git a/deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/md5 b/deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/md5 deleted file mode 100644 index 985e7ef06f2a5..0000000000000 --- a/deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -769c5379f1ded5529d82d83e092e954c diff --git a/deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/sha512 b/deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/sha512 deleted file mode 100644 index d5f705de6d9d9..0000000000000 --- a/deps/checksums/Pkg-563a3387acddad6c427b2f675aa70531c4324cc2.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -585760a1c104391bb08f920b6944b88762e942388fd6ca6bf3bfa6a0bf050f99d304c21165a3b82c96dea5a6711af3ddf0cf9b83bf5fd5f015b26f412b24015a diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index b43eb592268ab..ce5c816b40d31 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = 563a3387acddad6c427b2f675aa70531c4324cc2 +PKG_SHA1 = 11cf00df71dca76ccb34320ad11ad64ea015fe25 PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 3552d3606d5ee047f5b0798b202d72a27ad2499a Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Tue, 23 Jan 2024 23:39:14 -0500 Subject: [PATCH 262/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20Pkg=20stdlib=20from=2011cf00df7=20to=2070525539?= =?UTF-8?q?d=20(#53028)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stdlib: Pkg URL: https://github.com/JuliaLang/Pkg.jl.git Stdlib branch: release-1.10 Julia branch: backports-release-1.10 Old commit: 11cf00df7 New commit: 70525539d Julia version: 1.10.0 Pkg version: 1.10.0 Bump invoked by: @IanButterworth Powered by: [BumpStdlibs.jl](https://github.com/JuliaLang/BumpStdlibs.jl) Diff: https://github.com/JuliaLang/Pkg.jl/compare/11cf00df71dca76ccb34320ad11ad64ea015fe25...70525539d3157891445abe806962f780f64143cd ``` $ git log --oneline 11cf00df7..70525539d 70525539d Merge pull request #3770 from JuliaLang/backports-release-1.10 729ebe1e3 Avoid deleting existing artifacts when ignoring hashes. (#3768) ``` Co-authored-by: Dilum Aluthge --- .../Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/md5 | 1 - .../Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/sha512 | 1 - .../Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/md5 | 1 + .../Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/sha512 | 1 + stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/sha512 create mode 100644 deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/md5 create mode 100644 deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/sha512 diff --git a/deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/md5 b/deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/md5 deleted file mode 100644 index 574c4f7c76d11..0000000000000 --- a/deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -ec3d53a5eca90356146dbbaa44658dcb diff --git a/deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/sha512 b/deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/sha512 deleted file mode 100644 index f986511d696ab..0000000000000 --- a/deps/checksums/Pkg-11cf00df71dca76ccb34320ad11ad64ea015fe25.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -7398e2a5b2b148aa1cbe96c0874cccdd24f7c380351013c05dc11be1ae7fd8cb829d0b8ab696eb516373c46e1cb5cfc29afb12b2c31e7e71a64fad4bc37bb6ff diff --git a/deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/md5 b/deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/md5 new file mode 100644 index 0000000000000..59643e2d8da35 --- /dev/null +++ b/deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/md5 @@ -0,0 +1 @@ +8a7db649c8ee8f4506925d1364af66ce diff --git a/deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/sha512 b/deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/sha512 new file mode 100644 index 0000000000000..eb8207f429689 --- /dev/null +++ b/deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/sha512 @@ -0,0 +1 @@ +53c74a0630e1e57e7cf1dac0de84297de6a623ff913affbaf2a887c5b6ea68782985dff5f453a4fddc662b12e8b3a11e61a2a29bb72afde3bbc5d1f5c00bb0bd diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index ce5c816b40d31..c3a452c1bd32f 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = 11cf00df71dca76ccb34320ad11ad64ea015fe25 +PKG_SHA1 = 70525539d3157891445abe806962f780f64143cd PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 7d3c68e4b9bcbced00b9689bbcaf5a35ea902219 Mon Sep 17 00:00:00 2001 From: Lilith Orion Hafner Date: Wed, 30 Aug 2023 14:38:21 -0500 Subject: [PATCH 263/413] Fix edge cases where inexact conversions to UInt don't throw (#51095) (cherry picked from commit fb7613635cab77cf269790335e8121f513c9ea96) --- base/float.jl | 5 ++++- test/floatfuncs.jl | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/base/float.jl b/base/float.jl index fc4cef09b48ad..aa61f2c8449e3 100644 --- a/base/float.jl +++ b/base/float.jl @@ -882,7 +882,10 @@ for Ti in (Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UIn end end function (::Type{$Ti})(x::$Tf) - if ($(Tf(typemin(Ti))) <= x <= $(Tf(typemax(Ti)))) && isinteger(x) + # When typemax(Ti) is not representable by Tf but typemax(Ti) + 1 is, + # then < Tf(typemax(Ti) + 1) is stricter than <= Tf(typemax(Ti)). Using + # the former causes us to throw on UInt64(Float64(typemax(UInt64))+1) + if ($(Tf(typemin(Ti))) <= x < $(Tf(typemax(Ti))+one(Tf))) && isinteger(x) return unsafe_trunc($Ti,x) else throw(InexactError($(Expr(:quote,Ti.name.name)), $Ti, x)) diff --git a/test/floatfuncs.jl b/test/floatfuncs.jl index a0d6e8743514b..268d699684cbb 100644 --- a/test/floatfuncs.jl +++ b/test/floatfuncs.jl @@ -256,3 +256,34 @@ end @test isapprox(typemin(T), 0.0, rtol=1) end end + +@testset "Conversion from floating point to unsigned integer near extremes (#51063)" begin + @test_throws InexactError UInt32(4.2949673f9) + @test_throws InexactError UInt64(1.8446744f19) + @test_throws InexactError UInt64(1.8446744073709552e19) + @test_throws InexactError UInt128(3.402823669209385e38) +end + +@testset "Conversion from floating point to integer near extremes (exhaustive)" begin + for Ti in Base.BitInteger_types, Tf in (Float16, Float32, Float64), x in (typemin(Ti), typemax(Ti)) + y = Tf(x) + for i in -3:3 + z = nextfloat(y, i) + + result = isfinite(z) ? round(BigInt, z) : error + result = result !== error && typemin(Ti) <= result <= typemax(Ti) ? result : error + + if result === error + # @test_throws InexactError round(Ti, z) Broken because of #51113 + @test_throws InexactError Ti(z) + else + @test result == round(Ti, z) + if isinteger(z) + @test result == Ti(z) + else + @test_throws InexactError Ti(z) + end + end + end + end +end From 2481fdf95c687799b28640c7cc863deb7d942181 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Fri, 5 Jan 2024 16:45:09 +0100 Subject: [PATCH 264/413] loading: fix finding bundled stdlibs even if they are e.g. devved in an environment higher in the load path (#52637) I noticed this when seeing some weird precompile issues when I had SparseArrays devved in my main environment but it was with the standard stdlib format in the current environment: ``` (NearestNeighbors) pkg> st -m Project NearestNeighbors v0.4.15 Status `~/JuliaPkgs/NearestNeighbors.jl/Manifest.toml` ... [2f01184e] SparseArrays v1.10.0 ... ``` But even so, `locate_package` claims that the path to SparseArrays is the one in the main environment: ``` julia> pkg = Base.PkgId(Base.UUID("2f01184e-e22b-5df5-ae63-d93ebab69eaf"), "SparseArrays") SparseArrays [2f01184e-e22b-5df5-ae63-d93ebab69eaf] julia> Base.locate_package(pkg) "/home/kc/JuliaPkgs/SparseArrays.jl/src/SparseArrays.jl" ``` This correctly fixes it so that packages without a `git-tree-sha1` (and without a `path`) are resolved to the stdlib path. (cherry picked from commit c9bc2ffd52e558aecf228b17d55e3eb0e4d5f693) --- base/loading.jl | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/base/loading.jl b/base/loading.jl index bbc14c3f1d591..b652e56c922e0 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -933,7 +933,13 @@ function explicit_manifest_entry_path(manifest_file::String, pkg::PkgId, entry:: return path end hash = get(entry, "git-tree-sha1", nothing)::Union{Nothing, String} - hash === nothing && return nothing + if hash === nothing + mbypath = manifest_uuid_path(Sys.STDLIB, pkg) + if mbypath isa String + return entry_path(mbypath, pkg.name) + end + return nothing + end hash = SHA1(hash) # Keep the 4 since it used to be the default uuid = pkg.uuid::UUID # checked within `explicit_manifest_uuid_path` From cc2600427f32318f6140949f342f4919e0c44218 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 5 Jan 2024 15:42:40 -0500 Subject: [PATCH 265/413] staticdata: handle cycles in datatypes (#52752) Handle any sort of cycle encountered in the datatype super fields by always deferring that field until later and setting a deferred mechanism for updating the field only after the supertype is ready. Fix #52660 (cherry picked from commit c94b1a3cd810efd35b66ca4f5a60839989e18692) --- src/staticdata.c | 147 +++++++++++++++++++++++------------------ src/staticdata_utils.c | 13 ++-- test/precompile.jl | 6 +- 3 files changed, 95 insertions(+), 71 deletions(-) diff --git a/src/staticdata.c b/src/staticdata.c index 36961b58f375a..c130c2e7569fe 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -295,7 +295,6 @@ static arraylist_t deser_sym; static htable_t external_objects; static htable_t serialization_order; // to break cycles, mark all objects that are serialized -static htable_t unique_ready; // as we serialize types, we need to know if all reachable objects are also already serialized. This tracks whether `immediate` has been set for all of them. static htable_t nullptrs; // FIFO queue for objects to be serialized. Anything requiring fixup upon deserialization // must be "toplevel" in this queue. For types, parameters and field types must appear @@ -463,6 +462,7 @@ typedef struct { arraylist_t relocs_list; // a list of (location, target) pairs, see description at top arraylist_t gctags_list; // " arraylist_t uniquing_types; // a list of locations that reference types that must be de-duplicated + arraylist_t uniquing_super; // a list of datatypes, used in super fields, that need to be marked in uniquing_types once they are reached, for handling unique-ing of them on deserialization arraylist_t uniquing_objs; // a list of locations that reference non-types that must be de-duplicated arraylist_t fixup_types; // a list of locations of types requiring (re)caching arraylist_t fixup_objs; // a list of locations of objects requiring (re)caching @@ -726,14 +726,13 @@ static void jl_insert_into_serialization_queue(jl_serializer_state *s, jl_value_ { jl_datatype_t *t = (jl_datatype_t*)jl_typeof(v); jl_queue_for_serialization_(s, (jl_value_t*)t, 1, immediate); + const jl_datatype_layout_t *layout = t->layout; if (!recursive) goto done_fields; if (s->incremental && jl_is_datatype(v) && immediate) { jl_datatype_t *dt = (jl_datatype_t*)v; - // ensure super is queued (though possibly not yet handled, since it may have cycles) - jl_queue_for_serialization_(s, (jl_value_t*)dt->super, 1, 1); // ensure all type parameters are recached jl_queue_for_serialization_(s, (jl_value_t*)dt->parameters, 1, 1); jl_value_t *singleton = dt->instance; @@ -743,7 +742,7 @@ static void jl_insert_into_serialization_queue(jl_serializer_state *s, jl_value_ // (it may get serialized from elsewhere though) record_field_change(&dt->instance, jl_nothing); } - immediate = 0; // do not handle remaining fields immediately (just field types remains) + goto done_fields; // for now } if (s->incremental && jl_is_method_instance(v)) { jl_method_instance_t *mi = (jl_method_instance_t*)v; @@ -800,11 +799,9 @@ static void jl_insert_into_serialization_queue(jl_serializer_state *s, jl_value_ } } - if (immediate) // must be things that can be recursively handled, and valid as type parameters assert(jl_is_immutable(t) || jl_is_typevar(v) || jl_is_symbol(v) || jl_is_svec(v)); - const jl_datatype_layout_t *layout = t->layout; if (layout->npointers == 0) { // bitstypes do not require recursion } @@ -860,22 +857,35 @@ done_fields: ; // We've encountered an item we need to cache void **bp = ptrhash_bp(&serialization_order, v); - assert(*bp != (void*)(uintptr_t)-1); - if (s->incremental) { - void **bp2 = ptrhash_bp(&unique_ready, v); - if (*bp2 == HT_NOTFOUND) - assert(*bp == (void*)(uintptr_t)-2); - else if (*bp != (void*)(uintptr_t)-2) - return; - } - else { - assert(*bp == (void*)(uintptr_t)-2); - } + assert(*bp == (void*)(uintptr_t)-2); arraylist_push(&serialization_queue, (void*) v); size_t idx = serialization_queue.len - 1; assert(serialization_queue.len < ((uintptr_t)1 << RELOC_TAG_OFFSET) && "too many items to serialize"); - *bp = (void*)((char*)HT_NOTFOUND + 1 + idx); + + // DataType is very unusual, in that some of the fields need to be pre-order, and some + // (notably super) must not be (even if `jl_queue_for_serialization_` would otherwise + // try to promote itself to be immediate) + if (s->incremental && jl_is_datatype(v) && immediate && recursive) { + jl_datatype_t *dt = (jl_datatype_t*)v; + void **bp = ptrhash_bp(&serialization_order, (void*)dt->super); + if (*bp != (void*)-2) { + // if super is already on the stack of things to handle when this returns, do + // not try to handle it now + jl_queue_for_serialization_(s, (jl_value_t*)dt->super, 1, immediate); + } + immediate = 0; + char *data = (char*)jl_data_ptr(v); + size_t i, np = layout->npointers; + for (i = 0; i < np; i++) { + uint32_t ptr = jl_ptr_offset(t, i); + if (ptr * sizeof(jl_value_t*) == offsetof(jl_datatype_t, super)) + continue; // skip the super field, since it might not be quite validly ordered + int mutabl = 1; + jl_value_t *fld = get_replaceable_field(&((jl_value_t**)data)[ptr], mutabl); + jl_queue_for_serialization_(s, fld, 1, immediate); + } + } } static void jl_queue_for_serialization_(jl_serializer_state *s, jl_value_t *v, int recursive, int immediate) JL_GC_DISABLED @@ -894,28 +904,19 @@ static void jl_queue_for_serialization_(jl_serializer_state *s, jl_value_t *v, i } void **bp = ptrhash_bp(&serialization_order, v); - if (*bp == HT_NOTFOUND) { - *bp = (void*)(uintptr_t)(immediate ? -2 : -1); - } - else { - if (!s->incremental || !immediate || !recursive) - return; - void **bp2 = ptrhash_bp(&unique_ready, v); - if (*bp2 == HT_NOTFOUND) - *bp2 = v; // now is unique_ready - else { - assert(*bp != (void*)(uintptr_t)-1); - return; // already was unique_ready - } - assert(*bp != (void*)(uintptr_t)-2); // should be unique_ready then - if (*bp == (void*)(uintptr_t)-1) - *bp = (void*)(uintptr_t)-2; // now immediate - } + assert(!immediate || *bp != (void*)(uintptr_t)-2); + if (*bp == HT_NOTFOUND) + *bp = (void*)(uintptr_t)-1; // now enqueued + else if (!s->incremental || !immediate || !recursive || *bp != (void*)(uintptr_t)-1) + return; - if (immediate) + if (immediate) { + *bp = (void*)(uintptr_t)-2; // now immediate jl_insert_into_serialization_queue(s, v, recursive, immediate); - else + } + else { arraylist_push(&object_worklist, (void*)v); + } } // Do a pre-order traversal of the to-serialize worklist, in the identical order @@ -1065,8 +1066,10 @@ static void record_uniquing(jl_serializer_state *s, jl_value_t *fld, uintptr_t o if (s->incremental && jl_needs_serialization(s, fld) && needs_uniquing(fld)) { if (jl_is_datatype(fld) || jl_is_datatype_singleton((jl_datatype_t*)jl_typeof(fld))) arraylist_push(&s->uniquing_types, (void*)(uintptr_t)offset); - else + else if (jl_is_method_instance(fld)) arraylist_push(&s->uniquing_objs, (void*)(uintptr_t)offset); + else + assert(0 && "unknown object type with needs_uniquing set"); } } @@ -1224,7 +1227,15 @@ static void jl_write_values(jl_serializer_state *s) JL_GC_DISABLED write_pointerfield(s, (jl_value_t*)mi->sparam_vals); continue; } - else if (!jl_is_datatype(v)) { + else if (jl_is_datatype(v)) { + for (size_t i = 0; i < s->uniquing_super.len; i++) { + if (s->uniquing_super.items[i] == (void*)v) { + s->uniquing_super.items[i] = arraylist_pop(&s->uniquing_super); + arraylist_push(&s->uniquing_types, (void*)(uintptr_t)(reloc_offset|3)); + } + } + } + else { assert(jl_is_datatype_singleton(t) && "unreachable"); } } @@ -1589,6 +1600,9 @@ static void jl_write_values(jl_serializer_state *s) JL_GC_DISABLED ios_write(s->const_data, (char*)&dyn, sizeof(jl_fielddescdyn_t)); } } + void *superidx = ptrhash_get(&serialization_order, dt->super); + if (s->incremental && superidx != HT_NOTFOUND && (char*)superidx - 1 - (char*)HT_NOTFOUND > item && needs_uniquing((jl_value_t*)dt->super)) + arraylist_push(&s->uniquing_super, dt->super); } else if (jl_is_typename(v)) { assert(f == s->s); @@ -1633,6 +1647,7 @@ static void jl_write_values(jl_serializer_state *s) JL_GC_DISABLED } } } + assert(s->uniquing_super.len == 0); } // In deserialization, create Symbols and set up the @@ -2397,7 +2412,6 @@ static void jl_save_system_image_to_stream(ios_t *f, jl_array_t *mod_array, ptrhash_put(&fptr_to_id, (void*)(uintptr_t)id_to_fptrs[i], (void*)(i + 2)); } htable_new(&serialization_order, 25000); - htable_new(&unique_ready, 0); htable_new(&nullptrs, 0); arraylist_new(&object_worklist, 0); arraylist_new(&serialization_queue, 0); @@ -2420,6 +2434,7 @@ static void jl_save_system_image_to_stream(ios_t *f, jl_array_t *mod_array, arraylist_new(&s.relocs_list, 0); arraylist_new(&s.gctags_list, 0); arraylist_new(&s.uniquing_types, 0); + arraylist_new(&s.uniquing_super, 0); arraylist_new(&s.uniquing_objs, 0); arraylist_new(&s.fixup_types, 0); arraylist_new(&s.fixup_objs, 0); @@ -2652,6 +2667,11 @@ static void jl_save_system_image_to_stream(ios_t *f, jl_array_t *mod_array, arraylist_free(&object_worklist); arraylist_free(&serialization_queue); arraylist_free(&layout_table); + arraylist_free(&s.uniquing_types); + arraylist_free(&s.uniquing_super); + arraylist_free(&s.uniquing_objs); + arraylist_free(&s.fixup_types); + arraylist_free(&s.fixup_objs); arraylist_free(&s.ccallable_list); arraylist_free(&s.relocs_list); arraylist_free(&s.gctags_list); @@ -2661,7 +2681,6 @@ static void jl_save_system_image_to_stream(ios_t *f, jl_array_t *mod_array, if (worklist) htable_free(&external_objects); htable_free(&serialization_order); - htable_free(&unique_ready); htable_free(&nullptrs); htable_free(&symbol_table); htable_free(&fptr_to_id); @@ -3026,31 +3045,43 @@ static void jl_restore_system_image_from_stream_(ios_t *f, jl_image_t *image, jl uintptr_t item = (uintptr_t)s.uniquing_types.items[i]; // check whether we are operating on the typetag // (needing to ignore GC bits) or a regular field - int tag = (item & 1) == 1; - // check whether this is a gvar index - int gvar = (item & 2) == 2; + // and check whether this is a gvar index + int tag = (item & 3); item &= ~(uintptr_t)3; uintptr_t *pfld; jl_value_t **obj, *newobj; - if (gvar) { + if (tag == 3) { + obj = (jl_value_t**)(image_base + item); + pfld = NULL; + for (size_t i = 0; i < delay_list.len; i += 2) { + if (obj == (jl_value_t **)delay_list.items[i + 0]) { + pfld = (uintptr_t*)delay_list.items[i + 1]; + delay_list.items[i + 1] = arraylist_pop(&delay_list); + delay_list.items[i + 0] = arraylist_pop(&delay_list); + break; + } + } + assert(pfld); + } + else if (tag == 2) { if (image->gvars_base == NULL) continue; item >>= 2; assert(item < s.gvar_record->size / sizeof(reloc_t)); pfld = sysimg_gvars(image->gvars_base, image->gvars_offsets, item); obj = *(jl_value_t***)pfld; - assert(tag == 0); } else { pfld = (uintptr_t*)(image_base + item); - if (tag) + if (tag == 1) obj = (jl_value_t**)jl_typeof(jl_valueof(pfld)); else obj = *(jl_value_t***)pfld; if ((char*)obj > (char*)pfld) { + // this must be the super field assert(tag == 0); - arraylist_push(&delay_list, pfld); arraylist_push(&delay_list, obj); + arraylist_push(&delay_list, pfld); ptrhash_put(&new_dt_objs, (void*)obj, obj); // mark obj as invalid *pfld = (uintptr_t)NULL; continue; @@ -3100,25 +3131,14 @@ static void jl_restore_system_image_from_stream_(ios_t *f, jl_image_t *image, jl assert(newobj != jl_nothing); arraylist_push(&cleanup_list, (void*)obj); } - if (tag) + if (tag == 1) *pfld = (uintptr_t)newobj | GC_OLD | GC_IN_IMAGE; else *pfld = (uintptr_t)newobj; assert(!(image_base < (char*)newobj && (char*)newobj <= image_base + sizeof_sysimg)); assert(jl_typetagis(obj, otyp)); } - // A few fields (reached via super) might be self-recursive. This is rare, but handle them now. - // They cannot be instances though, since the type must fully exist before the singleton field can be allocated - for (size_t i = 0; i < delay_list.len; ) { - uintptr_t *pfld = (uintptr_t*)delay_list.items[i++]; - jl_value_t **obj = (jl_value_t **)delay_list.items[i++]; - assert(jl_is_datatype(obj)); - jl_datatype_t *dt = (jl_datatype_t*)obj[0]; - assert(jl_is_datatype(dt)); - jl_value_t *newobj = (jl_value_t*)dt; - *pfld = (uintptr_t)newobj; - assert(!(image_base < (char*)newobj && (char*)newobj <= image_base + sizeof_sysimg)); - } + assert(delay_list.len == 0); arraylist_free(&delay_list); // now that all the fields of dt are assigned and unique, copy them into // their final newdt memory location: this ensures we do not accidentally @@ -3166,11 +3186,12 @@ static void jl_restore_system_image_from_stream_(ios_t *f, jl_image_t *image, jl for (size_t i = 0; i < s.uniquing_objs.len; i++) { uintptr_t item = (uintptr_t)s.uniquing_objs.items[i]; // check whether this is a gvar index - int gvar = (item & 2) == 2; + int tag = (item & 3); + assert(tag == 0 || tag == 2); item &= ~(uintptr_t)3; uintptr_t *pfld; jl_value_t **obj, *newobj; - if (gvar) { + if (tag == 2) { if (image->gvars_base == NULL) continue; item >>= 2; diff --git a/src/staticdata_utils.c b/src/staticdata_utils.c index a4cbc3fd5ebc4..b488934606671 100644 --- a/src/staticdata_utils.c +++ b/src/staticdata_utils.c @@ -45,16 +45,15 @@ int must_be_new_dt(jl_value_t *t, htable_t *news, char *image_base, size_t sizeo jl_datatype_t *dt = (jl_datatype_t*)t; assert(jl_object_in_image((jl_value_t*)dt->name) && "type_in_worklist mistake?"); jl_datatype_t *super = dt->super; - // check if super is news, since then we must be new also - // (it is also possible that super is indeterminate now, wait for `t` - // to be resolved, then will be determined later and fixed up by the - // delay_list, for this and any other references to it). - while (super != jl_any_type) { - assert(super); + // fast-path: check if super is in news, since then we must be new also + // (it is also possible that super is indeterminate or NULL right now, + // waiting for `t` to be resolved, then will be determined later as + // soon as possible afterwards). + while (super != NULL && super != jl_any_type) { if (ptrhash_has(news, (void*)super)) return 1; if (!(image_base < (char*)super && (char*)super <= image_base + sizeof_sysimg)) - break; // fast-path for rejection of super + break; // the rest must all be non-new // otherwise super might be something that was not cached even though a later supertype might be // for example while handling `Type{Mask{4, U} where U}`, if we have `Mask{4, U} <: AbstractSIMDVector{4}` super = super->super; diff --git a/test/precompile.jl b/test/precompile.jl index e10d896da7d3f..d317731b51370 100644 --- a/test/precompile.jl +++ b/test/precompile.jl @@ -115,6 +115,8 @@ precompile_test_harness(false) do dir d = den(a) return h end + abstract type AbstractAlgebraMap{A} end + struct GAPGroupHomomorphism{A, B} <: AbstractAlgebraMap{GAPGroupHomomorphism{B, A}} end end """) write(Foo2_file, @@ -130,7 +132,7 @@ precompile_test_harness(false) do dir write(Foo_file, """ module $Foo_module - import $FooBase_module, $FooBase_module.typeA + import $FooBase_module, $FooBase_module.typeA, $FooBase_module.GAPGroupHomomorphism import $Foo2_module: $Foo2_module, override, overridenc import $FooBase_module.hash import Test @@ -211,6 +213,8 @@ precompile_test_harness(false) do dir Base.convert(::Type{Some{Value18343}}, ::Value18343{Some}) = 2 Base.convert(::Type{Ref}, ::Value18343{T}) where {T} = 3 + const GAPType1 = GAPGroupHomomorphism{Nothing, Nothing} + const GAPType2 = GAPGroupHomomorphism{1, 2} # issue #28297 mutable struct Result From 69d58e0de823af68e9539285fca4996b5dedff8d Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Mon, 8 Jan 2024 14:17:47 +0100 Subject: [PATCH 266/413] use a Dict instead of an IdDict for caching of the `cwstring` for Windows env variables (#52758) Should fix https://github.com/JuliaLang/julia/issues/52711. My analysis of the invalidation is as follows: We added code to cache the conversion to `cwstring` in env handling on Windows (https://github.com/JuliaLang/julia/pull/51371): ```julia const env_dict = IdDict{String, Vector{UInt16}}() function memoized_env_lookup(str::AbstractString) ... env_dict[str] = cwstring(str) ... end function access_env(onError::Function, str::AbstractString) var = memoized_env_lookup(str) ... end ``` Since `IdDict` has `@nospecialize` on `setindex!` we compile this method: ```julia setindex!(::IdDict{String, Vector{UInt16}}, ::Any, ::Any) ``` which has an edge to: ```julia convert(Type{Vector{Int64}}, Any}) ``` But then StaticArrays comes along and adds a method ```julia convert(::Type{Array{T, N}}, ::StaticArray) ``` which invalidates the `setindex!` (due to the edge to `convert`) which invalidates the whole env handling on Windows which causes 4k other methods downstream to be invalidated, in particular, the artifact string macro which causes a significant delay in the next jll package you load after loading StaticArrays. There should be no performance penalty to this since strings already does a hash for their `objectid`. (cherry picked from commit b7c24ed67bc42d51ee33da5ed5a97361c49313b8) --- base/env.jl | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/base/env.jl b/base/env.jl index 27594acff6b7f..1bebfd2623e61 100644 --- a/base/env.jl +++ b/base/env.jl @@ -3,7 +3,7 @@ if Sys.iswindows() const ERROR_ENVVAR_NOT_FOUND = UInt32(203) - const env_dict = IdDict{String, Vector{Cwchar_t}}() + const env_dict = Dict{String, Vector{Cwchar_t}}() const env_lock = ReentrantLock() function memoized_env_lookup(str::AbstractString) @@ -11,13 +11,14 @@ if Sys.iswindows() # incurred allocations because we had to convert a String to a Vector{Cwchar_t} each time # an environment variable was looked up. This function memoizes that lookup process, storing # the String => Vector{Cwchar_t} pairs in env_dict - var = get(env_dict, str, nothing) - if isnothing(var) - var = @lock env_lock begin - env_dict[str] = cwstring(str) + @lock env_lock begin + var = get(env_dict, str, nothing) + if isnothing(var) + var = cwstring(str) + env_dict[str] = var end + return var end - var end _getenvlen(var::Vector{UInt16}) = ccall(:GetEnvironmentVariableW,stdcall,UInt32,(Ptr{UInt16},Ptr{UInt16},UInt32),var,C_NULL,0) From d2fd31784c2dab163eb919741241ac55c2954229 Mon Sep 17 00:00:00 2001 From: Lilith Orion Hafner Date: Wed, 17 Jan 2024 05:09:30 +0600 Subject: [PATCH 267/413] Insert hardcoded backlinks to stdlib doc pages (#51375) This is #48814 times 23. It solves most of but not all of #50035. (cherry picked from commit a327a9594fa469a2d5df32a79a86965286968e54) --- stdlib/Artifacts/docs/src/index.md | 4 ++++ stdlib/Base64/docs/src/index.md | 4 ++++ stdlib/CRC32c/docs/src/index.md | 4 ++++ stdlib/FileWatching/docs/src/index.md | 4 ++++ stdlib/Future/docs/src/index.md | 4 ++++ stdlib/InteractiveUtils/docs/src/index.md | 4 ++++ stdlib/LibGit2/docs/src/index.md | 4 ++++ stdlib/Libdl/docs/src/index.md | 4 ++++ stdlib/LinearAlgebra/docs/src/index.md | 4 ++++ stdlib/Logging/docs/src/index.md | 4 ++++ stdlib/Markdown/docs/src/index.md | 4 ++++ stdlib/Mmap/docs/src/index.md | 4 ++++ stdlib/Printf/docs/src/index.md | 4 ++++ stdlib/Profile/docs/src/index.md | 4 ++++ stdlib/REPL/docs/src/index.md | 4 ++++ stdlib/Random/docs/src/index.md | 4 ++++ stdlib/Serialization/docs/src/index.md | 4 ++++ stdlib/SharedArrays/docs/src/index.md | 4 ++++ stdlib/Sockets/docs/src/index.md | 4 ++++ stdlib/TOML/docs/src/index.md | 4 ++++ stdlib/Test/docs/src/index.md | 4 ++++ stdlib/UUIDs/docs/src/index.md | 4 ++++ stdlib/Unicode/docs/src/index.md | 4 ++++ 23 files changed, 92 insertions(+) diff --git a/stdlib/Artifacts/docs/src/index.md b/stdlib/Artifacts/docs/src/index.md index 80f4c62cbf77f..2f6c9a07a8761 100644 --- a/stdlib/Artifacts/docs/src/index.md +++ b/stdlib/Artifacts/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Artifacts/docs/src/index.md" +``` + # Artifacts ```@meta diff --git a/stdlib/Base64/docs/src/index.md b/stdlib/Base64/docs/src/index.md index 6bc647f8a2e67..26e9d70f2ff9f 100644 --- a/stdlib/Base64/docs/src/index.md +++ b/stdlib/Base64/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Base64/docs/src/index.md" +``` + # Base64 ```@docs diff --git a/stdlib/CRC32c/docs/src/index.md b/stdlib/CRC32c/docs/src/index.md index 24a073d1e3938..c00a792232c70 100644 --- a/stdlib/CRC32c/docs/src/index.md +++ b/stdlib/CRC32c/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/CRC32c/docs/src/index.md" +``` + # CRC32c Standard library module for computing the CRC-32c checksum. diff --git a/stdlib/FileWatching/docs/src/index.md b/stdlib/FileWatching/docs/src/index.md index a420d49232345..1b2212fcc5a28 100644 --- a/stdlib/FileWatching/docs/src/index.md +++ b/stdlib/FileWatching/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/FileWatching/docs/src/index.md" +``` + # [File Events](@id lib-filewatching) ```@docs diff --git a/stdlib/Future/docs/src/index.md b/stdlib/Future/docs/src/index.md index dcb1a36541b6e..99250296f2c7d 100644 --- a/stdlib/Future/docs/src/index.md +++ b/stdlib/Future/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Future/docs/src/index.md" +``` + # Future The `Future` module implements future behavior of already existing functions, diff --git a/stdlib/InteractiveUtils/docs/src/index.md b/stdlib/InteractiveUtils/docs/src/index.md index 5ee8e57adc848..d0c46676127e6 100644 --- a/stdlib/InteractiveUtils/docs/src/index.md +++ b/stdlib/InteractiveUtils/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/InteractiveUtils/docs/src/index.md" +``` + # [Interactive Utilities](@id man-interactive-utils) This module is intended for interactive work. It is loaded automatically in [interactive mode](@ref command-line-interface). diff --git a/stdlib/LibGit2/docs/src/index.md b/stdlib/LibGit2/docs/src/index.md index 3205c4c5d6987..aa4ebf2e784b6 100644 --- a/stdlib/LibGit2/docs/src/index.md +++ b/stdlib/LibGit2/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/LibGit2/docs/src/index.md" +``` + # LibGit2 The LibGit2 module provides bindings to [libgit2](https://libgit2.org/), a portable C library that diff --git a/stdlib/Libdl/docs/src/index.md b/stdlib/Libdl/docs/src/index.md index 62f9837831d55..608562cfb410d 100644 --- a/stdlib/Libdl/docs/src/index.md +++ b/stdlib/Libdl/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Libdl/docs/src/index.md" +``` + # Dynamic Linker ```@docs diff --git a/stdlib/LinearAlgebra/docs/src/index.md b/stdlib/LinearAlgebra/docs/src/index.md index 00ce21ed6fcae..d603b983ed401 100644 --- a/stdlib/LinearAlgebra/docs/src/index.md +++ b/stdlib/LinearAlgebra/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/LinearAlgebra/docs/src/index.md" +``` + # [Linear Algebra](@id man-linalg) ```@meta diff --git a/stdlib/Logging/docs/src/index.md b/stdlib/Logging/docs/src/index.md index 9a269ee54571b..d42f02f7c5ea7 100644 --- a/stdlib/Logging/docs/src/index.md +++ b/stdlib/Logging/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Logging/docs/src/index.md" +``` + # [Logging](@id man-logging) The [`Logging`](@ref Logging.Logging) module provides a way to record the history and progress of a diff --git a/stdlib/Markdown/docs/src/index.md b/stdlib/Markdown/docs/src/index.md index a107929d1e838..6147c4fe19a93 100644 --- a/stdlib/Markdown/docs/src/index.md +++ b/stdlib/Markdown/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Markdown/docs/src/index.md" +``` + # [Markdown](@id markdown_stdlib) This section describes Julia's markdown syntax, which is enabled by the diff --git a/stdlib/Mmap/docs/src/index.md b/stdlib/Mmap/docs/src/index.md index 5c40f11db4a4c..5ec2d5064eaf0 100644 --- a/stdlib/Mmap/docs/src/index.md +++ b/stdlib/Mmap/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Mmap/docs/src/index.md" +``` + # Memory-mapped I/O Low level module for mmap (memory mapping of files). diff --git a/stdlib/Printf/docs/src/index.md b/stdlib/Printf/docs/src/index.md index 48e38e2b2ce5b..f56fe04b75224 100644 --- a/stdlib/Printf/docs/src/index.md +++ b/stdlib/Printf/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Printf/docs/src/index.md" +``` + # [Printf](@id man-printf) ```@docs diff --git a/stdlib/Profile/docs/src/index.md b/stdlib/Profile/docs/src/index.md index adb91cebb8c46..85a8452ab06df 100644 --- a/stdlib/Profile/docs/src/index.md +++ b/stdlib/Profile/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Profile/docs/src/index.md" +``` + # [Profiling](@id lib-profiling) ## CPU Profiling diff --git a/stdlib/REPL/docs/src/index.md b/stdlib/REPL/docs/src/index.md index ce594d55863bc..9f2611e24d740 100644 --- a/stdlib/REPL/docs/src/index.md +++ b/stdlib/REPL/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/REPL/docs/src/index.md" +``` + # The Julia REPL Julia comes with a full-featured interactive command-line REPL (read-eval-print loop) built into diff --git a/stdlib/Random/docs/src/index.md b/stdlib/Random/docs/src/index.md index e344e47947440..f54cc5cd235a5 100644 --- a/stdlib/Random/docs/src/index.md +++ b/stdlib/Random/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Random/docs/src/index.md" +``` + # Random Numbers ```@meta diff --git a/stdlib/Serialization/docs/src/index.md b/stdlib/Serialization/docs/src/index.md index 9f593a2e807d9..0d00e47ed84ce 100644 --- a/stdlib/Serialization/docs/src/index.md +++ b/stdlib/Serialization/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Serialization/docs/src/index.md" +``` + # Serialization Provides serialization of Julia objects. diff --git a/stdlib/SharedArrays/docs/src/index.md b/stdlib/SharedArrays/docs/src/index.md index 67ceabf42115a..91ef63bf18aed 100644 --- a/stdlib/SharedArrays/docs/src/index.md +++ b/stdlib/SharedArrays/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/SharedArrays/docs/src/index.md" +``` + # Shared Arrays `SharedArray` represents an array, which is shared across multiple processes, on a single machine. diff --git a/stdlib/Sockets/docs/src/index.md b/stdlib/Sockets/docs/src/index.md index c294461151d7d..feb1744179261 100644 --- a/stdlib/Sockets/docs/src/index.md +++ b/stdlib/Sockets/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Sockets/docs/src/index.md" +``` + # Sockets ```@docs diff --git a/stdlib/TOML/docs/src/index.md b/stdlib/TOML/docs/src/index.md index 36e8ec6248108..364ee808d0a51 100644 --- a/stdlib/TOML/docs/src/index.md +++ b/stdlib/TOML/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/TOML/docs/src/index.md" +``` + # TOML TOML.jl is a Julia standard library for parsing and writing [TOML diff --git a/stdlib/Test/docs/src/index.md b/stdlib/Test/docs/src/index.md index 1c9a55480d2c9..2de9cb239da02 100644 --- a/stdlib/Test/docs/src/index.md +++ b/stdlib/Test/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Test/docs/src/index.md" +``` + # Unit Testing ```@meta diff --git a/stdlib/UUIDs/docs/src/index.md b/stdlib/UUIDs/docs/src/index.md index 1e6c950dd8999..c9529a4a38170 100644 --- a/stdlib/UUIDs/docs/src/index.md +++ b/stdlib/UUIDs/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/UUIDs/docs/src/index.md" +``` + # UUIDs ```@docs diff --git a/stdlib/Unicode/docs/src/index.md b/stdlib/Unicode/docs/src/index.md index 2771c8a9f01cc..52aca55ab76ae 100644 --- a/stdlib/Unicode/docs/src/index.md +++ b/stdlib/Unicode/docs/src/index.md @@ -1,3 +1,7 @@ +```@meta +EditURL = "https://github.com/JuliaLang/julia/blob/master/stdlib/Unicode/docs/src/index.md" +``` + # Unicode ```@docs From 4f3a3ae705a12a397b8d1c5f574baa6e7dcb9a6c Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Tue, 23 Jan 2024 09:20:08 -0300 Subject: [PATCH 268/413] place work-stealing queue indices on different cache lines to avoid false-sharing (#52994) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For some reason this only shows up in the `many_refs.jl` benchmark, since it's the only one that hammers the work-stealing queue (we also didn't test this benchmark on a large number of GC threads in our [previous analysis](https://github.com/JuliaLang/julia/pull/48600#issuecomment-1518944785)). - master: ``` bench = "many_refs.jl" (gcthreads, threads) = (1, 1) ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 4268 │ 3243 │ 3048 │ 194 │ 1126 │ 15 │ 868 │ 76 │ │ median │ 4270 │ 3246 │ 3051 │ 195 │ 1128 │ 17 │ 868 │ 76 │ │ maximum │ 4278 │ 3247 │ 3052 │ 195 │ 1128 │ 18 │ 868 │ 76 │ │ stdev │ 5 │ 2 │ 2 │ 0 │ 1 │ 1 │ 0 │ 0 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (2, 1) ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 2728 │ 1692 │ 1551 │ 141 │ 598 │ 23 │ 868 │ 62 │ │ median │ 2732 │ 1709 │ 1567 │ 141 │ 603 │ 23 │ 868 │ 62 │ │ maximum │ 2744 │ 1712 │ 1571 │ 143 │ 607 │ 24 │ 868 │ 63 │ │ stdev │ 6 │ 9 │ 9 │ 1 │ 4 │ 0 │ 0 │ 0 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (4, 1) ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 2105 │ 1082 │ 987 │ 95 │ 405 │ 23 │ 875 │ 51 │ │ median │ 2115 │ 1089 │ 994 │ 95 │ 409 │ 23 │ 875 │ 52 │ │ maximum │ 2127 │ 1100 │ 1003 │ 97 │ 417 │ 25 │ 875 │ 52 │ │ stdev │ 8 │ 8 │ 7 │ 1 │ 5 │ 1 │ 0 │ 0 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (8, 1) ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 3861 │ 2755 │ 2676 │ 79 │ 1301 │ 22 │ 878 │ 68 │ │ median │ 3864 │ 2835 │ 2756 │ 80 │ 1342 │ 25 │ 879 │ 73 │ │ maximum │ 4032 │ 2877 │ 2797 │ 80 │ 1378 │ 26 │ 880 │ 74 │ │ stdev │ 73 │ 45 │ 45 │ 1 │ 28 │ 2 │ 1 │ 2 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (16, 1) ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 7455 │ 6425 │ 6344 │ 80 │ 3262 │ 24 │ 882 │ 86 │ │ median │ 7703 │ 6682 │ 6602 │ 81 │ 3313 │ 25 │ 884 │ 87 │ │ maximum │ 7826 │ 6806 │ 6725 │ 81 │ 3422 │ 27 │ 887 │ 87 │ │ stdev │ 152 │ 153 │ 153 │ 0 │ 68 │ 1 │ 2 │ 0 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ ``` - PR: ``` bench = "many_refs.jl" (gcthreads, threads) = (1, 1) ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 4264 │ 3240 │ 3048 │ 192 │ 1127 │ 15 │ 868 │ 76 │ │ median │ 4271 │ 3244 │ 3052 │ 192 │ 1129 │ 17 │ 868 │ 76 │ │ maximum │ 4514 │ 3481 │ 3289 │ 193 │ 1247 │ 18 │ 868 │ 77 │ │ stdev │ 109 │ 106 │ 106 │ 0 │ 53 │ 1 │ 0 │ 1 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (2, 1) ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 2712 │ 1680 │ 1541 │ 138 │ 591 │ 22 │ 868 │ 62 │ │ median │ 2713 │ 1691 │ 1552 │ 140 │ 594 │ 24 │ 868 │ 62 │ │ maximum │ 2732 │ 1710 │ 1569 │ 141 │ 606 │ 25 │ 868 │ 63 │ │ stdev │ 11 │ 12 │ 12 │ 1 │ 6 │ 1 │ 0 │ 0 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (4, 1) ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 2090 │ 1057 │ 962 │ 95 │ 398 │ 22 │ 874 │ 50 │ │ median │ 2103 │ 1070 │ 974 │ 95 │ 401 │ 24 │ 874 │ 51 │ │ maximum │ 2140 │ 1074 │ 978 │ 96 │ 402 │ 25 │ 875 │ 51 │ │ stdev │ 19 │ 6 │ 6 │ 0 │ 1 │ 1 │ 1 │ 1 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (8, 1) ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 2236 │ 1208 │ 1129 │ 79 │ 528 │ 23 │ 880 │ 54 │ │ median │ 2238 │ 1214 │ 1135 │ 79 │ 533 │ 23 │ 880 │ 54 │ │ maximum │ 2246 │ 1218 │ 1138 │ 80 │ 534 │ 35 │ 880 │ 54 │ │ stdev │ 4 │ 4 │ 4 │ 0 │ 3 │ 5 │ 0 │ 0 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (16, 1) ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 2326 │ 1297 │ 1216 │ 80 │ 595 │ 24 │ 884 │ 56 │ │ median │ 2348 │ 1325 │ 1245 │ 80 │ 620 │ 25 │ 885 │ 56 │ │ maximum │ 2370 │ 1341 │ 1262 │ 81 │ 631 │ 26 │ 887 │ 57 │ │ stdev │ 17 │ 19 │ 19 │ 0 │ 14 │ 1 │ 1 │ 0 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ ``` (cherry picked from commit 9f36490f02e92302d93e9f993cadbde04c104f9c) --- src/work-stealing-queue.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/work-stealing-queue.h b/src/work-stealing-queue.h index 38429e02886e9..084e421fd58b3 100644 --- a/src/work-stealing-queue.h +++ b/src/work-stealing-queue.h @@ -36,7 +36,8 @@ static inline ws_array_t *create_ws_array(size_t capacity, int32_t eltsz) JL_NOT typedef struct { _Atomic(int64_t) top; - _Atomic(int64_t) bottom; + char _padding[128 - sizeof(int64_t)]; + _Atomic(int64_t) bottom; // put on a separate cache line. conservatively estimate cache line size as 128 bytes _Atomic(ws_array_t *) array; } ws_queue_t; From 8517eb343c62ec1b8856aed8cdee1ccc9ef584ca Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Tue, 23 Jan 2024 20:10:41 +0530 Subject: [PATCH 269/413] Add type assertion in iterate for logicalindex (#53015) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The type-assertion helps convey the information that `iterate(tail(s)...)` would never return `nothing`, which makes JET happy. On master ```julia julia> L = Base.LogicalIndex([true]) 1-element Base.LogicalIndex{Int64, Vector{Bool}}: 1 julia> @report_call iterate(L) ═════ 2 possible errors found ═════ ┌ iterate(L::Base.LogicalIndex{Int64, Vector{Bool}}) @ Base ./multidimensional.jl:778 │┌ iterate(L::Base.LogicalIndex{Int64, Vector{Bool}}, s::Tuple{Int64, LinearIndices{1, Tuple{Base.OneTo{Int64}}}}) @ Base ./multidimensional.jl:789 ││┌ indexed_iterate(I::Nothing, i::Int64) @ Base ./tuple.jl:94 │││ no matching method found `iterate(::Nothing)`: x = iterate(I::Nothing) ││└──────────────────── ││┌ indexed_iterate(I::Nothing, i::Int64, state::Int64) @ Base ./tuple.jl:99 │││ no matching method found `iterate(::Nothing, ::Int64)`: x = iterate(I::Nothing, state::Int64) ``` This PR ```julia julia> @report_call iterate(L) No errors detected ``` Close https://github.com/JuliaArrays/StaticArrays.jl/issues/1225 (cherry picked from commit 32ad80bbdb6d80589e0232221dd66e52a8da205b) --- base/multidimensional.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/multidimensional.jl b/base/multidimensional.jl index 02f2075919fbd..050e1503d2e58 100644 --- a/base/multidimensional.jl +++ b/base/multidimensional.jl @@ -810,11 +810,11 @@ end n = s[1] n > length(L) && return nothing #unroll once to help inference, cf issue #29418 - idx, i = iterate(tail(s)...) + idx, i = iterate(tail(s)...)::Tuple{Any,Any} s = (n+1, s[2], i) L.mask[idx] && return (idx, s) while true - idx, i = iterate(tail(s)...) + idx, i = iterate(tail(s)...)::Tuple{Any,Any} s = (n+1, s[2], i) L.mask[idx] && return (idx, s) end From fa85fa786c7964a674d0daf8a04b179de7a0cebf Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 24 Jan 2024 13:31:28 +0100 Subject: [PATCH 270/413] Fix a list in GC devdocs (#53032) When splitting a Markdown list item into multiple lines, the following lines must be indented or else a new paragraph starts. (cherry picked from commit 35c0498ceb1668fbc05ff5ae24ac1e696fdfa6a5) --- doc/src/devdocs/gc.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/src/devdocs/gc.md b/doc/src/devdocs/gc.md index d11fafe744f14..0a788f326d69a 100644 --- a/doc/src/devdocs/gc.md +++ b/doc/src/devdocs/gc.md @@ -26,10 +26,10 @@ Julia's pool allocator follows a "tiered" allocation discipline. When requesting - If it failed claiming a page from `page_pool_lazily_freed`, it will try to claim a page from `the page_pool_clean`, which contains pages which were mmaped on a previous page allocation request but never accessed. - If it failed claiming a page from `pool_page_clean` and from `page_pool_lazily_freed`, it will try to claim a page -from `page_pool_freed`, which contains pages which have already been madvised by a concurrent sweeper GC thread and whose underlying virtual address can be recycled. + from `page_pool_freed`, which contains pages which have already been madvised by a concurrent sweeper GC thread and whose underlying virtual address can be recycled. - If it failed in all of the attempts mentioned above, it will mmap a batch of pages, claim one page for itself, and -insert the remaining pages into `page_pool_clean`. + insert the remaining pages into `page_pool_clean`. ![Diagram of tiered pool allocation](./img/gc-tiered-allocation.jpg) From a4cc9205e8391f49d4e4b65e86b2178a7c64912c Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Wed, 13 Sep 2023 17:36:11 -0400 Subject: [PATCH 271/413] make "dec" and ryu functions faster and simpler (#51273) We had some common code in `Ryu.append_c_digits` that can be combined with Base logic for the same thing. But it turns out all of this duplicated code in Ryu seems to just make it run slightly slower in most cases. The old version had many more branches to check, even though often numbers are small, so only the last check is meaningful. But the assumption that it would be faster even if all of them were used also seems to not hold up in practice. Particularly for a function like `append_nine_digits` which unrolls completely, but the complicated version has slightly more data dependencies because of they way it is written. Similarly, we replace `unsafe_copy` with `@inbounds[]`, since this is better for the optimizer, which doesn't need to treat this operation as an unknown reference escape. Lastly, we use the append_nine_digits trick from Ryu to make printing of arbitrary big numbers much faster. ``` julia> @btime string(typemax(Int128)) 402.345 ns (2 allocations: 120 bytes) # before 151.139 ns (2 allocations: 120 bytes) # after ``` (cherry picked from commit e9d931419c54c21f749bcac0991fc9f5a059d4aa) --- base/intfuncs.jl | 86 ++++++++++++++---- base/ryu/exp.jl | 70 ++++++++------- base/ryu/fixed.jl | 2 +- base/ryu/shortest.jl | 209 ++++++++++++++++++------------------------- base/ryu/utils.jl | 118 +++--------------------- 5 files changed, 200 insertions(+), 285 deletions(-) diff --git a/base/intfuncs.jl b/base/intfuncs.jl index 1b007700f4331..90dc393a0e9b4 100644 --- a/base/intfuncs.jl +++ b/base/intfuncs.jl @@ -558,7 +558,7 @@ function bit_ndigits0z(x::Base.BitUnsigned64) end function bit_ndigits0z(x::UInt128) n = 0 - while x > 0x8ac7230489e80000 + while x > 0x8ac7230489e80000 # 10e18 x = div(x,0x8ac7230489e80000) n += 19 end @@ -724,7 +724,7 @@ function bin(x::Unsigned, pad::Int, neg::Bool) x >>= 0x1 i -= 1 end - if neg; @inbounds a[1]=0x2d; end + neg && (@inbounds a[1] = 0x2d) # UInt8('-') String(a) end @@ -738,29 +738,77 @@ function oct(x::Unsigned, pad::Int, neg::Bool) x >>= 0x3 i -= 1 end - if neg; @inbounds a[1]=0x2d; end + neg && (@inbounds a[1] = 0x2d) # UInt8('-') String(a) end # 2-digit decimal characters ("00":"99") -const _dec_d100 = UInt16[(0x30 + i % 10) << 0x8 + (0x30 + i ÷ 10) for i = 0:99] +const _dec_d100 = UInt16[ +# generating expression: UInt16[(0x30 + i % 10) << 0x8 + (0x30 + i ÷ 10) for i = 0:99] +# 0 0, 0 1, 0 2, 0 3, and so on in little-endian + 0x3030, 0x3130, 0x3230, 0x3330, 0x3430, 0x3530, 0x3630, 0x3730, 0x3830, 0x3930, + 0x3031, 0x3131, 0x3231, 0x3331, 0x3431, 0x3531, 0x3631, 0x3731, 0x3831, 0x3931, + 0x3032, 0x3132, 0x3232, 0x3332, 0x3432, 0x3532, 0x3632, 0x3732, 0x3832, 0x3932, + 0x3033, 0x3133, 0x3233, 0x3333, 0x3433, 0x3533, 0x3633, 0x3733, 0x3833, 0x3933, + 0x3034, 0x3134, 0x3234, 0x3334, 0x3434, 0x3534, 0x3634, 0x3734, 0x3834, 0x3934, + 0x3035, 0x3135, 0x3235, 0x3335, 0x3435, 0x3535, 0x3635, 0x3735, 0x3835, 0x3935, + 0x3036, 0x3136, 0x3236, 0x3336, 0x3436, 0x3536, 0x3636, 0x3736, 0x3836, 0x3936, + 0x3037, 0x3137, 0x3237, 0x3337, 0x3437, 0x3537, 0x3637, 0x3737, 0x3837, 0x3937, + 0x3038, 0x3138, 0x3238, 0x3338, 0x3438, 0x3538, 0x3638, 0x3738, 0x3838, 0x3938, + 0x3039, 0x3139, 0x3239, 0x3339, 0x3439, 0x3539, 0x3639, 0x3739, 0x3839, 0x3939 +] -function dec(x::Unsigned, pad::Int, neg::Bool) - n = neg + ndigits(x, pad=pad) - a = StringVector(n) - i = n - @inbounds while i >= 2 - d, r = divrem(x, 0x64) - d100 = _dec_d100[(r % Int)::Int + 1] - a[i-1] = d100 % UInt8 - a[i] = (d100 >> 0x8) % UInt8 - x = oftype(x, d) +function append_c_digits(olength::Int, digits::Unsigned, buf, pos::Int) + i = olength + while i >= 2 + d, c = divrem(digits, 0x64) + digits = oftype(digits, d) + @inbounds d100 = _dec_d100[(c % Int) + 1] + @inbounds buf[pos + i - 2] = d100 % UInt8 + @inbounds buf[pos + i - 1] = (d100 >> 0x8) % UInt8 i -= 2 end - if i > neg - @inbounds a[i] = 0x30 + (rem(x, 0xa) % UInt8)::UInt8 + if i == 1 + @inbounds buf[pos] = UInt8('0') + rem(digits, 0xa) % UInt8 + i -= 1 end - if neg; @inbounds a[1]=0x2d; end + return pos + olength +end + +function append_nine_digits(digits::Unsigned, buf, pos::Int) + if digits == 0 + for _ = 1:9 + @inbounds buf[pos] = UInt8('0') + pos += 1 + end + return pos + end + return @inline append_c_digits(9, digits, buf, pos) # force loop-unrolling on the length +end + +function append_c_digits_fast(olength::Int, digits::Unsigned, buf, pos::Int) + i = olength + # n.b. olength may be larger than required to print all of `digits` (and will be padded + # with zeros), but the printed number will be undefined if it is smaller, and may include + # bits of both the high and low bytes. + maxpow10 = 0x3b9aca00 # 10e9 as UInt32 + while i > 9 && digits > typemax(UInt) + # do everything in cheap math chunks, using the processor's native math size + d, c = divrem(digits, maxpow10) + digits = oftype(digits, d) + append_nine_digits(c % UInt32, buf, pos + i - 9) + i -= 9 + end + append_c_digits(i, digits % UInt, buf, pos) + return pos + olength +end + + +function dec(x::Unsigned, pad::Int, neg::Bool) + n = neg + ndigits(x, pad=pad) + a = StringVector(n) + append_c_digits_fast(n, x, a, 1) + neg && (@inbounds a[1] = 0x2d) # UInt8('-') String(a) end @@ -781,7 +829,7 @@ function hex(x::Unsigned, pad::Int, neg::Bool) d = (x % UInt8)::UInt8 & 0xf @inbounds a[i] = d + ifelse(d > 0x9, 0x57, 0x30) end - if neg; @inbounds a[1]=0x2d; end + neg && (@inbounds a[1] = 0x2d) # UInt8('-') String(a) end @@ -806,7 +854,7 @@ function _base(base::Integer, x::Integer, pad::Int, neg::Bool) end i -= 1 end - if neg; @inbounds a[1]=0x2d; end + neg && (@inbounds a[1] = 0x2d) # UInt8('-') String(a) end diff --git a/base/ryu/exp.jl b/base/ryu/exp.jl index 90c6869f8847f..b38b2c7ae9a29 100644 --- a/base/ryu/exp.jl +++ b/base/ryu/exp.jl @@ -8,33 +8,33 @@ function writeexp(buf, pos, v::T, # special cases if x == 0 - buf[pos] = UInt8('0') + @inbounds buf[pos] = UInt8('0') pos += 1 if precision > 0 && !trimtrailingzeros - buf[pos] = decchar + @inbounds buf[pos] = decchar pos += 1 for _ = 1:precision - buf[pos] = UInt8('0') + @inbounds buf[pos] = UInt8('0') pos += 1 end elseif hash - buf[pos] = decchar + @inbounds buf[pos] = decchar pos += 1 end - buf[pos] = expchar - buf[pos + 1] = UInt8('+') - buf[pos + 2] = UInt8('0') - buf[pos + 3] = UInt8('0') + @inbounds buf[pos] = expchar + @inbounds buf[pos + 1] = UInt8('+') + @inbounds buf[pos + 2] = UInt8('0') + @inbounds buf[pos + 3] = UInt8('0') return pos + 4 elseif isnan(x) - buf[pos] = UInt8('N') - buf[pos + 1] = UInt8('a') - buf[pos + 2] = UInt8('N') + @inbounds buf[pos] = UInt8('N') + @inbounds buf[pos + 1] = UInt8('a') + @inbounds buf[pos + 2] = UInt8('N') return pos + 3 elseif !isfinite(x) - buf[pos] = UInt8('I') - buf[pos + 1] = UInt8('n') - buf[pos + 2] = UInt8('f') + @inbounds buf[pos] = UInt8('I') + @inbounds buf[pos + 1] = UInt8('n') + @inbounds buf[pos + 2] = UInt8('f') return pos + 3 end @@ -80,10 +80,10 @@ function writeexp(buf, pos, v::T, if precision > 1 pos = append_d_digits(availableDigits, digits, buf, pos, decchar) else - buf[pos] = UInt8('0') + digits + @inbounds buf[pos] = UInt8('0') + digits pos += 1 if hash - buf[pos] = decchar + @inbounds buf[pos] = decchar pos += 1 end end @@ -121,10 +121,10 @@ function writeexp(buf, pos, v::T, if precision > 1 pos = append_d_digits(availableDigits, digits, buf, pos, decchar) else - buf[pos] = UInt8('0') + digits + @inbounds buf[pos] = UInt8('0') + digits pos += 1 if hash - buf[pos] = decchar + @inbounds buf[pos] = decchar pos += 1 end end @@ -162,7 +162,7 @@ function writeexp(buf, pos, v::T, if printedDigits != 0 if digits == 0 for _ = 1:maximum - buf[pos] = UInt8('0') + @inbounds buf[pos] = UInt8('0') pos += 1 end else @@ -172,10 +172,10 @@ function writeexp(buf, pos, v::T, if precision > 1 pos = append_d_digits(maximum, digits, buf, pos, decchar) else - buf[pos] = UInt8('0') + digits + @inbounds buf[pos] = UInt8('0') + digits pos += 1 if hash - buf[pos] = decchar + @inbounds buf[pos] = decchar pos += 1 end end @@ -184,52 +184,56 @@ function writeexp(buf, pos, v::T, roundPos = pos while true roundPos -= 1 - if roundPos == (startpos - 1) || buf[roundPos] == UInt8('-') || (plus && buf[roundPos] == UInt8('+')) || (space && buf[roundPos] == UInt8(' ')) - buf[roundPos + 1] = UInt8('1') + if roundPos == (startpos - 1) || (@inbounds buf[roundPos]) == UInt8('-') || (plus && (@inbounds buf[roundPos]) == UInt8('+')) || (space && (@inbounds buf[roundPos]) == UInt8(' ')) + @inbounds buf[roundPos + 1] = UInt8('1') e += 1 break end - c = roundPos > 0 ? buf[roundPos] : 0x00 + c = roundPos > 0 ? (@inbounds buf[roundPos]) : 0x00 if c == decchar continue elseif c == UInt8('9') - buf[roundPos] = UInt8('0') + @inbounds buf[roundPos] = UInt8('0') roundUp = 1 continue else if roundUp == 2 && UInt8(c) % 2 == 0 break end - buf[roundPos] = c + 1 + @inbounds buf[roundPos] = c + 1 break end end end if trimtrailingzeros - while buf[pos - 1] == UInt8('0') + while @inbounds buf[pos - 1] == UInt8('0') pos -= 1 end - if buf[pos - 1] == decchar && !hash + if @inbounds buf[pos - 1] == decchar && !hash pos -= 1 end end buf[pos] = expchar pos += 1 if e < 0 - buf[pos] = UInt8('-') + @inbounds buf[pos] = UInt8('-') pos += 1 e = -e else - buf[pos] = UInt8('+') + @inbounds buf[pos] = UInt8('+') pos += 1 end if e >= 100 c = e % 10 - unsafe_copyto!(buf, pos, DIGIT_TABLE, 2 * div(e, 10) + 1, 2) - buf[pos + 2] = UInt8('0') + c + @inbounds d100 = DIGIT_TABLE16[div(e, 10) + 1] + @inbounds buf[pos] = d100 % UInt8 + @inbounds buf[pos + 1] = (d100 >> 0x8) % UInt8 + @inbounds buf[pos + 2] = UInt8('0') + c pos += 3 else - unsafe_copyto!(buf, pos, DIGIT_TABLE, 2 * e + 1, 2) + @inbounds d100 = DIGIT_TABLE16[e + 1] + @inbounds buf[pos] = d100 % UInt8 + @inbounds buf[pos + 1] = (d100 >> 0x8) % UInt8 pos += 2 end return pos diff --git a/base/ryu/fixed.jl b/base/ryu/fixed.jl index f0b96fef966f0..96777059bc284 100644 --- a/base/ryu/fixed.jl +++ b/base/ryu/fixed.jl @@ -59,7 +59,7 @@ function writefixed(buf, pos, v::T, pos = append_nine_digits(digits, buf, pos) elseif digits != 0 olength = decimallength(digits) - pos = append_n_digits(olength, digits, buf, pos) + pos = append_c_digits(olength, digits, buf, pos) nonzero = true end i -= 1 diff --git a/base/ryu/shortest.jl b/base/ryu/shortest.jl index aaa62ba33c703..32aa993467e7a 100644 --- a/base/ryu/shortest.jl +++ b/base/ryu/shortest.jl @@ -232,79 +232,79 @@ function writeshortest(buf::Vector{UInt8}, pos, x::T, # special cases if x == 0 if typed && x isa Float16 - buf[pos] = UInt8('F') - buf[pos + 1] = UInt8('l') - buf[pos + 2] = UInt8('o') - buf[pos + 3] = UInt8('a') - buf[pos + 4] = UInt8('t') - buf[pos + 5] = UInt8('1') - buf[pos + 6] = UInt8('6') - buf[pos + 7] = UInt8('(') + @inbounds buf[pos] = UInt8('F') + @inbounds buf[pos + 1] = UInt8('l') + @inbounds buf[pos + 2] = UInt8('o') + @inbounds buf[pos + 3] = UInt8('a') + @inbounds buf[pos + 4] = UInt8('t') + @inbounds buf[pos + 5] = UInt8('1') + @inbounds buf[pos + 6] = UInt8('6') + @inbounds buf[pos + 7] = UInt8('(') pos += 8 end pos = append_sign(x, plus, space, buf, pos) - buf[pos] = UInt8('0') + @inbounds buf[pos] = UInt8('0') pos += 1 if hash - buf[pos] = decchar + @inbounds buf[pos] = decchar pos += 1 end if precision == -1 - buf[pos] = UInt8('0') + @inbounds buf[pos] = UInt8('0') pos += 1 if typed && x isa Float32 - buf[pos] = UInt8('f') - buf[pos + 1] = UInt8('0') + @inbounds buf[pos] = UInt8('f') + @inbounds buf[pos + 1] = UInt8('0') pos += 2 end if typed && x isa Float16 - buf[pos] = UInt8(')') + @inbounds buf[pos] = UInt8(')') pos += 1 end return pos end while hash && precision > 1 - buf[pos] = UInt8('0') + @inbounds buf[pos] = UInt8('0') pos += 1 precision -= 1 end if typed && x isa Float32 - buf[pos] = UInt8('f') - buf[pos + 1] = UInt8('0') + @inbounds buf[pos] = UInt8('f') + @inbounds buf[pos + 1] = UInt8('0') pos += 2 end if typed && x isa Float16 - buf[pos] = UInt8(')') + @inbounds buf[pos] = UInt8(')') pos += 1 end return pos elseif isnan(x) pos = append_sign(x, plus, space, buf, pos) - buf[pos] = UInt8('N') - buf[pos + 1] = UInt8('a') - buf[pos + 2] = UInt8('N') + @inbounds buf[pos] = UInt8('N') + @inbounds buf[pos + 1] = UInt8('a') + @inbounds buf[pos + 2] = UInt8('N') if typed if x isa Float32 - buf[pos + 3] = UInt8('3') - buf[pos + 4] = UInt8('2') + @inbounds buf[pos + 3] = UInt8('3') + @inbounds buf[pos + 4] = UInt8('2') elseif x isa Float16 - buf[pos + 3] = UInt8('1') - buf[pos + 4] = UInt8('6') + @inbounds buf[pos + 3] = UInt8('1') + @inbounds buf[pos + 4] = UInt8('6') end end return pos + 3 + (typed && x isa Union{Float32, Float16} ? 2 : 0) elseif !isfinite(x) pos = append_sign(x, plus, space, buf, pos) - buf[pos] = UInt8('I') - buf[pos + 1] = UInt8('n') - buf[pos + 2] = UInt8('f') + @inbounds buf[pos] = UInt8('I') + @inbounds buf[pos + 1] = UInt8('n') + @inbounds buf[pos + 2] = UInt8('f') if typed if x isa Float32 - buf[pos + 3] = UInt8('3') - buf[pos + 4] = UInt8('2') + @inbounds buf[pos + 3] = UInt8('3') + @inbounds buf[pos + 4] = UInt8('2') elseif x isa Float16 - buf[pos + 3] = UInt8('1') - buf[pos + 4] = UInt8('6') + @inbounds buf[pos + 3] = UInt8('1') + @inbounds buf[pos + 4] = UInt8('6') end end return pos + 3 + (typed && x isa Union{Float32, Float16} ? 2 : 0) @@ -313,14 +313,14 @@ function writeshortest(buf::Vector{UInt8}, pos, x::T, output, nexp = reduce_shortest(x, compact ? 999_999 : nothing) if typed && x isa Float16 - buf[pos] = UInt8('F') - buf[pos + 1] = UInt8('l') - buf[pos + 2] = UInt8('o') - buf[pos + 3] = UInt8('a') - buf[pos + 4] = UInt8('t') - buf[pos + 5] = UInt8('1') - buf[pos + 6] = UInt8('6') - buf[pos + 7] = UInt8('(') + @inbounds buf[pos] = UInt8('F') + @inbounds buf[pos + 1] = UInt8('l') + @inbounds buf[pos + 2] = UInt8('o') + @inbounds buf[pos + 3] = UInt8('a') + @inbounds buf[pos + 4] = UInt8('t') + @inbounds buf[pos + 5] = UInt8('1') + @inbounds buf[pos + 6] = UInt8('6') + @inbounds buf[pos + 7] = UInt8('(') pos += 8 end pos = append_sign(x, plus, space, buf, pos) @@ -332,161 +332,122 @@ function writeshortest(buf::Vector{UInt8}, pos, x::T, !(pt >= olength && abs(mod(x + 0.05, 10^(pt - olength)) - 0.05) > 0.05) exp_form = false if pt <= 0 - buf[pos] = UInt8('0') + @inbounds buf[pos] = UInt8('0') pos += 1 - buf[pos] = decchar + @inbounds buf[pos] = decchar pos += 1 for _ = 1:abs(pt) - buf[pos] = UInt8('0') + @inbounds buf[pos] = UInt8('0') pos += 1 end - # elseif pt >= olength + # elseif pt >= olength # nothing to do at this point - # else + # else # nothing to do at this point end else + # make space for decchar pos += 1 end - i = 0 - ptr = pointer(buf) - ptr2 = pointer(DIGIT_TABLE) - if (output >> 32) != 0 - q = output ÷ 100000000 - output2 = (output % UInt32) - UInt32(100000000) * (q % UInt32) - output = q - c = output2 % UInt32(10000) - output2 = div(output2, UInt32(10000)) - d = output2 % UInt32(10000) - c0 = (c % 100) << 1 - c1 = (c ÷ 100) << 1 - d0 = (d % 100) << 1 - d1 = (d ÷ 100) << 1 - memcpy(ptr + pos + olength - 3, ptr2 + c0, 2) - memcpy(ptr + pos + olength - 5, ptr2 + c1, 2) - memcpy(ptr + pos + olength - 7, ptr2 + d0, 2) - memcpy(ptr + pos + olength - 9, ptr2 + d1, 2) - i += 8 - end - output2 = output % UInt32 - while output2 >= 10000 - c = output2 % UInt32(10000) - output2 = div(output2, UInt32(10000)) - c0 = (c % 100) << 1 - c1 = (c ÷ 100) << 1 - memcpy(ptr + pos + olength - i - 3, ptr2 + c0, 2) - memcpy(ptr + pos + olength - i - 5, ptr2 + c1, 2) - i += 4 - end - if output2 >= 100 - c = (output2 % UInt32(100)) << 1 - output2 = div(output2, UInt32(100)) - memcpy(ptr + pos + olength - i - 3, ptr2 + c, 2) - i += 2 - end - if output2 >= 10 - c = output2 << 1 - buf[pos + 1] = DIGIT_TABLE[c + 2] - buf[pos - exp_form] = DIGIT_TABLE[c + 1] - else - buf[pos - exp_form] = UInt8('0') + (output2 % UInt8) - end + append_c_digits(olength, output, buf, pos) if !exp_form if pt <= 0 pos += olength precision -= olength - while hash && precision > 0 - buf[pos] = UInt8('0') - pos += 1 - precision -= 1 - end elseif pt >= olength pos += olength precision -= olength for _ = 1:nexp - buf[pos] = UInt8('0') + @inbounds buf[pos] = UInt8('0') pos += 1 precision -= 1 end if hash - buf[pos] = decchar + @inbounds buf[pos] = decchar pos += 1 if precision < 0 - buf[pos] = UInt8('0') + @inbounds buf[pos] = UInt8('0') pos += 1 end - while precision > 0 - buf[pos] = UInt8('0') - pos += 1 - precision -= 1 - end end else pointoff = olength - abs(nexp) + # shift bytes after pointoff to make room for decchar + ptr = pointer(buf) memmove(ptr + pos + pointoff, ptr + pos + pointoff - 1, olength - pointoff + 1) - buf[pos + pointoff] = decchar + @inbounds buf[pos + pointoff] = decchar pos += olength + 1 precision -= olength - while hash && precision > 0 - buf[pos] = UInt8('0') + end + if hash + while precision > 0 + @inbounds buf[pos] = UInt8('0') pos += 1 precision -= 1 end end if typed && x isa Float32 - buf[pos] = UInt8('f') - buf[pos + 1] = UInt8('0') + @inbounds buf[pos] = UInt8('f') + @inbounds buf[pos + 1] = UInt8('0') pos += 2 end else + # move leading digit into place + @inbounds buf[pos - 1] = buf[pos] if olength > 1 || hash - buf[pos] = decchar + @inbounds buf[pos] = decchar pos += olength precision -= olength end - if hash && olength == 1 - buf[pos] = UInt8('0') - pos += 1 - end - while hash && precision > 0 - buf[pos] = UInt8('0') - pos += 1 - precision -= 1 + if hash + if olength == 1 + @inbounds buf[pos] = UInt8('0') + pos += 1 + end + while precision > 0 + @inbounds buf[pos] = UInt8('0') + pos += 1 + precision -= 1 + end end - buf[pos] = expchar + @inbounds buf[pos] = expchar pos += 1 exp2 = nexp + olength - 1 if exp2 < 0 - buf[pos] = UInt8('-') + @inbounds buf[pos] = UInt8('-') pos += 1 exp2 = -exp2 elseif padexp - buf[pos] = UInt8('+') + @inbounds buf[pos] = UInt8('+') pos += 1 end if exp2 >= 100 c = exp2 % 10 - memcpy(ptr + pos - 1, ptr2 + 2 * div(exp2, 10), 2) - buf[pos + 2] = UInt8('0') + (c % UInt8) + @inbounds d100 = DIGIT_TABLE16[(div(exp2, 10) % Int) + 1] + @inbounds buf[pos] = d100 % UInt8 + @inbounds buf[pos + 1] = (d100 >> 0x8) % UInt8 + @inbounds buf[pos + 2] = UInt8('0') + (c % UInt8) pos += 3 elseif exp2 >= 10 - memcpy(ptr + pos - 1, ptr2 + 2 * exp2, 2) + @inbounds d100 = DIGIT_TABLE16[(exp2 % Int) + 1] + @inbounds buf[pos] = d100 % UInt8 + @inbounds buf[pos + 1] = (d100 >> 0x8) % UInt8 pos += 2 else if padexp - buf[pos] = UInt8('0') + @inbounds buf[pos] = UInt8('0') pos += 1 end - buf[pos] = UInt8('0') + (exp2 % UInt8) + @inbounds buf[pos] = UInt8('0') + (exp2 % UInt8) pos += 1 end end if typed && x isa Float16 - buf[pos] = UInt8(')') + @inbounds buf[pos] = UInt8(')') pos += 1 end diff --git a/base/ryu/utils.jl b/base/ryu/utils.jl index f5a88c057e2b3..2064dfbefcecd 100644 --- a/base/ryu/utils.jl +++ b/base/ryu/utils.jl @@ -134,7 +134,7 @@ end Compute `p = a*b` where `b = bLo + bHi<<64`, returning the result as `pLo, pHi` where `p = pLo + pHi<<128`. """ -function umul256(a, bHi, bLo) +function umul256(a::UInt128, bHi::UInt64, bLo::UInt64) aLo = a % UInt64 aHi = (a >> 64) % UInt64 @@ -164,7 +164,7 @@ end Compute `pHi = (a*b)>>128` where `b = bLo + bHi<<64`. """ -umul256_hi(a, bHi, bLo) = umul256(a, bHi, bLo)[2] +umul256_hi(a::UInt128, bHi::UInt64, bLo::UInt64) = umul256(a, bHi, bLo)[2] """ Ryu.mulshiftmod1e9(m, mula, mulb, mulc, j)::UInt32 @@ -183,7 +183,7 @@ function mulshiftmod1e9(m, mula, mulb, mulc, j) return (v % UInt32) - UInt32(1000000000) * shifted end -function append_sign(x, plus, space, buf, pos) +function append_sign(x, plus::Bool, space::Bool, buf, pos::Int) if signbit(x) && !isnan(x) # suppress minus sign for signaling NaNs buf[pos] = UInt8('-') pos += 1 @@ -197,101 +197,14 @@ function append_sign(x, plus, space, buf, pos) return pos end -function append_n_digits(olength, digits, buf, pos) - i = 0 - while digits >= 10000 - c = digits % 10000 - digits = div(digits, 10000) - c0 = (c % 100) << 1 - c1 = div(c, 100) << 1 - unsafe_copyto!(buf, pos + olength - i - 2, DIGIT_TABLE, c0 + 1, 2) - unsafe_copyto!(buf, pos + olength - i - 4, DIGIT_TABLE, c1 + 1, 2) - i += 4 - end - if digits >= 100 - c = (digits % 100) << 1 - digits = div(digits, 100) - unsafe_copyto!(buf, pos + olength - i - 2, DIGIT_TABLE, c + 1, 2) - i += 2 - end - if digits >= 10 - c = digits << 1 - unsafe_copyto!(buf, pos + olength - i - 2, DIGIT_TABLE, c + 1, 2) - i += 2 - else - buf[pos] = UInt8('0') + digits - i += 1 - end - return pos + i -end - -function append_d_digits(olength, digits, buf, pos, decchar) - i = 0 - while digits >= 10000 - c = digits % 10000 - digits = div(digits, 10000) - c0 = (c % 100) << 1 - c1 = div(c, 100) << 1 - unsafe_copyto!(buf, pos + olength + 1 - i - 2, DIGIT_TABLE, c0 + 1, 2) - unsafe_copyto!(buf, pos + olength + 1 - i - 4, DIGIT_TABLE, c1 + 1, 2) - i += 4 - end - if digits >= 100 - c = (digits % 100) << 1 - digits = div(digits, 100) - unsafe_copyto!(buf, pos + olength + 1 - i - 2, DIGIT_TABLE, c + 1, 2) - i += 2 - end - if digits >= 10 - c = digits << 1 - buf[pos] = DIGIT_TABLE[c + 1] - buf[pos + 1] = decchar - buf[pos + 2] = DIGIT_TABLE[c + 2] - i += 3 - else - buf[pos] = UInt8('0') + digits - buf[pos + 1] = decchar - i += 2 - end - return pos + i -end -function append_c_digits(count, digits, buf, pos) - i = 0 - while i < count - 1 - c = (digits % 100) << 1 - digits = div(digits, 100) - unsafe_copyto!(buf, pos + count - i - 2, DIGIT_TABLE, c + 1, 2) - i += 2 - end - if i < count - buf[pos + count - i - 1] = UInt8('0') + (digits % 10) - i += 1 - end - return pos + i -end +import Base: append_c_digits_fast as append_c_digits, append_nine_digits -function append_nine_digits(digits, buf, pos) - if digits == 0 - for _ = 1:9 - buf[pos] = UInt8('0') - pos += 1 - end - return pos - end - i = 0 - while i < 5 - c = digits % 10000 - digits = div(digits, 10000) - c0 = (c % 100) << 1 - c1 = div(c, 100) << 1 - unsafe_copyto!(buf, pos + 7 - i, DIGIT_TABLE, c0 + 1, 2) - unsafe_copyto!(buf, pos + 5 - i, DIGIT_TABLE, c1 + 1, 2) - i += 4 - end - buf[pos] = UInt8('0') + digits - i += 1 - return pos + i +function append_d_digits(olength::Int, digits::Unsigned, buf, pos::Int, decchar) + newpos = append_c_digits(olength, digits, buf, pos + 1) + @inbounds buf[pos] = buf[pos + 1] + @inbounds buf[pos + 1] = decchar + return newpos # == pos + olength + 1 end const BIG_MASK = (big(1) << 64) - 1 @@ -390,18 +303,7 @@ for T in (Float64, Float32, Float16) @eval pow5split_lookup(::Type{$T}, i) = @inbounds($table_sym[i+1]) end -const DIGIT_TABLE = UInt8[ - '0','0','0','1','0','2','0','3','0','4','0','5','0','6','0','7','0','8','0','9', - '1','0','1','1','1','2','1','3','1','4','1','5','1','6','1','7','1','8','1','9', - '2','0','2','1','2','2','2','3','2','4','2','5','2','6','2','7','2','8','2','9', - '3','0','3','1','3','2','3','3','3','4','3','5','3','6','3','7','3','8','3','9', - '4','0','4','1','4','2','4','3','4','4','4','5','4','6','4','7','4','8','4','9', - '5','0','5','1','5','2','5','3','5','4','5','5','5','6','5','7','5','8','5','9', - '6','0','6','1','6','2','6','3','6','4','6','5','6','6','6','7','6','8','6','9', - '7','0','7','1','7','2','7','3','7','4','7','5','7','6','7','7','7','8','7','9', - '8','0','8','1','8','2','8','3','8','4','8','5','8','6','8','7','8','8','8','9', - '9','0','9','1','9','2','9','3','9','4','9','5','9','6','9','7','9','8','9','9' -] +const DIGIT_TABLE16 = Base._dec_d100 const POW10_OFFSET = UInt16[ 0, 2, 5, 8, 12, 16, 21, 26, 32, 39, From e0e3c63d682387adff58d0ee24b7b8c6f97f9206 Mon Sep 17 00:00:00 2001 From: "Steven G. Johnson" Date: Mon, 8 Jan 2024 08:38:11 -0500 Subject: [PATCH 272/413] fix type-stability bugs in Ryu code (#52781) Fixes #52749. (cherry picked from commit 5643c601f4c9819ed055c111a2d7d14cff6c5f7c) --- base/ryu/exp.jl | 40 +++++++++++++++++----------------- stdlib/Printf/test/runtests.jl | 3 +++ 2 files changed, 23 insertions(+), 20 deletions(-) diff --git a/base/ryu/exp.jl b/base/ryu/exp.jl index b38b2c7ae9a29..4f749668867e2 100644 --- a/base/ryu/exp.jl +++ b/base/ryu/exp.jl @@ -7,7 +7,7 @@ function writeexp(buf, pos, v::T, pos = append_sign(x, plus, space, buf, pos) # special cases - if x == 0 + if iszero(x) @inbounds buf[pos] = UInt8('0') pos += 1 if precision > 0 && !trimtrailingzeros @@ -42,7 +42,7 @@ function writeexp(buf, pos, v::T, mant = bits & MANTISSA_MASK exp = Int((bits >> 52) & EXP_MASK) - if exp == 0 + if iszero(exp) e2 = 1 - 1023 - 52 m2 = mant else @@ -51,7 +51,7 @@ function writeexp(buf, pos, v::T, end nonzero = false precision += 1 - digits = 0 + digits = zero(UInt32) printedDigits = 0 availableDigits = 0 e = 0 @@ -64,14 +64,14 @@ function writeexp(buf, pos, v::T, j = p10bits - e2 #=@inbounds=# mula, mulb, mulc = POW10_SPLIT[POW10_OFFSET[idx + 1] + i + 1] digits = mulshiftmod1e9(m2 << 8, mula, mulb, mulc, j + 8) - if printedDigits != 0 + if !iszero(printedDigits) if printedDigits + 9 > precision availableDigits = 9 break end pos = append_nine_digits(digits, buf, pos) printedDigits += 9 - elseif digits != 0 + elseif !iszero(digits) availableDigits = decimallength(digits) e = i * 9 + availableDigits - 1 if availableDigits > precision @@ -93,26 +93,26 @@ function writeexp(buf, pos, v::T, i -= 1 end end - if e2 < 0 && availableDigits == 0 + if e2 < 0 && iszero(availableDigits) idx = div(-e2, 16) - i = MIN_BLOCK_2[idx + 1] + i = Int(MIN_BLOCK_2[idx + 1]) while i < 200 j = 120 + (-e2 - 16 * idx) p = POW10_OFFSET_2[idx + 1] + i - MIN_BLOCK_2[idx + 1] if p >= POW10_OFFSET_2[idx + 2] - digits = 0 + digits = zero(UInt32) else #=@inbounds=# mula, mulb, mulc = POW10_SPLIT_2[p + 1] digits = mulshiftmod1e9(m2 << 8, mula, mulb, mulc, j + 8) end - if printedDigits != 0 + if !iszero(printedDigits) if printedDigits + 9 > precision availableDigits = 9 break end pos = append_nine_digits(digits, buf, pos) printedDigits += 9 - elseif digits != 0 + elseif !iszero(digits) availableDigits = decimallength(digits) e = -(i + 1) * 9 + availableDigits - 1 if availableDigits > precision @@ -135,14 +135,14 @@ function writeexp(buf, pos, v::T, end end maximum = precision - printedDigits - if availableDigits == 0 - digits = 0 + if iszero(availableDigits) + digits = zero(UInt32) end - lastDigit = 0 + lastDigit = zero(UInt32) if availableDigits > maximum for k = 0:(availableDigits - maximum - 1) - lastDigit = digits % 10 - digits = div(digits, 10) + lastDigit = digits % UInt32(10) + digits = div(digits, UInt32(10)) end end roundUp = 0 @@ -159,8 +159,8 @@ function writeexp(buf, pos, v::T, end roundUp = trailingZeros ? 2 : 1 end - if printedDigits != 0 - if digits == 0 + if !iszero(printedDigits) + if iszero(digits) for _ = 1:maximum @inbounds buf[pos] = UInt8('0') pos += 1 @@ -180,7 +180,7 @@ function writeexp(buf, pos, v::T, end end end - if roundUp != 0 + if !iszero(roundUp) roundPos = pos while true roundPos -= 1 @@ -197,7 +197,7 @@ function writeexp(buf, pos, v::T, roundUp = 1 continue else - if roundUp == 2 && UInt8(c) % 2 == 0 + if roundUp == 2 && iseven(c) break end @inbounds buf[roundPos] = c + 1 @@ -224,7 +224,7 @@ function writeexp(buf, pos, v::T, pos += 1 end if e >= 100 - c = e % 10 + c = (e % 10) % UInt8 @inbounds d100 = DIGIT_TABLE16[div(e, 10) + 1] @inbounds buf[pos] = d100 % UInt8 @inbounds buf[pos + 1] = (d100 >> 0x8) % UInt8 diff --git a/stdlib/Printf/test/runtests.jl b/stdlib/Printf/test/runtests.jl index 33970f78648e2..71ec369af4ef7 100644 --- a/stdlib/Printf/test/runtests.jl +++ b/stdlib/Printf/test/runtests.jl @@ -1145,4 +1145,7 @@ end @test_throws Printf.InvalidFormatStringError Printf.Format("%z") end +# issue #52749 +@test @sprintf("%.160g", 1.38e-23) == "1.380000000000000060010582465734078799297660966782642624395399644741944111814291318296454846858978271484375e-23" + end # @testset "Printf" From f371de8d76a56e59488f32f847d7bc37afc38928 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Wed, 27 Dec 2023 12:06:08 +0530 Subject: [PATCH 273/413] Default uplo in symmetric/hermitian (#52605) This makes the function signatures match the respective docstrings, as well as that of `Symmetric/Hermitian`. (cherry picked from commit b4eefd0f8afe91fb8e68c79f1a6615de25005529) --- stdlib/LinearAlgebra/src/symmetric.jl | 8 ++++---- stdlib/LinearAlgebra/test/symmetric.jl | 12 ++++++++++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/stdlib/LinearAlgebra/src/symmetric.jl b/stdlib/LinearAlgebra/src/symmetric.jl index 40e37f7bec22c..3cc146d0bd29d 100644 --- a/stdlib/LinearAlgebra/src/symmetric.jl +++ b/stdlib/LinearAlgebra/src/symmetric.jl @@ -73,8 +73,8 @@ If a symmetric view of a matrix is to be constructed of which the elements are n matrices nor numbers, an appropriate method of `symmetric` has to be implemented. In that case, `symmetric_type` has to be implemented, too. """ -symmetric(A::AbstractMatrix, uplo::Symbol) = Symmetric(A, uplo) -symmetric(A::Number, ::Symbol) = A +symmetric(A::AbstractMatrix, uplo::Symbol=:U) = Symmetric(A, uplo) +symmetric(A::Number, ::Symbol=:U) = A """ symmetric_type(T::Type) @@ -164,8 +164,8 @@ If a hermitian view of a matrix is to be constructed of which the elements are n matrices nor numbers, an appropriate method of `hermitian` has to be implemented. In that case, `hermitian_type` has to be implemented, too. """ -hermitian(A::AbstractMatrix, uplo::Symbol) = Hermitian(A, uplo) -hermitian(A::Number, ::Symbol) = convert(typeof(A), real(A)) +hermitian(A::AbstractMatrix, uplo::Symbol=:U) = Hermitian(A, uplo) +hermitian(A::Number, ::Symbol=:U) = convert(typeof(A), real(A)) """ hermitian_type(T::Type) diff --git a/stdlib/LinearAlgebra/test/symmetric.jl b/stdlib/LinearAlgebra/test/symmetric.jl index 82236c2a677eb..f45ca2def04ff 100644 --- a/stdlib/LinearAlgebra/test/symmetric.jl +++ b/stdlib/LinearAlgebra/test/symmetric.jl @@ -727,9 +727,9 @@ end end @testset "symmetric()/hermitian() for Numbers" begin - @test LinearAlgebra.symmetric(1, :U) == 1 + @test LinearAlgebra.symmetric(1) == LinearAlgebra.symmetric(1, :U) == 1 @test LinearAlgebra.symmetric_type(Int) == Int - @test LinearAlgebra.hermitian(1, :U) == 1 + @test LinearAlgebra.hermitian(1) == LinearAlgebra.hermitian(1, :U) == 1 @test LinearAlgebra.hermitian_type(Int) == Int end @@ -900,4 +900,12 @@ end end end +@testset "symmetric/hermitian for matrices" begin + A = [1 2; 3 4] + @test LinearAlgebra.symmetric(A) === Symmetric(A) + @test LinearAlgebra.symmetric(A, :L) === Symmetric(A, :L) + @test LinearAlgebra.hermitian(A) === Hermitian(A) + @test LinearAlgebra.hermitian(A, :L) === Hermitian(A, :L) +end + end # module TestSymmetric From 8a04df087c1e77cc080936ac6e023cbb67feefdd Mon Sep 17 00:00:00 2001 From: Zentrik Date: Mon, 18 Dec 2023 21:37:22 +0000 Subject: [PATCH 274/413] Fix GC rooting during rehashing of iddict (#52569) Should fix #52558. `a` should be rooted before the alloc call. I removed the comment as it seemed to refer to a write barrier that was removed long ago. (cherry picked from commit 5977cb0a0c1ef98fa0e4019bf1a41380a717be6f) --- src/iddict.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/iddict.c b/src/iddict.c index 1fa8a67d1ae96..3cd39e6aa9433 100644 --- a/src/iddict.c +++ b/src/iddict.c @@ -15,15 +15,14 @@ JL_DLLEXPORT jl_array_t *jl_idtable_rehash(jl_array_t *a, size_t newsz) size_t sz = jl_array_len(a); size_t i; jl_value_t **ol = (jl_value_t **)a->data; - jl_array_t *newa = jl_alloc_vec_any(newsz); + jl_array_t *newa = NULL; // keep the original array in the original slot since we need `ol` // to be valid in the loop below. JL_GC_PUSH2(&newa, &a); + newa = jl_alloc_vec_any(newsz); for (i = 0; i < sz; i += 2) { if (ol[i + 1] != NULL) { jl_table_assign_bp(&newa, ol[i], ol[i + 1]); - // it is however necessary here because allocation - // can (and will) occur in a recursive call inside table_lookup_bp } } JL_GC_POP(); From cfbff1019c720aae0e379982f71e70d8f6cfadb3 Mon Sep 17 00:00:00 2001 From: Jian Fang <131804380+JianFangAtRai@users.noreply.github.com> Date: Sat, 30 Dec 2023 06:46:53 -0800 Subject: [PATCH 275/413] heap snapshot: add gc roots and gc finalist roots to fix unrooted nodes (#52618) (cherry picked from commit fe0db7d9474781ee949c7927f806214c7fc00a9a) --- src/gc-heap-snapshot.cpp | 124 +++++++++++++++++++++++++++++++-------- src/gc-heap-snapshot.h | 33 +++++++++-- src/gc.c | 32 ++++++++-- src/gc.h | 2 +- 4 files changed, 156 insertions(+), 35 deletions(-) diff --git a/src/gc-heap-snapshot.cpp b/src/gc-heap-snapshot.cpp index b1401653d99ff..00b6934386cd0 100644 --- a/src/gc-heap-snapshot.cpp +++ b/src/gc-heap-snapshot.cpp @@ -3,6 +3,7 @@ #include "gc-heap-snapshot.h" #include "julia_internal.h" +#include "julia_assert.h" #include "gc.h" #include "llvm/ADT/StringMap.h" @@ -11,9 +12,12 @@ #include #include #include +#include +#include using std::vector; using std::string; +using std::set; using std::ostringstream; using std::pair; using std::make_pair; @@ -115,6 +119,8 @@ struct HeapSnapshot { DenseMap node_ptr_to_index_map; size_t num_edges = 0; // For metadata, updated as you add each edge. Needed because edges owned by nodes. + size_t _gc_root_idx = 1; // node index of the GC roots node + size_t _gc_finlist_root_idx = 2; // node index of the GC finlist roots node }; // global heap snapshot, mutated by garbage collector @@ -127,13 +133,13 @@ void serialize_heap_snapshot(ios_t *stream, HeapSnapshot &snapshot, char all_one static inline void _record_gc_edge(const char *edge_type, jl_value_t *a, jl_value_t *b, size_t name_or_index) JL_NOTSAFEPOINT; void _record_gc_just_edge(const char *edge_type, Node &from_node, size_t to_idx, size_t name_or_idx) JL_NOTSAFEPOINT; -void _add_internal_root(HeapSnapshot *snapshot); +void _add_synthetic_root_entries(HeapSnapshot *snapshot); JL_DLLEXPORT void jl_gc_take_heap_snapshot(ios_t *stream, char all_one) { HeapSnapshot snapshot; - _add_internal_root(&snapshot); + _add_synthetic_root_entries(&snapshot); jl_mutex_lock(&heapsnapshot_lock); @@ -155,10 +161,12 @@ JL_DLLEXPORT void jl_gc_take_heap_snapshot(ios_t *stream, char all_one) serialize_heap_snapshot((ios_t*)stream, snapshot, all_one); } -// adds a node at id 0 which is the "uber root": -// a synthetic node which points to all the GC roots. -void _add_internal_root(HeapSnapshot *snapshot) +// mimicking https://github.com/nodejs/node/blob/5fd7a72e1c4fbaf37d3723c4c81dce35c149dc84/deps/v8/src/profiler/heap-snapshot-generator.cc#L212 +// add synthetic nodes for the uber root, the GC roots, and the GC finalizer list roots +void _add_synthetic_root_entries(HeapSnapshot *snapshot) { + // adds a node at id 0 which is the "uber root": + // a synthetic node which points to all the GC roots. Node internal_root{ snapshot->node_types.find_or_create_string_id("synthetic"), snapshot->names.find_or_create_string_id(""), // name @@ -169,6 +177,44 @@ void _add_internal_root(HeapSnapshot *snapshot) vector() // outgoing edges }; snapshot->nodes.push_back(internal_root); + + // Add a node for the GC roots + snapshot->_gc_root_idx = snapshot->nodes.size(); + Node gc_roots{ + snapshot->node_types.find_or_create_string_id("synthetic"), + snapshot->names.find_or_create_string_id("GC roots"), // name + snapshot->_gc_root_idx, // id + 0, // size + 0, // size_t trace_node_id (unused) + 0, // int detachedness; // 0 - unknown, 1 - attached; 2 - detached + vector() // outgoing edges + }; + snapshot->nodes.push_back(gc_roots); + snapshot->nodes.front().edges.push_back(Edge{ + snapshot->edge_types.find_or_create_string_id("internal"), + snapshot->names.find_or_create_string_id("GC roots"), // edge label + snapshot->_gc_root_idx // to + }); + snapshot->num_edges += 1; + + // add a node for the gc finalizer list roots + snapshot->_gc_finlist_root_idx = snapshot->nodes.size(); + Node gc_finlist_roots{ + snapshot->node_types.find_or_create_string_id("synthetic"), + snapshot->names.find_or_create_string_id("GC finalizer list roots"), // name + snapshot->_gc_finlist_root_idx, // id + 0, // size + 0, // size_t trace_node_id (unused) + 0, // int detachedness; // 0 - unknown, 1 - attached; 2 - detached + vector() // outgoing edges + }; + snapshot->nodes.push_back(gc_finlist_roots); + snapshot->nodes.front().edges.push_back(Edge{ + snapshot->edge_types.find_or_create_string_id("internal"), + snapshot->names.find_or_create_string_id("GC finlist roots"), // edge label + snapshot->_gc_finlist_root_idx // to + }); + snapshot->num_edges += 1; } // mimicking https://github.com/nodejs/node/blob/5fd7a72e1c4fbaf37d3723c4c81dce35c149dc84/deps/v8/src/profiler/heap-snapshot-generator.cc#L597-L597 @@ -326,6 +372,26 @@ void _gc_heap_snapshot_record_root(jl_value_t *root, char *name) JL_NOTSAFEPOINT _record_gc_just_edge("internal", internal_root, to_node_idx, edge_label); } +void _gc_heap_snapshot_record_gc_roots(jl_value_t *root, char *name) JL_NOTSAFEPOINT +{ + record_node_to_gc_snapshot(root); + + auto from_node_idx = g_snapshot->_gc_root_idx; + auto to_node_idx = record_node_to_gc_snapshot(root); + auto edge_label = g_snapshot->names.find_or_create_string_id(name); + _record_gc_just_edge("internal", g_snapshot->nodes[from_node_idx], to_node_idx, edge_label); +} + +void _gc_heap_snapshot_record_finlist(jl_value_t *obj, size_t index) JL_NOTSAFEPOINT +{ + auto from_node_idx = g_snapshot->_gc_finlist_root_idx; + auto to_node_idx = record_node_to_gc_snapshot(obj); + ostringstream ss; + ss << "finlist-" << index; + auto edge_label = g_snapshot->names.find_or_create_string_id(ss.str()); + _record_gc_just_edge("internal", g_snapshot->nodes[from_node_idx], to_node_idx, edge_label); +} + // Add a node to the heap snapshot representing a Julia stack frame. // Each task points at a stack frame, which points at the stack frame of // the function it's currently calling, forming a linked list. @@ -392,27 +458,19 @@ void _gc_heap_snapshot_record_object_edge(jl_value_t *from, jl_value_t *to, void g_snapshot->names.find_or_create_string_id(path)); } -void _gc_heap_snapshot_record_module_to_binding(jl_module_t *module, jl_binding_t *binding) JL_NOTSAFEPOINT +void _gc_heap_snapshot_record_module_to_binding(jl_module_t *module, jl_value_t *bindings, jl_value_t *bindingkeyset) JL_NOTSAFEPOINT { - jl_globalref_t *globalref = binding->globalref; - jl_sym_t *name = globalref->name; auto from_node_idx = record_node_to_gc_snapshot((jl_value_t*)module); - auto to_node_idx = record_pointer_to_gc_snapshot(binding, sizeof(jl_binding_t), jl_symbol_name(name)); - - jl_value_t *value = jl_atomic_load_relaxed(&binding->value); - auto value_idx = value ? record_node_to_gc_snapshot(value) : 0; - jl_value_t *ty = jl_atomic_load_relaxed(&binding->ty); - auto ty_idx = ty ? record_node_to_gc_snapshot(ty) : 0; - auto globalref_idx = record_node_to_gc_snapshot((jl_value_t*)globalref); - + auto to_bindings_idx = record_node_to_gc_snapshot(bindings); + auto to_bindingkeyset_idx = record_node_to_gc_snapshot(bindingkeyset); auto &from_node = g_snapshot->nodes[from_node_idx]; - auto &to_node = g_snapshot->nodes[to_node_idx]; - - _record_gc_just_edge("property", from_node, to_node_idx, g_snapshot->names.find_or_create_string_id("")); - if (value_idx) _record_gc_just_edge("internal", to_node, value_idx, g_snapshot->names.find_or_create_string_id("value")); - if (ty_idx) _record_gc_just_edge("internal", to_node, ty_idx, g_snapshot->names.find_or_create_string_id("ty")); - if (globalref_idx) _record_gc_just_edge("internal", to_node, globalref_idx, g_snapshot->names.find_or_create_string_id("globalref")); -} + if (to_bindings_idx > 0) { + _record_gc_just_edge("internal", from_node, to_bindings_idx, g_snapshot->names.find_or_create_string_id("bindings")); + } + if (to_bindingkeyset_idx > 0) { + _record_gc_just_edge("internal", from_node, to_bindingkeyset_idx, g_snapshot->names.find_or_create_string_id("bindingkeyset")); + } + } void _gc_heap_snapshot_record_internal_array_edge(jl_value_t *from, jl_value_t *to) JL_NOTSAFEPOINT { @@ -491,6 +549,8 @@ void serialize_heap_snapshot(ios_t *stream, HeapSnapshot &snapshot, char all_one ios_printf(stream, "\"nodes\":["); bool first_node = true; + // use a set to track the nodes that do not have parents + set orphans; for (const auto &from_node : snapshot.nodes) { if (first_node) { first_node = false; @@ -507,6 +567,14 @@ void serialize_heap_snapshot(ios_t *stream, HeapSnapshot &snapshot, char all_one from_node.edges.size(), from_node.trace_node_id, from_node.detachedness); + if (from_node.id != snapshot._gc_root_idx && from_node.id != snapshot._gc_finlist_root_idx) { + // find the node index from the node object pointer + void * ptr = (void*)from_node.id; + size_t n_id = snapshot.node_ptr_to_index_map[ptr]; + orphans.insert(n_id); + } else { + orphans.insert(from_node.id); + } } ios_printf(stream, "],\n"); @@ -524,6 +592,12 @@ void serialize_heap_snapshot(ios_t *stream, HeapSnapshot &snapshot, char all_one edge.type, edge.name_or_index, edge.to_node * k_node_number_of_fields); + auto n_id = edge.to_node; + auto it = orphans.find(n_id); + if (it != orphans.end()) { + // remove the node from the orphans if it has at least one incoming edge + orphans.erase(it); + } } } ios_printf(stream, "],\n"); // end "edges" @@ -533,4 +607,8 @@ void serialize_heap_snapshot(ios_t *stream, HeapSnapshot &snapshot, char all_one snapshot.names.print_json_array(stream, true); ios_printf(stream, "}"); + + // remove the uber node from the orphans + orphans.erase(0); + assert(orphans.size() == 0 && "all nodes except the uber node should have at least one incoming edge"); } diff --git a/src/gc-heap-snapshot.h b/src/gc-heap-snapshot.h index 8c3af5b86bec7..1799063825e83 100644 --- a/src/gc-heap-snapshot.h +++ b/src/gc-heap-snapshot.h @@ -20,7 +20,7 @@ void _gc_heap_snapshot_record_task_to_frame_edge(jl_task_t *from, void *to) JL_N void _gc_heap_snapshot_record_frame_to_frame_edge(jl_gcframe_t *from, jl_gcframe_t *to) JL_NOTSAFEPOINT; void _gc_heap_snapshot_record_array_edge(jl_value_t *from, jl_value_t *to, size_t index) JL_NOTSAFEPOINT; void _gc_heap_snapshot_record_object_edge(jl_value_t *from, jl_value_t *to, void* slot) JL_NOTSAFEPOINT; -void _gc_heap_snapshot_record_module_to_binding(jl_module_t* module, jl_binding_t* binding) JL_NOTSAFEPOINT; +void _gc_heap_snapshot_record_module_to_binding(jl_module_t* module, jl_value_t *bindings, jl_value_t *bindingkeyset) JL_NOTSAFEPOINT; // Used for objects managed by GC, but which aren't exposed in the julia object, so have no // field or index. i.e. they're not reachable from julia code, but we _will_ hit them in // the GC mark phase (so we can check their type tag to get the size). @@ -28,7 +28,10 @@ void _gc_heap_snapshot_record_internal_array_edge(jl_value_t *from, jl_value_t * // Used for objects manually allocated in C (outside julia GC), to still tell the heap snapshot about the // size of the object, even though we're never going to mark that object. void _gc_heap_snapshot_record_hidden_edge(jl_value_t *from, void* to, size_t bytes, uint16_t alloc_type) JL_NOTSAFEPOINT; - +// Used for objects that are reachable from the GC roots +void _gc_heap_snapshot_record_gc_roots(jl_value_t *root, char *name) JL_NOTSAFEPOINT; +// Used for objects that are reachable from the finalizer list +void _gc_heap_snapshot_record_finlist(jl_value_t *finlist, size_t index) JL_NOTSAFEPOINT; extern int gc_heap_snapshot_enabled; extern int prev_sweep_full; @@ -60,6 +63,12 @@ static inline void gc_heap_snapshot_record_root(jl_value_t *root, char *name) JL _gc_heap_snapshot_record_root(root, name); } } +static inline void gc_heap_snapshot_record_array_edge_index(jl_value_t *from, jl_value_t *to, size_t index) JL_NOTSAFEPOINT +{ + if (__unlikely(gc_heap_snapshot_enabled && prev_sweep_full && from != NULL && to != NULL)) { + _gc_heap_snapshot_record_array_edge(from, to, index); + } +} static inline void gc_heap_snapshot_record_array_edge(jl_value_t *from, jl_value_t **to) JL_NOTSAFEPOINT { if (__unlikely(gc_heap_snapshot_enabled && prev_sweep_full)) { @@ -73,10 +82,10 @@ static inline void gc_heap_snapshot_record_object_edge(jl_value_t *from, jl_valu } } -static inline void gc_heap_snapshot_record_module_to_binding(jl_module_t* module, jl_binding_t* binding) JL_NOTSAFEPOINT +static inline void gc_heap_snapshot_record_module_to_binding(jl_module_t* module, jl_value_t *bindings, jl_value_t *bindingkeyset) JL_NOTSAFEPOINT { - if (__unlikely(gc_heap_snapshot_enabled && prev_sweep_full)) { - _gc_heap_snapshot_record_module_to_binding(module, binding); + if (__unlikely(gc_heap_snapshot_enabled && prev_sweep_full) && bindings != NULL && bindingkeyset != NULL) { + _gc_heap_snapshot_record_module_to_binding(module, bindings, bindingkeyset); } } @@ -94,6 +103,20 @@ static inline void gc_heap_snapshot_record_hidden_edge(jl_value_t *from, void* t } } +static inline void gc_heap_snapshot_record_gc_roots(jl_value_t *root, char *name) JL_NOTSAFEPOINT +{ + if (__unlikely(gc_heap_snapshot_enabled && prev_sweep_full && root != NULL)) { + _gc_heap_snapshot_record_gc_roots(root, name); + } +} + +static inline void gc_heap_snapshot_record_finlist(jl_value_t *finlist, size_t index) JL_NOTSAFEPOINT +{ + if (__unlikely(gc_heap_snapshot_enabled && prev_sweep_full && finlist != NULL)) { + _gc_heap_snapshot_record_finlist(finlist, index); + } +} + // --------------------------------------------------------------------- // Functions to call from Julia to take heap snapshot // --------------------------------------------------------------------- diff --git a/src/gc.c b/src/gc.c index beb4b7e96f1a8..272fe42a43958 100644 --- a/src/gc.c +++ b/src/gc.c @@ -2190,9 +2190,10 @@ STATIC_INLINE void gc_mark_chunk(jl_ptls_t ptls, jl_gc_markqueue_t *mq, jl_gc_ch break; } case GC_finlist_chunk: { + jl_value_t *fl_parent = c->parent; jl_value_t **fl_begin = c->begin; jl_value_t **fl_end = c->end; - gc_mark_finlist_(mq, fl_begin, fl_end); + gc_mark_finlist_(mq, fl_parent, fl_begin, fl_end); break; } default: { @@ -2290,6 +2291,7 @@ STATIC_INLINE void gc_mark_module_binding(jl_ptls_t ptls, jl_module_t *mb_parent jl_value_t *bindingkeyset = (jl_value_t *)jl_atomic_load_relaxed(&mb_parent->bindingkeyset); gc_assert_parent_validity((jl_value_t *)mb_parent, bindingkeyset); gc_try_claim_and_push(mq, bindingkeyset, &nptr); + gc_heap_snapshot_record_module_to_binding(mb_parent, bindings, bindingkeyset); gc_assert_parent_validity((jl_value_t *)mb_parent, (jl_value_t *)mb_parent->parent); gc_try_claim_and_push(mq, (jl_value_t *)mb_parent->parent, &nptr); size_t nusings = mb_parent->usings.len; @@ -2308,7 +2310,7 @@ STATIC_INLINE void gc_mark_module_binding(jl_ptls_t ptls, jl_module_t *mb_parent } } -void gc_mark_finlist_(jl_gc_markqueue_t *mq, jl_value_t **fl_begin, jl_value_t **fl_end) +void gc_mark_finlist_(jl_gc_markqueue_t *mq, jl_value_t *fl_parent, jl_value_t **fl_begin, jl_value_t **fl_end) { jl_value_t *new_obj; // Decide whether need to chunk finlist @@ -2318,8 +2320,10 @@ void gc_mark_finlist_(jl_gc_markqueue_t *mq, jl_value_t **fl_begin, jl_value_t * gc_chunkqueue_push(mq, &c); fl_end = fl_begin + GC_CHUNK_BATCH_SIZE; } + size_t i = 0; for (; fl_begin < fl_end; fl_begin++) { - new_obj = *fl_begin; + jl_value_t **slot = fl_begin; + new_obj = *slot; if (__unlikely(new_obj == NULL)) continue; if (gc_ptr_tag(new_obj, 1)) { @@ -2330,6 +2334,13 @@ void gc_mark_finlist_(jl_gc_markqueue_t *mq, jl_value_t **fl_begin, jl_value_t * if (gc_ptr_tag(new_obj, 2)) continue; gc_try_claim_and_push(mq, new_obj, NULL); + if (fl_parent != NULL) { + gc_heap_snapshot_record_array_edge(fl_parent, slot); + } else { + // This is a list of objects following the same format as a finlist + // if `fl_parent` is NULL + gc_heap_snapshot_record_finlist(new_obj, ++i); + } } } @@ -2341,7 +2352,7 @@ void gc_mark_finlist(jl_gc_markqueue_t *mq, arraylist_t *list, size_t start) return; jl_value_t **fl_begin = (jl_value_t **)list->items + start; jl_value_t **fl_end = (jl_value_t **)list->items + len; - gc_mark_finlist_(mq, fl_begin, fl_end); + gc_mark_finlist_(mq, NULL, fl_begin, fl_end); } JL_DLLEXPORT int jl_gc_mark_queue_obj(jl_ptls_t ptls, jl_value_t *obj) @@ -3003,27 +3014,36 @@ static void gc_mark_roots(jl_gc_markqueue_t *mq) { // modules gc_try_claim_and_push(mq, jl_main_module, NULL); - gc_heap_snapshot_record_root((jl_value_t*)jl_main_module, "main_module"); + gc_heap_snapshot_record_gc_roots((jl_value_t*)jl_main_module, "main_module"); // invisible builtin values gc_try_claim_and_push(mq, jl_an_empty_vec_any, NULL); + gc_heap_snapshot_record_gc_roots((jl_value_t*)jl_an_empty_vec_any, "an_empty_vec_any"); gc_try_claim_and_push(mq, jl_module_init_order, NULL); + gc_heap_snapshot_record_gc_roots((jl_value_t*)jl_module_init_order, "module_init_order"); for (size_t i = 0; i < jl_current_modules.size; i += 2) { if (jl_current_modules.table[i + 1] != HT_NOTFOUND) { gc_try_claim_and_push(mq, jl_current_modules.table[i], NULL); - gc_heap_snapshot_record_root((jl_value_t*)jl_current_modules.table[i], "top level module"); + gc_heap_snapshot_record_gc_roots((jl_value_t*)jl_current_modules.table[i], "top level module"); } } gc_try_claim_and_push(mq, jl_anytuple_type_type, NULL); + gc_heap_snapshot_record_gc_roots((jl_value_t*)jl_anytuple_type_type, "anytuple_type_type"); for (size_t i = 0; i < N_CALL_CACHE; i++) { jl_typemap_entry_t *v = jl_atomic_load_relaxed(&call_cache[i]); gc_try_claim_and_push(mq, v, NULL); + gc_heap_snapshot_record_array_edge_index((jl_value_t*)jl_anytuple_type_type, (jl_value_t*)v, i); } gc_try_claim_and_push(mq, jl_all_methods, NULL); + gc_heap_snapshot_record_gc_roots((jl_value_t*)jl_all_methods, "all_methods"); gc_try_claim_and_push(mq, _jl_debug_method_invalidation, NULL); + gc_heap_snapshot_record_gc_roots((jl_value_t*)_jl_debug_method_invalidation, "debug_method_invalidation"); // constants gc_try_claim_and_push(mq, jl_emptytuple_type, NULL); + gc_heap_snapshot_record_gc_roots((jl_value_t*)jl_emptytuple_type, "emptytuple_type"); gc_try_claim_and_push(mq, cmpswap_names, NULL); + gc_heap_snapshot_record_gc_roots((jl_value_t*)cmpswap_names, "cmpswap_names"); gc_try_claim_and_push(mq, jl_global_roots_table, NULL); + gc_heap_snapshot_record_gc_roots((jl_value_t*)jl_global_roots_table, "global_roots_table"); } // find unmarked objects that need to be finalized from the finalizer list "list". diff --git a/src/gc.h b/src/gc.h index fe8aadee71ad8..23e73eced6eb8 100644 --- a/src/gc.h +++ b/src/gc.h @@ -427,7 +427,7 @@ extern uv_cond_t gc_threads_cond; extern uv_sem_t gc_sweep_assists_needed; extern _Atomic(int) gc_n_threads_marking; void gc_mark_queue_all_roots(jl_ptls_t ptls, jl_gc_markqueue_t *mq); -void gc_mark_finlist_(jl_gc_markqueue_t *mq, jl_value_t **fl_begin, jl_value_t **fl_end) JL_NOTSAFEPOINT; +void gc_mark_finlist_(jl_gc_markqueue_t *mq, jl_value_t *fl_parent, jl_value_t **fl_begin, jl_value_t **fl_end) JL_NOTSAFEPOINT; void gc_mark_finlist(jl_gc_markqueue_t *mq, arraylist_t *list, size_t start) JL_NOTSAFEPOINT; void gc_mark_loop_serial_(jl_ptls_t ptls, jl_gc_markqueue_t *mq); void gc_mark_loop_serial(jl_ptls_t ptls); From f06a63deecfba8e4c03524da5afb3ac86d427ac3 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Wed, 24 Jan 2024 10:20:40 -0300 Subject: [PATCH 276/413] Apple silicon has 128 byte alignment so fix our defines to match (#52996) https://github.com/JuliaLang/julia/blob/8a69745bdcb06409ab7e4fc84718f34d7d54a7f9/base/lock.jl#L33-L50 this probably also needs a fix, and maybe other places as well (cherry picked from commit 91ec2bb646ca1ef14a86232da2aa80a9c9f46d40) --- src/julia_internal.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/julia_internal.h b/src/julia_internal.h index f96f4db9d611e..7b40f59ae75b0 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -458,7 +458,11 @@ STATIC_INLINE uint8_t JL_CONST_FUNC jl_gc_szclass_align8(unsigned sz) JL_NOTSAFE } #define JL_SMALL_BYTE_ALIGNMENT 16 +#if defined(_CPU_AARCH64_) && defined(_OS_DARWIN_) // Apple silicon has 128 cache lines +#define JL_CACHE_BYTE_ALIGNMENT 128 +#else #define JL_CACHE_BYTE_ALIGNMENT 64 +#endif // JL_HEAP_ALIGNMENT is the maximum alignment that the GC can provide #define JL_HEAP_ALIGNMENT JL_SMALL_BYTE_ALIGNMENT #define GC_MAX_SZCLASS (2032-sizeof(void*)) From 6fdf37ea324bb5c19b7693dd42110f656b5ab90b Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 24 Jan 2024 14:20:49 +0100 Subject: [PATCH 277/413] Replace `⇔` by `↔` in documentation (#52078) There is no HTML entity `⇔` and accordingly all the usual browsers (Chrome, Firefox, Safari) don't render it. My guess is that there is confusion because GitHub supports `⇔` and shows it as ⇔ (and `↔` as ↔). But here is for example what Firefox shows: Screen Shot 2023-11-08 at 14 02 01 This patch could be backported to 1.9 and 1.10. (cherry picked from commit 81c4f8e1b3dc16738d136967c1b32f3e1ee969ba) --- doc/src/manual/noteworthy-differences.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/src/manual/noteworthy-differences.md b/doc/src/manual/noteworthy-differences.md index 470ec9a315ce4..e29ac2249ab95 100644 --- a/doc/src/manual/noteworthy-differences.md +++ b/doc/src/manual/noteworthy-differences.md @@ -352,7 +352,7 @@ For users coming to Julia from R, these are some noteworthy differences: it's more general than that since methods are dispatched on every argument type, not only `this`, using the most-specific-declaration rule). -### Julia ⇔ C/C++: Namespaces +### Julia ↔ C/C++: Namespaces * C/C++ `namespace`s correspond roughly to Julia `module`s. * There are no private globals or fields in Julia. Everything is publicly accessible through fully qualified paths (or relative paths, if desired). @@ -364,7 +364,7 @@ For users coming to Julia from R, these are some noteworthy differences: * Caveat: `import`/`using` (Julia) works only at the global scope level (`module`s) * In C++, `using namespace X` works within arbitrary scopes (ex: function scope). -### Julia ⇔ C/C++: Module loading +### Julia ↔ C/C++: Module loading * When you think of a C/C++ "**library**", you are likely looking for a Julia "**package**". * Caveat: C/C++ libraries often house multiple "software modules" whereas Julia "packages" typically house one. @@ -395,7 +395,7 @@ For users coming to Julia from R, these are some noteworthy differences: * Directory-based package repositories are the **quickest solution** to developping local libraries of "software modules". -### Julia ⇔ C/C++: Assembling modules +### Julia ↔ C/C++: Assembling modules * In C/C++, `.c`/`.cpp` files are compiled & added to a library with build/`make` scripts. * In Julia, `import [PkgName]`/`using [PkgName]` statements load `[PkgName].jl` located in a package's `[PkgName]/src/` subdirectory. @@ -412,9 +412,9 @@ For users coming to Julia from R, these are some noteworthy differences: Julia package* ("software module"). It is therefore relatively straightforward to ensure file are `include`d only once (No `#ifdef` confusion). -### Julia ⇔ C/C++: Module interface - * C++ exposes interfaces using "public" `.h`/`.hpp` files whereas Julia `module`s `export` - symbols that are intended for their users. +### Julia ↔ C/C++: Module interface + * C++ exposes interfaces using "public" `.h`/`.hpp` files whereas Julia `module`s mark + specific symbols that are intended for their users as `public`or `export`ed. * Often, Julia `module`s simply add functionality by generating new "methods" to existing functions (ex: `Base.push!`). * Developers of Julia packages therefore cannot rely on header files for interface @@ -425,7 +425,7 @@ For users coming to Julia from R, these are some noteworthy differences: * Users might be expected to access these components by qualifying functions/structs/... with the package/module name (ex: `MyModule.run_this_task(...)`). -### Julia ⇔ C/C++: Quick reference +### Julia ↔ C/C++: Quick reference | Software Concept | Julia | C/C++ | | :--- | :--- | :--- | From ece8b7b05b9a855e225859e1d328e8a4f8718fe2 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Thu, 25 Jan 2024 14:50:47 -0500 Subject: [PATCH 278/413] Profile: use full terminal cols to show function name (#53055) (cherry picked from commit 4919dd79dfd848eb6d9929768666977f374c7f10) --- stdlib/Profile/src/Profile.jl | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/stdlib/Profile/src/Profile.jl b/stdlib/Profile/src/Profile.jl index c37cdd0af0368..716cd7c14b904 100644 --- a/stdlib/Profile/src/Profile.jl +++ b/stdlib/Profile/src/Profile.jl @@ -859,7 +859,6 @@ function tree_format(frames::Vector{<:StackFrameTree}, level::Int, cols::Int, ma ndigline = ndigits(maximum(frame.frame.line for frame in frames)) + 6 ntext = max(30, cols - ndigoverhead - nindent - ndigcounts - ndigline - 6) widthfile = 2*ntext÷5 # min 12 - widthfunc = 3*ntext÷5 # min 18 strs = Vector{String}(undef, length(frames)) showextra = false if level > nindent @@ -901,11 +900,12 @@ function tree_format(frames::Vector{<:StackFrameTree}, level::Int, cols::Int, ma ":", li.line == -1 ? "?" : string(li.line), "; ", - ltruncto(fname, widthfunc)) + fname) end else strs[i] = string(stroverhead, "╎", base, strcount, " [unknown stackframe]") end + strs[i] = ltruncto(strs[i], cols) end return strs end @@ -1161,17 +1161,17 @@ end # Utilities function rtruncto(str::String, w::Int) - if length(str) <= w + if textwidth(str) <= w return str else - return string("...", str[prevind(str, end, w-4):end]) + return string("…", str[prevind(str, end, w-2):end]) end end function ltruncto(str::String, w::Int) - if length(str) <= w + if textwidth(str) <= w return str else - return string(str[1:nextind(str, 1, w-4)], "...") + return string(str[1:nextind(str, 1, w-2)], "…") end end From 2c8ecd359b4993fb84b53ae714329330b2092cc4 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Mon, 29 Jan 2024 15:26:26 +0900 Subject: [PATCH 279/413] 1.10: REPL: fix intermittent REPL test failure (#53096) The earlier test relied on the order of the method match list returned by `_methods_by_ftype`. However, particularly in cases where the `ambig=true` option is used, the match list isn't deterministic. This commit modifies it, similar to other pieces of code, so that it `any` to ensure the code does not depend on the implementation details of `ml_matches`. Fixes #52739. --- stdlib/REPL/test/replcompletions.jl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/stdlib/REPL/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl index 0c0ff08f2c3f1..56a96b5a1534c 100644 --- a/stdlib/REPL/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -646,7 +646,7 @@ let s = "CompletionFoo.?([1,2,3], 2.0)" c, r, res = test_complete(s) @test !res @test length(c) == 1 - @test occursin("test(x::AbstractArray{T}, y) where T<:Real", c[1]) + @test occursin("test(x::AbstractArray{T}, y) where T<:Real", only(c)) # In particular, this checks that test(args...) is not a valid completion # since it is strictly less specific than test(x::AbstractArray{T}, y) end @@ -680,15 +680,15 @@ let s = "CompletionFoo.?(false, \"a\", 3, " c, r, res = test_complete(s) @test !res @test length(c) == 2 - @test occursin("test(args...)", c[1]) - @test occursin("test11(a::Integer, b, c)", c[2]) + @test any(s->occursin("test(args...)", s), c) + @test any(s->occursin("test11(a::Integer, b, c)", s), c) end let s = "CompletionFoo.?(false, \"a\", 3, " c, r, res = test_complete_noshift(s) @test !res @test length(c) == 1 - @test occursin("test11(a::Integer, b, c)", c[1]) + @test occursin("test11(a::Integer, b, c)", only(c)) end let s = "CompletionFoo.?(\"a\", 3, " @@ -711,7 +711,7 @@ let s = "CompletionFoo.?()" c, r, res = test_complete_noshift(s) @test !res @test length(c) == 1 - @test occursin("test10(s::String...)", c[1]) + @test occursin("test10(s::String...)", only(c)) end #= TODO: restrict the number of completions when a semicolon is present in ".?(" syntax From a215b3761bef3c25aaefc9a0687d8307dcd8f0fb Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Mon, 29 Jan 2024 15:26:42 +0900 Subject: [PATCH 280/413] 1.10: inlining: fix `joint_effects` calculation (#53076) This particular fix was part of #50805, but it wasn't included in version 1.10, leading to situations where an incorrect `:nothrow` could occur in 1.10 (#53062). This commit implements a minimal correction in 1.10 and also added some test cases. Fixes #53062. --- base/compiler/ssair/inlining.jl | 2 +- test/compiler/inline.jl | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/base/compiler/ssair/inlining.jl b/base/compiler/ssair/inlining.jl index 639a7fcc09c5b..232112fc4cd1b 100644 --- a/base/compiler/ssair/inlining.jl +++ b/base/compiler/ssair/inlining.jl @@ -1408,7 +1408,7 @@ function compute_inlining_cases(@nospecialize(info::CallInfo), flag::UInt8, sig: fully_covered &= split_fully_covered end - fully_covered || (joint_effects = Effects(joint_effects; nothrow=false)) + (handled_all_cases & fully_covered) || (joint_effects = Effects(joint_effects; nothrow=false)) if handled_all_cases && revisit_idx !== nothing # we handled everything except one match with unmatched sparams, diff --git a/test/compiler/inline.jl b/test/compiler/inline.jl index 65920f16b3da7..780a5424a29c2 100644 --- a/test/compiler/inline.jl +++ b/test/compiler/inline.jl @@ -2096,3 +2096,20 @@ let src = code_typed1() do end @test count(isinvoke(:iterate), src.code) == 0 end + +# JuliaLang/julia#53062: proper `joint_effects` for call with empty method matches +let ir = first(only(Base.code_ircode(setproperty!, (Base.RefValue{Int},Symbol,Base.RefValue{Int})))) + i = findfirst(iscall((ir, convert)), ir.stmts.inst)::Int + @test iszero(ir.stmts.flag[i] & Core.Compiler.IR_FLAG_NOTHROW) +end +function issue53062(cond) + x = Ref{Int}(0) + if cond + x[] = x + else + return -1 + end +end +@test !Core.Compiler.is_nothrow(Base.infer_effects(issue53062, (Bool,))) +@test issue53062(false) == -1 +@test_throws MethodError issue53062(true) From 3c738736ebee9e2aa25f1203aee3ae0c85e5e80a Mon Sep 17 00:00:00 2001 From: KristofferC Date: Mon, 29 Jan 2024 12:55:46 +0100 Subject: [PATCH 281/413] [OpenBLAS] Ugrade to v0.3.23+4 --- deps/checksums/openblas | 184 +++++++++++++++---------------- stdlib/OpenBLAS_jll/Project.toml | 2 +- 2 files changed, 93 insertions(+), 93 deletions(-) diff --git a/deps/checksums/openblas b/deps/checksums/openblas index 19fc9fd32275e..dd7c493c22941 100644 --- a/deps/checksums/openblas +++ b/deps/checksums/openblas @@ -1,94 +1,94 @@ -OpenBLAS.v0.3.23+2.aarch64-apple-darwin-libgfortran5.tar.gz/md5/f4ab1aa718db6ab731179199b48506ad -OpenBLAS.v0.3.23+2.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/5cd6326eab751d087b6638acc256a7c5dfc3a8a4be8949f4e2b5b8079aedc05cd8569774da19912fcbcd2dc1eac6a09d72d19bdbeded1198317992a85ccd605b -OpenBLAS.v0.3.23+2.aarch64-linux-gnu-libgfortran3.tar.gz/md5/57b8903e05998d293d28e70ee6cbc4d8 -OpenBLAS.v0.3.23+2.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/03325728191f88dcfc2bea16d818c0325b4f42019ed9c2e0533233e8e2a4da09a2c70503632fef2ab55ed12b7da39fdab470b801d34a9b6f576bda509f8a8a8d -OpenBLAS.v0.3.23+2.aarch64-linux-gnu-libgfortran4.tar.gz/md5/fe529647382de5693557363f658c71b6 -OpenBLAS.v0.3.23+2.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/77ac56f683a481477fa898d208e67c0c04c1ab8ca9dacb1e4e4ea3795fadb2604faffd1f3fd35d53eecb223c7f92de40cc8b2bdeb9c8a6a1b6a9949965cb9380 -OpenBLAS.v0.3.23+2.aarch64-linux-gnu-libgfortran5.tar.gz/md5/5aea8a00a946273a154110ca7b468214 -OpenBLAS.v0.3.23+2.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/a606933bed17e563d15ac206a4a37d38d75e9bb0bef46ef62485dcd32aa5a0e8501dab01f6887a1e60736c59177c6fbf0ec541fa521a9a8de854f44703f337c3 -OpenBLAS.v0.3.23+2.aarch64-linux-musl-libgfortran3.tar.gz/md5/d81dc2a42a8c0d87f4ee9bad98579f2a -OpenBLAS.v0.3.23+2.aarch64-linux-musl-libgfortran3.tar.gz/sha512/f2bda57546f1b9aa1f8dfe9a07b2243cadc002a9ffefbcfdde344ccc96efb07608a55bf8dbb6de34925af03f01ac5487f9fe293befa84edd9a84c01a9b7409e1 -OpenBLAS.v0.3.23+2.aarch64-linux-musl-libgfortran4.tar.gz/md5/400ba512f73a60420aa0d316bc24db48 -OpenBLAS.v0.3.23+2.aarch64-linux-musl-libgfortran4.tar.gz/sha512/927c711c3950f24e6b4c22c6dd92cd2b212e3df9241c637ff42f5b9135e7bee8f3864868aea594c6e8ba5b40f0563d63a5f8634ea3c3276bec35d480601e76e5 -OpenBLAS.v0.3.23+2.aarch64-linux-musl-libgfortran5.tar.gz/md5/6a91ea53f3aff17b602b324d025309c5 -OpenBLAS.v0.3.23+2.aarch64-linux-musl-libgfortran5.tar.gz/sha512/8ee85883fcc605c16031bafdd0f1a4f4d4a5957a4f85c2022466232f902a4cf64c284537dd2f237221f7d0c154e2b46200501891d3990e94dcf49a74a66c36de -OpenBLAS.v0.3.23+2.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/c653ff340dc25b19ca36309060dd6b1a -OpenBLAS.v0.3.23+2.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/cc77c84538bb0301eaa98ca1a32f024da6242e40e847e71f4a36ab69233590422aea41a32ee67031d8055c929f741617053416e5b9d446affa36e7233e5af48b -OpenBLAS.v0.3.23+2.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/18a914a1df2be07ff6b419617cb6347f -OpenBLAS.v0.3.23+2.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/eafab27655b0c179ad8b9b1dc818e8394d365f19cf75a0d77402951a38e204aa2fbe580037116a28e8e1254b66d15a543ccd0f438f3ae388e8bcad39f5953c64 -OpenBLAS.v0.3.23+2.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/4b8d18500b4bdc6f1081da6f0837340f -OpenBLAS.v0.3.23+2.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/6512bd03d58b7669dba7f9830d3f8654b2747ee66c7bfc05acdbca6c3d2c3750c9d1163768a3f91d56c5a87cb30705ad6f10395652fee4c9cd06cd2920db3027 -OpenBLAS.v0.3.23+2.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/27fd022a3b84c3a92da9d6062d8dafaf -OpenBLAS.v0.3.23+2.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/c0e73f2012df2453cc6231a9e7a644609ba1280c9aea63d2cbbf9594539fb26c8f9ab6976de8ec9870cab483b1fe7e3a1fc81246fa99bbd7526051e74a4733e1 -OpenBLAS.v0.3.23+2.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/e2b0503bf1144f4b6a65ae9f09b25828 -OpenBLAS.v0.3.23+2.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/204678995b9f337e4ddae793762c3a00968faa3da3433ea17578944fd56f33c381150521b6a561d6ff2022693f8d46b9d0f32f330e500036b4bfc08a7dbd8a62 -OpenBLAS.v0.3.23+2.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/3e733c1c668a3efaccfde643092595e5 -OpenBLAS.v0.3.23+2.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/4a37e5de66920f20a648118f62555755b51e6e089e7ee43d2b7b8ec0dc47e68c7705b878158ad83d152cfebf77118f789d1bf7b2ee0702334d4317f0c6a926a1 -OpenBLAS.v0.3.23+2.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/c653ff340dc25b19ca36309060dd6b1a -OpenBLAS.v0.3.23+2.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/cc77c84538bb0301eaa98ca1a32f024da6242e40e847e71f4a36ab69233590422aea41a32ee67031d8055c929f741617053416e5b9d446affa36e7233e5af48b -OpenBLAS.v0.3.23+2.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/18a914a1df2be07ff6b419617cb6347f -OpenBLAS.v0.3.23+2.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/eafab27655b0c179ad8b9b1dc818e8394d365f19cf75a0d77402951a38e204aa2fbe580037116a28e8e1254b66d15a543ccd0f438f3ae388e8bcad39f5953c64 -OpenBLAS.v0.3.23+2.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/4b8d18500b4bdc6f1081da6f0837340f -OpenBLAS.v0.3.23+2.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/6512bd03d58b7669dba7f9830d3f8654b2747ee66c7bfc05acdbca6c3d2c3750c9d1163768a3f91d56c5a87cb30705ad6f10395652fee4c9cd06cd2920db3027 -OpenBLAS.v0.3.23+2.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/27fd022a3b84c3a92da9d6062d8dafaf -OpenBLAS.v0.3.23+2.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/c0e73f2012df2453cc6231a9e7a644609ba1280c9aea63d2cbbf9594539fb26c8f9ab6976de8ec9870cab483b1fe7e3a1fc81246fa99bbd7526051e74a4733e1 -OpenBLAS.v0.3.23+2.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/e2b0503bf1144f4b6a65ae9f09b25828 -OpenBLAS.v0.3.23+2.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/204678995b9f337e4ddae793762c3a00968faa3da3433ea17578944fd56f33c381150521b6a561d6ff2022693f8d46b9d0f32f330e500036b4bfc08a7dbd8a62 -OpenBLAS.v0.3.23+2.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/3e733c1c668a3efaccfde643092595e5 -OpenBLAS.v0.3.23+2.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/4a37e5de66920f20a648118f62555755b51e6e089e7ee43d2b7b8ec0dc47e68c7705b878158ad83d152cfebf77118f789d1bf7b2ee0702334d4317f0c6a926a1 -OpenBLAS.v0.3.23+2.i686-linux-gnu-libgfortran3.tar.gz/md5/639643a12f8018e4be7bb1f9f29e57f6 -OpenBLAS.v0.3.23+2.i686-linux-gnu-libgfortran3.tar.gz/sha512/0993e1967964874a3f90610745d82369ee70fa4313445391fdcb26c4218c6badb18577c67648d2f77f359b163dafde31a3723998e0b006622effeace506b669f -OpenBLAS.v0.3.23+2.i686-linux-gnu-libgfortran4.tar.gz/md5/13ec86d62840258c425b0a5a6824a609 -OpenBLAS.v0.3.23+2.i686-linux-gnu-libgfortran4.tar.gz/sha512/0bc74dac87b8ab5ea244fa5bcd05baf2968b7041c4eb392ff808d0aae897cec4b3082ef7fecda28aea2662b6cd956a5254212740b1802a947dd3f1e5a3dfe2d2 -OpenBLAS.v0.3.23+2.i686-linux-gnu-libgfortran5.tar.gz/md5/413d4eae7b9c409204ab5fb7867dc30f -OpenBLAS.v0.3.23+2.i686-linux-gnu-libgfortran5.tar.gz/sha512/4a484d2aa239d8c1e2733cd9d16bd17549f5048d9958899a4e20039a7efcfd280bba901f3fe63b3b079fd7fae88911f7201a7649a472d47d0148ba8520f350cb -OpenBLAS.v0.3.23+2.i686-linux-musl-libgfortran3.tar.gz/md5/7f342d27a9b193b5d37e2ae4de6e4640 -OpenBLAS.v0.3.23+2.i686-linux-musl-libgfortran3.tar.gz/sha512/2927b18e176e07fe8a05d2eba24f6160680131832094bde9634f0890c1bc3b877c3293163fc65067cea402f3e75871c41b47e4a9999f273e667ac400878aa2b2 -OpenBLAS.v0.3.23+2.i686-linux-musl-libgfortran4.tar.gz/md5/523c007c319adbdde6e8cd7d3d89a9a1 -OpenBLAS.v0.3.23+2.i686-linux-musl-libgfortran4.tar.gz/sha512/ddb7a8d67c9430976ad967e21a6b8717c8a5501e8808fabf6e7b2e7298a0ca56049dcfc12214a5a19dbf7bd52d625b0b2b1bcc6b4c1d921c3ee62fd2766da891 -OpenBLAS.v0.3.23+2.i686-linux-musl-libgfortran5.tar.gz/md5/7dd91db180e59da5f866f73eaccc4d1d -OpenBLAS.v0.3.23+2.i686-linux-musl-libgfortran5.tar.gz/sha512/ff0ee65e536eae5ece7fbc00a0735349d560a142e025084d64f28891bdd3da5914e976640be354d8ad34fd3d89bfb90461eb95f2426d5e292906ed4ead1cfafc -OpenBLAS.v0.3.23+2.i686-w64-mingw32-libgfortran3.tar.gz/md5/98dd37d7921b0a18dfd13d8c17bd4cf9 -OpenBLAS.v0.3.23+2.i686-w64-mingw32-libgfortran3.tar.gz/sha512/dd054c335ce71e52dca9bfa31e1a8d51be4708cc11964425914b36976d6f02ff545e3f583d734c9d8a898773f0dc9d93924afa428ce5e5a276aee28c1acb9bff -OpenBLAS.v0.3.23+2.i686-w64-mingw32-libgfortran4.tar.gz/md5/55e3a7ac93d22cb8dd5b0f1a77ca53a4 -OpenBLAS.v0.3.23+2.i686-w64-mingw32-libgfortran4.tar.gz/sha512/3eae1f9a08b6653c800209681d5dd491f381e1558897a2c2a5330ad67935142a979756911a3a9860b7da6592339d073eba362d6544d988c8b23d8113028b6e5a -OpenBLAS.v0.3.23+2.i686-w64-mingw32-libgfortran5.tar.gz/md5/ce52068bfa5ea392984d2063883241bf -OpenBLAS.v0.3.23+2.i686-w64-mingw32-libgfortran5.tar.gz/sha512/1ea675f145f12de8f3fc9ad573967d384e83b0c41a0503f6e369add12698260b49a880e41bbdd26c9ffe481124f3571b2f95623c3a6b3816b8e4a75253f92f53 -OpenBLAS.v0.3.23+2.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/3059083c8293106486a0f28a3564e499 -OpenBLAS.v0.3.23+2.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/019bb4bc71d7be14f040b36d1b44f653ee89aac680749a6a3b8b72446dffae185dd3d8172ca7ac9aac45cfe564c0fc6cf3221a6f8496b9ba10d04ab44d897b65 -OpenBLAS.v0.3.23+2.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/648167f83536f32921f1208d09cc8f47 -OpenBLAS.v0.3.23+2.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/084346b93a99671967433f4ac6548d7b828aa65c402bac7e68aee78bbf75e5cb06b22f42a7d4876fdea3e838162278ee3fcf011fa18530c8d8b0e853a4c6440c -OpenBLAS.v0.3.23+2.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/9796916fb0acbea2e93747dafa96d496 -OpenBLAS.v0.3.23+2.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/7c3643c3669fea262907bb5c0f27b492adfec910716498a0bd992d705a544b21023d77801f27c967c07be9d5b30bbd936137c8f59f61632fb16cc0e1f2efebd1 -OpenBLAS.v0.3.23+2.x86_64-apple-darwin-libgfortran3.tar.gz/md5/cbf9ad429547ebd1a473f735b6c65442 -OpenBLAS.v0.3.23+2.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/5e98ec17ee35624bf0a286a2dbe01f5ae4fa879274af70b218080c537a325a92fe76331b746e98b3ce3a0d127df2c03f522f554cb43c169a2b7b1890a9a8a81f -OpenBLAS.v0.3.23+2.x86_64-apple-darwin-libgfortran4.tar.gz/md5/28792164b6c34bc627966e338221ff34 -OpenBLAS.v0.3.23+2.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/433dcec661ff2459740c4d1e72d766549135f6f41a7ffb488502d76751fcb00c3d75aaa0e3db182441ef6b5e3b487a9df3e1b8b979da3681496f4ac6c6ce819b -OpenBLAS.v0.3.23+2.x86_64-apple-darwin-libgfortran5.tar.gz/md5/7013b806bfcd2c65582df5f224bd7d86 -OpenBLAS.v0.3.23+2.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/1078cf5583d158af5d38690acf913db378195b79b4743d977e7654c246fecb0ded4ebee96d89f54c5ec5f04af1b9858bcc0700251ccce1bf7c87926ede069b91 -OpenBLAS.v0.3.23+2.x86_64-linux-gnu-libgfortran3.tar.gz/md5/f959117d5c3fd001412c790bd478f7f6 -OpenBLAS.v0.3.23+2.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/e6fbe9fe1b7a92e10760d2b945bcc2c1c5e8399d729fbbb771764e7b72856707629123bc2d2fed2549f551776f8f0a737b0f414ffddc820a655172d933c10af9 -OpenBLAS.v0.3.23+2.x86_64-linux-gnu-libgfortran4.tar.gz/md5/af04d6bd91df5c9bcc63fe06c88a4b79 -OpenBLAS.v0.3.23+2.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/0cd4972d0a44505f9d8d3958bd20e491c986f55f5f84000ab534020dc8d39d788402355fa51bbd521c8c1bf6884d9d35c1db156bd106a98fbde80c104e8dd5a1 -OpenBLAS.v0.3.23+2.x86_64-linux-gnu-libgfortran5.tar.gz/md5/c5e6138630c5b616df1d045e1c388710 -OpenBLAS.v0.3.23+2.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/a54db7cb7e28dd792bd2c4f33945e7d99db1ee9a620bbe77a21cd7fa7f4cddc5c7744d27116951582f00223df09e7dc2258754032cebd57f61a723762743d3fb -OpenBLAS.v0.3.23+2.x86_64-linux-musl-libgfortran3.tar.gz/md5/7d407633f4f59c305896f9132c098cd2 -OpenBLAS.v0.3.23+2.x86_64-linux-musl-libgfortran3.tar.gz/sha512/8a04d46b6dc2eef87d6c4ac43bcdacf5da2b1669bb829c42f07f7f73bc0dba35a6e48f303d1e9cb951062fa2c3a4cce894406c5551c2bac7f57f02d2f92122a3 -OpenBLAS.v0.3.23+2.x86_64-linux-musl-libgfortran4.tar.gz/md5/1d6c7e0b6f3eeedb41ecfea9881d0bac -OpenBLAS.v0.3.23+2.x86_64-linux-musl-libgfortran4.tar.gz/sha512/9152b7f584ecc3f06caf0eaf0a496d9e9c16afe41a4750a9bcce0477cd3cabcdcec5c97c24fa3fba03d603148c8a3dcf7199c171abe10121aaee2f8a68b93c91 -OpenBLAS.v0.3.23+2.x86_64-linux-musl-libgfortran5.tar.gz/md5/fdd5c9e5f746403f7ba4789d8d8c47e1 -OpenBLAS.v0.3.23+2.x86_64-linux-musl-libgfortran5.tar.gz/sha512/2bd980e1e2021b32f3455fb3fdbae407fb672074ca798664c77e063ea6a7503b625eac7655c8cf25307afbfd9abaa64af52fbb3ed811ff8eb6515e3edcf26b1d -OpenBLAS.v0.3.23+2.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/e574046603e2da1ec8893059234f3220 -OpenBLAS.v0.3.23+2.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/8ea6dee8d0958b45f765d5296cdd47d93f739ff9681a7bb12f5549a35967bbac0519d62e0f06e51dbd7e50ccb828dc305afd0a2868cba786f458e53b5fda867b -OpenBLAS.v0.3.23+2.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/8f2233abe6dd7f0ce688131b63073f66 -OpenBLAS.v0.3.23+2.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/7d5296a5c213a99c474228cf7057af0ba38207960d74b5bfe4aa7a5b08b71da60f2cde3ed2a20f06d8526f39661eaa086825678d56b73c03fca6e6a10f64a9b2 -OpenBLAS.v0.3.23+2.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/4467b0b2b5977fe710b270749333dbe9 -OpenBLAS.v0.3.23+2.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/28c315b53d44c1a09fcb9a6a47a45d8e08bf8d5897c85e357ce1544bdf231e66a7d372590b6d67186fa301a499a625400cf4c7776b1a32ebbe65fc6ac63739a4 -OpenBLAS.v0.3.23+2.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/6e5818f491219b4a102790be5703ea8d -OpenBLAS.v0.3.23+2.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/2a5c05c288568a881328cb8b362b864d5d1113ee9570f80c1d84455c4698dc0c34c89934fb6962746350efb99780319a48bec9271f108527c9552aeec1e1365c -OpenBLAS.v0.3.23+2.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/dc6295ac25c2f4616918a07a61230039 -OpenBLAS.v0.3.23+2.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/9f39a8227d692b0d7a4976158a39687f14d8e28f9771de252a74c63b9b28cab4818e0160d3f8fe2b3a66500c0aa9301c4d8bcf6136b26f642db161adcc57f277 -OpenBLAS.v0.3.23+2.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/b3a142aadce39a017d15ce4293c3b86b -OpenBLAS.v0.3.23+2.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/9fd4b2219603c98fa40a5c3d3ab0a48e5e2d0352c984820eda6513aad68e3a25ba36521787704ddf25631e194d512a50ac60cd61aec8483e9273b75e5249579f +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-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/sha512/12235f0459469b483a393844c228be5ad4bc60575bbe4b3238198f2480b7b457e4b0609730ce6d99530bb82e1d16fdd2338ceed6d28c952e6fff0da7f571f863 diff --git a/stdlib/OpenBLAS_jll/Project.toml b/stdlib/OpenBLAS_jll/Project.toml index b4baf955ea04e..92d68acd099f6 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+2" +version = "0.3.23+4" [deps] # See note in `src/OpenBLAS_jll.jl` about this dependency. From b0b804ef6fc4b590f4dfcfce2b2d7e0ea70ae9dd Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Wed, 24 Jan 2024 14:08:42 -0300 Subject: [PATCH 282/413] use proper cache-line size variable in work-stealing queue (#53035) (cherry picked from commit 919c3908066da7ac361fa5677a6af11acbdc3153) --- src/julia_atomics.h | 9 +++++++++ src/julia_internal.h | 5 ----- src/work-stealing-queue.h | 2 +- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/julia_atomics.h b/src/julia_atomics.h index c4488f774c987..76be881067805 100644 --- a/src/julia_atomics.h +++ b/src/julia_atomics.h @@ -56,6 +56,15 @@ enum jl_memory_order { jl_memory_order_seq_cst }; +/** + * Cache line size +*/ +#if defined(_CPU_AARCH64_) && defined(_OS_DARWIN_) // Apple silicon has 128 cache lines +#define JL_CACHE_BYTE_ALIGNMENT 128 +#else +#define JL_CACHE_BYTE_ALIGNMENT 64 +#endif + /** * Thread synchronization primitives: * diff --git a/src/julia_internal.h b/src/julia_internal.h index 7b40f59ae75b0..89f31f1702db7 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -458,11 +458,6 @@ STATIC_INLINE uint8_t JL_CONST_FUNC jl_gc_szclass_align8(unsigned sz) JL_NOTSAFE } #define JL_SMALL_BYTE_ALIGNMENT 16 -#if defined(_CPU_AARCH64_) && defined(_OS_DARWIN_) // Apple silicon has 128 cache lines -#define JL_CACHE_BYTE_ALIGNMENT 128 -#else -#define JL_CACHE_BYTE_ALIGNMENT 64 -#endif // JL_HEAP_ALIGNMENT is the maximum alignment that the GC can provide #define JL_HEAP_ALIGNMENT JL_SMALL_BYTE_ALIGNMENT #define GC_MAX_SZCLASS (2032-sizeof(void*)) diff --git a/src/work-stealing-queue.h b/src/work-stealing-queue.h index 084e421fd58b3..5902c2ac6af9f 100644 --- a/src/work-stealing-queue.h +++ b/src/work-stealing-queue.h @@ -36,7 +36,7 @@ static inline ws_array_t *create_ws_array(size_t capacity, int32_t eltsz) JL_NOT typedef struct { _Atomic(int64_t) top; - char _padding[128 - sizeof(int64_t)]; + char _padding[JL_CACHE_BYTE_ALIGNMENT - sizeof(_Atomic(int64_t))]; _Atomic(int64_t) bottom; // put on a separate cache line. conservatively estimate cache line size as 128 bytes _Atomic(ws_array_t *) array; } ws_queue_t; From a45cd5f81c08b69fa2439c307bfc61fe8ed9ca0a Mon Sep 17 00:00:00 2001 From: Max Horn Date: Mon, 29 Jan 2024 02:43:22 +0100 Subject: [PATCH 283/413] doc: replace harr HTML entity by unicode (#53066) Documenter does not support HTML entities. See discussion in PR #52078 for further background. Co-authored-by: Dilum Aluthge (cherry picked from commit 746fad00a4fb11fe34502c1b89e966fa129b645c) --- doc/src/manual/noteworthy-differences.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/src/manual/noteworthy-differences.md b/doc/src/manual/noteworthy-differences.md index e29ac2249ab95..0f97918062fcf 100644 --- a/doc/src/manual/noteworthy-differences.md +++ b/doc/src/manual/noteworthy-differences.md @@ -352,7 +352,7 @@ For users coming to Julia from R, these are some noteworthy differences: it's more general than that since methods are dispatched on every argument type, not only `this`, using the most-specific-declaration rule). -### Julia ↔ C/C++: Namespaces +### Julia ⇔ C/C++: Namespaces * C/C++ `namespace`s correspond roughly to Julia `module`s. * There are no private globals or fields in Julia. Everything is publicly accessible through fully qualified paths (or relative paths, if desired). @@ -364,7 +364,7 @@ For users coming to Julia from R, these are some noteworthy differences: * Caveat: `import`/`using` (Julia) works only at the global scope level (`module`s) * In C++, `using namespace X` works within arbitrary scopes (ex: function scope). -### Julia ↔ C/C++: Module loading +### Julia ⇔ C/C++: Module loading * When you think of a C/C++ "**library**", you are likely looking for a Julia "**package**". * Caveat: C/C++ libraries often house multiple "software modules" whereas Julia "packages" typically house one. @@ -395,7 +395,7 @@ For users coming to Julia from R, these are some noteworthy differences: * Directory-based package repositories are the **quickest solution** to developping local libraries of "software modules". -### Julia ↔ C/C++: Assembling modules +### Julia ⇔ C/C++: Assembling modules * In C/C++, `.c`/`.cpp` files are compiled & added to a library with build/`make` scripts. * In Julia, `import [PkgName]`/`using [PkgName]` statements load `[PkgName].jl` located in a package's `[PkgName]/src/` subdirectory. @@ -412,7 +412,7 @@ For users coming to Julia from R, these are some noteworthy differences: Julia package* ("software module"). It is therefore relatively straightforward to ensure file are `include`d only once (No `#ifdef` confusion). -### Julia ↔ C/C++: Module interface +### Julia ⇔ C/C++: Module interface * C++ exposes interfaces using "public" `.h`/`.hpp` files whereas Julia `module`s mark specific symbols that are intended for their users as `public`or `export`ed. * Often, Julia `module`s simply add functionality by generating new "methods" to existing @@ -425,7 +425,7 @@ For users coming to Julia from R, these are some noteworthy differences: * Users might be expected to access these components by qualifying functions/structs/... with the package/module name (ex: `MyModule.run_this_task(...)`). -### Julia ↔ C/C++: Quick reference +### Julia ⇔ C/C++: Quick reference | Software Concept | Julia | C/C++ | | :--- | :--- | :--- | From c644e8952caaab6021d4f28fccd8b74df666bb45 Mon Sep 17 00:00:00 2001 From: Pablo San-Jose Date: Mon, 29 Jan 2024 15:51:47 +0100 Subject: [PATCH 284/413] apply OpenBLAS_jll v0.3.23+4 patch (#53074) Closes #53054 CC: @giordano @ViralBShah --- deps/openblas.mk | 7 +- deps/patches/openblas-m1-4003.patch | 250 ++++++++++++++++++++++++++++ stdlib/LinearAlgebra/test/blas.jl | 13 ++ 3 files changed, 269 insertions(+), 1 deletion(-) create mode 100644 deps/patches/openblas-m1-4003.patch diff --git a/deps/openblas.mk b/deps/openblas.mk index d890a5be6046a..6be017b967f94 100644 --- a/deps/openblas.mk +++ b/deps/openblas.mk @@ -100,7 +100,12 @@ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/neoverse-generic-kernels.patch-applied: $(BUILDD patch -p1 -f < $(SRCDIR)/patches/neoverse-generic-kernels.patch echo 1 > $@ -$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/neoverse-generic-kernels.patch-applied +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-m1-4003.patch-applied: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/neoverse-generic-kernels.patch-applied + cd $(BUILDDIR)/$(OPENBLAS_SRC_DIR) && \ + 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 echo 1 > $@ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-compiled: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured diff --git a/deps/patches/openblas-m1-4003.patch b/deps/patches/openblas-m1-4003.patch new file mode 100644 index 0000000000000..11e352572d9df --- /dev/null +++ b/deps/patches/openblas-m1-4003.patch @@ -0,0 +1,250 @@ +From caa2945138f3c8a6f3f0dacbaf653c283e3cd2cb Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Tue, 11 Apr 2023 00:04:09 +0200 +Subject: [PATCH] Support Apple A15/M2 cpus through the existing VORTEX target + +--- + cpuid_arm64.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/cpuid_arm64.c b/cpuid_arm64.c +index 1080ea974..809f48e95 100644 +--- a/cpuid_arm64.c ++++ b/cpuid_arm64.c +@@ -268,7 +268,8 @@ int detect(void) + #else + #ifdef __APPLE__ + sysctlbyname("hw.cpufamily",&value,&length,NULL,0); +- if (value ==131287967|| value == 458787763 ) return CPU_VORTEX; ++ if (value ==131287967|| value == 458787763 ) return CPU_VORTEX; //A12/M1 ++ if (value == 3660830781) return CPU_VORTEX; //A15/M2 + #endif + return CPU_ARMV8; + #endif + +From cda29633a30bf7ecbc64f85e4bcc6517ad954f1c Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Thu, 13 Apr 2023 17:59:48 +0200 +Subject: [PATCH 1/8] move ALPHA_I out of register 18 (reserved on OSX) + +--- + kernel/arm64/cgemm_kernel_8x4.S | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/kernel/arm64/cgemm_kernel_8x4.S b/kernel/arm64/cgemm_kernel_8x4.S +index 24e08a646a..f100adc7af 100644 +--- a/kernel/arm64/cgemm_kernel_8x4.S ++++ b/kernel/arm64/cgemm_kernel_8x4.S +@@ -49,7 +49,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + #define pCRow3 x15 + #define pA x16 + #define alphaR w17 +-#define alphaI w18 ++#define alphaI w19 + + #define alpha0_R s10 + #define alphaV0_R v10.s[0] + +From c7bbad09adf8cdd2fa4b8709ea669e530a0136a4 Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Thu, 13 Apr 2023 18:00:47 +0200 +Subject: [PATCH 2/8] Move ALPHA_I out of register 18 (reserved on OSX) + +--- + kernel/arm64/cgemm_kernel_8x4_thunderx2t99.S | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/kernel/arm64/cgemm_kernel_8x4_thunderx2t99.S b/kernel/arm64/cgemm_kernel_8x4_thunderx2t99.S +index 29a68ff227..2c63925be2 100644 +--- a/kernel/arm64/cgemm_kernel_8x4_thunderx2t99.S ++++ b/kernel/arm64/cgemm_kernel_8x4_thunderx2t99.S +@@ -49,7 +49,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + #define pCRow3 x15 + #define pA x16 + #define alphaR w17 +-#define alphaI w18 ++#define alphaI w19 + + #define alpha0_R s10 + #define alphaV0_R v10.s[0] + +From 0b1acb0ba3aa327fee65bc6bcf596080dfc39f4b Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Thu, 13 Apr 2023 18:03:35 +0200 +Subject: [PATCH 3/8] Move ALPHA_I out of register 18 (reserved on OSX) + +--- + kernel/arm64/ctrmm_kernel_8x4.S | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/kernel/arm64/ctrmm_kernel_8x4.S b/kernel/arm64/ctrmm_kernel_8x4.S +index 5c08273975..e8f1d8cf30 100644 +--- a/kernel/arm64/ctrmm_kernel_8x4.S ++++ b/kernel/arm64/ctrmm_kernel_8x4.S +@@ -49,10 +49,10 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + #define pCRow3 x15 + #define pA x16 + #define alphaR w17 +-#define alphaI w18 +-#define temp x19 +-#define tempOffset x20 +-#define tempK x21 ++#define alphaI w19 ++#define temp x20 ++#define tempOffset x21 ++#define tempK x22 + + #define alpha0_R s10 + #define alphaV0_R v10.s[0] + +From 108a21e47a754032a9fb5477afcb76c6c158a146 Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Thu, 13 Apr 2023 18:05:14 +0200 +Subject: [PATCH 4/8] Move ALPHA out of register 18 (reserved on OSX) + +--- + kernel/arm64/sgemm_kernel_sve_v2x8.S | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/kernel/arm64/sgemm_kernel_sve_v2x8.S b/kernel/arm64/sgemm_kernel_sve_v2x8.S +index c969ed4db4..60e1f347b8 100644 +--- a/kernel/arm64/sgemm_kernel_sve_v2x8.S ++++ b/kernel/arm64/sgemm_kernel_sve_v2x8.S +@@ -55,8 +55,8 @@ With this approach, we can reuse sgemm_n|tcopy_sve_v1.c packing functions. */ + #define lanes x15 + #define pA1 x16 + #define pA2 x17 +-#define alpha w18 +-#define vec_len x19 ++#define alpha w19 ++#define vec_len x20 + #define vec_lenx2 x20 + + #define alpha0 s10 + +From 3727672a74c18938230c3a2db012a5693688bfd6 Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Thu, 13 Apr 2023 18:07:52 +0200 +Subject: [PATCH 5/8] Improve workaround and keep compilers from optimizing it + out + +--- + kernel/arm64/dznrm2_thunderx2t99.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/kernel/arm64/dznrm2_thunderx2t99.c b/kernel/arm64/dznrm2_thunderx2t99.c +index e342b0b63f..0bd274b3f1 100644 +--- a/kernel/arm64/dznrm2_thunderx2t99.c ++++ b/kernel/arm64/dznrm2_thunderx2t99.c +@@ -27,7 +27,7 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + #include "common.h" +- ++#include + #include + + #if defined(SMP) +@@ -344,6 +344,7 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) + FLOAT dummy_alpha[2]; + #endif + FLOAT ssq, scale; ++ volatile FLOAT sca; + + if (n <= 0 || inc_x <= 0) return 0.0; + +@@ -404,7 +405,8 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) + #else + nrm2_compute(n, x, inc_x, &ssq, &scale); + #endif +- if (fabs(scale) <1.e-300) return 0.; ++ sca = fabs(scale); ++ if (sca < DBL_MIN) return 0.; + ssq = sqrt(ssq) * scale; + + return ssq; + +From f096a339e4a22f4bc6dc454640e5d4007b07368b Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Thu, 13 Apr 2023 18:16:09 +0200 +Subject: [PATCH 6/8] Use long value fields for cpu ident on OSX + +--- + cpuid_arm64.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/cpuid_arm64.c b/cpuid_arm64.c +index 809f48e95a..e586f9a3c2 100644 +--- a/cpuid_arm64.c ++++ b/cpuid_arm64.c +@@ -267,9 +267,9 @@ int detect(void) + } + #else + #ifdef __APPLE__ +- sysctlbyname("hw.cpufamily",&value,&length,NULL,0); +- if (value ==131287967|| value == 458787763 ) return CPU_VORTEX; //A12/M1 +- if (value == 3660830781) return CPU_VORTEX; //A15/M2 ++ sysctlbyname("hw.cpufamily",&value64,&length64,NULL,0); ++ if (value64 ==131287967|| value64 == 458787763 ) return CPU_VORTEX; //A12/M1 ++ if (value64 == 3660830781) return CPU_VORTEX; //A15/M2 + #endif + return CPU_ARMV8; + #endif + +From 8be68fa7f4edfa0c65949faf67f8feea2c7f0f43 Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Sat, 15 Apr 2023 12:02:39 +0200 +Subject: [PATCH 7/8] move declaration of sca to really keep the compiler from + throwing it out (for now) + +--- + kernel/arm64/dznrm2_thunderx2t99.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/kernel/arm64/dznrm2_thunderx2t99.c b/kernel/arm64/dznrm2_thunderx2t99.c +index 0bd274b3f1..6077c85dd1 100644 +--- a/kernel/arm64/dznrm2_thunderx2t99.c ++++ b/kernel/arm64/dznrm2_thunderx2t99.c +@@ -344,7 +344,6 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) + FLOAT dummy_alpha[2]; + #endif + FLOAT ssq, scale; +- volatile FLOAT sca; + + if (n <= 0 || inc_x <= 0) return 0.0; + +@@ -405,7 +404,7 @@ FLOAT CNAME(BLASLONG n, FLOAT *x, BLASLONG inc_x) + #else + nrm2_compute(n, x, inc_x, &ssq, &scale); + #endif +- sca = fabs(scale); ++ volatile FLOAT sca = fabs(scale); + if (sca < DBL_MIN) return 0.; + ssq = sqrt(ssq) * scale; + + +From 44164e3a3d7f5c956728596b9f88d43cad0a8c14 Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Mon, 17 Apr 2023 14:23:13 +0200 +Subject: [PATCH 8/8] revert "move alpha out of register 18" (out of PR scope, + no SVE on Apple hw) + +--- + kernel/arm64/sgemm_kernel_sve_v2x8.S | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/kernel/arm64/sgemm_kernel_sve_v2x8.S b/kernel/arm64/sgemm_kernel_sve_v2x8.S +index 60e1f347b8..c969ed4db4 100644 +--- a/kernel/arm64/sgemm_kernel_sve_v2x8.S ++++ b/kernel/arm64/sgemm_kernel_sve_v2x8.S +@@ -55,8 +55,8 @@ With this approach, we can reuse sgemm_n|tcopy_sve_v1.c packing functions. */ + #define lanes x15 + #define pA1 x16 + #define pA2 x17 +-#define alpha w19 +-#define vec_len x20 ++#define alpha w18 ++#define vec_len x19 + #define vec_lenx2 x20 + + #define alpha0 s10 diff --git a/stdlib/LinearAlgebra/test/blas.jl b/stdlib/LinearAlgebra/test/blas.jl index 4252d9ee7938b..d7f13c9f8a717 100644 --- a/stdlib/LinearAlgebra/test/blas.jl +++ b/stdlib/LinearAlgebra/test/blas.jl @@ -126,6 +126,19 @@ Random.seed!(100) @test BLAS.iamax(b) == findmax(fabs, b)[2] * (step(ind) >= 0) end end + @testset "deterministic mul!" begin + # mul! should be deterministic, see #53054 + function tester_53054() + C = ComplexF32 + mat = zeros(C, 1, 1) + for _ in 1:100 + v = [C(1-0.2im) C(2+0.3im)] + mul!(mat, v, v', C(1+im), 1) + end + return mat + end + @test allequal(tester_53054() for _ in 1:10000) + end @testset "scal" begin α = rand(elty) a = rand(elty,n) From 00aa65ee842958c81de53ff123d811783c92e7a1 Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Tue, 30 Jan 2024 18:19:43 +0100 Subject: [PATCH 285/413] bump NetworkOptions --- .../md5 | 1 + .../sha512 | 1 + .../md5 | 1 - .../sha512 | 1 - stdlib/NetworkOptions.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/md5 create mode 100644 deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/sha512 delete mode 100644 deps/checksums/NetworkOptions-f7bbeb66f05fc651adb12758b650e8630a998fbd.tar.gz/md5 delete mode 100644 deps/checksums/NetworkOptions-f7bbeb66f05fc651adb12758b650e8630a998fbd.tar.gz/sha512 diff --git a/deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/md5 b/deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/md5 new file mode 100644 index 0000000000000..433b89eaedcc2 --- /dev/null +++ b/deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/md5 @@ -0,0 +1 @@ +73b81916dc08382ad34b8110983b61ad diff --git a/deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/sha512 b/deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/sha512 new file mode 100644 index 0000000000000..01f34b83dc80b --- /dev/null +++ b/deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/sha512 @@ -0,0 +1 @@ +a860163ef4fa5c2ff8d8712fff5ad5bb16e7697acc53538a0dda4435b910f4ad94f9c206e0d81864762361fdbcfbc57eb2e1708b33326f4f1c8d95997a495fe3 diff --git a/deps/checksums/NetworkOptions-f7bbeb66f05fc651adb12758b650e8630a998fbd.tar.gz/md5 b/deps/checksums/NetworkOptions-f7bbeb66f05fc651adb12758b650e8630a998fbd.tar.gz/md5 deleted file mode 100644 index 9e91b76f9a3c8..0000000000000 --- a/deps/checksums/NetworkOptions-f7bbeb66f05fc651adb12758b650e8630a998fbd.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -16bc9f2eefa3021e19a09ffefc84159b diff --git a/deps/checksums/NetworkOptions-f7bbeb66f05fc651adb12758b650e8630a998fbd.tar.gz/sha512 b/deps/checksums/NetworkOptions-f7bbeb66f05fc651adb12758b650e8630a998fbd.tar.gz/sha512 deleted file mode 100644 index 551f7c8da347c..0000000000000 --- a/deps/checksums/NetworkOptions-f7bbeb66f05fc651adb12758b650e8630a998fbd.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -5b53c09343e25b5bde7ea12c2119da656040ca5f62ce934f00f57945ce73dfaf26522da6a9a007ba06ac6fd75a285cbcbdf5edaf9113faa7bba0398294fbd684 diff --git a/stdlib/NetworkOptions.version b/stdlib/NetworkOptions.version index 64d3fab9d7bf4..be36f14f526dc 100644 --- a/stdlib/NetworkOptions.version +++ b/stdlib/NetworkOptions.version @@ -1,4 +1,4 @@ NETWORKOPTIONS_BRANCH = master -NETWORKOPTIONS_SHA1 = f7bbeb66f05fc651adb12758b650e8630a998fbd +NETWORKOPTIONS_SHA1 = aab83e5dd900c874826d430e25158dff43559d78 NETWORKOPTIONS_GIT_URL := https://github.com/JuliaLang/NetworkOptions.jl.git NETWORKOPTIONS_TAR_URL = https://api.github.com/repos/JuliaLang/NetworkOptions.jl/tarball/$1 From 6407c3379b9dc38327a759b2f6324f0b3e927695 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Tue, 30 Jan 2024 20:28:11 -0500 Subject: [PATCH 286/413] inference: avoid adding duplicate edges as invoke targets (#53121) This was inefficient, though not wrong. Fixes #53020 --- base/compiler/ssair/inlining.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/compiler/ssair/inlining.jl b/base/compiler/ssair/inlining.jl index 232112fc4cd1b..019df328ab9a1 100644 --- a/base/compiler/ssair/inlining.jl +++ b/base/compiler/ssair/inlining.jl @@ -837,7 +837,7 @@ function compileable_specialization(mi::MethodInstance, effects::Effects, end end add_inlining_backedge!(et, mi) # to the dispatch lookup - push!(et.edges, method.sig, mi_invoke) # add_inlining_backedge to the invoke call + mi_invoke !== mi && push!(et.edges, method.sig, mi_invoke) # add_inlining_backedge to the invoke call, if that is different return InvokeCase(mi_invoke, effects, info) end From 062707695c84674338a523d064b6370bcfc69326 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mos=C3=A8=20Giordano?= Date: Thu, 19 Oct 2023 09:37:16 +0100 Subject: [PATCH 287/413] Put mingw32 `*.a` files in `private_libdir` (#51698) This avoid that these files are picked up during julia's build process, and are instead only used to link pkgimages, as intended. Co-authored-by: Tim Besard (cherry picked from commit 4ef353c6e4ad5156ad65cb40c3a2a61fbd324b59) --- Make.inc | 2 +- Makefile | 9 +- base/linking.jl | 6 +- deps/checksums/compilersupportlibraries | 184 +++++++++--------- deps/csl.mk | 16 ++ .../CompilerSupportLibraries_jll/Project.toml | 4 +- 6 files changed, 117 insertions(+), 104 deletions(-) diff --git a/Make.inc b/Make.inc index 729870fbad860..021508e620cd1 100644 --- a/Make.inc +++ b/Make.inc @@ -1233,7 +1233,7 @@ LIBGFORTRAN_VERSION := $(subst libgfortran,,$(filter libgfortran%,$(subst -,$(SP # shipped with CSL. Although we do not depend on any of the symbols, it is entirely # possible that a user might choose to install a library which depends on symbols provided # by a newer libstdc++. Without runtime detection, those libraries would break. -CSL_NEXT_GLIBCXX_VERSION=GLIBCXX_3\.4\.31|GLIBCXX_3\.5\.|GLIBCXX_4\. +CSL_NEXT_GLIBCXX_VERSION=GLIBCXX_3\.4\.33|GLIBCXX_3\.5\.|GLIBCXX_4\. # This is the set of projects that BinaryBuilder dependencies are hooked up for. diff --git a/Makefile b/Makefile index 1565014a0fa5e..22e0f7e152859 100644 --- a/Makefile +++ b/Makefile @@ -281,16 +281,13 @@ else ifeq ($(JULIA_BUILD_MODE),debug) -$(INSTALL_M) $(build_libdir)/libjulia-debug.dll.a $(DESTDIR)$(libdir)/ -$(INSTALL_M) $(build_libdir)/libjulia-internal-debug.dll.a $(DESTDIR)$(libdir)/ endif + -$(INSTALL_M) $(wildcard $(build_private_libdir)/*.a) $(DESTDIR)$(private_libdir)/ - # We have a single exception; we want 7z.dll to live in private_libexecdir, not bindir, so that 7z.exe can find it. + # We have a single exception; we want 7z.dll to live in private_libexecdir, + # not bindir, so that 7z.exe can find it. -mv $(DESTDIR)$(bindir)/7z.dll $(DESTDIR)$(private_libexecdir)/ -$(INSTALL_M) $(build_bindir)/libopenlibm.dll.a $(DESTDIR)$(libdir)/ -$(INSTALL_M) $(build_libdir)/libssp.dll.a $(DESTDIR)$(libdir)/ - # The rest are compiler dependencies, as an example memcpy is exported by msvcrt - # These are files from mingw32 and required for creating shared libraries like our caches. - -$(INSTALL_M) $(build_libdir)/libgcc_s.a $(DESTDIR)$(libdir)/ - -$(INSTALL_M) $(build_libdir)/libgcc.a $(DESTDIR)$(libdir)/ - -$(INSTALL_M) $(build_libdir)/libmsvcrt.a $(DESTDIR)$(libdir)/ else # Copy over .dSYM directories directly for Darwin diff --git a/base/linking.jl b/base/linking.jl index fd21ce74c9268..2d68ea730c0fb 100644 --- a/base/linking.jl +++ b/base/linking.jl @@ -150,16 +150,16 @@ else end function link_image_cmd(path, out) - LIBDIR = "-L$(libdir())" PRIVATE_LIBDIR = "-L$(private_libdir())" SHLIBDIR = "-L$(shlibdir())" - LIBS = is_debug() ? ("-ljulia-debug", "-ljulia-internal-debug") : ("-ljulia", "-ljulia-internal") + LIBS = is_debug() ? ("-ljulia-debug", "-ljulia-internal-debug") : + ("-ljulia", "-ljulia-internal") @static if Sys.iswindows() LIBS = (LIBS..., "-lopenlibm", "-lssp", "-lgcc_s", "-lgcc", "-lmsvcrt") end V = VERBOSE[] ? "--verbose" : "" - `$(ld()) $V $SHARED -o $out $WHOLE_ARCHIVE $path $NO_WHOLE_ARCHIVE $LIBDIR $PRIVATE_LIBDIR $SHLIBDIR $LIBS` + `$(ld()) $V $SHARED -o $out $WHOLE_ARCHIVE $path $NO_WHOLE_ARCHIVE $PRIVATE_LIBDIR $SHLIBDIR $LIBS` end function link_image(path, out, internal_stderr::IO=stderr, internal_stdout::IO=stdout) diff --git a/deps/checksums/compilersupportlibraries b/deps/checksums/compilersupportlibraries index 0908c34e13a58..2dcfecfb56b26 100644 --- a/deps/checksums/compilersupportlibraries +++ b/deps/checksums/compilersupportlibraries @@ -1,92 +1,92 @@ -CompilerSupportLibraries.v1.0.5+1.aarch64-apple-darwin-libgfortran5.tar.gz/md5/20ebaad57850393b6ac9fa924e511fe4 -CompilerSupportLibraries.v1.0.5+1.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/020de4d8b0ff6bedbadaa305ff8445e6849f12053762ea4aa68412d1ec763dbd86f479587a2fbb862487f1feb04d976c38099ddf3887817a3d32b3f029cf85b1 -CompilerSupportLibraries.v1.0.5+1.aarch64-linux-gnu-libgfortran3.tar.gz/md5/3908fa1a2f739b330e787468c9bfb5c8 -CompilerSupportLibraries.v1.0.5+1.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/1741e3403ac7aa99e7cfd9a01222c4153ed300f47cc1b347e1af1a6cd07a82caaa54b9cfbebae8751440420551621cc6524504413446d104f9493dff2c081853 -CompilerSupportLibraries.v1.0.5+1.aarch64-linux-gnu-libgfortran4.tar.gz/md5/2444dbb7637b32cf543675cc12330878 -CompilerSupportLibraries.v1.0.5+1.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/8537f0b243df8544350c884021b21c585fd302e8dd462a30a6ee84c7a36a049133262e5d1bc362f972066b8e8d6a091c32c3b746bab1feb9fccf2e7cca65756c -CompilerSupportLibraries.v1.0.5+1.aarch64-linux-gnu-libgfortran5.tar.gz/md5/d79c1434594c0c5e7d6be798bf52c99e -CompilerSupportLibraries.v1.0.5+1.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/7e71accc401a45b51b298702fb4c79a2fc856c7b28f0935f6ad3a0db5381c55fe5432daff371842930d718024b7c6c1d80e2bd09d397145203673bebbe3496ae -CompilerSupportLibraries.v1.0.5+1.aarch64-linux-musl-libgfortran3.tar.gz/md5/f212059053d99558a9b0bf54b20180e1 -CompilerSupportLibraries.v1.0.5+1.aarch64-linux-musl-libgfortran3.tar.gz/sha512/5c104b1282cec8a944e5d008f44a4d60f4394fd5d797fec7d1f487d13e7328cd9c88ec4916dabf18596d87160756bda914e4f8c5a356b5577f9349d0d9e976d6 -CompilerSupportLibraries.v1.0.5+1.aarch64-linux-musl-libgfortran4.tar.gz/md5/3e3b3795ee93ef317223050e803a9875 -CompilerSupportLibraries.v1.0.5+1.aarch64-linux-musl-libgfortran4.tar.gz/sha512/85d3c955e15f66bfe8bfec2f28c9160bc03d4d531ea4ffe6bc6b51e0d69ccea3ab67a16ca752dabc870861c407381c4519d75c6be3832e8dccd6122ec8c6ed75 -CompilerSupportLibraries.v1.0.5+1.aarch64-linux-musl-libgfortran5.tar.gz/md5/cf2d1315f6a348af2e6c065e2a286e7a -CompilerSupportLibraries.v1.0.5+1.aarch64-linux-musl-libgfortran5.tar.gz/sha512/58420377bc77aa7678034ee5f708eb6be7db359faef2c2638869765453633da9bf455512bd88e95b38ae0428ecc4053561517b176b2371129bdaef9d8d5dadfd -CompilerSupportLibraries.v1.0.5+1.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/f5c09ed7e0eeb8d345d328f950582f26 -CompilerSupportLibraries.v1.0.5+1.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/9c657f55c8fcdeb404be168a3a63a5e84304730fe34f25673d92cdae4b0a1fcc6a877ee1433f060e1be854c7811d66632e32510a2ed591d88330f1340b9c20de -CompilerSupportLibraries.v1.0.5+1.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/c685518aca4721cd8621d510e2039683 -CompilerSupportLibraries.v1.0.5+1.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/b760468c6377dcd2b8dd50200daaabe604006afc070984d78152b2becd0680b59036c9a6e91dea490121bd85b58d285bfc1e1cf696d29af236528400101de36c -CompilerSupportLibraries.v1.0.5+1.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/8faf5c8ad62ab10f71dd2ec9683053e2 -CompilerSupportLibraries.v1.0.5+1.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/921239f241a5c89710cf07272d7f6c3f10201a7533068ed1e9643f9fb2f439e1bb765a4966d913829866ee0ce4f1589d30d06e4b5c1361e3c016a9473f087177 -CompilerSupportLibraries.v1.0.5+1.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/b38fcb70691ac2621379d298eef8c79e -CompilerSupportLibraries.v1.0.5+1.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/06c7f64257ce721f5941f6e50a0d2717cdc9394fc532ded19ce3eaacd5e92a416969534227562e4fee04d2b6340c650d8bc9779e14519b90038bc41e8d1f5ce3 -CompilerSupportLibraries.v1.0.5+1.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/cdfab2c7bc41765caf4441c3caeed761 -CompilerSupportLibraries.v1.0.5+1.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/7109d4a7b32c00309c42685f54a86fc2cc63c0c00f65584ad296b6e44ad3320eed1aaf49684a8831841cdffa5555d72f89272fb722a780596e27ef020528026b -CompilerSupportLibraries.v1.0.5+1.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/441980ebd23d72772cbe603f1c275336 -CompilerSupportLibraries.v1.0.5+1.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/e273d9f1af259a3080df8f173e1808a1ade976a943aba97216bf59a96178e7c052e7a048b0ceee53ab486ed577a2ecb92579857be2f7b29e76322ee1f13c9d76 -CompilerSupportLibraries.v1.0.5+1.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/f5c09ed7e0eeb8d345d328f950582f26 -CompilerSupportLibraries.v1.0.5+1.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/9c657f55c8fcdeb404be168a3a63a5e84304730fe34f25673d92cdae4b0a1fcc6a877ee1433f060e1be854c7811d66632e32510a2ed591d88330f1340b9c20de -CompilerSupportLibraries.v1.0.5+1.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/c685518aca4721cd8621d510e2039683 -CompilerSupportLibraries.v1.0.5+1.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/b760468c6377dcd2b8dd50200daaabe604006afc070984d78152b2becd0680b59036c9a6e91dea490121bd85b58d285bfc1e1cf696d29af236528400101de36c -CompilerSupportLibraries.v1.0.5+1.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/8faf5c8ad62ab10f71dd2ec9683053e2 -CompilerSupportLibraries.v1.0.5+1.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/921239f241a5c89710cf07272d7f6c3f10201a7533068ed1e9643f9fb2f439e1bb765a4966d913829866ee0ce4f1589d30d06e4b5c1361e3c016a9473f087177 -CompilerSupportLibraries.v1.0.5+1.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/b38fcb70691ac2621379d298eef8c79e -CompilerSupportLibraries.v1.0.5+1.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/06c7f64257ce721f5941f6e50a0d2717cdc9394fc532ded19ce3eaacd5e92a416969534227562e4fee04d2b6340c650d8bc9779e14519b90038bc41e8d1f5ce3 -CompilerSupportLibraries.v1.0.5+1.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/cdfab2c7bc41765caf4441c3caeed761 -CompilerSupportLibraries.v1.0.5+1.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/7109d4a7b32c00309c42685f54a86fc2cc63c0c00f65584ad296b6e44ad3320eed1aaf49684a8831841cdffa5555d72f89272fb722a780596e27ef020528026b -CompilerSupportLibraries.v1.0.5+1.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/441980ebd23d72772cbe603f1c275336 -CompilerSupportLibraries.v1.0.5+1.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/e273d9f1af259a3080df8f173e1808a1ade976a943aba97216bf59a96178e7c052e7a048b0ceee53ab486ed577a2ecb92579857be2f7b29e76322ee1f13c9d76 -CompilerSupportLibraries.v1.0.5+1.i686-linux-gnu-libgfortran3.tar.gz/md5/6decf8fd5afb50451771c761e63a8917 -CompilerSupportLibraries.v1.0.5+1.i686-linux-gnu-libgfortran3.tar.gz/sha512/4984724bcc847724b1bc005b6f760a18b68147f7d5402d0faf4e28fc0d14fa10975368a951f9caf2a8856500046dec8343043274557d58269e77492b929a9e4b -CompilerSupportLibraries.v1.0.5+1.i686-linux-gnu-libgfortran4.tar.gz/md5/39d1e8a3baa144c018d3eaf7f3806482 -CompilerSupportLibraries.v1.0.5+1.i686-linux-gnu-libgfortran4.tar.gz/sha512/fc4d429279c5a93b6c28b6e911b1e7cfd1c1cfe46f11f2e901b3832ce90d45f49d3d29f0ef18518a94af6cc8651f67c4ed81672680f9281ada390440b172a2af -CompilerSupportLibraries.v1.0.5+1.i686-linux-gnu-libgfortran5.tar.gz/md5/37dabd9cd224c9fed9633dedccb6c565 -CompilerSupportLibraries.v1.0.5+1.i686-linux-gnu-libgfortran5.tar.gz/sha512/b253149e72eef9486888fbaace66e9b6945f4477f6b818f64f3047331165b0e2bc17aa6e3fc8c88686a72e478eb62c8f53883415d5419db448d8016fa3a1da5e -CompilerSupportLibraries.v1.0.5+1.i686-linux-musl-libgfortran3.tar.gz/md5/afdd32bfadd465848e6be458817a44ae -CompilerSupportLibraries.v1.0.5+1.i686-linux-musl-libgfortran3.tar.gz/sha512/eebd679c499143014514c7c9d1875dedbbab9e3af51526c4dd445a9e3dbade95d24522da8bbad0a50ab400755e47b018828b324c4ad7705e212ccd990e34439a -CompilerSupportLibraries.v1.0.5+1.i686-linux-musl-libgfortran4.tar.gz/md5/bc4a0f0b7cea328f7e8850583774496b -CompilerSupportLibraries.v1.0.5+1.i686-linux-musl-libgfortran4.tar.gz/sha512/82285b67946212b49cddf6259f2c60ff5469f8c5263ccefe44f1d93ace98ab68e2c152e1b54434b2f075fd8d192c06d5451bc8cca26d951ad15f3453102f02b5 -CompilerSupportLibraries.v1.0.5+1.i686-linux-musl-libgfortran5.tar.gz/md5/177f0232abce8d523882530ed7a93092 -CompilerSupportLibraries.v1.0.5+1.i686-linux-musl-libgfortran5.tar.gz/sha512/db80acf0f2434f28ee7680e1beb34f564940071815d1ad89fb5913cbd9ac24da528e826d0d54be6265a7340ebd661b6d308ed79d96b67fa5d8c98dc3f1bee8d6 -CompilerSupportLibraries.v1.0.5+1.i686-w64-mingw32-libgfortran3.tar.gz/md5/f5795dada5360eb8422f45150b13bae9 -CompilerSupportLibraries.v1.0.5+1.i686-w64-mingw32-libgfortran3.tar.gz/sha512/6acd1bf7c81631cef9b8b0576ccece08723c5ae2f49de2487d3aefd25f9a0ad49df09e3782735267997d40687b04b85c89e00f6889b026af599bf1bbe91803a1 -CompilerSupportLibraries.v1.0.5+1.i686-w64-mingw32-libgfortran4.tar.gz/md5/5e590f83161913f0145ba8d496b2504b -CompilerSupportLibraries.v1.0.5+1.i686-w64-mingw32-libgfortran4.tar.gz/sha512/4a3f36588afcdef26173764597054068e26f2376e6126a9a94c46b258b5d7a29951d47b5e1ba24df6c3d139bbc4decc5c501a266811692d7fadadc7bd7b6960d -CompilerSupportLibraries.v1.0.5+1.i686-w64-mingw32-libgfortran5.tar.gz/md5/27da4a7c890fe1427c33fe214cc5feaf -CompilerSupportLibraries.v1.0.5+1.i686-w64-mingw32-libgfortran5.tar.gz/sha512/310ad00f053f9f3ec715ce2e8d20446f397728dff5acc787ea9c9332346607a3d42b678099c424e6d6e5294acddf2aa26051de657b48d34abfd04486951bf241 -CompilerSupportLibraries.v1.0.5+1.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/4e5e4b23dc87450738da33926a07511d -CompilerSupportLibraries.v1.0.5+1.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/fc09879d94b750e75775d8b64a41ab9924d675fb53c5700467604412928fe7f5cb21911da0f64898d2463fa77ffbaf4c96c397b9060f4746eec152747930cddc -CompilerSupportLibraries.v1.0.5+1.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/9a92138ed69aa317a932a615c6e62d69 -CompilerSupportLibraries.v1.0.5+1.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/0b7785379936a2a209b074177b1424dd7e00b29b5165f564e799b0aa4e06a582e9d616525d97274ba2507cb88192028f1ac485d3f99bdc7ee53fc63c1a7e85de -CompilerSupportLibraries.v1.0.5+1.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/8ffee3d6de5197c7a1f354d72c8238fa -CompilerSupportLibraries.v1.0.5+1.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/deadc4d7224c84f9b82dc956b69e815c44ae036802838365d870ab9f58c8bcf8ce0645f2f387c8ff344ac2108fc8e7e1ee907fa55e93c91aa5d9fd921bf3fdcb -CompilerSupportLibraries.v1.0.5+1.x86_64-apple-darwin-libgfortran3.tar.gz/md5/87449e72e3f33dbb69b7053cdc2649d4 -CompilerSupportLibraries.v1.0.5+1.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/5ce02ad10c6f4686a476eb2a5de2988cd8b482f5e693db2880c84ad1c82f468ef03fe01b9d0feefe5d4ee741d1d16643d36b144e6261ed32311b3b6f312fac2f -CompilerSupportLibraries.v1.0.5+1.x86_64-apple-darwin-libgfortran4.tar.gz/md5/0407cde92cfa42fa89ac83217ca0ec16 -CompilerSupportLibraries.v1.0.5+1.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/032c831f1166a336551138939ac40eb2c68a048ce786c0c1403b879a20c1b706caac16d22560b2c7f2b3d6373986c347188675674116005ca251336ee048d09f -CompilerSupportLibraries.v1.0.5+1.x86_64-apple-darwin-libgfortran5.tar.gz/md5/23418763b808371ee94772a90d501f4d -CompilerSupportLibraries.v1.0.5+1.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/7867b843551457b11bda7821dd384c1c1cf23b80a308b2058a693de7b7da099f0b37eb0a6de2b84c04b625a68c60eea55138e200d5d6ec6f6af09bd7ce406a96 -CompilerSupportLibraries.v1.0.5+1.x86_64-linux-gnu-libgfortran3.tar.gz/md5/e3d33ae03c18affea74699bdc1fabb68 -CompilerSupportLibraries.v1.0.5+1.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/42013f4921de5a69ad857195ce5c19ad1bca3c920d79699e5501f1f4534ab132fabd422362b2b5056f5d182215d6c069db5df460bafa700903faf962cc00f77b -CompilerSupportLibraries.v1.0.5+1.x86_64-linux-gnu-libgfortran4.tar.gz/md5/d40c1e8c0393213c6057c53a12f44175 -CompilerSupportLibraries.v1.0.5+1.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/fe7baa4de7490065ab7b953cc12f41462a24bcb49d0a4a64b23249e98e7569b19bb1cb455af2f76090e34066a7d3cdd7a48cae6515ce6c7a5c8486b0cacc5106 -CompilerSupportLibraries.v1.0.5+1.x86_64-linux-gnu-libgfortran5.tar.gz/md5/48541b90f715c4c86ee4da0570275947 -CompilerSupportLibraries.v1.0.5+1.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/7f2683fb98e80f12629f4ed3bea9fd59d32b7e7a9ed1699e782d8e238ff0915ecc61bf00adaf4597cfe41caf82cdca0f9be250f595f5f0bea6d8f77dba99eaf4 -CompilerSupportLibraries.v1.0.5+1.x86_64-linux-musl-libgfortran3.tar.gz/md5/4547059eb905995667be48bf85d49911 -CompilerSupportLibraries.v1.0.5+1.x86_64-linux-musl-libgfortran3.tar.gz/sha512/7400fdabc924434ab4a4949248c3603887ac06ffd2f205ae33e14495d86cd4f816bbd1999eeafa0257f518df1e7f7c522f596e847a71dbfbfccff4859f50acc7 -CompilerSupportLibraries.v1.0.5+1.x86_64-linux-musl-libgfortran4.tar.gz/md5/46267543cad6584d7b7b9fcc8f18f21d -CompilerSupportLibraries.v1.0.5+1.x86_64-linux-musl-libgfortran4.tar.gz/sha512/0353d7d724be48d4185d3c181692970b7996f53f6a01723072aa5c94b53a8c5055faeed30df51659c252a46f4b941dec0cb24569323e3c85c166f14c5b7c8e9e -CompilerSupportLibraries.v1.0.5+1.x86_64-linux-musl-libgfortran5.tar.gz/md5/14dba2897a6e9d370fa9091c045375fc -CompilerSupportLibraries.v1.0.5+1.x86_64-linux-musl-libgfortran5.tar.gz/sha512/10b79f9c059839f5b57fa8d2a381a034c4067262c4088bd354d14ea56bec097878069383aa9cfadaa09d73bd20fc348fb61662d863a8d62cb25d7af6b8e29858 -CompilerSupportLibraries.v1.0.5+1.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/1f069e9c832fa1e9c7c8d51e3e841f5c -CompilerSupportLibraries.v1.0.5+1.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/877ed9953bc167ade224fc503a2b639c7c333d420804ccf0d3b1637e29bdaf8c608a8f7accb3ec7983d6881c4b00729a1327a121c741022aff1e627cdffb52ce -CompilerSupportLibraries.v1.0.5+1.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/3e542990ca4192dcecf2e8b8b17e8580 -CompilerSupportLibraries.v1.0.5+1.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/0b9cf0f431a5de28bc11af31d965beaf6774d4e83cb3877fdca630d0327312eb966485d6a99d62b0212f505a6714c23fc7ac1ed17ec619baff13941f6ce7519c -CompilerSupportLibraries.v1.0.5+1.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/b09302632fda815a1248884a82a6f95a -CompilerSupportLibraries.v1.0.5+1.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/7a64ae14e40d285bbcd27a0f54ba6ad0a108ee4f4fed7c99d3a876a70578445e0c7108fa945f3f5a0b202cf95e533b96eedaf7641ded6e9869af77db98075709 -CompilerSupportLibraries.v1.0.5+1.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/0c2fc6fae4ebe293a7f0dc1e91f6531a -CompilerSupportLibraries.v1.0.5+1.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/fdb0ad061cacad0557fde3ec216fd3666284f24ad6a86f4a4b6f946dccb112c9704f52edba86f3b17d84c824affbcfef740720348ef227380cf6017811bda80b -CompilerSupportLibraries.v1.0.5+1.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/005e608dbef2b5cdb7624702ccc426be -CompilerSupportLibraries.v1.0.5+1.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/8bb2bcd0a6b1901e8a9be20f505bead5c78ecafbe5a8271cd13385553e5744e0c7bff62976ac9e7d74b8f3bd467603d4c0f5658e6b120bb23066c15e0a644ed4 -CompilerSupportLibraries.v1.0.5+1.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/d6c2c7ad72bff7f7e5c43678d716a57a -CompilerSupportLibraries.v1.0.5+1.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/36f5eba1b0be440797467cb7104652b74709913d2bad1b08ee2dc70f450fb8eab81b28f2b0bc8dfc238b3c46982c69aac831b4fad5bcee4e9dd114852fcb4a0b +CompilerSupportLibraries.v1.1.0+0.aarch64-apple-darwin-libgfortran5.tar.gz/md5/20ebaad57850393b6ac9fa924e511fe4 +CompilerSupportLibraries.v1.1.0+0.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/020de4d8b0ff6bedbadaa305ff8445e6849f12053762ea4aa68412d1ec763dbd86f479587a2fbb862487f1feb04d976c38099ddf3887817a3d32b3f029cf85b1 +CompilerSupportLibraries.v1.1.0+0.aarch64-linux-gnu-libgfortran3.tar.gz/md5/e084a4374be45ba52279682c640449bc +CompilerSupportLibraries.v1.1.0+0.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/d4aedf5c08e13fd9596476330f69e374af64373f7bca0e4df6cbb4d1710d695dce23f2655ee368c3df2049b7b0ca1848c9e01a437fadc0eb08937c6a7cdf2a27 +CompilerSupportLibraries.v1.1.0+0.aarch64-linux-gnu-libgfortran4.tar.gz/md5/6b3975f25be16ea1370ef0bf353ac752 +CompilerSupportLibraries.v1.1.0+0.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/d6298517be1ce350a61d1c1a1bf9b27a541382aa8ccf3e86eeadd7c47e2fe88facd17139a3878adb939df869a330264a942d280e3468d53b61325df7e31daaad +CompilerSupportLibraries.v1.1.0+0.aarch64-linux-gnu-libgfortran5.tar.gz/md5/7134b79b71059d4da79224df1ca0853e +CompilerSupportLibraries.v1.1.0+0.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/e66590a37e756ff33a84514a7ca2bbe2e1517f3e901bc66e40139e8a318d6cd8e329e0c2a7c557ea39e6db2f56802d485ab81b87be1373717b78474b1c7bf7d7 +CompilerSupportLibraries.v1.1.0+0.aarch64-linux-musl-libgfortran3.tar.gz/md5/fd37789f5745a17cc9a85902cebf4698 +CompilerSupportLibraries.v1.1.0+0.aarch64-linux-musl-libgfortran3.tar.gz/sha512/9ff4e9be39f115af2e5bb6a5c88b3940f15a010952cebf39da22e7a5c6744be2f905bebccba092db0a89cf82e8c0e1a3e61b74d4204d2a6648b5469f3ccb0d12 +CompilerSupportLibraries.v1.1.0+0.aarch64-linux-musl-libgfortran4.tar.gz/md5/e9286ae9299c57d5df7b795997b4adf5 +CompilerSupportLibraries.v1.1.0+0.aarch64-linux-musl-libgfortran4.tar.gz/sha512/ea64858481095e0374be330aa2ac84b394bc3e5351b9326137c9cd5d15e6bec47d6e5f672a216572dcb80c3aa6fcb08950cc10157c264f429a93c235028d79a4 +CompilerSupportLibraries.v1.1.0+0.aarch64-linux-musl-libgfortran5.tar.gz/md5/b19c6cbc5b2a62ea76dea64b0f8ae488 +CompilerSupportLibraries.v1.1.0+0.aarch64-linux-musl-libgfortran5.tar.gz/sha512/090d659f7e4a7034117e2bb2dcad0ef544cdca898bf032222cdb81d32af6e6528be842d2cf55839fe397c2ace05dd4ce920cf98cc96324ae18832016516e6cc3 +CompilerSupportLibraries.v1.1.0+0.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/26fb41031e1b797373aea7a7c4d7be3c +CompilerSupportLibraries.v1.1.0+0.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/8fd0b6c990681789caec528067b4bcb9661f9c0a5e0268927d4e88565fa7005db3b592fb8e7830cf32b3fb4ce54d6db747dfde896f93bd38f65b7a1290a2399a +CompilerSupportLibraries.v1.1.0+0.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/6ed3f3e94f662177c3cf3c3734a5c1ec +CompilerSupportLibraries.v1.1.0+0.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/b8165630cced0f7880cb6fd6263cf39bbbbda668eccc94219720078a85a641c3b1b20648960041aa3a51108ab6df087b909c572d0690aacf8b99dc5496ff7db6 +CompilerSupportLibraries.v1.1.0+0.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/86060cbbe966a59f18f92a9b2fab95d4 +CompilerSupportLibraries.v1.1.0+0.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/0aa0ca0ff3a4d541c7a9599ca1adae7391fdd3fa841f3055ecb8635096d0d95a0763758d7533c887b38a655af55174dfcb63f470147b28a256b75a85c8e47801 +CompilerSupportLibraries.v1.1.0+0.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/4acf6f8929fb8ec9fdb8a0f1af06260d +CompilerSupportLibraries.v1.1.0+0.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/3b2e0a5f62bd93434d07848c3045479a1a05bd8589dc976a5680e13805db5adcd9abdcca82edee7b28b4c4a9413ce795784a8a0f0a8fb7346a439322c27c96d9 +CompilerSupportLibraries.v1.1.0+0.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/a75a927c3e14bee6dca29b4907def681 +CompilerSupportLibraries.v1.1.0+0.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/7853fd187f9289a8282d34112b5277bad13abe9dd9b6c796498db2f1a080b2c81faa6119df9ececd09725a019bf99706894765c9c20f618e359adc153c3181a2 +CompilerSupportLibraries.v1.1.0+0.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/ba8545cc20e6c602a0526a3b1fc1d2f1 +CompilerSupportLibraries.v1.1.0+0.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/7a7f3a7761deb068efc00ffc5d4bf4df365cb27674ce73abbe2305b678285161f1526f4facbe27fc11076d99b2079976507f78f5b463bd9057ed008e9d52f9cf +CompilerSupportLibraries.v1.1.0+0.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/26fb41031e1b797373aea7a7c4d7be3c +CompilerSupportLibraries.v1.1.0+0.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/8fd0b6c990681789caec528067b4bcb9661f9c0a5e0268927d4e88565fa7005db3b592fb8e7830cf32b3fb4ce54d6db747dfde896f93bd38f65b7a1290a2399a +CompilerSupportLibraries.v1.1.0+0.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/6ed3f3e94f662177c3cf3c3734a5c1ec +CompilerSupportLibraries.v1.1.0+0.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/b8165630cced0f7880cb6fd6263cf39bbbbda668eccc94219720078a85a641c3b1b20648960041aa3a51108ab6df087b909c572d0690aacf8b99dc5496ff7db6 +CompilerSupportLibraries.v1.1.0+0.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/86060cbbe966a59f18f92a9b2fab95d4 +CompilerSupportLibraries.v1.1.0+0.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/0aa0ca0ff3a4d541c7a9599ca1adae7391fdd3fa841f3055ecb8635096d0d95a0763758d7533c887b38a655af55174dfcb63f470147b28a256b75a85c8e47801 +CompilerSupportLibraries.v1.1.0+0.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/4acf6f8929fb8ec9fdb8a0f1af06260d +CompilerSupportLibraries.v1.1.0+0.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/3b2e0a5f62bd93434d07848c3045479a1a05bd8589dc976a5680e13805db5adcd9abdcca82edee7b28b4c4a9413ce795784a8a0f0a8fb7346a439322c27c96d9 +CompilerSupportLibraries.v1.1.0+0.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/a75a927c3e14bee6dca29b4907def681 +CompilerSupportLibraries.v1.1.0+0.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/7853fd187f9289a8282d34112b5277bad13abe9dd9b6c796498db2f1a080b2c81faa6119df9ececd09725a019bf99706894765c9c20f618e359adc153c3181a2 +CompilerSupportLibraries.v1.1.0+0.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/ba8545cc20e6c602a0526a3b1fc1d2f1 +CompilerSupportLibraries.v1.1.0+0.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/7a7f3a7761deb068efc00ffc5d4bf4df365cb27674ce73abbe2305b678285161f1526f4facbe27fc11076d99b2079976507f78f5b463bd9057ed008e9d52f9cf +CompilerSupportLibraries.v1.1.0+0.i686-linux-gnu-libgfortran3.tar.gz/md5/39dc387fd58ef02c461c7906ceb110e3 +CompilerSupportLibraries.v1.1.0+0.i686-linux-gnu-libgfortran3.tar.gz/sha512/1296ac707fdad620c65256686523f2b027c8359f54d1f8354ef5d1ba514992c7269aad26b706575509b5e29d0ad3dec1c7d32fe3bcff0d723d6a4890819eca46 +CompilerSupportLibraries.v1.1.0+0.i686-linux-gnu-libgfortran4.tar.gz/md5/21a76d54d875ef09db2cdce77d328c2e +CompilerSupportLibraries.v1.1.0+0.i686-linux-gnu-libgfortran4.tar.gz/sha512/9c6bf15338ffbc7113c536e145e53bfaa693007b971f83ee2db820d7d54018bd1cfdbedb6bbce000ee7aaadad1561e91f5ac0e0519bbfccbc3bc57fdfc0eb7e7 +CompilerSupportLibraries.v1.1.0+0.i686-linux-gnu-libgfortran5.tar.gz/md5/f028f2c94f28201701ef6ba4fec9abc9 +CompilerSupportLibraries.v1.1.0+0.i686-linux-gnu-libgfortran5.tar.gz/sha512/c231af1bb0fd4f733278f883837fddf574689bbd7c4dd46cfcd1478d784cbeae1fd785d7cf9f4b0f98cda08819b63a20d5026c6beb892a188fc979b7893697bc +CompilerSupportLibraries.v1.1.0+0.i686-linux-musl-libgfortran3.tar.gz/md5/184436dc05207a653f13aae3d82a2e1b +CompilerSupportLibraries.v1.1.0+0.i686-linux-musl-libgfortran3.tar.gz/sha512/b6e1f969528a168de087f472eebd23a4daf907aa48f7c5b42c35960b1cae3e6ca8f512982d69b757f39d6dc07b46f74c84e549cb22354a2f55d1265cba7b7013 +CompilerSupportLibraries.v1.1.0+0.i686-linux-musl-libgfortran4.tar.gz/md5/545bee22cb35d1c4c1381009e72eebca +CompilerSupportLibraries.v1.1.0+0.i686-linux-musl-libgfortran4.tar.gz/sha512/78a65b9e7cda79cd648a1ae09daea970eba9d04fd5ea41bc1e37b065cf5c53974f759590292876f57c7f65139be66a6c381aa6756cdda7b36845cfed1bb7fddc +CompilerSupportLibraries.v1.1.0+0.i686-linux-musl-libgfortran5.tar.gz/md5/3f1a08601a6a7bbd4ecfa36c8f6abbd9 +CompilerSupportLibraries.v1.1.0+0.i686-linux-musl-libgfortran5.tar.gz/sha512/0e225e0a7b651f6b3fbccf760d08d66f2d8af1e329d14ef67fd3968a46905e062edcf75f60d7540f0cd7dabcd3ac9130fa0f63e198869bdc6a9aabd391652805 +CompilerSupportLibraries.v1.1.0+0.i686-w64-mingw32-libgfortran3.tar.gz/md5/9cfea65fa6c1b587d9b4b84ee64af166 +CompilerSupportLibraries.v1.1.0+0.i686-w64-mingw32-libgfortran3.tar.gz/sha512/b30e24982d4140c312759b8c26d4b72845fc1fa4d7fdf49ccfe9994f7bbf1815ed006a228f6a2185c5b8f9d596d0b04debd1d8392e705c530e5177a22c7c081d +CompilerSupportLibraries.v1.1.0+0.i686-w64-mingw32-libgfortran4.tar.gz/md5/af99905c4f054fe13842559f7201b3ad +CompilerSupportLibraries.v1.1.0+0.i686-w64-mingw32-libgfortran4.tar.gz/sha512/96513ff22dc16cc259ad392862f1765218474bff24e561f14c1e0d349a6bc433952d9b7b73236b56722fd971e0b864b178d8a9f8d9499de4595bc9857ef17a95 +CompilerSupportLibraries.v1.1.0+0.i686-w64-mingw32-libgfortran5.tar.gz/md5/1be078cd374d3b501b20d9ce679009ee +CompilerSupportLibraries.v1.1.0+0.i686-w64-mingw32-libgfortran5.tar.gz/sha512/63097283c987dc439f02d72a6f70423acd962e4da25acc04185e654c7f16a617e34ad7efabd624fd2e70119e79e4d4806f76286d36d56c353f9e53814e75d3e4 +CompilerSupportLibraries.v1.1.0+0.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/156ae44ab4172903ad40932ca78a57ed +CompilerSupportLibraries.v1.1.0+0.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/e800c20342dd9886c4c3f57e92278d6d41c544adba202ef3f5a6a4f8211fbbd8fab65f169adf7320b7be8a2ea02c0aa1afedbaf0b3f9afbfb691759aaaaccc4c +CompilerSupportLibraries.v1.1.0+0.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/cb01c02fdcbd319784034744172e1eb9 +CompilerSupportLibraries.v1.1.0+0.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/0ba635d39958672a0a55069521e20ca6c0f9c81a9f55c360f6043acb415709edb72bfe8d0e83c25cdf9ace8a9e9ba10e39457e234e3905c988eb95e0e0ecff3d +CompilerSupportLibraries.v1.1.0+0.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/f9592263c6e72228c492ed2ed216f29e +CompilerSupportLibraries.v1.1.0+0.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/cbe29742959906e3fe9a356991ca1f09d4d8cc2a02a9af8624b3e02b4ab59e33bc05082826f7c67c73c6b91cc8e1e5c4a0c275c21c5f8eab8b58ed942cdcb55c +CompilerSupportLibraries.v1.1.0+0.x86_64-apple-darwin-libgfortran3.tar.gz/md5/8f0db2ff4688c3f9e1337a28976d833a +CompilerSupportLibraries.v1.1.0+0.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/98502e07499ad9e22147a977b1fe55320e75b6229c3993f1cd1b71e47a09ae6bf78e2341ce978ea72d33b111d09b813a332bfe8f4f6dfb669509c300fcec2561 +CompilerSupportLibraries.v1.1.0+0.x86_64-apple-darwin-libgfortran4.tar.gz/md5/980a1b8e6262c4a7b8f86b84f7234043 +CompilerSupportLibraries.v1.1.0+0.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/c0755d4fbb1b6fd7755d7508d7df929feabe7e5778661397ef0205e21aa3be565b39ccc2a08ed0d958e812c0c759be68ef52de09fe92ebab6da342b309a0810d +CompilerSupportLibraries.v1.1.0+0.x86_64-apple-darwin-libgfortran5.tar.gz/md5/4b3cdb65e6114c77fd1e51da69e41afa +CompilerSupportLibraries.v1.1.0+0.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/803cb771875d94eda554bade8197b31aab988ab0c957a2f8853d82d01418be9fee7d9d4b7ef6f5b7fc8d1825ab22083a71d467eb976d5076fc5d73a9a7a30440 +CompilerSupportLibraries.v1.1.0+0.x86_64-linux-gnu-libgfortran3.tar.gz/md5/36638a444b185954bf12169edace1914 +CompilerSupportLibraries.v1.1.0+0.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/33f657775258d0da1a57fc03c5e8ed203946944581ebf70af7b0205f9bff7fcd4f2bde5b6fa3b01659c51f106d0e6df5c7533ab8d3372c4895675854688e01dc +CompilerSupportLibraries.v1.1.0+0.x86_64-linux-gnu-libgfortran4.tar.gz/md5/36ac52a361fd0f4be5c66572345af7a4 +CompilerSupportLibraries.v1.1.0+0.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/802bd8089bb2a3b5959a47dbade2199b46c247d0a793cbf6fcbc97b9a1dccd6d8585ac7694ae4bef1dc3ba21796ae5b53f995c8793ccd7316e8fde68ac121f83 +CompilerSupportLibraries.v1.1.0+0.x86_64-linux-gnu-libgfortran5.tar.gz/md5/5911da90a0fc86d665aa86cba12e9d61 +CompilerSupportLibraries.v1.1.0+0.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/c966936dfd272d9706aa51ed44abcb8cded899b0caa8b12ee787a0fb1569fa90a1cba89c9a9b83e05c0993facc615feb851399f4799c06956ae3064d172c964d +CompilerSupportLibraries.v1.1.0+0.x86_64-linux-musl-libgfortran3.tar.gz/md5/5f42a52e72f0e79530d71733a93811bf +CompilerSupportLibraries.v1.1.0+0.x86_64-linux-musl-libgfortran3.tar.gz/sha512/51078ef0e447bb181003a50b899b39a9d1ee8ecc92fc293f5a358d836ddf21d03dc44433ae28aa21fdf756c2912b2d3f1e374a5ba108c8c34552fcf32f93fd0b +CompilerSupportLibraries.v1.1.0+0.x86_64-linux-musl-libgfortran4.tar.gz/md5/f3bbee1114cb85c266a45f64632c6911 +CompilerSupportLibraries.v1.1.0+0.x86_64-linux-musl-libgfortran4.tar.gz/sha512/102e638f49ff0f62644f15a931c71a16b96f02f4c90d1b8bd378e0d7c54f4e8a150cdb5ffdbc3dcbafb83131bef84f9071cb77e8debdd98d8929c7b65401fc54 +CompilerSupportLibraries.v1.1.0+0.x86_64-linux-musl-libgfortran5.tar.gz/md5/ff2b0ebdc7ef83cf8b48bd2ae76c6430 +CompilerSupportLibraries.v1.1.0+0.x86_64-linux-musl-libgfortran5.tar.gz/sha512/0730ecf1b9476612cadc3f3e7c1b227a1967edc091c88cd0cc19477079d1739fd5e7b1022ff686c0c6a2404edaebfb02c810dcfc1aa4187e7ecddb54998ad96c +CompilerSupportLibraries.v1.1.0+0.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/35642304a9a2f435cf5214b2715198fe +CompilerSupportLibraries.v1.1.0+0.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/a67f41ba31c99a064f504f508711537f9e90089ca5352bfc2698c3fcd3e499ca716f07ffeac4fb1b88c2c934f7f380f262af8c863d3b16ac7e805d5c805ab358 +CompilerSupportLibraries.v1.1.0+0.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/01df0fbb265e5ff1a480a7a5e23b0835 +CompilerSupportLibraries.v1.1.0+0.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/57a79f2b8e846c1514dcb18420f26ae2889962040f410b746836cab4395749155fa9cd9d00d4c25954c0ffa72f9f3823b1b50688a20ddf675301f64e0d4b5c7e +CompilerSupportLibraries.v1.1.0+0.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/1f1f6380ce8815cc9cedcea0b40860e7 +CompilerSupportLibraries.v1.1.0+0.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/a88ea8af8c8df792861812bfdf7f1bcaae31582ab78ce78b47a0dc6fd57b93441c0471f529ce23877131ac9701c6eed72ce89241746e18271f3686fbd718138c +CompilerSupportLibraries.v1.1.0+0.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/5eab740e86bfa7656f6a08038fe2fa63 +CompilerSupportLibraries.v1.1.0+0.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/3dc6b7ec39ff7dcb71478376c86ce34a35a62f049f6203722c5414b7b635ff1b412e02d8d24c13c123d18b2e914780da4639538676694e342a1a6b507691ef25 +CompilerSupportLibraries.v1.1.0+0.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/9718c79244ed31c367e715f1f563b8cd +CompilerSupportLibraries.v1.1.0+0.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/eec2380c4e182f4e923142736a2c4aaf11a525a5f966fed7e4ec4b431ee28f3842a4e73495df116604f74b419e6d398576ee3dd21d3c0c53b92167dcfd0f6b84 +CompilerSupportLibraries.v1.1.0+0.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/58d7b0b79a22f3aade7e4f39eec898e7 +CompilerSupportLibraries.v1.1.0+0.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/efecc0ca09ec6b7b8898c2ffd333c7e0a6a44706d72ac0e5010409aba92ee70a88b6fd77434bedafe0e013561f8d0c74b5a274808a6c9499f6a3005a7691785f diff --git a/deps/csl.mk b/deps/csl.mk index 37956ba5c3505..aaebc8f50c053 100644 --- a/deps/csl.mk +++ b/deps/csl.mk @@ -104,4 +104,20 @@ distclean-csl: clean-csl else $(eval $(call bb-install,csl,CSL,true)) +ifeq ($(OS),WINNT) +install-csl: + mkdir -p $(build_private_libdir)/ + cp -a $(build_libdir)/gcc/$(BB_TRIPLET)/13/libgcc_s.a $(build_private_libdir)/ + cp -a $(build_libdir)/gcc/$(BB_TRIPLET)/13/libgcc.a $(build_private_libdir)/ + cp -a $(build_libdir)/gcc/$(BB_TRIPLET)/13/libmsvcrt.a $(build_private_libdir)/ + cp -a $(build_libdir)/gcc/$(BB_TRIPLET)/13/libssp.dll.a $(build_private_libdir)/ +endif +endif +ifeq ($(OS),WINNT) +uninstall-csl: uninstall-gcc-libraries +uninstall-gcc-libraries: + -rm -f $(build_private_libdir)/libgcc_s.a + -rm -f $(build_private_libdir)/libgcc.a + -rm -f $(build_private_libdir)/libmsvcrt.a + -rm -f $(build_private_libdir)/libssp.dll.a endif diff --git a/stdlib/CompilerSupportLibraries_jll/Project.toml b/stdlib/CompilerSupportLibraries_jll/Project.toml index 6256c69d9bc10..3e15ff6b87b71 100644 --- a/stdlib/CompilerSupportLibraries_jll/Project.toml +++ b/stdlib/CompilerSupportLibraries_jll/Project.toml @@ -2,9 +2,9 @@ name = "CompilerSupportLibraries_jll" uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" # NOTE: When updating this, also make sure to update the value -# `CSL_NEXT_GLIBCXX_VERSION` in `deps/csl.mk`, to properly disable +# `CSL_NEXT_GLIBCXX_VERSION` in `Make.inc`, to properly disable # automatic usage of BB-built CSLs on extremely up-to-date systems! -version = "1.0.5+1" +version = "1.1.0+0" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" From 7a962101e7f81a92a87923f5a1da9115375adc65 Mon Sep 17 00:00:00 2001 From: Andreas Noack Date: Mon, 5 Feb 2024 16:29:14 +0100 Subject: [PATCH 288/413] Add link to PR in NEWS (#53189) The link to https://github.com/JuliaLang/julia/pull/49349 was missing. --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index e6b2a3b950a21..9e5ab91b1749b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -19,7 +19,7 @@ Language changes define methods to explicitly handle Union{} without the ambiguities that commonly would result previously. This also lets the runtime optimize certain method lookups in a way that significantly improves load and inference times for heavily overloaded methods that - dispatch on Types (such as traits and constructors). + dispatch on Types (such as traits and constructors). ([#49349]) * The "h bar" `ℏ` (`\hslash` U+210F) character is now treated as equivalent to `ħ` (`\hbar` U+0127). * The `@simd` macro now has more limited and clearer semantics: it only enables reordering and contraction of floating-point operations, instead of turning on all "fastmath" optimizations. From ff295caa4fd52a6718cc29b20206bd9e1af2b4a6 Mon Sep 17 00:00:00 2001 From: Pablo San-Jose Date: Tue, 30 Jan 2024 01:25:02 +0100 Subject: [PATCH 289/413] Ensure elision of `require_one_based_indexing` with high-dim array views (#53091) Closes #49332 --------- Co-authored-by: Denis Barucic (cherry picked from commit 9edf1dd8e971a6f43af4b39992fcb6eb81f8fb5d) --- base/abstractarray.jl | 11 +++++++---- test/abstractarray.jl | 4 ++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/base/abstractarray.jl b/base/abstractarray.jl index 8b8e4a760eb9b..7be13ad34a66d 100644 --- a/base/abstractarray.jl +++ b/base/abstractarray.jl @@ -103,17 +103,20 @@ end has_offset_axes(A, B, ...) Return `true` if the indices of `A` start with something other than 1 along any axis. -If multiple arguments are passed, equivalent to `has_offset_axes(A) | has_offset_axes(B) | ...`. +If multiple arguments are passed, equivalent to `has_offset_axes(A) || has_offset_axes(B) || ...`. See also [`require_one_based_indexing`](@ref). """ +has_offset_axes() = false has_offset_axes(A) = _any_tuple(x->Int(first(x))::Int != 1, false, axes(A)...) has_offset_axes(A::AbstractVector) = Int(firstindex(A))::Int != 1 # improve performance of a common case (ranges) -# Use `_any_tuple` to avoid unneeded invoke. -# note: this could call `any` directly if the compiler can infer it -has_offset_axes(As...) = _any_tuple(has_offset_axes, false, As...) has_offset_axes(::Colon) = false has_offset_axes(::Array) = false +# note: this could call `any` directly if the compiler can infer it. We don't use _any_tuple +# here because it stops full elision in some cases (#49332) and we don't need handling of +# `missing` (has_offset_axes(A) always returns a Bool) +has_offset_axes(A, As...) = has_offset_axes(A) || has_offset_axes(As...) + """ require_one_based_indexing(A::AbstractArray) diff --git a/test/abstractarray.jl b/test/abstractarray.jl index 8a74f90f2d553..6a60dac2e81e1 100644 --- a/test/abstractarray.jl +++ b/test/abstractarray.jl @@ -1825,13 +1825,17 @@ end @testset "type-based offset axes check" begin a = randn(ComplexF64, 10) + b = randn(ComplexF64, 4, 4, 4, 4) ta = reinterpret(Float64, a) tb = reinterpret(Float64, view(a, 1:2:10)) tc = reinterpret(Float64, reshape(view(a, 1:3:10), 2, 2, 1)) + td = view(b, :, :, 1, 1) # Issue #44040 @test IRUtils.fully_eliminated(Base.require_one_based_indexing, Base.typesof(ta, tc)) @test IRUtils.fully_eliminated(Base.require_one_based_indexing, Base.typesof(tc, tc)) @test IRUtils.fully_eliminated(Base.require_one_based_indexing, Base.typesof(ta, tc, tb)) + # Issue #49332 + @test IRUtils.fully_eliminated(Base.require_one_based_indexing, Base.typesof(td, td, td)) # Ranges && CartesianIndices @test IRUtils.fully_eliminated(Base.require_one_based_indexing, Base.typesof(1:10, Base.OneTo(10), 1.0:2.0, LinRange(1.0, 2.0, 2), 1:2:10, CartesianIndices((1:2:10, 1:2:10)))) # Remind us to call `any` in `Base.has_offset_axes` once our compiler is ready. From e1af4a9b8cd747eb9f56729f1a9e67bb126d78f3 Mon Sep 17 00:00:00 2001 From: Mason Protter Date: Wed, 31 Jan 2024 18:10:30 +0100 Subject: [PATCH 290/413] Try to fix incorrect documentation of `nthreads` (#53117) Since https://github.com/JuliaLang/julia/pull/49094, the docstring of `nthreads` has been incorrect. It currently states that > The threads in default have id numbers `1:nthreads(:default)`. whereas that is no longer true: ```julia julia> filter(i -> Threads.threadpool(i) == :interactive, 1:Threads.maxthreadid()) 3-element Vector{Int64}: 1 2 3 julia> filter(i -> Threads.threadpool(i) == :default, 1:Threads.maxthreadid()) 6-element Vector{Int64}: 4 5 6 7 8 9 ``` (cherry picked from commit 95ae27f6255fdb5f10d32ab6e8134632171bb822) --- base/threadingconstructs.jl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/base/threadingconstructs.jl b/base/threadingconstructs.jl index a5a1294be049b..e202bb0acb317 100644 --- a/base/threadingconstructs.jl +++ b/base/threadingconstructs.jl @@ -44,8 +44,9 @@ maxthreadid() = Int(Core.Intrinsics.atomic_pointerref(cglobal(:jl_n_threads, Cin """ Threads.nthreads(:default | :interactive) -> Int -Get the current number of threads within the specified thread pool. The threads in default -have id numbers `1:nthreads(:default)`. +Get the current number of threads within the specified thread pool. The threads in `:interactive` +have id numbers `1:nthreads(:interactive)`, and the threads in `:default` have id numbers in +`nthreads(:interactive) .+ (1:nthreads(:default))`. See also `BLAS.get_num_threads` and `BLAS.set_num_threads` in the [`LinearAlgebra`](@ref man-linalg) standard library, and `nprocs()` in the [`Distributed`](@ref man-distributed) From 93a596e390556757966ec31dd8903fd50b2183f2 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Thu, 11 Jan 2024 18:56:23 +0530 Subject: [PATCH 291/413] Fix variable name in scaling an `AbstractTriangular` with zero alpha (#52855) There is no `C` defined in these methods, so this branch used to error. (cherry picked from commit c5d7b87a35b5beaef9d4d3aa53c0a2686f3445b9) --- stdlib/LinearAlgebra/src/triangular.jl | 20 ++++++++++---------- stdlib/LinearAlgebra/test/triangular.jl | 5 +++++ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/stdlib/LinearAlgebra/src/triangular.jl b/stdlib/LinearAlgebra/src/triangular.jl index 20353d25ff9d3..6b11c864d5d1f 100644 --- a/stdlib/LinearAlgebra/src/triangular.jl +++ b/stdlib/LinearAlgebra/src/triangular.jl @@ -471,7 +471,7 @@ end function _triscale!(A::UpperTriangular, B::UpperTriangular, c::Number, _add) n = checksquare(B) - iszero(_add.alpha) && return _rmul_or_fill!(C, _add.beta) + iszero(_add.alpha) && return _rmul_or_fill!(A, _add.beta) for j = 1:n for i = 1:j @inbounds _modify!(_add, B.data[i,j] * c, A.data, (i,j)) @@ -481,8 +481,8 @@ function _triscale!(A::UpperTriangular, B::UpperTriangular, c::Number, _add) end function _triscale!(A::UpperTriangular, c::Number, B::UpperTriangular, _add) n = checksquare(B) - iszero(_add.alpha) && return _rmul_or_fill!(C, _add.beta) - for j = 1:n + iszero(_add.alpha) && return _rmul_or_fill!(A, _add.beta) +for j = 1:n for i = 1:j @inbounds _modify!(_add, c * B.data[i,j], A.data, (i,j)) end @@ -491,7 +491,7 @@ function _triscale!(A::UpperTriangular, c::Number, B::UpperTriangular, _add) end function _triscale!(A::UpperOrUnitUpperTriangular, B::UnitUpperTriangular, c::Number, _add) n = checksquare(B) - iszero(_add.alpha) && return _rmul_or_fill!(C, _add.beta) + iszero(_add.alpha) && return _rmul_or_fill!(A, _add.beta) for j = 1:n @inbounds _modify!(_add, c, A, (j,j)) for i = 1:(j - 1) @@ -502,7 +502,7 @@ function _triscale!(A::UpperOrUnitUpperTriangular, B::UnitUpperTriangular, c::Nu end function _triscale!(A::UpperOrUnitUpperTriangular, c::Number, B::UnitUpperTriangular, _add) n = checksquare(B) - iszero(_add.alpha) && return _rmul_or_fill!(C, _add.beta) + iszero(_add.alpha) && return _rmul_or_fill!(A, _add.beta) for j = 1:n @inbounds _modify!(_add, c, A, (j,j)) for i = 1:(j - 1) @@ -513,7 +513,7 @@ function _triscale!(A::UpperOrUnitUpperTriangular, c::Number, B::UnitUpperTriang end function _triscale!(A::LowerTriangular, B::LowerTriangular, c::Number, _add) n = checksquare(B) - iszero(_add.alpha) && return _rmul_or_fill!(C, _add.beta) + iszero(_add.alpha) && return _rmul_or_fill!(A, _add.beta) for j = 1:n for i = j:n @inbounds _modify!(_add, B.data[i,j] * c, A.data, (i,j)) @@ -523,8 +523,8 @@ function _triscale!(A::LowerTriangular, B::LowerTriangular, c::Number, _add) end function _triscale!(A::LowerTriangular, c::Number, B::LowerTriangular, _add) n = checksquare(B) - iszero(_add.alpha) && return _rmul_or_fill!(C, _add.beta) - for j = 1:n + iszero(_add.alpha) && return _rmul_or_fill!(A, _add.beta) + for j = 1:n for i = j:n @inbounds _modify!(_add, c * B.data[i,j], A.data, (i,j)) end @@ -533,7 +533,7 @@ function _triscale!(A::LowerTriangular, c::Number, B::LowerTriangular, _add) end function _triscale!(A::LowerOrUnitLowerTriangular, B::UnitLowerTriangular, c::Number, _add) n = checksquare(B) - iszero(_add.alpha) && return _rmul_or_fill!(C, _add.beta) + iszero(_add.alpha) && return _rmul_or_fill!(A, _add.beta) for j = 1:n @inbounds _modify!(_add, c, A, (j,j)) for i = (j + 1):n @@ -544,7 +544,7 @@ function _triscale!(A::LowerOrUnitLowerTriangular, B::UnitLowerTriangular, c::Nu end function _triscale!(A::LowerOrUnitLowerTriangular, c::Number, B::UnitLowerTriangular, _add) n = checksquare(B) - iszero(_add.alpha) && return _rmul_or_fill!(C, _add.beta) + iszero(_add.alpha) && return _rmul_or_fill!(A, _add.beta) for j = 1:n @inbounds _modify!(_add, c, A, (j,j)) for i = (j + 1):n diff --git a/stdlib/LinearAlgebra/test/triangular.jl b/stdlib/LinearAlgebra/test/triangular.jl index aaf433c95b7b0..df2147f4ae0a8 100644 --- a/stdlib/LinearAlgebra/test/triangular.jl +++ b/stdlib/LinearAlgebra/test/triangular.jl @@ -239,6 +239,11 @@ for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFlo A2tmp = unitt(A1) mul!(A1tmp, cr, A2tmp) @test A1tmp == cr * A2tmp + + A1tmp .= A1 + @test mul!(A1tmp, A2tmp, cr, 0, 2) == 2A1 + A1tmp .= A1 + @test mul!(A1tmp, cr, A2tmp, 0, 2) == 2A1 else A1tmp = copy(A1) rmul!(A1tmp, ci) From a1ad1baf99f909871dd5e28850745566766b9f08 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Fri, 19 Jan 2024 08:13:58 +0900 Subject: [PATCH 292/413] [REPLCompletions] enable completions for `using Module.Inner|` (#52952) (cherry picked from commit a0d55cd4b53adf91770ff5cbdab5b30ba81fbe96) --- stdlib/REPL/src/REPLCompletions.jl | 53 +++++++++++++++++++++++++---- stdlib/REPL/test/replcompletions.jl | 44 ++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 7 deletions(-) diff --git a/stdlib/REPL/src/REPLCompletions.jl b/stdlib/REPL/src/REPLCompletions.jl index 729334feed7c9..58382e9c10d75 100644 --- a/stdlib/REPL/src/REPLCompletions.jl +++ b/stdlib/REPL/src/REPLCompletions.jl @@ -980,7 +980,10 @@ function project_deps_get_completion_candidates(pkgstarts::String, project_file: return Completion[PackageCompletion(name) for name in loading_candidates] end -function complete_identifiers!(suggestions::Vector{Completion}, @nospecialize(ffunc::Function), context_module::Module, string::String, name::String, pos::Int, dotpos::Int, startpos::Int, comp_keywords=false) +function complete_identifiers!(suggestions::Vector{Completion}, @nospecialize(ffunc), + context_module::Module, string::String, name::String, + pos::Int, dotpos::Int, startpos::Int; + comp_keywords=false) ex = nothing if comp_keywords append!(suggestions, complete_keyword(name)) @@ -1022,10 +1025,41 @@ function complete_identifiers!(suggestions::Vector{Completion}, @nospecialize(ff if something(findlast(in(non_identifier_chars), s), 0) < something(findlast(isequal('.'), s), 0) lookup_name, name = rsplit(s, ".", limit=2) name = String(name) - ex = Meta.parse(lookup_name, raise=false, depwarn=false) end isexpr(ex, :incomplete) && (ex = nothing) + elseif isexpr(ex, (:using, :import)) + arg1 = ex.args[1] + if isexpr(arg1, :.) + # We come here for cases like: + # - `string`: "using Mod1.Mod2.M" + # - `ex`: :(using Mod1.Mod2) + # - `name`: "M" + # Now we transform `ex` to `:(Mod1.Mod2)` to allow `complete_symbol` to + # complete for inner modules whose name starts with `M`. + # Note that `ffunc` is set to `module_filter` within `completions` + ex = nothing + firstdot = true + for arg = arg1.args + if arg === :. + # override `context_module` if multiple `.` accessors are used + if firstdot + firstdot = false + else + context_module = parentmodule(context_module) + end + elseif arg isa Symbol + if ex === nothing + ex = arg + else + ex = Expr(:., out, QuoteNode(arg)) + end + else # invalid expression + ex = nothing + break + end + end + end elseif isexpr(ex, :call) && length(ex.args) > 1 isinfix = s[end] != ')' # A complete call expression that does not finish with ')' is an infix call. @@ -1106,8 +1140,9 @@ function completions(string::String, pos::Int, context_module::Module=Main, shif ok && return ret startpos = first(varrange) + 4 dotpos = something(findprev(isequal('.'), string, first(varrange)-1), 0) - return complete_identifiers!(Completion[], ffunc, context_module, string, - string[startpos:pos], pos, dotpos, startpos) + name = string[startpos:pos] + return complete_identifiers!(Completion[], ffunc, context_module, string, name, pos, + dotpos, startpos) elseif inc_tag === :cmd # TODO: should this call shell_completions instead of partially reimplementing it? let m = match(r"[\t\n\r\"`><=*?|]| (?!\\)", reverse(partial)) # fuzzy shell_parse in reverse @@ -1255,16 +1290,20 @@ function completions(string::String, pos::Int, context_module::Module=Main, shif end end end - ffunc = (mod,x)->(Base.isbindingresolved(mod, x) && isdefined(mod, x) && isa(getfield(mod, x), Module)) + ffunc = module_filter comp_keywords = false end startpos == 0 && (pos = -1) dotpos < startpos && (dotpos = startpos - 1) - return complete_identifiers!(suggestions, ffunc, context_module, string, - name, pos, dotpos, startpos, comp_keywords) + return complete_identifiers!(suggestions, ffunc, context_module, string, name, pos, + dotpos, startpos; + comp_keywords) end +module_filter(mod::Module, x::Symbol) = + Base.isbindingresolved(mod, x) && isdefined(mod, x) && isa(getglobal(mod, x), Module) + function shell_completions(string, pos) # First parse everything up to the current position scs = string[1:pos] diff --git a/stdlib/REPL/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl index 56a96b5a1534c..ae29812c5f43e 100644 --- a/stdlib/REPL/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -1939,3 +1939,47 @@ let s = "@issue51827 Base.ac" @test res @test "acquire" in c end + +# JuliaLang/julia#52922 +let s = "using Base.Th" + c, r, res = test_complete_context(s) + @test res + @test "Threads" in c +end +let s = "using Base." + c, r, res = test_complete_context(s) + @test res + @test "BinaryPlatforms" in c +end +# test cases with the `.` accessor +module Issue52922 +module Inner1 +module Inner12 end +end +module Inner2 end +end +let s = "using .Iss" + c, r, res = test_complete_context(s) + @test res + @test "Issue52922" in c +end +let s = "using .Issue52922.Inn" + c, r, res = test_complete_context(s) + @test res + @test "Inner1" in c +end +let s = "using .Inner1.Inn" + c, r, res = test_complete_context(s, Issue52922) + @test res + @test "Inner12" in c +end +let s = "using ..Issue52922.Inn" + c, r, res = test_complete_context(s, Issue52922.Inner1) + @test res + @test "Inner2" in c +end +let s = "using ...Issue52922.Inn" + c, r, res = test_complete_context(s, Issue52922.Inner1.Inner12) + @test res + @test "Inner2" in c +end From 2ef3842462b1a58623303fd6a6fc38ae8b47bc25 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Wed, 31 Jan 2024 17:39:57 +0530 Subject: [PATCH 293/413] Inplace transpose for unit Triangular may skip diagonal (#53101) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Since the diagonal elements of a `UnitUpperTriangular` are given by `onelement`, these should be unchanged under `transpose/adjoint`, and we don't need to access these elements in the parent array when performing in-place operations. Fixes ```julia julia> using LinearAlgebra julia> M = Matrix{BigFloat}(undef, 2, 2); julia> M[1,2] = 3; julia> U = UnitUpperTriangular(M) 2×2 UnitUpperTriangular{BigFloat, Matrix{BigFloat}}: 1.0 3.0 ⋅ 1.0 julia> transpose!(U) ERROR: UndefRefError: access to undefined reference Stacktrace: [1] getindex @ ./essentials.jl:882 [inlined] [2] getindex @ ./array.jl:915 [inlined] [3] copytri! @ ~/packages/julias/julia-latest/share/julia/stdlib/v1.11/LinearAlgebra/src/matmul.jl:414 [inlined] [4] transpose!(A::UnitUpperTriangular{BigFloat, Matrix{BigFloat}}) @ LinearAlgebra ~/packages/julias/julia-latest/share/julia/stdlib/v1.11/LinearAlgebra/src/triangular.jl:470 [5] top-level scope @ REPL[5]:1 ``` After this PR: ```julia julia> transpose!(U) 2×2 UnitLowerTriangular{BigFloat, Matrix{BigFloat}}: 1.0 ⋅ 3.0 1.0 ``` (cherry picked from commit cc74d241be9f023ceb6d2ded7314bfbd02f8b17c) --- stdlib/LinearAlgebra/src/triangular.jl | 8 ++++---- stdlib/LinearAlgebra/test/triangular.jl | 10 +++++++++- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/stdlib/LinearAlgebra/src/triangular.jl b/stdlib/LinearAlgebra/src/triangular.jl index 6b11c864d5d1f..e8291b1081df2 100644 --- a/stdlib/LinearAlgebra/src/triangular.jl +++ b/stdlib/LinearAlgebra/src/triangular.jl @@ -406,13 +406,13 @@ transpose(A::UnitLowerTriangular) = UnitUpperTriangular(transpose(A.data)) transpose(A::UnitUpperTriangular) = UnitLowerTriangular(transpose(A.data)) transpose!(A::LowerTriangular) = UpperTriangular(copytri!(A.data, 'L', false, true)) -transpose!(A::UnitLowerTriangular) = UnitUpperTriangular(copytri!(A.data, 'L', false, true)) +transpose!(A::UnitLowerTriangular) = UnitUpperTriangular(copytri!(A.data, 'L', false, false)) transpose!(A::UpperTriangular) = LowerTriangular(copytri!(A.data, 'U', false, true)) -transpose!(A::UnitUpperTriangular) = UnitLowerTriangular(copytri!(A.data, 'U', false, true)) +transpose!(A::UnitUpperTriangular) = UnitLowerTriangular(copytri!(A.data, 'U', false, false)) adjoint!(A::LowerTriangular) = UpperTriangular(copytri!(A.data, 'L' , true, true)) -adjoint!(A::UnitLowerTriangular) = UnitUpperTriangular(copytri!(A.data, 'L' , true, true)) +adjoint!(A::UnitLowerTriangular) = UnitUpperTriangular(copytri!(A.data, 'L' , true, false)) adjoint!(A::UpperTriangular) = LowerTriangular(copytri!(A.data, 'U' , true, true)) -adjoint!(A::UnitUpperTriangular) = UnitLowerTriangular(copytri!(A.data, 'U' , true, true)) +adjoint!(A::UnitUpperTriangular) = UnitLowerTriangular(copytri!(A.data, 'U' , true, false)) diag(A::LowerTriangular) = diag(A.data) diag(A::UnitLowerTriangular) = fill(oneunit(eltype(A)), size(A,1)) diff --git a/stdlib/LinearAlgebra/test/triangular.jl b/stdlib/LinearAlgebra/test/triangular.jl index df2147f4ae0a8..759f89f6f7220 100644 --- a/stdlib/LinearAlgebra/test/triangular.jl +++ b/stdlib/LinearAlgebra/test/triangular.jl @@ -18,7 +18,7 @@ debug && println("Test basic type functionality") @test LowerTriangular(randn(3, 3)) |> t -> [size(t, i) for i = 1:3] == [size(Matrix(t), i) for i = 1:3] # The following test block tries to call all methods in base/linalg/triangular.jl in order for a combination of input element types. Keep the ordering when adding code. -for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFloat}, Int) +@testset for elty1 in (Float32, Float64, BigFloat, ComplexF32, ComplexF64, Complex{BigFloat}, Int) # Begin loop for first Triangular matrix for (t1, uplo1) in ((UpperTriangular, :U), (UnitUpperTriangular, :U), @@ -871,4 +871,12 @@ end end end +@testset "transpose triangular diagonal" begin + M = Matrix{BigFloat}(undef, 2, 2); + M[1,2] = 3; + U = UnitUpperTriangular(M) + Ut = transpose(U) + @test transpose!(U) == Ut +end + end # module TestTriangular From 6fcff37424d20d02b2e59fa1fabfa3b8b42dbbdc Mon Sep 17 00:00:00 2001 From: xgdgsc Date: Tue, 22 Aug 2023 00:46:19 +0800 Subject: [PATCH 294/413] fix bus error on smaller readonly file in unix (#44354) Fixes: #28245 Co-authored-by: Jameson Nash Co-authored-by: Stefan Karpinski (cherry picked from commit ead627e5608b27dbf50cbb15d45b32bb41c5d8b2) --- stdlib/Mmap/src/Mmap.jl | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/stdlib/Mmap/src/Mmap.jl b/stdlib/Mmap/src/Mmap.jl index 629f53e8371ed..9dd02d5aa9d04 100644 --- a/stdlib/Mmap/src/Mmap.jl +++ b/stdlib/Mmap/src/Mmap.jl @@ -208,18 +208,43 @@ function mmap(io::IO, mmaplen = (offset - offset_page) + len file_desc = gethandle(io) + szfile = convert(Csize_t, len + offset) + requestedSizeLarger = false + if !(io isa Mmap.Anonymous) + @static if !Sys.isapple() + requestedSizeLarger = szfile > filesize(io) + end + end # platform-specific mmapping @static if Sys.isunix() prot, flags, iswrite = settings(file_desc, shared) - iswrite && grow && grow!(io, offset, len) + if requestedSizeLarger + if iswrite + if grow + grow!(io, offset, len) + else + throw(ArgumentError("requested size $szfile larger than file size $(filesize(io)), but requested not to grow")) + end + else + throw(ArgumentError("unable to increase file size to $szfile due to read-only permissions")) + end + end + @static if Sys.isapple() + iswrite && grow && grow!(io, offset, len) + end # mmap the file ptr = ccall(:jl_mmap, Ptr{Cvoid}, (Ptr{Cvoid}, Csize_t, Cint, Cint, RawFD, Int64), C_NULL, mmaplen, prot, flags, file_desc, offset_page) systemerror("memory mapping failed", reinterpret(Int, ptr) == -1) else name, readonly, create = settings(io) - szfile = convert(Csize_t, len + offset) - readonly && szfile > filesize(io) && throw(ArgumentError("unable to increase file size to $szfile due to read-only permissions")) + if requestedSizeLarger + if readonly + throw(ArgumentError("unable to increase file size to $szfile due to read-only permissions")) + elseif !grow + throw(ArgumentError("requested size $szfile larger than file size $(filesize(io)), but requested not to grow")) + end + end handle = create ? ccall(:CreateFileMappingW, stdcall, Ptr{Cvoid}, (OS_HANDLE, Ptr{Cvoid}, DWORD, DWORD, DWORD, Cwstring), file_desc, C_NULL, readonly ? PAGE_READONLY : PAGE_READWRITE, szfile >> 32, szfile & typemax(UInt32), name) : ccall(:OpenFileMappingW, stdcall, Ptr{Cvoid}, (DWORD, Cint, Cwstring), From 7790d6f06411be1fd5aec7cb6fffdb38c89c0c2a Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 13 Feb 2024 21:41:13 +0100 Subject: [PATCH 295/413] release-1.10: set VERSION to 1.10.1 (#53306) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 81c871de46b3e..4dae2985b58cc 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.0 +1.10.1 From 2111c03ef6eecbf294b531085fd655b1760248b9 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 13 Feb 2024 21:41:13 +0100 Subject: [PATCH 296/413] release-1.10: set VERSION to 1.10.1 (#53306) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 81c871de46b3e..4dae2985b58cc 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.0 +1.10.1 From 2b2eb4d69726c04e186fdf523242790498ea7b9a Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Tue, 6 Feb 2024 13:36:53 -0500 Subject: [PATCH 297/413] Profile: add notes to `print()` docs (#53205) (cherry picked from commit 9bafc5334a6a883408ba70761111158f97cc288d) --- stdlib/Profile/src/Profile.jl | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/stdlib/Profile/src/Profile.jl b/stdlib/Profile/src/Profile.jl index 716cd7c14b904..690d0465b3ec0 100644 --- a/stdlib/Profile/src/Profile.jl +++ b/stdlib/Profile/src/Profile.jl @@ -201,6 +201,13 @@ The keyword arguments can be any combination of: - `tasks::Union{Int,AbstractVector{Int}}` -- Specify which tasks to include snapshots from in the report. Note that this does not control which tasks samples are collected within. + +!!! compat "Julia 1.8" + The `groupby`, `threads`, and `tasks` keyword arguments were introduced in Julia 1.8. + +!!! note + Profiling on windows is limited to the main thread. Other threads have not been sampled and will not show in the report. + """ function print(io::IO, data::Vector{<:Unsigned} = fetch(), From be27b72231ed52dc1621f3ca70c4d75266c0b91e Mon Sep 17 00:00:00 2001 From: Knut Andreas Meyer Date: Thu, 8 Feb 2024 12:44:55 +0100 Subject: [PATCH 298/413] Document --heap-size-hint in Command-line Interface (#50480) Almost a direct copy of the output in `julia --help`. Closes #50588 Co-authored-by: Max Horn (cherry picked from commit c5ad46789dcf85c70a847d62f5859e59686fb532) --- doc/src/manual/command-line-interface.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/manual/command-line-interface.md b/doc/src/manual/command-line-interface.md index 0210e81520998..fdf165d411f5e 100644 --- a/doc/src/manual/command-line-interface.md +++ b/doc/src/manual/command-line-interface.md @@ -142,6 +142,7 @@ The following is a complete list of command-line switches available when launchi |`--output-incremental={yes\|no*}` |Generate an incremental output file (rather than complete)| |`--trace-compile={stderr,name}` |Print precompile statements for methods compiled during execution or save to a path| |`--image-codegen` |Force generate code in imaging mode| +|`--heap-size-hint=` |Forces garbage collection if memory usage is higher than that value. The memory hint might be specified in megabytes (e.g., 500M) or gigabytes (e.g., 1G)| !!! compat "Julia 1.1" From 5b54ddf555c7000785c6468816341c7540b3db59 Mon Sep 17 00:00:00 2001 From: Christian Guinard <28689358+christiangnrd@users.noreply.github.com> Date: Mon, 12 Feb 2024 14:44:06 -0400 Subject: [PATCH 299/413] Fix typo in `Sys.total_memory` docstring. (#53301) Fixes #53298. (cherry picked from commit 81c652640ecfa5215781bf398bbf57b67ec3d616) --- base/sysinfo.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/sysinfo.jl b/base/sysinfo.jl index 2c962088484e7..235cf04382bc1 100644 --- a/base/sysinfo.jl +++ b/base/sysinfo.jl @@ -276,7 +276,7 @@ free_memory() = ccall(:uv_get_available_memory, UInt64, ()) Get the total memory in RAM (including that which is currently used) in bytes. This amount may be constrained, e.g., by Linux control groups. For the unconstrained -amount, see `Sys.physical_memory()`. +amount, see `Sys.total_physical_memory()`. """ function total_memory() constrained = ccall(:uv_get_constrained_memory, UInt64, ()) From 9e12184e2a8ac65bfe6b7b48998ee36352f63045 Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Tue, 20 Feb 2024 17:34:35 +0100 Subject: [PATCH 300/413] bump NetworkOptions --- .../md5 | 1 + .../sha512 | 1 + .../md5 | 1 - .../sha512 | 1 - stdlib/NetworkOptions.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/md5 create mode 100644 deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/sha512 delete mode 100644 deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/md5 delete mode 100644 deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/sha512 diff --git a/deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/md5 b/deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/md5 new file mode 100644 index 0000000000000..36c148c3deeba --- /dev/null +++ b/deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/md5 @@ -0,0 +1 @@ +193abc96d1ea3a83096ba8401acbc5fa diff --git a/deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/sha512 b/deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/sha512 new file mode 100644 index 0000000000000..26f1e116e4e6f --- /dev/null +++ b/deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/sha512 @@ -0,0 +1 @@ +17f7567be44c2ff3e2c567311cd716191127d0d0f9a4a226d7c06003a5b455343dd8e308032f942bb0a5b95e4b5defc530cc2cda9dfff482aab6f688080c20e7 diff --git a/deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/md5 b/deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/md5 deleted file mode 100644 index 433b89eaedcc2..0000000000000 --- a/deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -73b81916dc08382ad34b8110983b61ad diff --git a/deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/sha512 b/deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/sha512 deleted file mode 100644 index 01f34b83dc80b..0000000000000 --- a/deps/checksums/NetworkOptions-aab83e5dd900c874826d430e25158dff43559d78.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -a860163ef4fa5c2ff8d8712fff5ad5bb16e7697acc53538a0dda4435b910f4ad94f9c206e0d81864762361fdbcfbc57eb2e1708b33326f4f1c8d95997a495fe3 diff --git a/stdlib/NetworkOptions.version b/stdlib/NetworkOptions.version index be36f14f526dc..7f93eadcf7264 100644 --- a/stdlib/NetworkOptions.version +++ b/stdlib/NetworkOptions.version @@ -1,4 +1,4 @@ NETWORKOPTIONS_BRANCH = master -NETWORKOPTIONS_SHA1 = aab83e5dd900c874826d430e25158dff43559d78 +NETWORKOPTIONS_SHA1 = 0bd33455cf3c77f2f87bf64167b64611dc5ff128 NETWORKOPTIONS_GIT_URL := https://github.com/JuliaLang/NetworkOptions.jl.git NETWORKOPTIONS_TAR_URL = https://api.github.com/repos/JuliaLang/NetworkOptions.jl/tarball/$1 From d002e968f4f10a9006e1799e797ba0fe82dd8108 Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Tue, 20 Feb 2024 18:05:43 +0100 Subject: [PATCH 301/413] do not call worker_from_id with pid<1 --- stdlib/Distributed/src/cluster.jl | 2 +- stdlib/Distributed/src/process_messages.jl | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/stdlib/Distributed/src/cluster.jl b/stdlib/Distributed/src/cluster.jl index d8cc052967d50..2444695f90afd 100644 --- a/stdlib/Distributed/src/cluster.jl +++ b/stdlib/Distributed/src/cluster.jl @@ -92,7 +92,7 @@ mutable struct WorkerConfig end end -@enum WorkerState W_CREATED W_CONNECTED W_TERMINATING W_TERMINATED +@enum WorkerState W_CREATED W_CONNECTED W_TERMINATING W_TERMINATED W_UNKNOWN_STATE mutable struct Worker id::Int msg_lock::Threads.ReentrantLock # Lock for del_msgs, add_msgs, and gcflag diff --git a/stdlib/Distributed/src/process_messages.jl b/stdlib/Distributed/src/process_messages.jl index e68e05b9db52b..3032917e49f93 100644 --- a/stdlib/Distributed/src/process_messages.jl +++ b/stdlib/Distributed/src/process_messages.jl @@ -210,8 +210,7 @@ function message_handler_loop(r_stream::IO, w_stream::IO, incoming::Bool) handle_msg(msg, header, r_stream, w_stream, version) end catch e - werr = worker_from_id(wpid) - oldstate = werr.state + oldstate = W_UNKNOWN_STATE # Check again as it may have been set in a message handler but not propagated to the calling block above if wpid < 1 @@ -222,6 +221,8 @@ function message_handler_loop(r_stream::IO, w_stream::IO, incoming::Bool) println(stderr, e, CapturedException(e, catch_backtrace())) println(stderr, "Process($(myid())) - Unknown remote, closing connection.") elseif !(wpid in map_del_wrkr) + werr = worker_from_id(wpid) + oldstate = werr.state set_worker_state(werr, W_TERMINATED) # If unhandleable error occurred talking to pid 1, exit From 45c2bd8efe20c5022ca666401006399ac89678b8 Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Tue, 20 Feb 2024 16:42:30 -0500 Subject: [PATCH 302/413] fix code coverage bug in tail position and `else` (#53354) This was due to lowering keeping the same location info for the inserted `return` or `goto` statement, even though the last seen location might not have executed. Also fixes inliner handling of the sentinel `0` value for code locations. (cherry picked from commit 61fc907a225eb642fd180257a02e5951336dabe4) --- base/compiler/ssair/inlining.jl | 4 +- base/compiler/ssair/passes.jl | 6 ++- src/julia-syntax.scm | 81 +++++++++++++++++++-------------- test/cmdlineargs.jl | 63 +++++++++++++++++++++++++ test/show.jl | 2 +- test/syntax.jl | 2 +- 6 files changed, 120 insertions(+), 38 deletions(-) diff --git a/base/compiler/ssair/inlining.jl b/base/compiler/ssair/inlining.jl index 019df328ab9a1..75e63f5c6b2e4 100644 --- a/base/compiler/ssair/inlining.jl +++ b/base/compiler/ssair/inlining.jl @@ -1811,7 +1811,9 @@ function ssa_substitute!(insert_node!::Inserter, spvals_ssa::Union{Nothing, SSAValue}, linetable_offset::Int32, boundscheck::Symbol) subst_inst[:flag] &= ~IR_FLAG_INBOUNDS - subst_inst[:line] += linetable_offset + if subst_inst[:line] != 0 + subst_inst[:line] += linetable_offset + end return ssa_substitute_op!(insert_node!, subst_inst, val, arg_replacements, spsig, spvals, spvals_ssa, boundscheck) end diff --git a/base/compiler/ssair/passes.jl b/base/compiler/ssair/passes.jl index 3df55e38b3512..39f1445d8c02d 100644 --- a/base/compiler/ssair/passes.jl +++ b/base/compiler/ssair/passes.jl @@ -1205,8 +1205,12 @@ function try_inline_finalizer!(ir::IRCode, argexprs::Vector{Any}, idx::Int, ssa_rename[ssa.id] end stmt′ = ssa_substitute_op!(InsertBefore(ir, SSAValue(idx)), inst, stmt′, argexprs, mi.specTypes, mi.sparam_vals, sp_ssa, :default) + newline = inst[:line] + if newline != 0 + newline += linetable_offset + end ssa_rename[idx′] = insert_node!(ir, idx, - NewInstruction(inst; stmt=stmt′, line=inst[:line]+linetable_offset), + NewInstruction(inst; stmt=stmt′, line=newline), attach_after) end diff --git a/src/julia-syntax.scm b/src/julia-syntax.scm index b5705c55b6e61..756012b364b33 100644 --- a/src/julia-syntax.scm +++ b/src/julia-syntax.scm @@ -4338,7 +4338,7 @@ f(x) = yt(x) (car s) (loop (cdr s)))))) `(pop_exception ,restore-token)))) - (define (emit-return x) + (define (emit-return tail x) (define (emit- x) (let* ((tmp (if ((if (null? catch-token-stack) valid-ir-return? simple-atom?) x) #f @@ -4347,8 +4347,12 @@ f(x) = yt(x) (begin (emit `(= ,tmp ,x)) tmp) x))) (define (actually-return x) - (let* ((x (if rett - (compile (convert-for-type-decl (emit- x) rett #t lam) '() #t #f) + (let* ((x (begin0 (emit- x) + ;; if we are adding an implicit return then mark it as having no location + (if (not (eq? tail 'explicit)) + (emit '(line #f))))) + (x (if rett + (compile (convert-for-type-decl x rett #t lam) '() #t #f) x)) (x (emit- x))) (let ((pexc (pop-exc-expr catch-token-stack '()))) @@ -4487,7 +4491,7 @@ f(x) = yt(x) (eq? (car e) 'globalref)) (underscore-symbol? (cadr e))))) (error (string "all-underscore identifier used as rvalue" (format-loc current-loc)))) - (cond (tail (emit-return e1)) + (cond (tail (emit-return tail e1)) (value e1) ((symbol? e1) (emit e1) #f) ;; keep symbols for undefined-var checking ((and (pair? e1) (eq? (car e1) 'outerref)) (emit e1) #f) ;; keep globals for undefined-var checking @@ -4533,7 +4537,7 @@ f(x) = yt(x) (else (compile-args (cdr e) break-labels)))) (callex (cons (car e) args))) - (cond (tail (emit-return callex)) + (cond (tail (emit-return tail callex)) (value callex) (else (emit callex))))) ((=) @@ -4550,7 +4554,7 @@ f(x) = yt(x) (if (not (eq? rr rhs)) (emit `(= ,rr ,rhs))) (emit `(= ,lhs ,rr)) - (if tail (emit-return rr)) + (if tail (emit-return tail rr)) rr) (emit-assignment lhs rhs)))))) ((block) @@ -4603,7 +4607,7 @@ f(x) = yt(x) (if file-diff (set! filename last-fname)) v))) ((return) - (compile (cadr e) break-labels #t #t) + (compile (cadr e) break-labels #t 'explicit) #f) ((unnecessary) ;; `unnecessary` marks expressions generated by lowering that @@ -4618,7 +4622,8 @@ f(x) = yt(x) (let ((v1 (compile (caddr e) break-labels value tail))) (if val (emit-assignment val v1)) (if (and (not tail) (or (length> e 3) val)) - (emit end-jump)) + (begin (emit `(line #f)) + (emit end-jump))) (let ((elselabel (make&mark-label))) (for-each (lambda (test) (set-car! (cddr test) elselabel)) @@ -4630,7 +4635,7 @@ f(x) = yt(x) (if (not tail) (set-car! (cdr end-jump) (make&mark-label)) (if (length= e 3) - (emit-return v2))) + (emit-return tail v2))) val)))) ((_while) (let* ((endl (make-label)) @@ -4672,7 +4677,7 @@ f(x) = yt(x) (emit `(label ,m)) (put! label-map (cadr e) (make&mark-label))) (if tail - (emit-return '(null)) + (emit-return tail '(null)) (if value (error "misplaced label"))))) ((symbolicgoto) (let* ((m (get label-map (cadr e) #f)) @@ -4712,7 +4717,7 @@ f(x) = yt(x) (begin (if els (begin (if (and (not val) v1) (emit v1)) (emit '(leave 1))) - (if v1 (emit-return v1))) + (if v1 (emit-return tail v1))) (if (not finally) (set! endl #f))) (begin (emit '(leave 1)) (emit `(goto ,(or els endl))))) @@ -4744,7 +4749,7 @@ f(x) = yt(x) (emit `(= ,tmp (call (core ===) ,finally ,(caar actions)))) (emit `(gotoifnot ,tmp ,skip)))) (let ((ac (cdar actions))) - (cond ((eq? (car ac) 'return) (emit-return (cadr ac))) + (cond ((eq? (car ac) 'return) (emit-return tail (cadr ac))) ((eq? (car ac) 'break) (emit-break (cadr ac))) (else ;; assumed to be a rethrow (emit ac)))) @@ -4783,8 +4788,8 @@ f(x) = yt(x) (set! global-const-error current-loc)) (emit e)))) ((atomic) (error "misplaced atomic declaration")) - ((isdefined) (if tail (emit-return e) e)) - ((boundscheck) (if tail (emit-return e) e)) + ((isdefined) (if tail (emit-return tail e) e)) + ((boundscheck) (if tail (emit-return tail e) e)) ((method) (if (not (null? (cadr lam))) @@ -4805,12 +4810,12 @@ f(x) = yt(x) l)))) (emit `(method ,(or (cadr e) '(false)) ,sig ,lam)) (if value (compile '(null) break-labels value tail))) - (cond (tail (emit-return e)) + (cond (tail (emit-return tail e)) (value e) (else (emit e))))) ((lambda) (let ((temp (linearize e))) - (cond (tail (emit-return temp)) + (cond (tail (emit-return tail temp)) (value temp) (else (emit temp))))) @@ -4818,7 +4823,7 @@ f(x) = yt(x) ((thunk module) (check-top-level e) (emit e) - (if tail (emit-return '(null))) + (if tail (emit-return tail '(null))) '(null)) ((toplevel-only) (check-top-level (cdr e)) @@ -4828,7 +4833,7 @@ f(x) = yt(x) (check-top-level e) (let ((val (make-ssavalue))) (emit `(= ,val ,e)) - (if tail (emit-return val)) + (if tail (emit-return tail val)) val)) ;; other top level expressions @@ -4837,7 +4842,7 @@ f(x) = yt(x) (emit e) (let ((have-ret? (and (pair? code) (pair? (car code)) (eq? (caar code) 'return)))) (if (and tail (not have-ret?)) - (emit-return '(null)))) + (emit-return tail '(null)))) '(null)) ((gc_preserve_begin) @@ -4861,7 +4866,7 @@ f(x) = yt(x) (else (emit e))) (if (and tail (not have-ret?)) - (emit-return '(null))) + (emit-return tail '(null))) '(null))) ;; unsupported assignment operators @@ -4979,6 +4984,7 @@ f(x) = yt(x) (labltable (table)) (ssavtable (table)) (current-loc 0) + (nowhere #f) (current-file file) (current-line line) (locstack '()) @@ -4991,25 +4997,32 @@ f(x) = yt(x) (set! current-loc 1))) (set! code (cons e code)) (set! i (+ i 1)) - (set! locs (cons current-loc locs))) + (set! locs (cons (if nowhere 0 current-loc) locs)) + (set! nowhere #f)) (let loop ((stmts (cdr body))) (if (pair? stmts) (let ((e (car stmts))) (cond ((atom? e) (emit e)) ((eq? (car e) 'line) - (if (and (= current-line 0) (length= e 2) (pair? linetable)) - ;; (line n) after push_loc just updates the line for the new file - (begin (set-lineno! (car linetable) (cadr e)) - (set! current-line (cadr e))) - (begin - (set! current-line (cadr e)) - (if (pair? (cddr e)) - (set! current-file (caddr e))) - (set! linetable (cons (if (null? locstack) - (make-lineinfo name current-file current-line) - (make-lineinfo name current-file current-line (caar locstack))) - linetable)) - (set! current-loc (- (length linetable) 1))))) + (cond ((and (length= e 2) (not (cadr e))) + ;; (line #f) marks that we are entering a generated statement + ;; that should not be counted as belonging to the previous marked location, + ;; for example `return` after a not-executed `if` arm in tail position. + (set! nowhere #t)) + ((and (= current-line 0) (length= e 2) (pair? linetable)) + ;; (line n) after push_loc just updates the line for the new file + (begin (set-lineno! (car linetable) (cadr e)) + (set! current-line (cadr e)))) + (else + (begin + (set! current-line (cadr e)) + (if (pair? (cddr e)) + (set! current-file (caddr e))) + (set! linetable (cons (if (null? locstack) + (make-lineinfo name current-file current-line) + (make-lineinfo name current-file current-line (caar locstack))) + linetable)) + (set! current-loc (- (length linetable) 1)))))) ((and (length> e 2) (eq? (car e) 'meta) (eq? (cadr e) 'push_loc)) (set! locstack (cons (list current-loc current-line current-file) locstack)) (set! current-file (caddr e)) diff --git a/test/cmdlineargs.jl b/test/cmdlineargs.jl index 1730fe8179857..12e0c1fe2d502 100644 --- a/test/cmdlineargs.jl +++ b/test/cmdlineargs.jl @@ -520,6 +520,69 @@ let exename = `$(Base.julia_cmd()) --startup-file=no --color=no` got = read(covfile, String) @test isempty(got) rm(covfile) + + function coverage_info_for(src::String) + mktemp(dir) do srcfile, io + write(io, src); close(io) + outfile = tempname(dir, cleanup=false)*".info" + run(`$exename --code-coverage=$outfile $srcfile`) + result = read(outfile, String) + rm(outfile, force=true) + result + end + end + @test contains(coverage_info_for(""" + function cov_bug(x, p) + if p > 2 + print("") # runs + end + if Base.compilerbarrier(:const, false) + println("Does not run") + end + end + function do_test() + cov_bug(5, 3) + end + do_test() + """), """ + DA:1,1 + DA:2,1 + DA:3,1 + DA:5,1 + DA:6,0 + DA:9,1 + DA:10,1 + LH:6 + LF:7 + """) + @test contains(coverage_info_for(""" + function cov_bug() + if Base.compilerbarrier(:const, true) + if Base.compilerbarrier(:const, true) + if Base.compilerbarrier(:const, false) + println("Does not run") + end + else + print("Does not run either") + end + else + print("") + end + return nothing + end + cov_bug() + """), """ + DA:1,1 + DA:2,1 + DA:3,1 + DA:4,1 + DA:5,0 + DA:8,0 + DA:11,0 + DA:13,1 + LH:5 + LF:8 + """) end # --track-allocation diff --git a/test/show.jl b/test/show.jl index 688ee452a4813..9b6becbf95b1d 100644 --- a/test/show.jl +++ b/test/show.jl @@ -2081,7 +2081,7 @@ let src = code_typed(my_fun28173, (Int,), debuginfo=:source)[1][1] io = IOBuffer() Base.IRShow.show_ir(io, ir, Base.IRShow.default_config(ir; verbose_linetable=true)) seekstart(io) - @test count(contains(r"@ a{80}:\d+ within `my_fun28173"), eachline(io)) == 10 + @test count(contains(r"@ a{80}:\d+ within `my_fun28173"), eachline(io)) == 9 # Test that a bad :invoke doesn't cause an error during printing Core.Compiler.insert_node!(ir, 1, Core.Compiler.NewInstruction(Expr(:invoke, nothing, sin), Any), false) diff --git a/test/syntax.jl b/test/syntax.jl index 3516c306c42d4..e529e0f292df1 100644 --- a/test/syntax.jl +++ b/test/syntax.jl @@ -713,7 +713,7 @@ m1_exprs = get_expr_list(Meta.lower(@__MODULE__, quote @m1 end)) let low3 = Meta.lower(@__MODULE__, quote @m3 end) m3_exprs = get_expr_list(low3) ci = low3.args[1]::Core.CodeInfo - @test ci.codelocs == [4, 2] + @test ci.codelocs == [4, 0] @test is_return_ssavalue(m3_exprs[end]) end From 25827a4eef3c3689ac6647ba40af432dd45db48b Mon Sep 17 00:00:00 2001 From: Michael Goerz Date: Wed, 7 Feb 2024 10:03:21 -0500 Subject: [PATCH 303/413] docs: remove outdated discussion about externally changing module bindings (#53170) As of Julia 1.9, bindings in modules can be changed directly. See https://discourse.julialang.org/t/clarify-the-documentation-about-modifying-module-variables/109668/3 (cherry picked from commit 736eeda72493f02247994785d5b5a9c8f9dca2f5) --- doc/src/manual/variables-and-scoping.md | 26 +------------------------ 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/doc/src/manual/variables-and-scoping.md b/doc/src/manual/variables-and-scoping.md index c763d62680091..cc15dc32b82bd 100644 --- a/doc/src/manual/variables-and-scoping.md +++ b/doc/src/manual/variables-and-scoping.md @@ -67,31 +67,7 @@ Each module introduces a new global scope, separate from the global scope of all is no all-encompassing global scope. Modules can introduce variables of other modules into their scope through the [using or import](@ref modules) statements or through qualified access using the dot-notation, i.e. each module is a so-called *namespace* as well as a first-class data structure -associating names with values. Note that while variable bindings can be read externally, they can only -be changed within the module to which they belong. As an escape hatch, you can always evaluate code -inside that module to modify a variable; this guarantees, in particular, that module bindings cannot -be modified externally by code that never calls `eval`. - -```jldoctest -julia> module A - a = 1 # a global in A's scope - end; - -julia> module B - module C - c = 2 - end - b = C.c # can access the namespace of a nested global scope - # through a qualified access - import ..A # makes module A available - d = A.a - end; - -julia> module D - b = a # errors as D's global scope is separate from A's - end; -ERROR: UndefVarError: `a` not defined -``` +associating names with values. If a top-level expression contains a variable declaration with keyword `local`, then that variable is not accessible outside that expression. From f2d56c7a5bc4dfbfd649abc090c440abd51f85e9 Mon Sep 17 00:00:00 2001 From: N5N3 <2642243996@qq.com> Date: Thu, 8 Feb 2024 14:22:48 +0800 Subject: [PATCH 304/413] SubArray: avoid invalid elimination of singleton indices (#53228) close #53209 (cherry picked from commit 4d0a469e6f8fe30a5e152ac7c93b7569c41e3c39) --- base/subarray.jl | 14 ++++++++------ test/subarray.jl | 13 ++++++++++--- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/base/subarray.jl b/base/subarray.jl index 901410e908d1e..3fdabca88e79f 100644 --- a/base/subarray.jl +++ b/base/subarray.jl @@ -127,6 +127,11 @@ _maybe_reshape_parent(A::AbstractArray, ::NTuple{1, Bool}) = reshape(A, Val(1)) _maybe_reshape_parent(A::AbstractArray{<:Any,1}, ::NTuple{1, Bool}) = reshape(A, Val(1)) _maybe_reshape_parent(A::AbstractArray{<:Any,N}, ::NTuple{N, Bool}) where {N} = A _maybe_reshape_parent(A::AbstractArray, ::NTuple{N, Bool}) where {N} = reshape(A, Val(N)) +# The trailing singleton indices could be eliminated after bounds checking. +rm_singleton_indices(ndims::Tuple, J1, Js...) = (J1, rm_singleton_indices(IteratorsMD._splitrest(ndims, index_ndims(J1)), Js...)...) +rm_singleton_indices(::Tuple{}, ::ScalarIndex, Js...) = rm_singleton_indices((), Js...) +rm_singleton_indices(::Tuple) = () + """ view(A, inds...) @@ -173,15 +178,12 @@ julia> view(2:5, 2:3) # returns a range as type is immutable 3:4 ``` """ -function view(A::AbstractArray{<:Any,N}, I::Vararg{Any,M}) where {N,M} +function view(A::AbstractArray, I::Vararg{Any,M}) where {M} @inline J = map(i->unalias(A,i), to_indices(A, I)) @boundscheck checkbounds(A, J...) - if length(J) > ndims(A) && J[N+1:end] isa Tuple{Vararg{Int}} - # view([1,2,3], :, 1) does not need to reshape - return unsafe_view(A, J[1:N]...) - end - unsafe_view(_maybe_reshape_parent(A, index_ndims(J...)), J...) + J′ = rm_singleton_indices(ntuple(Returns(true), Val(ndims(A))), J...) + unsafe_view(_maybe_reshape_parent(A, index_ndims(J′...)), J′...) end # Ranges implement getindex to return recomputed ranges; use that for views, too (when possible) diff --git a/test/subarray.jl b/test/subarray.jl index e22c1394cbfc2..11d18185dd753 100644 --- a/test/subarray.jl +++ b/test/subarray.jl @@ -762,9 +762,9 @@ end @testset "issue #41221: view(::Vector, :, 1)" begin v = randn(3) - @test view(v,:,1) == v - @test parent(view(v,:,1)) === v - @test parent(view(v,2:3,1,1)) === v + @test @inferred(view(v,:,1)) == v + @test parent(@inferred(view(v,:,1))) === v + @test parent(@inferred(view(v,2:3,1,1))) === v @test_throws BoundsError view(v,:,2) @test_throws BoundsError view(v,:,1,2) @@ -772,3 +772,10 @@ end @test view(m, 1:2, 3, 1, 1) == m[1:2, 3] @test parent(view(m, 1:2, 3, 1, 1)) === m end + +@testset "issue #53209: avoid invalid elimination of singleton indices" begin + A = randn(4,5) + @test A[CartesianIndices(()), :, 3] == @inferred(view(A, CartesianIndices(()), :, 3)) + @test parent(@inferred(view(A, :, 3, 1, CartesianIndices(()), 1))) === A + @test_throws BoundsError view(A, :, 3, 2, CartesianIndices(()), 1) +end From 5ae8707d3fc124289094ef21ff2a8af8966ab882 Mon Sep 17 00:00:00 2001 From: Artem Pelenitsyn Date: Thu, 8 Feb 2024 04:25:36 -0500 Subject: [PATCH 305/413] code_warntype docs: more neutral reference to @code_warntype (#51361) fix #51358 --------- Co-authored-by: Fredrik Ekre Co-authored-by: Max Horn (cherry picked from commit 5cb5cd8727b6d67aafaa0d7d263b0372459c5dea) --- stdlib/InteractiveUtils/src/codeview.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/InteractiveUtils/src/codeview.jl b/stdlib/InteractiveUtils/src/codeview.jl index 646028575d052..a30734f16c9ab 100644 --- a/stdlib/InteractiveUtils/src/codeview.jl +++ b/stdlib/InteractiveUtils/src/codeview.jl @@ -70,7 +70,7 @@ Small unions of concrete types are usually not a concern, so these are highlight Keyword argument `debuginfo` may be one of `:source` or `:none` (default), to specify the verbosity of code comments. -See [`@code_warntype`](@ref man-code-warntype) for more information. +See the [`@code_warntype`](@ref man-code-warntype) section in the Performance Tips page of the manual for more information. """ function code_warntype(io::IO, @nospecialize(f), @nospecialize(t=Base.default_tt(f)); debuginfo::Symbol=:default, optimize::Bool=false, kwargs...) From 8f3304a987ab994e56f801c31eb0d38fe9ce7c41 Mon Sep 17 00:00:00 2001 From: Carsten Bauer Date: Wed, 21 Feb 2024 21:33:54 +0100 Subject: [PATCH 306/413] Fix documentation: thread pool of main thread (#53388) See https://github.com/JuliaLang/julia/issues/53217#issuecomment-1930891907 (cherry picked from commit 8425b0ea03a4cbf4cfb677fb554b19d6a5a0eb03) --- doc/src/manual/multi-threading.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/src/manual/multi-threading.md b/doc/src/manual/multi-threading.md index 63902f1b7902b..2d4af4cde5a17 100644 --- a/doc/src/manual/multi-threading.md +++ b/doc/src/manual/multi-threading.md @@ -116,8 +116,8 @@ julia> using Base.Threads julia> nthreadpools() 2 -julia> threadpool() -:default +julia> threadpool() # the main thread is in the interactive thread pool +:interactive julia> nthreads(:default) 3 @@ -133,6 +133,10 @@ julia> nthreads() The zero-argument version of `nthreads` returns the number of threads in the default pool. +!!! note + Depending on whether Julia has been started with interactive threads, + the main thread is either in the default or interactive thread pool. + Either or both numbers can be replaced with the word `auto`, which causes Julia to choose a reasonable default. From 7bfd9f4dc30135a12770dd714c854d51996b7050 Mon Sep 17 00:00:00 2001 From: N5N3 <2642243996@qq.com> Date: Fri, 23 Feb 2024 07:06:06 +0800 Subject: [PATCH 307/413] =?UTF-8?q?Subtype:=20skip=20slow-path=20in=20`loc?= =?UTF-8?q?al=5F=E2=88=80=5F=E2=88=83=5Fsubtype`=20if=20inputs=20contain?= =?UTF-8?q?=20no=20=E2=88=83=20typevar.=20(#53429)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This should be safe as ∀ vars' bounds are frozen in env. If there's no ∃ var, then the current env won't change after `local_∀_∃_subtype`. Thus, the slow path should be equivalent to the fast path if the latter returns 1. Close #53371. (cherry picked from commit 37c48e8b11d4742818571405019d80b59fceab49) --- src/jltypes.c | 2 +- src/julia_internal.h | 1 + src/subtype.c | 31 +++++++++++++++++++++++++++---- test/subtype.jl | 9 +++++++++ 4 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/jltypes.c b/src/jltypes.c index d61a06b06f159..66db26a575e90 100644 --- a/src/jltypes.c +++ b/src/jltypes.c @@ -215,7 +215,7 @@ JL_DLLEXPORT jl_array_t *jl_find_free_typevars(jl_value_t *v) } // test whether a type has vars bound by the given environment -static int jl_has_bound_typevars(jl_value_t *v, jl_typeenv_t *env) JL_NOTSAFEPOINT +int jl_has_bound_typevars(jl_value_t *v, jl_typeenv_t *env) JL_NOTSAFEPOINT { while (1) { if (jl_is_typevar(v)) { diff --git a/src/julia_internal.h b/src/julia_internal.h index 89f31f1702db7..4fa3154b765d1 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -696,6 +696,7 @@ jl_tupletype_t *jl_lookup_arg_tuple_type(jl_value_t *arg1 JL_PROPAGATES_ROOT, jl JL_DLLEXPORT void jl_method_table_insert(jl_methtable_t *mt, jl_method_t *method, jl_tupletype_t *simpletype); jl_datatype_t *jl_mk_builtin_func(jl_datatype_t *dt, const char *name, jl_fptr_args_t fptr) JL_GC_DISABLED; int jl_obviously_unequal(jl_value_t *a, jl_value_t *b); +int jl_has_bound_typevars(jl_value_t *v, jl_typeenv_t *env) JL_NOTSAFEPOINT; JL_DLLEXPORT jl_array_t *jl_find_free_typevars(jl_value_t *v); int jl_has_fixed_layout(jl_datatype_t *t); JL_DLLEXPORT int jl_struct_try_layout(jl_datatype_t *dt); diff --git a/src/subtype.c b/src/subtype.c index 86b441f9aaec0..3d874872d6b44 100644 --- a/src/subtype.c +++ b/src/subtype.c @@ -1506,6 +1506,23 @@ static int may_contain_union_decision(jl_value_t *x, jl_stenv_t *e, jl_typeenv_t may_contain_union_decision(xb ? xb->ub : ((jl_tvar_t *)x)->ub, e, &newlog); } +static int has_exists_typevar(jl_value_t *x, jl_stenv_t *e) JL_NOTSAFEPOINT +{ + jl_typeenv_t *env = NULL; + jl_varbinding_t *v = e->vars; + while (v != NULL) { + if (v->right) { + jl_typeenv_t *newenv = (jl_typeenv_t*)alloca(sizeof(jl_typeenv_t)); + newenv->var = v->var; + newenv->val = NULL; + newenv->prev = env; + env = newenv; + } + v = v->prev; + } + return env != NULL && jl_has_bound_typevars(x, env); +} + static int local_forall_exists_subtype(jl_value_t *x, jl_value_t *y, jl_stenv_t *e, int param, int limit_slow) { int16_t oldRmore = e->Runions.more; @@ -1525,13 +1542,19 @@ static int local_forall_exists_subtype(jl_value_t *x, jl_value_t *y, jl_stenv_t int count = 0, noRmore = 0; sub = _forall_exists_subtype(x, y, e, param, &count, &noRmore); pop_unionstate(&e->Runions, &oldRunions); - // we should not try the slow path if `forall_exists_subtype` has tested all cases; - // Once limit_slow == 1, also skip it if - // 1) `forall_exists_subtype` return false + // We could skip the slow path safely if + // 1) `_∀_∃_subtype` has tested all cases + // 2) `_∀_∃_subtype` returns 1 && `x` and `y` contain no ∃ typevar + // Once `limit_slow == 1`, also skip it if + // 1) `_∀_∃_subtype` returns 0 // 2) the left `Union` looks big + // TODO: `limit_slow` ignores complexity from inner `local_∀_exists_subtype`. if (limit_slow == -1) limit_slow = kindx || kindy; - if (noRmore || (limit_slow && (count > 3 || !sub))) + int skip = noRmore || (limit_slow && (count > 3 || !sub)) || + (sub && (kindx || !has_exists_typevar(x, e)) && + (kindy || !has_exists_typevar(y, e))); + if (skip) e->Runions.more = oldRmore; } else { diff --git a/test/subtype.jl b/test/subtype.jl index 19901897ebaaa..cd856b0b7a2ff 100644 --- a/test/subtype.jl +++ b/test/subtype.jl @@ -2562,3 +2562,12 @@ let a = Tuple{Union{Nothing, Type{Pair{T1}} where T1}} b = Tuple{Type{X2} where X2<:(Pair{T2, Y2} where {Src, Z2<:Src, Y2<:Union{Val{Z2}, Z2}})} where T2 @test !Base.has_free_typevars(typeintersect(a, b)) end + +#issue 53371 +struct T53371{A,B,C,D,E} end +S53371{A} = Union{Int, <:A} +R53371{A} = Val{V} where V<:(T53371{B,C,D,E,F} where {B<:Val{A}, C<:S53371{B}, D<:S53371{B}, E<:S53371{B}, F<:S53371{B}}) +let S = Type{T53371{A, B, C, D, E}} where {A, B<:R53371{A}, C<:R53371{A}, D<:R53371{A}, E<:R53371{A}}, + T = Type{T53371{A, B, C, D, E} where {A, B<:R53371{A}, C<:R53371{A}, D<:R53371{A}, E<:R53371{A}}} + @test !(S <: T) +end From 5d971b9eb477dad61dc31c23fc8d4586058f7e73 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Fri, 23 Feb 2024 08:46:36 +0100 Subject: [PATCH 308/413] Add debug variant of loader_trampolines.o (#53437) This prevents a race condition when building 'julia-cli-debug julia-cli-release' simultaneously (as we do for libjulia_jll, and also generally seems appropriate given what is done for all other source files. Motivated by https://github.com/JuliaPackaging/Yggdrasil/pull/8151 so I'll first see if it works there. Closes #45002. (cherry picked from commit fee198beaba675772158ddc5faeeaf76beea612d) --- cli/Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cli/Makefile b/cli/Makefile index b6a2b48ebf044..911e8ff54e246 100644 --- a/cli/Makefile +++ b/cli/Makefile @@ -47,7 +47,7 @@ LIB_DOBJS := $(BUILDDIR)/loader_lib.dbg.obj # If this is an architecture that supports dynamic linking, link in a trampoline definition ifneq (,$(wildcard $(SRCDIR)/trampolines/trampolines_$(ARCH).S)) LIB_OBJS += $(BUILDDIR)/loader_trampolines.o -LIB_DOBJS += $(BUILDDIR)/loader_trampolines.o +LIB_DOBJS += $(BUILDDIR)/loader_trampolines.dbg.obj endif default: release @@ -64,6 +64,8 @@ $(BUILDDIR)/loader_exe.dbg.obj : $(SRCDIR)/loader_exe.c $(HEADERS) $(JULIAHOME)/ @$(call PRINT_CC, $(CC) $(DEBUGFLAGS) $(LOADER_CFLAGS) -c $< -o $@) $(BUILDDIR)/loader_trampolines.o : $(SRCDIR)/trampolines/trampolines_$(ARCH).S $(HEADERS) $(SRCDIR)/trampolines/common.h @$(call PRINT_CC, $(CC) $(SHIPFLAGS) $(LOADER_CFLAGS) $< -c -o $@) +$(BUILDDIR)/loader_trampolines.dbg.obj : $(SRCDIR)/trampolines/trampolines_$(ARCH).S $(HEADERS) $(SRCDIR)/trampolines/common.h + @$(call PRINT_CC, $(CC) $(DEBUGFLAGS) $(LOADER_CFLAGS) $< -c -o $@) # Debugging target to help us see what kind of code is being generated for our trampolines dump-trampolines: $(SRCDIR)/trampolines/trampolines_$(ARCH).S From bd47eca2c8aacd145b6c5c02e47e2b9ec27ab456 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Fri, 1 Mar 2024 11:14:14 +0100 Subject: [PATCH 309/413] set VERSION to 1.10.2 (#53489) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 4dae2985b58cc..5ad2491cf8808 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.1 +1.10.2 From 8952861e3c440295b71e30d937d81b51c2239301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Belmant?= Date: Wed, 2 Aug 2023 11:42:29 -0400 Subject: [PATCH 310/413] Fix outdated usage of scrubbing for log test failures (#50759) Fixes #50755. (cherry picked from commit bb4929d1c3bb4be8ab8512124c6a253f5e1b93fb) --- stdlib/Test/src/logging.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/Test/src/logging.jl b/stdlib/Test/src/logging.jl index 4e444874d0fb8..7b3838903ce10 100644 --- a/stdlib/Test/src/logging.jl +++ b/stdlib/Test/src/logging.jl @@ -149,7 +149,7 @@ function record(ts::DefaultTestSet, t::LogTestFailure) if TESTSET_PRINT_ENABLE[] printstyled(ts.description, ": ", color=:white) print(t) - Base.show_backtrace(stdout, scrub_backtrace(backtrace())) + Base.show_backtrace(stdout, scrub_backtrace(backtrace(), ts.file, extract_file(t.source))) println() end # Hack: convert to `Fail` so that test summarization works correctly From 801885f45982d1a09fbde66a1276738732c09270 Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Sat, 10 Feb 2024 22:53:23 -0500 Subject: [PATCH 311/413] [REPL] Fix typo in using/import completion (#53273) Co-authored-by: Keno Fischer (cherry picked from commit b8540d1766e1cec98ddc636febf84cdc60e3d4af) --- stdlib/REPL/src/REPLCompletions.jl | 2 +- stdlib/REPL/test/replcompletions.jl | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/stdlib/REPL/src/REPLCompletions.jl b/stdlib/REPL/src/REPLCompletions.jl index 58382e9c10d75..41616edc2a902 100644 --- a/stdlib/REPL/src/REPLCompletions.jl +++ b/stdlib/REPL/src/REPLCompletions.jl @@ -1052,7 +1052,7 @@ function complete_identifiers!(suggestions::Vector{Completion}, @nospecialize(ff if ex === nothing ex = arg else - ex = Expr(:., out, QuoteNode(arg)) + ex = Expr(:., ex, QuoteNode(arg)) end else # invalid expression ex = nothing diff --git a/stdlib/REPL/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl index ae29812c5f43e..53cf6d364ffac 100644 --- a/stdlib/REPL/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -1968,6 +1968,11 @@ let s = "using .Issue52922.Inn" @test res @test "Inner1" in c end +let s = "using .Issue52922.Inner1." + c, r, res = test_complete_context(s) + @test res + @test "Inner12" in c +end let s = "using .Inner1.Inn" c, r, res = test_complete_context(s, Issue52922) @test res From 58b3dcb005b91e6399ba4207875aa28cb8ce4de0 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 28 Feb 2024 06:46:20 +0100 Subject: [PATCH 312/413] Avoid compiler warning about redefining jl_globalref_t (#53499) (cherry picked from commit 71f68b4ce9189e64f320631f3f74ffb3dd10e875) --- src/julia.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/julia.h b/src/julia.h index 1f85f06dd35dc..0fbfcd8e4836b 100644 --- a/src/julia.h +++ b/src/julia.h @@ -628,11 +628,11 @@ typedef struct _jl_module_t { intptr_t hash; } jl_module_t; -typedef struct _jl_globalref_t { +struct _jl_globalref_t { jl_module_t *mod; jl_sym_t *name; jl_binding_t *binding; -} jl_globalref_t; +}; // one Type-to-Value entry typedef struct _jl_typemap_entry_t { From 996fe30ee6078d388f24fb71231f0b9f34ca0a58 Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Mon, 4 Mar 2024 13:16:28 -0300 Subject: [PATCH 313/413] yet more atomics & cache-line fixes on work-stealing queue (#53424) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This regression at a large number of GC threads still shows up on a large aarch64 machine (80-core ARM Neoverse N1). ``` bench = "many_refs.jl" (gcthreads, threads) = (1, 1) [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 3807 │ 2826 │ 2633 │ 193 │ 960 │ 13 │ 892 │ 74 │ │ median │ 3810 │ 2826 │ 2633 │ 193 │ 961 │ 15 │ 892 │ 74 │ │ maximum │ 3810 │ 2831 │ 2638 │ 193 │ 962 │ 27 │ 892 │ 74 │ │ stdev │ 2 │ 3 │ 3 │ 0 │ 1 │ 7 │ 0 │ 0 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (2, 1) [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 2455 │ 1476 │ 1350 │ 126 │ 488 │ 20 │ 892 │ 60 │ │ median │ 2459 │ 1478 │ 1352 │ 126 │ 489 │ 23 │ 892 │ 60 │ │ maximum │ 2465 │ 1479 │ 1352 │ 126 │ 489 │ 23 │ 893 │ 60 │ │ stdev │ 5 │ 1 │ 1 │ 0 │ 1 │ 2 │ 0 │ 0 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (4, 1) [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 2173 │ 1194 │ 1115 │ 77 │ 463 │ 18 │ 892 │ 54 │ │ median │ 2187 │ 1194 │ 1116 │ 78 │ 463 │ 19 │ 893 │ 55 │ │ maximum │ 2217 │ 1208 │ 1130 │ 78 │ 463 │ 19 │ 893 │ 55 │ │ stdev │ 22 │ 8 │ 8 │ 1 │ 0 │ 1 │ 0 │ 0 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (8, 1) [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 2191 │ 1212 │ 1149 │ 63 │ 539 │ 19 │ 901 │ 55 │ │ median │ 2199 │ 1219 │ 1156 │ 63 │ 540 │ 20 │ 901 │ 55 │ │ maximum │ 2201 │ 1222 │ 1157 │ 65 │ 540 │ 20 │ 901 │ 56 │ │ stdev │ 5 │ 5 │ 4 │ 1 │ 1 │ 1 │ 0 │ 0 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (16, 1) [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 3897 │ 2916 │ 2854 │ 60 │ 1423 │ 20 │ 902 │ 75 │ │ median │ 4012 │ 3032 │ 2972 │ 62 │ 1491 │ 21 │ 904 │ 75 │ │ maximum │ 4026 │ 3106 │ 3044 │ 62 │ 1511 │ 22 │ 904 │ 77 │ │ stdev │ 70 │ 96 │ 96 │ 1 │ 46 │ 1 │ 1 │ 1 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ ``` This patch seems to improve performance at 16 GC threads though we still have some negative scaling for this benchmark beyond 8 GC threads (others seem fine). I didn't test whether this is indeed the optimal struct layout for the queue in this benchmark. ``` bench = "many_refs.jl" (gcthreads, threads) = (1, 1) [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 3807 │ 2822 │ 2630 │ 193 │ 959 │ 15 │ 892 │ 74 │ │ median │ 3824 │ 2823 │ 2630 │ 193 │ 959 │ 15 │ 892 │ 74 │ │ maximum │ 4307 │ 3194 │ 2974 │ 220 │ 1086 │ 19 │ 892 │ 74 │ │ stdev │ 284 │ 215 │ 199 │ 16 │ 74 │ 2 │ 0 │ 0 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (2, 1) [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 2459 │ 1476 │ 1349 │ 126 │ 488 │ 19 │ 892 │ 60 │ │ median │ 2460 │ 1479 │ 1352 │ 127 │ 488 │ 21 │ 893 │ 60 │ │ maximum │ 2770 │ 1661 │ 1526 │ 135 │ 570 │ 22 │ 893 │ 60 │ │ stdev │ 179 │ 106 │ 101 │ 5 │ 47 │ 1 │ 0 │ 0 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (4, 1) [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 2215 │ 1233 │ 1155 │ 77 │ 485 │ 20 │ 892 │ 53 │ │ median │ 2320 │ 1248 │ 1171 │ 78 │ 492 │ 21 │ 893 │ 54 │ │ maximum │ 2372 │ 1259 │ 1176 │ 83 │ 493 │ 22 │ 893 │ 56 │ │ stdev │ 80 │ 13 │ 11 │ 3 │ 5 │ 1 │ 1 │ 1 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (8, 1) [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 2204 │ 1220 │ 1156 │ 64 │ 544 │ 23 │ 901 │ 53 │ │ median │ 2362 │ 1249 │ 1181 │ 64 │ 553 │ 23 │ 901 │ 53 │ │ maximum │ 2374 │ 1261 │ 1196 │ 68 │ 558 │ 25 │ 901 │ 55 │ │ stdev │ 95 │ 21 │ 20 │ 2 │ 7 │ 1 │ 0 │ 1 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ (gcthreads, threads) = (16, 1) [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback [ Info: Setting GC memory pressure callback ┌─────────┬────────────┬─────────┬───────────┬────────────┬──────────────┬───────────────────┬──────────┬────────────┐ │ │ total time │ gc time │ mark time │ sweep time │ max GC pause │ time to safepoint │ max heap │ percent gc │ │ │ ms │ ms │ ms │ ms │ ms │ us │ MB │ % │ ├─────────┼────────────┼─────────┼───────────┼────────────┼──────────────┼───────────────────┼──────────┼────────────┤ │ minimum │ 2502 │ 1519 │ 1458 │ 62 │ 721 │ 22 │ 902 │ 58 │ │ median │ 2511 │ 1524 │ 1461 │ 63 │ 728 │ 23 │ 903 │ 61 │ │ maximum │ 2664 │ 1554 │ 1486 │ 68 │ 741 │ 25 │ 905 │ 61 │ │ stdev │ 91 │ 19 │ 16 │ 3 │ 10 │ 1 │ 2 │ 1 │ └─────────┴────────────┴─────────┴───────────┴────────────┴──────────────┴───────────────────┴──────────┴────────────┘ ``` (cherry picked from commit 973b4ff9abb6e12cada196a9c97a96b358275e16) --- src/work-stealing-queue.h | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/work-stealing-queue.h b/src/work-stealing-queue.h index 5902c2ac6af9f..c444ccb3da682 100644 --- a/src/work-stealing-queue.h +++ b/src/work-stealing-queue.h @@ -3,6 +3,8 @@ #ifndef WORK_STEALING_QUEUE_H #define WORK_STEALING_QUEUE_H +#include + #include "julia_atomics.h" #include "assert.h" @@ -35,10 +37,10 @@ static inline ws_array_t *create_ws_array(size_t capacity, int32_t eltsz) JL_NOT } typedef struct { - _Atomic(int64_t) top; - char _padding[JL_CACHE_BYTE_ALIGNMENT - sizeof(_Atomic(int64_t))]; - _Atomic(int64_t) bottom; // put on a separate cache line. conservatively estimate cache line size as 128 bytes - _Atomic(ws_array_t *) array; + // align to JL_CACHE_BYTE_ALIGNMENT + alignas(JL_CACHE_BYTE_ALIGNMENT) _Atomic(int64_t) top; + alignas(JL_CACHE_BYTE_ALIGNMENT) _Atomic(int64_t) bottom; + alignas(JL_CACHE_BYTE_ALIGNMENT) _Atomic(ws_array_t *) array; } ws_queue_t; static inline ws_array_t *ws_queue_push(ws_queue_t *q, void *elt, int32_t eltsz) JL_NOTSAFEPOINT From f191dcb47debadb1a7ee4dffa3ddb35983067402 Mon Sep 17 00:00:00 2001 From: inky Date: Tue, 5 Mar 2024 04:00:14 -0600 Subject: [PATCH 314/413] build: remove extra .a file (#53596) fix #53569 (cherry picked from commit b50344fa0a43bf1da7855a3dcd4dacaae65462bb) --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 22e0f7e152859..ba96b5c71697c 100644 --- a/Makefile +++ b/Makefile @@ -282,6 +282,7 @@ else ifeq ($(JULIA_BUILD_MODE),debug) -$(INSTALL_M) $(build_libdir)/libjulia-internal-debug.dll.a $(DESTDIR)$(libdir)/ endif -$(INSTALL_M) $(wildcard $(build_private_libdir)/*.a) $(DESTDIR)$(private_libdir)/ + -rm -f $(DESTDIR)$(private_libdir)/sys-o.a # We have a single exception; we want 7z.dll to live in private_libexecdir, # not bindir, so that 7z.exe can find it. From 42477de27e4975b545e71cb41717065867ed294d Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Sat, 9 Mar 2024 13:40:54 -0500 Subject: [PATCH 315/413] permit NamedTuple{<:Any, Union{}} to be created (#53516) (cherry picked from commit e9c84c809f6369907f4087e8d823f13c92a93c35) --- base/boot.jl | 4 ++-- base/compiler/abstractinterpretation.jl | 2 +- base/namedtuple.jl | 19 ++++++++----------- src/builtins.c | 2 ++ src/jltypes.c | 17 +++++++++++------ test/namedtuple.jl | 15 +++++++++++++++ 6 files changed, 39 insertions(+), 20 deletions(-) diff --git a/base/boot.jl b/base/boot.jl index 561be564d58f4..7199a0f158dbc 100644 --- a/base/boot.jl +++ b/base/boot.jl @@ -624,8 +624,8 @@ eval(Core, :(NamedTuple{names}(args::Tuple) where {names} = using .Intrinsics: sle_int, add_int -eval(Core, :(NamedTuple{names,T}(args::T) where {names, T <: Tuple} = - $(Expr(:splatnew, :(NamedTuple{names,T}), :args)))) +eval(Core, :((NT::Type{NamedTuple{names,T}})(args::T) where {names, T <: Tuple} = + $(Expr(:splatnew, :NT, :args)))) # constructors for built-in types diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index ab1d8c7c570f9..1bdba2a5d8924 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -2565,7 +2565,7 @@ function refine_partial_type(@nospecialize t) # if the first/second parameter of `NamedTuple` is known to be empty, # the second/first argument should also be empty tuple type, # so refine it here - return Const(NamedTuple()) + return Const((;)) end return t end diff --git a/base/namedtuple.jl b/base/namedtuple.jl index e489508bc55ea..94bd3e87fd55c 100644 --- a/base/namedtuple.jl +++ b/base/namedtuple.jl @@ -112,24 +112,24 @@ Core.NamedTuple if nameof(@__MODULE__) === :Base -@eval function NamedTuple{names,T}(args::Tuple) where {names, T <: Tuple} +@eval function (NT::Type{NamedTuple{names,T}})(args::Tuple) where {names, T <: Tuple} if length(args) != length(names::Tuple) throw(ArgumentError("Wrong number of arguments to named tuple constructor.")) end # Note T(args) might not return something of type T; e.g. # Tuple{Type{Float64}}((Float64,)) returns a Tuple{DataType} - $(Expr(:splatnew, :(NamedTuple{names,T}), :(T(args)))) + $(Expr(:splatnew, :NT, :(T(args)))) end -function NamedTuple{names, T}(nt::NamedTuple) where {names, T <: Tuple} +function (NT::Type{NamedTuple{names, T}})(nt::NamedTuple) where {names, T <: Tuple} if @generated - Expr(:new, :(NamedTuple{names, T}), - Any[ :(let Tn = fieldtype(T, $n), + Expr(:new, :NT, + Any[ :(let Tn = fieldtype(NT, $n), ntn = getfield(nt, $(QuoteNode(names[n]))) ntn isa Tn ? ntn : convert(Tn, ntn) end) for n in 1:length(names) ]...) else - NamedTuple{names, T}(map(Fix1(getfield, nt), names)) + NT(map(Fix1(getfield, nt), names)) end end @@ -145,14 +145,11 @@ function NamedTuple{names}(nt::NamedTuple) where {names} end end -NamedTuple{names, T}(itr) where {names, T <: Tuple} = NamedTuple{names, T}(T(itr)) -NamedTuple{names}(itr) where {names} = NamedTuple{names}(Tuple(itr)) +(NT::Type{NamedTuple{names, T}})(itr) where {names, T <: Tuple} = NT(T(itr)) +(NT::Type{NamedTuple{names}})(itr) where {names} = NT(Tuple(itr)) NamedTuple(itr) = (; itr...) -# avoids invalidating Union{}(...) -NamedTuple{names, Union{}}(itr::Tuple) where {names} = throw(MethodError(NamedTuple{names, Union{}}, (itr,))) - end # if Base # Like NamedTuple{names, T} as a constructor, but omits the additional diff --git a/src/builtins.c b/src/builtins.c index 6d32c439d5b6e..e4bc75bdcd28d 100644 --- a/src/builtins.c +++ b/src/builtins.c @@ -1125,6 +1125,8 @@ static jl_value_t *get_fieldtype(jl_value_t *t, jl_value_t *f, int dothrow) tt = ((jl_tvar_t*)tt)->ub; if (tt == (jl_value_t*)jl_any_type) return (jl_value_t*)jl_any_type; + if (tt == (jl_value_t*)jl_bottom_type) + return (jl_value_t*)jl_bottom_type; JL_GC_PUSH1(&f); if (jl_is_symbol(f)) f = jl_box_long(field_index+1); diff --git a/src/jltypes.c b/src/jltypes.c index 66db26a575e90..e3089c650eda8 100644 --- a/src/jltypes.c +++ b/src/jltypes.c @@ -2065,15 +2065,20 @@ static jl_value_t *inst_datatype_inner(jl_datatype_t *dt, jl_svec_t *p, jl_value jl_errorf("duplicate field name in NamedTuple: \"%s\" is not unique", jl_symbol_name((jl_sym_t*)ni)); } } - if (!jl_is_datatype(values_tt)) - jl_error("NamedTuple field type must be a tuple type"); - if (jl_is_va_tuple((jl_datatype_t*)values_tt) || jl_nparams(values_tt) != nf) - jl_error("NamedTuple names and field types must have matching lengths"); - ndt->types = ((jl_datatype_t*)values_tt)->parameters; + if (values_tt == jl_bottom_type && nf > 0) { + ndt->types = jl_svec_fill(nf, jl_bottom_type); + } + else { + if (!jl_is_datatype(values_tt)) + jl_error("NamedTuple field type must be a tuple datatype"); + if (jl_is_va_tuple((jl_datatype_t*)values_tt) || jl_nparams(values_tt) != nf) + jl_error("NamedTuple names and field types must have matching lengths"); + ndt->types = ((jl_datatype_t*)values_tt)->parameters; + } jl_gc_wb(ndt, ndt->types); } else { - ndt->types = jl_emptysvec; // XXX: this is essentially always false + ndt->types = jl_emptysvec; // XXX: this is essentially always incorrect } } diff --git a/test/namedtuple.jl b/test/namedtuple.jl index 0e9648dbcb9c0..33c30aedd98f6 100644 --- a/test/namedtuple.jl +++ b/test/namedtuple.jl @@ -414,3 +414,18 @@ let c = (a=1, b=2), d = (b=3, c=(d=1,)) @test @inferred(mergewith51009((x,y)->y, c, d)) === (a = 1, b = 3, c = (d = 1,)) end + +@test_throws ErrorException NamedTuple{(), Union{}} +for NT in (NamedTuple{(:a, :b), Union{}}, NamedTuple{(:a, :b), T} where T<:Union{}) + @test fieldtype(NT, 1) == Union{} + @test fieldtype(NT, :b) == Union{} + @test_throws ErrorException fieldtype(NT, :c) + @test_throws BoundsError fieldtype(NT, 0) + @test_throws BoundsError fieldtype(NT, 3) + @test Base.return_types((Type{NT},)) do NT; fieldtype(NT, :a); end == Any[Type{Union{}}] + @test fieldtype(NamedTuple{<:Any, Union{}}, 1) == Union{} +end +let NT = NamedTuple{<:Any, Union{}} + @test fieldtype(NT, 100) == Union{} + @test only(Base.return_types((Type{NT},)) do NT; fieldtype(NT, 100); end) >: Type{Union{}} +end From 2a49cfea84b2974c1f1d15af74b0ee6cf7c11b7f Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Sat, 9 Mar 2024 17:22:20 -0500 Subject: [PATCH 316/413] Bump CSL to 1.1.1 to fix libgomp bug (#53643) Resolves https://github.com/JuliaLang/julia/issues/53363 (cherry picked from commit 5c7d24493ebab184d4517ca556314524f4fcb47f) --- deps/checksums/compilersupportlibraries | 184 +++++++++--------- .../CompilerSupportLibraries_jll/Project.toml | 2 +- 2 files changed, 93 insertions(+), 93 deletions(-) diff --git a/deps/checksums/compilersupportlibraries b/deps/checksums/compilersupportlibraries index 2dcfecfb56b26..48843f21c0feb 100644 --- a/deps/checksums/compilersupportlibraries +++ b/deps/checksums/compilersupportlibraries @@ -1,92 +1,92 @@ -CompilerSupportLibraries.v1.1.0+0.aarch64-apple-darwin-libgfortran5.tar.gz/md5/20ebaad57850393b6ac9fa924e511fe4 -CompilerSupportLibraries.v1.1.0+0.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/020de4d8b0ff6bedbadaa305ff8445e6849f12053762ea4aa68412d1ec763dbd86f479587a2fbb862487f1feb04d976c38099ddf3887817a3d32b3f029cf85b1 -CompilerSupportLibraries.v1.1.0+0.aarch64-linux-gnu-libgfortran3.tar.gz/md5/e084a4374be45ba52279682c640449bc -CompilerSupportLibraries.v1.1.0+0.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/d4aedf5c08e13fd9596476330f69e374af64373f7bca0e4df6cbb4d1710d695dce23f2655ee368c3df2049b7b0ca1848c9e01a437fadc0eb08937c6a7cdf2a27 -CompilerSupportLibraries.v1.1.0+0.aarch64-linux-gnu-libgfortran4.tar.gz/md5/6b3975f25be16ea1370ef0bf353ac752 -CompilerSupportLibraries.v1.1.0+0.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/d6298517be1ce350a61d1c1a1bf9b27a541382aa8ccf3e86eeadd7c47e2fe88facd17139a3878adb939df869a330264a942d280e3468d53b61325df7e31daaad -CompilerSupportLibraries.v1.1.0+0.aarch64-linux-gnu-libgfortran5.tar.gz/md5/7134b79b71059d4da79224df1ca0853e -CompilerSupportLibraries.v1.1.0+0.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/e66590a37e756ff33a84514a7ca2bbe2e1517f3e901bc66e40139e8a318d6cd8e329e0c2a7c557ea39e6db2f56802d485ab81b87be1373717b78474b1c7bf7d7 -CompilerSupportLibraries.v1.1.0+0.aarch64-linux-musl-libgfortran3.tar.gz/md5/fd37789f5745a17cc9a85902cebf4698 -CompilerSupportLibraries.v1.1.0+0.aarch64-linux-musl-libgfortran3.tar.gz/sha512/9ff4e9be39f115af2e5bb6a5c88b3940f15a010952cebf39da22e7a5c6744be2f905bebccba092db0a89cf82e8c0e1a3e61b74d4204d2a6648b5469f3ccb0d12 -CompilerSupportLibraries.v1.1.0+0.aarch64-linux-musl-libgfortran4.tar.gz/md5/e9286ae9299c57d5df7b795997b4adf5 -CompilerSupportLibraries.v1.1.0+0.aarch64-linux-musl-libgfortran4.tar.gz/sha512/ea64858481095e0374be330aa2ac84b394bc3e5351b9326137c9cd5d15e6bec47d6e5f672a216572dcb80c3aa6fcb08950cc10157c264f429a93c235028d79a4 -CompilerSupportLibraries.v1.1.0+0.aarch64-linux-musl-libgfortran5.tar.gz/md5/b19c6cbc5b2a62ea76dea64b0f8ae488 -CompilerSupportLibraries.v1.1.0+0.aarch64-linux-musl-libgfortran5.tar.gz/sha512/090d659f7e4a7034117e2bb2dcad0ef544cdca898bf032222cdb81d32af6e6528be842d2cf55839fe397c2ace05dd4ce920cf98cc96324ae18832016516e6cc3 -CompilerSupportLibraries.v1.1.0+0.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/26fb41031e1b797373aea7a7c4d7be3c -CompilerSupportLibraries.v1.1.0+0.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/8fd0b6c990681789caec528067b4bcb9661f9c0a5e0268927d4e88565fa7005db3b592fb8e7830cf32b3fb4ce54d6db747dfde896f93bd38f65b7a1290a2399a -CompilerSupportLibraries.v1.1.0+0.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/6ed3f3e94f662177c3cf3c3734a5c1ec -CompilerSupportLibraries.v1.1.0+0.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/b8165630cced0f7880cb6fd6263cf39bbbbda668eccc94219720078a85a641c3b1b20648960041aa3a51108ab6df087b909c572d0690aacf8b99dc5496ff7db6 -CompilerSupportLibraries.v1.1.0+0.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/86060cbbe966a59f18f92a9b2fab95d4 -CompilerSupportLibraries.v1.1.0+0.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/0aa0ca0ff3a4d541c7a9599ca1adae7391fdd3fa841f3055ecb8635096d0d95a0763758d7533c887b38a655af55174dfcb63f470147b28a256b75a85c8e47801 -CompilerSupportLibraries.v1.1.0+0.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/4acf6f8929fb8ec9fdb8a0f1af06260d -CompilerSupportLibraries.v1.1.0+0.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/3b2e0a5f62bd93434d07848c3045479a1a05bd8589dc976a5680e13805db5adcd9abdcca82edee7b28b4c4a9413ce795784a8a0f0a8fb7346a439322c27c96d9 -CompilerSupportLibraries.v1.1.0+0.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/a75a927c3e14bee6dca29b4907def681 -CompilerSupportLibraries.v1.1.0+0.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/7853fd187f9289a8282d34112b5277bad13abe9dd9b6c796498db2f1a080b2c81faa6119df9ececd09725a019bf99706894765c9c20f618e359adc153c3181a2 -CompilerSupportLibraries.v1.1.0+0.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/ba8545cc20e6c602a0526a3b1fc1d2f1 -CompilerSupportLibraries.v1.1.0+0.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/7a7f3a7761deb068efc00ffc5d4bf4df365cb27674ce73abbe2305b678285161f1526f4facbe27fc11076d99b2079976507f78f5b463bd9057ed008e9d52f9cf -CompilerSupportLibraries.v1.1.0+0.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/26fb41031e1b797373aea7a7c4d7be3c -CompilerSupportLibraries.v1.1.0+0.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/8fd0b6c990681789caec528067b4bcb9661f9c0a5e0268927d4e88565fa7005db3b592fb8e7830cf32b3fb4ce54d6db747dfde896f93bd38f65b7a1290a2399a -CompilerSupportLibraries.v1.1.0+0.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/6ed3f3e94f662177c3cf3c3734a5c1ec -CompilerSupportLibraries.v1.1.0+0.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/b8165630cced0f7880cb6fd6263cf39bbbbda668eccc94219720078a85a641c3b1b20648960041aa3a51108ab6df087b909c572d0690aacf8b99dc5496ff7db6 -CompilerSupportLibraries.v1.1.0+0.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/86060cbbe966a59f18f92a9b2fab95d4 -CompilerSupportLibraries.v1.1.0+0.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/0aa0ca0ff3a4d541c7a9599ca1adae7391fdd3fa841f3055ecb8635096d0d95a0763758d7533c887b38a655af55174dfcb63f470147b28a256b75a85c8e47801 -CompilerSupportLibraries.v1.1.0+0.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/4acf6f8929fb8ec9fdb8a0f1af06260d -CompilerSupportLibraries.v1.1.0+0.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/3b2e0a5f62bd93434d07848c3045479a1a05bd8589dc976a5680e13805db5adcd9abdcca82edee7b28b4c4a9413ce795784a8a0f0a8fb7346a439322c27c96d9 -CompilerSupportLibraries.v1.1.0+0.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/a75a927c3e14bee6dca29b4907def681 -CompilerSupportLibraries.v1.1.0+0.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/7853fd187f9289a8282d34112b5277bad13abe9dd9b6c796498db2f1a080b2c81faa6119df9ececd09725a019bf99706894765c9c20f618e359adc153c3181a2 -CompilerSupportLibraries.v1.1.0+0.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/ba8545cc20e6c602a0526a3b1fc1d2f1 -CompilerSupportLibraries.v1.1.0+0.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/7a7f3a7761deb068efc00ffc5d4bf4df365cb27674ce73abbe2305b678285161f1526f4facbe27fc11076d99b2079976507f78f5b463bd9057ed008e9d52f9cf -CompilerSupportLibraries.v1.1.0+0.i686-linux-gnu-libgfortran3.tar.gz/md5/39dc387fd58ef02c461c7906ceb110e3 -CompilerSupportLibraries.v1.1.0+0.i686-linux-gnu-libgfortran3.tar.gz/sha512/1296ac707fdad620c65256686523f2b027c8359f54d1f8354ef5d1ba514992c7269aad26b706575509b5e29d0ad3dec1c7d32fe3bcff0d723d6a4890819eca46 -CompilerSupportLibraries.v1.1.0+0.i686-linux-gnu-libgfortran4.tar.gz/md5/21a76d54d875ef09db2cdce77d328c2e -CompilerSupportLibraries.v1.1.0+0.i686-linux-gnu-libgfortran4.tar.gz/sha512/9c6bf15338ffbc7113c536e145e53bfaa693007b971f83ee2db820d7d54018bd1cfdbedb6bbce000ee7aaadad1561e91f5ac0e0519bbfccbc3bc57fdfc0eb7e7 -CompilerSupportLibraries.v1.1.0+0.i686-linux-gnu-libgfortran5.tar.gz/md5/f028f2c94f28201701ef6ba4fec9abc9 -CompilerSupportLibraries.v1.1.0+0.i686-linux-gnu-libgfortran5.tar.gz/sha512/c231af1bb0fd4f733278f883837fddf574689bbd7c4dd46cfcd1478d784cbeae1fd785d7cf9f4b0f98cda08819b63a20d5026c6beb892a188fc979b7893697bc -CompilerSupportLibraries.v1.1.0+0.i686-linux-musl-libgfortran3.tar.gz/md5/184436dc05207a653f13aae3d82a2e1b -CompilerSupportLibraries.v1.1.0+0.i686-linux-musl-libgfortran3.tar.gz/sha512/b6e1f969528a168de087f472eebd23a4daf907aa48f7c5b42c35960b1cae3e6ca8f512982d69b757f39d6dc07b46f74c84e549cb22354a2f55d1265cba7b7013 -CompilerSupportLibraries.v1.1.0+0.i686-linux-musl-libgfortran4.tar.gz/md5/545bee22cb35d1c4c1381009e72eebca -CompilerSupportLibraries.v1.1.0+0.i686-linux-musl-libgfortran4.tar.gz/sha512/78a65b9e7cda79cd648a1ae09daea970eba9d04fd5ea41bc1e37b065cf5c53974f759590292876f57c7f65139be66a6c381aa6756cdda7b36845cfed1bb7fddc -CompilerSupportLibraries.v1.1.0+0.i686-linux-musl-libgfortran5.tar.gz/md5/3f1a08601a6a7bbd4ecfa36c8f6abbd9 -CompilerSupportLibraries.v1.1.0+0.i686-linux-musl-libgfortran5.tar.gz/sha512/0e225e0a7b651f6b3fbccf760d08d66f2d8af1e329d14ef67fd3968a46905e062edcf75f60d7540f0cd7dabcd3ac9130fa0f63e198869bdc6a9aabd391652805 -CompilerSupportLibraries.v1.1.0+0.i686-w64-mingw32-libgfortran3.tar.gz/md5/9cfea65fa6c1b587d9b4b84ee64af166 -CompilerSupportLibraries.v1.1.0+0.i686-w64-mingw32-libgfortran3.tar.gz/sha512/b30e24982d4140c312759b8c26d4b72845fc1fa4d7fdf49ccfe9994f7bbf1815ed006a228f6a2185c5b8f9d596d0b04debd1d8392e705c530e5177a22c7c081d -CompilerSupportLibraries.v1.1.0+0.i686-w64-mingw32-libgfortran4.tar.gz/md5/af99905c4f054fe13842559f7201b3ad -CompilerSupportLibraries.v1.1.0+0.i686-w64-mingw32-libgfortran4.tar.gz/sha512/96513ff22dc16cc259ad392862f1765218474bff24e561f14c1e0d349a6bc433952d9b7b73236b56722fd971e0b864b178d8a9f8d9499de4595bc9857ef17a95 -CompilerSupportLibraries.v1.1.0+0.i686-w64-mingw32-libgfortran5.tar.gz/md5/1be078cd374d3b501b20d9ce679009ee -CompilerSupportLibraries.v1.1.0+0.i686-w64-mingw32-libgfortran5.tar.gz/sha512/63097283c987dc439f02d72a6f70423acd962e4da25acc04185e654c7f16a617e34ad7efabd624fd2e70119e79e4d4806f76286d36d56c353f9e53814e75d3e4 -CompilerSupportLibraries.v1.1.0+0.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/156ae44ab4172903ad40932ca78a57ed -CompilerSupportLibraries.v1.1.0+0.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/e800c20342dd9886c4c3f57e92278d6d41c544adba202ef3f5a6a4f8211fbbd8fab65f169adf7320b7be8a2ea02c0aa1afedbaf0b3f9afbfb691759aaaaccc4c -CompilerSupportLibraries.v1.1.0+0.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/cb01c02fdcbd319784034744172e1eb9 -CompilerSupportLibraries.v1.1.0+0.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/0ba635d39958672a0a55069521e20ca6c0f9c81a9f55c360f6043acb415709edb72bfe8d0e83c25cdf9ace8a9e9ba10e39457e234e3905c988eb95e0e0ecff3d -CompilerSupportLibraries.v1.1.0+0.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/f9592263c6e72228c492ed2ed216f29e -CompilerSupportLibraries.v1.1.0+0.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/cbe29742959906e3fe9a356991ca1f09d4d8cc2a02a9af8624b3e02b4ab59e33bc05082826f7c67c73c6b91cc8e1e5c4a0c275c21c5f8eab8b58ed942cdcb55c -CompilerSupportLibraries.v1.1.0+0.x86_64-apple-darwin-libgfortran3.tar.gz/md5/8f0db2ff4688c3f9e1337a28976d833a -CompilerSupportLibraries.v1.1.0+0.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/98502e07499ad9e22147a977b1fe55320e75b6229c3993f1cd1b71e47a09ae6bf78e2341ce978ea72d33b111d09b813a332bfe8f4f6dfb669509c300fcec2561 -CompilerSupportLibraries.v1.1.0+0.x86_64-apple-darwin-libgfortran4.tar.gz/md5/980a1b8e6262c4a7b8f86b84f7234043 -CompilerSupportLibraries.v1.1.0+0.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/c0755d4fbb1b6fd7755d7508d7df929feabe7e5778661397ef0205e21aa3be565b39ccc2a08ed0d958e812c0c759be68ef52de09fe92ebab6da342b309a0810d -CompilerSupportLibraries.v1.1.0+0.x86_64-apple-darwin-libgfortran5.tar.gz/md5/4b3cdb65e6114c77fd1e51da69e41afa -CompilerSupportLibraries.v1.1.0+0.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/803cb771875d94eda554bade8197b31aab988ab0c957a2f8853d82d01418be9fee7d9d4b7ef6f5b7fc8d1825ab22083a71d467eb976d5076fc5d73a9a7a30440 -CompilerSupportLibraries.v1.1.0+0.x86_64-linux-gnu-libgfortran3.tar.gz/md5/36638a444b185954bf12169edace1914 -CompilerSupportLibraries.v1.1.0+0.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/33f657775258d0da1a57fc03c5e8ed203946944581ebf70af7b0205f9bff7fcd4f2bde5b6fa3b01659c51f106d0e6df5c7533ab8d3372c4895675854688e01dc -CompilerSupportLibraries.v1.1.0+0.x86_64-linux-gnu-libgfortran4.tar.gz/md5/36ac52a361fd0f4be5c66572345af7a4 -CompilerSupportLibraries.v1.1.0+0.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/802bd8089bb2a3b5959a47dbade2199b46c247d0a793cbf6fcbc97b9a1dccd6d8585ac7694ae4bef1dc3ba21796ae5b53f995c8793ccd7316e8fde68ac121f83 -CompilerSupportLibraries.v1.1.0+0.x86_64-linux-gnu-libgfortran5.tar.gz/md5/5911da90a0fc86d665aa86cba12e9d61 -CompilerSupportLibraries.v1.1.0+0.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/c966936dfd272d9706aa51ed44abcb8cded899b0caa8b12ee787a0fb1569fa90a1cba89c9a9b83e05c0993facc615feb851399f4799c06956ae3064d172c964d -CompilerSupportLibraries.v1.1.0+0.x86_64-linux-musl-libgfortran3.tar.gz/md5/5f42a52e72f0e79530d71733a93811bf -CompilerSupportLibraries.v1.1.0+0.x86_64-linux-musl-libgfortran3.tar.gz/sha512/51078ef0e447bb181003a50b899b39a9d1ee8ecc92fc293f5a358d836ddf21d03dc44433ae28aa21fdf756c2912b2d3f1e374a5ba108c8c34552fcf32f93fd0b -CompilerSupportLibraries.v1.1.0+0.x86_64-linux-musl-libgfortran4.tar.gz/md5/f3bbee1114cb85c266a45f64632c6911 -CompilerSupportLibraries.v1.1.0+0.x86_64-linux-musl-libgfortran4.tar.gz/sha512/102e638f49ff0f62644f15a931c71a16b96f02f4c90d1b8bd378e0d7c54f4e8a150cdb5ffdbc3dcbafb83131bef84f9071cb77e8debdd98d8929c7b65401fc54 -CompilerSupportLibraries.v1.1.0+0.x86_64-linux-musl-libgfortran5.tar.gz/md5/ff2b0ebdc7ef83cf8b48bd2ae76c6430 -CompilerSupportLibraries.v1.1.0+0.x86_64-linux-musl-libgfortran5.tar.gz/sha512/0730ecf1b9476612cadc3f3e7c1b227a1967edc091c88cd0cc19477079d1739fd5e7b1022ff686c0c6a2404edaebfb02c810dcfc1aa4187e7ecddb54998ad96c -CompilerSupportLibraries.v1.1.0+0.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/35642304a9a2f435cf5214b2715198fe -CompilerSupportLibraries.v1.1.0+0.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/a67f41ba31c99a064f504f508711537f9e90089ca5352bfc2698c3fcd3e499ca716f07ffeac4fb1b88c2c934f7f380f262af8c863d3b16ac7e805d5c805ab358 -CompilerSupportLibraries.v1.1.0+0.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/01df0fbb265e5ff1a480a7a5e23b0835 -CompilerSupportLibraries.v1.1.0+0.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/57a79f2b8e846c1514dcb18420f26ae2889962040f410b746836cab4395749155fa9cd9d00d4c25954c0ffa72f9f3823b1b50688a20ddf675301f64e0d4b5c7e -CompilerSupportLibraries.v1.1.0+0.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/1f1f6380ce8815cc9cedcea0b40860e7 -CompilerSupportLibraries.v1.1.0+0.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/a88ea8af8c8df792861812bfdf7f1bcaae31582ab78ce78b47a0dc6fd57b93441c0471f529ce23877131ac9701c6eed72ce89241746e18271f3686fbd718138c -CompilerSupportLibraries.v1.1.0+0.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/5eab740e86bfa7656f6a08038fe2fa63 -CompilerSupportLibraries.v1.1.0+0.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/3dc6b7ec39ff7dcb71478376c86ce34a35a62f049f6203722c5414b7b635ff1b412e02d8d24c13c123d18b2e914780da4639538676694e342a1a6b507691ef25 -CompilerSupportLibraries.v1.1.0+0.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/9718c79244ed31c367e715f1f563b8cd -CompilerSupportLibraries.v1.1.0+0.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/eec2380c4e182f4e923142736a2c4aaf11a525a5f966fed7e4ec4b431ee28f3842a4e73495df116604f74b419e6d398576ee3dd21d3c0c53b92167dcfd0f6b84 -CompilerSupportLibraries.v1.1.0+0.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/58d7b0b79a22f3aade7e4f39eec898e7 -CompilerSupportLibraries.v1.1.0+0.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/efecc0ca09ec6b7b8898c2ffd333c7e0a6a44706d72ac0e5010409aba92ee70a88b6fd77434bedafe0e013561f8d0c74b5a274808a6c9499f6a3005a7691785f +CompilerSupportLibraries.v1.1.1+0.aarch64-apple-darwin-libgfortran5.tar.gz/md5/20ebaad57850393b6ac9fa924e511fe4 +CompilerSupportLibraries.v1.1.1+0.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/020de4d8b0ff6bedbadaa305ff8445e6849f12053762ea4aa68412d1ec763dbd86f479587a2fbb862487f1feb04d976c38099ddf3887817a3d32b3f029cf85b1 +CompilerSupportLibraries.v1.1.1+0.aarch64-linux-gnu-libgfortran3.tar.gz/md5/d641904255ee412c45b089d92c53262b +CompilerSupportLibraries.v1.1.1+0.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/ace0383fe9bd64faeed1fb05a11bbec932bd56b8460d06d2b7c3e1b5f4f6e9a9b3345937088684e5cd1ca9a85ef1a5ff56a97a1f60449cd6e35247de1e123d81 +CompilerSupportLibraries.v1.1.1+0.aarch64-linux-gnu-libgfortran4.tar.gz/md5/2a71f320d8b9242ad26aabed74cbf404 +CompilerSupportLibraries.v1.1.1+0.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/03e2a4482baaca2d6ce5cc207224d03bd7851486ebe8072c7317f5fcdd641395d945552d9462ab44a9f2e4b0ffaa3874a76f314d67bc0f75393a1151ab518611 +CompilerSupportLibraries.v1.1.1+0.aarch64-linux-gnu-libgfortran5.tar.gz/md5/1beec15ad689a5f572040ca2a7b6a880 +CompilerSupportLibraries.v1.1.1+0.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/27bbe212a8d43e841cf8f3e9964b72bc220fea03cf5e65721b02d2f3aa5193acdce41e512578ed6be935b413cd0d2224a6bcd2e9624931f39092ba3cfc5cbcc0 +CompilerSupportLibraries.v1.1.1+0.aarch64-linux-musl-libgfortran3.tar.gz/md5/9e949c2efe48a7b2a62bff7e1ffdede0 +CompilerSupportLibraries.v1.1.1+0.aarch64-linux-musl-libgfortran3.tar.gz/sha512/2947acb250f8ff4936da5ed02ddbfa492fc38bc87baa588a36bb892ba68b6636a912cda976f8fff00cc7a710c3bfb185826b4cd4a726750ef5f161d5f1aa21a2 +CompilerSupportLibraries.v1.1.1+0.aarch64-linux-musl-libgfortran4.tar.gz/md5/7202764b1a89a748b07460d9c40a9279 +CompilerSupportLibraries.v1.1.1+0.aarch64-linux-musl-libgfortran4.tar.gz/sha512/63236225a9becdd166c4395ea5081c64f57bc51af89c2edb5abeb419d6eb8224a380a633afd861bb84a12435fd19c8554cbe5ffadf8324ff2c7f17021ed53e69 +CompilerSupportLibraries.v1.1.1+0.aarch64-linux-musl-libgfortran5.tar.gz/md5/f66c30d3cec8057ae47f05df022ead51 +CompilerSupportLibraries.v1.1.1+0.aarch64-linux-musl-libgfortran5.tar.gz/sha512/5329d9469bb0f47560e52b15eb21ab70e0e2da0275bdb2f8e6ed4feb132bc9989a6b44984329455104546c95d05a05f8fb4f1cf232856219ba005100f4b16dc3 +CompilerSupportLibraries.v1.1.1+0.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/05ff63780f5b7c8c6c590c3626f32ac0 +CompilerSupportLibraries.v1.1.1+0.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/8d3c4149531f3782f5efbb6a6fbbb7080ba005298ba962b5bc5f66250ea9fde91b34836ed909c16f306d21d2e358f985360962e9362a8e807ccd4254da3bb19b +CompilerSupportLibraries.v1.1.1+0.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/3ca2b6e8101d831e546c1b6ed2ca9a42 +CompilerSupportLibraries.v1.1.1+0.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/21a0b9c5acde96c0a91303f4f395e55f272d5585ad18f0365105188d129a3ca94ad66d4dd99b471abdf41a7a7262a3b258fd04b887110ad15255b284cd1612b0 +CompilerSupportLibraries.v1.1.1+0.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/d4d560b8ecce0ff2cb4dbc88cb25942a +CompilerSupportLibraries.v1.1.1+0.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/d405f61525af1b2fe85107a70ed67b8a1eb767923487fa71539e0f49d6e70358c8a24f4ef1c224256cf677af99b54a2f8243f1e207350fcb14d426a7a6bb3915 +CompilerSupportLibraries.v1.1.1+0.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/8c6eddaa156fd0afee28ac5a154bc3f7 +CompilerSupportLibraries.v1.1.1+0.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/b9fc86bb706ad98d61b63eb4cc8bfce6b2c67b58ba2cebecea7574f44790cce044bb1b4db1d20050b59538fa43b51cb352d752c77333a0f0621fde47c63a3596 +CompilerSupportLibraries.v1.1.1+0.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/0a54c16fea86c6dadb39eff65c465528 +CompilerSupportLibraries.v1.1.1+0.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/c635c636384d3af5b4b078be7398fbc665a185eae69dd223279affb4836fb5c575d6ab296ae940ccbe73777bdb5e355f4f28a2fa27606ac143ff424641c60c65 +CompilerSupportLibraries.v1.1.1+0.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/892dfd91703f0f77d170a5371a1c25d4 +CompilerSupportLibraries.v1.1.1+0.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/8ac59d00192c0e847168e61b3e93957f3909aab59ba8d05e47686a9f8b7226496f89b932151c42198ec966ccd47721cdf547a247ea4e5c61b22bfccce2ec591c +CompilerSupportLibraries.v1.1.1+0.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/05ff63780f5b7c8c6c590c3626f32ac0 +CompilerSupportLibraries.v1.1.1+0.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/8d3c4149531f3782f5efbb6a6fbbb7080ba005298ba962b5bc5f66250ea9fde91b34836ed909c16f306d21d2e358f985360962e9362a8e807ccd4254da3bb19b +CompilerSupportLibraries.v1.1.1+0.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/3ca2b6e8101d831e546c1b6ed2ca9a42 +CompilerSupportLibraries.v1.1.1+0.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/21a0b9c5acde96c0a91303f4f395e55f272d5585ad18f0365105188d129a3ca94ad66d4dd99b471abdf41a7a7262a3b258fd04b887110ad15255b284cd1612b0 +CompilerSupportLibraries.v1.1.1+0.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/d4d560b8ecce0ff2cb4dbc88cb25942a +CompilerSupportLibraries.v1.1.1+0.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/d405f61525af1b2fe85107a70ed67b8a1eb767923487fa71539e0f49d6e70358c8a24f4ef1c224256cf677af99b54a2f8243f1e207350fcb14d426a7a6bb3915 +CompilerSupportLibraries.v1.1.1+0.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/8c6eddaa156fd0afee28ac5a154bc3f7 +CompilerSupportLibraries.v1.1.1+0.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/b9fc86bb706ad98d61b63eb4cc8bfce6b2c67b58ba2cebecea7574f44790cce044bb1b4db1d20050b59538fa43b51cb352d752c77333a0f0621fde47c63a3596 +CompilerSupportLibraries.v1.1.1+0.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/0a54c16fea86c6dadb39eff65c465528 +CompilerSupportLibraries.v1.1.1+0.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/c635c636384d3af5b4b078be7398fbc665a185eae69dd223279affb4836fb5c575d6ab296ae940ccbe73777bdb5e355f4f28a2fa27606ac143ff424641c60c65 +CompilerSupportLibraries.v1.1.1+0.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/892dfd91703f0f77d170a5371a1c25d4 +CompilerSupportLibraries.v1.1.1+0.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/8ac59d00192c0e847168e61b3e93957f3909aab59ba8d05e47686a9f8b7226496f89b932151c42198ec966ccd47721cdf547a247ea4e5c61b22bfccce2ec591c +CompilerSupportLibraries.v1.1.1+0.i686-linux-gnu-libgfortran3.tar.gz/md5/3094705222b6b61fd6a10422a73e1149 +CompilerSupportLibraries.v1.1.1+0.i686-linux-gnu-libgfortran3.tar.gz/sha512/27f874cde357ffa45aaa10f2e620ec0f8ab4e5a8bf4607fc023a2ec42040bcc9a724f959237c340d67451f8621402fa05133c1420086b87135f40326c30b97af +CompilerSupportLibraries.v1.1.1+0.i686-linux-gnu-libgfortran4.tar.gz/md5/ba0acaff60648efa3915348a8a353df8 +CompilerSupportLibraries.v1.1.1+0.i686-linux-gnu-libgfortran4.tar.gz/sha512/0b6aaf75363cbe6133ca3aed351ab58ef1e441f61375f5baf702d8043813c459d48e8af17630f1a07dc22772ec9b02076af33726ed94e6314ae37d5a139d6dcc +CompilerSupportLibraries.v1.1.1+0.i686-linux-gnu-libgfortran5.tar.gz/md5/95f1d57cfc43677e40bfc121bce79274 +CompilerSupportLibraries.v1.1.1+0.i686-linux-gnu-libgfortran5.tar.gz/sha512/edacd9960e9de1236c91752e103cddfc018d697e87fabb3cceadf36153b4e97842ef284bd1532290a5620007234882b4c4cd4f36525b61763d97b2f608358262 +CompilerSupportLibraries.v1.1.1+0.i686-linux-musl-libgfortran3.tar.gz/md5/f37fe1818e1634476c44afae478611c8 +CompilerSupportLibraries.v1.1.1+0.i686-linux-musl-libgfortran3.tar.gz/sha512/6e4e3eb5ac9570bfdf5280f59167eb6c4a74f3aa152afb4c5d180b9a6cdbdca557e7dd13f0b5b76943b45a65e848fe77c5b3bbc6ddb0fd846d03fbc9fbedf7ce +CompilerSupportLibraries.v1.1.1+0.i686-linux-musl-libgfortran4.tar.gz/md5/b4ffd52179aa0006c56f279b87cb7556 +CompilerSupportLibraries.v1.1.1+0.i686-linux-musl-libgfortran4.tar.gz/sha512/a047ac7db204c31802f646351af51c55fe06498e851b2df58d7f93f75d9c0067f8736f247f108991ec01ac7f86f3026ecf58b5f2f3a76d7eab00130754e7f704 +CompilerSupportLibraries.v1.1.1+0.i686-linux-musl-libgfortran5.tar.gz/md5/2d38fc835f236f89f457fdf859ccb903 +CompilerSupportLibraries.v1.1.1+0.i686-linux-musl-libgfortran5.tar.gz/sha512/51fbe41efbce33b1cf3728df6fa59fd0e85a13308b3e868fe9f70f4d67857615f83542ba69be824a73e89959503dd7a11335d1c495704bd7d6cad6656d0c5d57 +CompilerSupportLibraries.v1.1.1+0.i686-w64-mingw32-libgfortran3.tar.gz/md5/9650002f6729c0964d33afcab334d77d +CompilerSupportLibraries.v1.1.1+0.i686-w64-mingw32-libgfortran3.tar.gz/sha512/0b7907811a13d09b7b33203c7e46888308c7d6fcf5d69790babafc39f640541551f784264247f159a552f15df1ddd061c421a93b983d838d3bd7f85ba6427f70 +CompilerSupportLibraries.v1.1.1+0.i686-w64-mingw32-libgfortran4.tar.gz/md5/47e9fb99906b9647e26e4126a913074e +CompilerSupportLibraries.v1.1.1+0.i686-w64-mingw32-libgfortran4.tar.gz/sha512/d7285691fbe1318e48e061d678e54890762cc16996652a34b190924cc1462d24ab0b08729945eb25f4bef60e60d50f3e78db57d4cda0302b8ba579db8a1311e1 +CompilerSupportLibraries.v1.1.1+0.i686-w64-mingw32-libgfortran5.tar.gz/md5/b588b2710f2b83d2c70c6104e585a3bd +CompilerSupportLibraries.v1.1.1+0.i686-w64-mingw32-libgfortran5.tar.gz/sha512/b62a63b0c8750f85fc265db88456307b794e912352a68997c7cce06444391307c03edbe5b901833f53c5bd55f5a1e61a586538b08487cc139a2d71fccdce1d31 +CompilerSupportLibraries.v1.1.1+0.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/7cce4f3dc057ebebaa677bf6f0d51e9e +CompilerSupportLibraries.v1.1.1+0.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/a0dd93905f0ede4da5e2fbacf2579154db8ac8e9963c77fb62284489686f2aa372925b3341742d86430a839267421af55f6e1e413473d17f13a1a199e6a904a0 +CompilerSupportLibraries.v1.1.1+0.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/06ee6aaeca78b3e9005f53f1fa32731f +CompilerSupportLibraries.v1.1.1+0.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/ff0e33ce9f93b3a867cf409b95e763efbc8f4dde65ed19107eb14d29460d084f253e03ebd6375f1da996182b3d96e1fda4abff06507258da9a89ece36663db84 +CompilerSupportLibraries.v1.1.1+0.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/483251d28076ee959dff131d13d7e53b +CompilerSupportLibraries.v1.1.1+0.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/a7c9053a8c1b784cb6459762f26e0c2106a9758cbe2aefe8975a14aaaf61b8a08e51c465e733e44d01537beb59d467c57e536ebd8b27b7b68f46945174c469c7 +CompilerSupportLibraries.v1.1.1+0.x86_64-apple-darwin-libgfortran3.tar.gz/md5/a147bf3a6d6550c177b8a784b9b02e21 +CompilerSupportLibraries.v1.1.1+0.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/c6f7a13f0195eae8f7ad980a4b24de9b155be69c4437522723411f9866a4aee3c5b350ee2f0c95f41f19aba43acaca78309881157e8498df0664c902d0c05a5d +CompilerSupportLibraries.v1.1.1+0.x86_64-apple-darwin-libgfortran4.tar.gz/md5/3f19c9d0e723a8d5591357ac3a9452a0 +CompilerSupportLibraries.v1.1.1+0.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/5752bac310d80ed2dc1fc3d6580300d185787b9b933e31c8e0f572099abd0727d9483da8f9af858f706e96a183d2b10702c44381a080438cbb17d6459321ccfb +CompilerSupportLibraries.v1.1.1+0.x86_64-apple-darwin-libgfortran5.tar.gz/md5/ad0f0e2fe3e7d147a0a27271a2aba0fc +CompilerSupportLibraries.v1.1.1+0.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/f42231adea3d0b6133c3b5bc5fbf765bc6a7ba8ef0f407fa1b8def36dd8a71d20ef39fb6e57b43208489c2795a96562cdbf15f3d20b3f3a09edb29b99d19a33a +CompilerSupportLibraries.v1.1.1+0.x86_64-linux-gnu-libgfortran3.tar.gz/md5/4c78d56dbbbff682c0a78d11fb9d1e70 +CompilerSupportLibraries.v1.1.1+0.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/0e9d6dcc4b8fddaaa94a26a46e915d33fb474f8a8ee14edd4d1c7e774846c44c5c5d852649a4f70409c99ac0e1d458077b7f0eb7dc0b0326ee8b625644d7074d +CompilerSupportLibraries.v1.1.1+0.x86_64-linux-gnu-libgfortran4.tar.gz/md5/039d37f813b183c75feebadd21011eb6 +CompilerSupportLibraries.v1.1.1+0.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/05e7291de1fd2520247402f0db9d348fdd7a02d8dd9133ac65701f88d237110a3cc6c6e2c5717364ab786b6e6063038ec10c9605e77bc4dbe1064a0e77617f5d +CompilerSupportLibraries.v1.1.1+0.x86_64-linux-gnu-libgfortran5.tar.gz/md5/a985f13a85eb14d1b6339ba4983dc372 +CompilerSupportLibraries.v1.1.1+0.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/27468ccd5642e6e11bd5972684518a0fb883bf4835ac18f5279c3fce97b1779131c7d9e39d8de26a15c293c832946334e964919f51d7679cd0569ce82b938579 +CompilerSupportLibraries.v1.1.1+0.x86_64-linux-musl-libgfortran3.tar.gz/md5/9d86ce2fe481ea97a1fd098bd47d524c +CompilerSupportLibraries.v1.1.1+0.x86_64-linux-musl-libgfortran3.tar.gz/sha512/a865a4127bacaedd81b6c81279f6a44bc3497ab29a0401f66da1abfc0738ea459be9f158d06969c161a65925739665084bec5f8650a8cd1e8f0d08f1f44d729f +CompilerSupportLibraries.v1.1.1+0.x86_64-linux-musl-libgfortran4.tar.gz/md5/86d9db869a7af6c96dea39f5d9d90505 +CompilerSupportLibraries.v1.1.1+0.x86_64-linux-musl-libgfortran4.tar.gz/sha512/01e0c69b04138989200ded92eddae6ff1873d3a440d17273d08bee40d53b2929e35bfd14be051074fe78671cac34ac2dd7360c1571790ee52f94a5921de42a65 +CompilerSupportLibraries.v1.1.1+0.x86_64-linux-musl-libgfortran5.tar.gz/md5/e72d28df4bcb60ab2f3389046e7c83a8 +CompilerSupportLibraries.v1.1.1+0.x86_64-linux-musl-libgfortran5.tar.gz/sha512/cac193a26328ddeff5f7bcc3d7207101c574f9bdb1bff5c2b925315c5c2404a2fdb6591d1968f30931373fbfcae9bda784c72e65580ad3acc398448cd193f65d +CompilerSupportLibraries.v1.1.1+0.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/35642304a9a2f435cf5214b2715198fe +CompilerSupportLibraries.v1.1.1+0.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/a67f41ba31c99a064f504f508711537f9e90089ca5352bfc2698c3fcd3e499ca716f07ffeac4fb1b88c2c934f7f380f262af8c863d3b16ac7e805d5c805ab358 +CompilerSupportLibraries.v1.1.1+0.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/01df0fbb265e5ff1a480a7a5e23b0835 +CompilerSupportLibraries.v1.1.1+0.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/57a79f2b8e846c1514dcb18420f26ae2889962040f410b746836cab4395749155fa9cd9d00d4c25954c0ffa72f9f3823b1b50688a20ddf675301f64e0d4b5c7e +CompilerSupportLibraries.v1.1.1+0.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/1f1f6380ce8815cc9cedcea0b40860e7 +CompilerSupportLibraries.v1.1.1+0.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/a88ea8af8c8df792861812bfdf7f1bcaae31582ab78ce78b47a0dc6fd57b93441c0471f529ce23877131ac9701c6eed72ce89241746e18271f3686fbd718138c +CompilerSupportLibraries.v1.1.1+0.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/38fc8c445a1a610db40a7609155e22d6 +CompilerSupportLibraries.v1.1.1+0.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/085652c7ca583c3623611ca9262b70765c9936c9feb5f9034b2c6b6d6677a7a1d7d201b83d82d0d268f3190bd1a62eab0124e8fae3625407dee7f1df89d4106c +CompilerSupportLibraries.v1.1.1+0.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/f3f89eb3c2e441fde6e6b9c1c1a61183 +CompilerSupportLibraries.v1.1.1+0.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/c53f79e20ad043ab099873f38ece98c6bed22950610ba88b9c178a4bd943039cc426473828d509deb8c65c93309da1de87bdf36fb3954b8f8047277c418fe2e0 +CompilerSupportLibraries.v1.1.1+0.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/024f7133425db23e215dc55589bb9171 +CompilerSupportLibraries.v1.1.1+0.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/819945496ea48dd44d8c0f12a11a358b7d1ebf198d60fbad576d74ddee68cdea98070cdd11ca96567d0c772ec007c03cbc83ff5c7d2ad737cbd486fe0c9afcd5 diff --git a/stdlib/CompilerSupportLibraries_jll/Project.toml b/stdlib/CompilerSupportLibraries_jll/Project.toml index 3e15ff6b87b71..5aab865b5f6fc 100644 --- a/stdlib/CompilerSupportLibraries_jll/Project.toml +++ b/stdlib/CompilerSupportLibraries_jll/Project.toml @@ -4,7 +4,7 @@ uuid = "e66e0078-7015-5450-92f7-15fbd957f2ae" # NOTE: When updating this, also make sure to update the value # `CSL_NEXT_GLIBCXX_VERSION` in `Make.inc`, to properly disable # automatic usage of BB-built CSLs on extremely up-to-date systems! -version = "1.1.0+0" +version = "1.1.1+0" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" From d3c8eb9dc960ce0e46231ec5bfc7ba8fcf687f46 Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Wed, 13 Mar 2024 06:56:38 -0300 Subject: [PATCH 317/413] gc scheduler synchronization fixes to 1.10 (#53661) Cherry-pick the parts of https://github.com/JuliaLang/julia/pull/53355 which are relevant to the 1.10 GC. --- src/gc.c | 62 ++++++++++++++++++++++---------------------------------- 1 file changed, 24 insertions(+), 38 deletions(-) diff --git a/src/gc.c b/src/gc.c index 272fe42a43958..0a456eced511e 100644 --- a/src/gc.c +++ b/src/gc.c @@ -2719,9 +2719,7 @@ void gc_mark_and_steal(jl_ptls_t ptls) jl_gc_markqueue_t *mq = &ptls->mark_queue; jl_gc_markqueue_t *mq_master = NULL; int master_tid = jl_atomic_load(&gc_master_tid); - if (master_tid == -1) { - return; - } + assert(master_tid != -1); mq_master = &gc_all_tls_states[master_tid]->mark_queue; void *new_obj; jl_gc_chunk_t c; @@ -2812,61 +2810,49 @@ size_t gc_count_work_in_queue(jl_ptls_t ptls) JL_NOTSAFEPOINT * Correctness argument for the mark-loop termination protocol. * * Safety properties: - * - No work items shall be in any thread's queues when `gc_mark_loop_barrier` observes + * - No work items shall be in any thread's queues when `gc_should_mark` observes * that `gc_n_threads_marking` is zero. * * - No work item shall be stolen from the master thread (i.e. mutator thread which started * GC and which helped the `jl_n_markthreads` - 1 threads to mark) after - * `gc_mark_loop_barrier` observes that `gc_n_threads_marking` is zero. This property is + * `gc_should_mark` observes that `gc_n_threads_marking` is zero. This property is * necessary because we call `gc_mark_loop_serial` after marking the finalizer list in * `_jl_gc_collect`, and want to ensure that we have the serial mark-loop semantics there, * and that no work is stolen from us at that point. * * Proof: - * - Suppose the master thread observes that `gc_n_threads_marking` is zero in - * `gc_mark_loop_barrier` and there is a work item left in one thread's queue at that point. - * Since threads try to steal from all threads' queues, this implies that all threads must - * have tried to steal from the queue which still has a work item left, but failed to do so, - * which violates the semantics of Chase-Lev's work-stealing queue. - * - * - Let E1 be the event "master thread writes -1 to gc_master_tid" and E2 be the even - * "master thread observes that `gc_n_threads_marking` is zero". Since we're using - * sequentially consistent atomics, E1 => E2. Now suppose one thread which is spinning in - * `gc_should_mark` tries to enter the mark-loop after E2. In order to do so, it must - * increment `gc_n_threads_marking` to 1 in an event E3, and then read `gc_master_tid` in an - * event E4. Since we're using sequentially consistent atomics, E3 => E4. Since we observed - * `gc_n_threads_marking` as zero in E2, then E2 => E3, and we conclude E1 => E4, so that - * the thread which is spinning in `gc_should_mark` must observe that `gc_master_tid` is -1 - * and therefore won't enter the mark-loop. + * - If a thread observes that `gc_n_threads_marking` is zero inside `gc_should_mark`, that + * means that no thread has work on their queue, this is guaranteed because a thread may only exit + * `gc_mark_and_steal` when its own queue is empty, this information is synchronized by the + * seq-cst fetch_add to a thread that is in `gc_should_mark`. `gc_queue_observer_lock` + * guarantees that once `gc_n_threads_marking` reaches zero, no thread will increment it again, + * because incrementing is only legal from inside the lock. Therefore, no thread will reenter + * the mark-loop after `gc_n_threads_marking` reaches zero. */ -int gc_should_mark(jl_ptls_t ptls) +int gc_should_mark(void) { int should_mark = 0; - int n_threads_marking = jl_atomic_load(&gc_n_threads_marking); - // fast path - if (n_threads_marking == 0) { - return 0; - } uv_mutex_lock(&gc_queue_observer_lock); while (1) { - int tid = jl_atomic_load(&gc_master_tid); - // fast path - if (tid == -1) { - break; - } - n_threads_marking = jl_atomic_load(&gc_n_threads_marking); - // fast path + int n_threads_marking = jl_atomic_load(&gc_n_threads_marking); if (n_threads_marking == 0) { break; } + int tid = jl_atomic_load_relaxed(&gc_master_tid); + assert(tid != -1); size_t work = gc_count_work_in_queue(gc_all_tls_states[tid]); for (tid = gc_first_tid; tid < gc_first_tid + jl_n_markthreads; tid++) { - work += gc_count_work_in_queue(gc_all_tls_states[tid]); + jl_ptls_t ptls2 = gc_all_tls_states[tid]; + if (ptls2 == NULL) { + continue; + } + work += gc_count_work_in_queue(ptls2); } // if there is a lot of work left, enter the mark loop if (work >= 16 * n_threads_marking) { - jl_atomic_fetch_add(&gc_n_threads_marking, 1); + jl_atomic_fetch_add(&gc_n_threads_marking, 1); // A possibility would be to allow a thread that found lots + // of work to increment this should_mark = 1; break; } @@ -2878,9 +2864,7 @@ int gc_should_mark(jl_ptls_t ptls) void gc_wake_all_for_marking(jl_ptls_t ptls) { - jl_atomic_store(&gc_master_tid, ptls->tid); uv_mutex_lock(&gc_threads_lock); - jl_atomic_fetch_add(&gc_n_threads_marking, 1); uv_cond_broadcast(&gc_threads_cond); uv_mutex_unlock(&gc_threads_lock); } @@ -2888,12 +2872,14 @@ void gc_wake_all_for_marking(jl_ptls_t ptls) void gc_mark_loop_parallel(jl_ptls_t ptls, int master) { if (master) { + jl_atomic_store(&gc_master_tid, ptls->tid); + jl_atomic_fetch_add(&gc_n_threads_marking, 1); gc_wake_all_for_marking(ptls); gc_mark_and_steal(ptls); jl_atomic_fetch_add(&gc_n_threads_marking, -1); } while (1) { - int should_mark = gc_should_mark(ptls); + int should_mark = gc_should_mark(); if (!should_mark) { break; } From 77b86fe54f6b7e4ff59f9daf1d78473c314962e5 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Thu, 14 Mar 2024 10:51:10 -0400 Subject: [PATCH 318/413] codegen: change tbaa of ptr_phi to tbaa_value (#53655) Fixes https://github.com/JuliaLang/julia/issues/53612 (cherry picked from commit cb47b01d3eff8da054384bc0c293db8f9f8b2783) --- src/codegen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index 53a278d42d102..f1e89e760aa1c 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -5031,7 +5031,7 @@ static void emit_phinode_assign(jl_codectx_t &ctx, ssize_t idx, jl_value_t *r) Value *ptr = ctx.builder.CreateSelect(isboxed, maybe_bitcast(ctx, decay_derived(ctx, ptr_phi), getInt8PtrTy(ctx.builder.getContext())), maybe_bitcast(ctx, decay_derived(ctx, phi), getInt8PtrTy(ctx.builder.getContext()))); - jl_cgval_t val = mark_julia_slot(ptr, phiType, Tindex_phi, ctx.tbaa().tbaa_stack); // XXX: this TBAA is wrong for ptr_phi + jl_cgval_t val = mark_julia_slot(ptr, phiType, Tindex_phi, best_tbaa(ctx.tbaa(), phiType)); val.Vboxed = ptr_phi; ctx.PhiNodes.push_back(std::make_tuple(val, BB, dest, ptr_phi, r)); ctx.SAvalues.at(idx) = val; From 7536f3508d6748fcf47139bce3845af8e3fe7ec0 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Thu, 14 Mar 2024 15:30:40 -0400 Subject: [PATCH 319/413] Default to the medium code model in x86 linux (#53391) This shouldn't have any cost on smaller images because the only thing that gets put into ldata is the system image data, which is only reference via `dlsym`. This allows for images larger than 2gb (tested by putting a 2gb array in the base image) I did not test how this might be handled in other platforms (Windows doesn't support it). (cherry picked from commit 0f04b33e01d3139ea103d9153dc442418c206b8a) --- src/aotcompile.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index 5fc9a30fc35c3..a6a1b3071fb4c 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -4,6 +4,7 @@ #include "platform.h" // target support +#include "llvm/Support/CodeGen.h" #include #include #include @@ -1498,10 +1499,11 @@ void jl_dump_native_impl(void *native_code, if (TheTriple.isOSLinux() || TheTriple.isOSFreeBSD()) { RelocModel = Reloc::PIC_; } + CodeModel::Model CMModel = CodeModel::Small; - if (TheTriple.isPPC()) { - // On PPC the small model is limited to 16bit offsets - CMModel = CodeModel::Medium; + if (TheTriple.isPPC() || (TheTriple.isX86() && TheTriple.isArch64Bit() && TheTriple.isOSLinux())) { + // On PPC the small model is limited to 16bit offsets. For very large images the small code model + CMModel = CodeModel::Medium; // isn't good enough on x86 so use Medium, it has no cost because only the image goes in .ldata } std::unique_ptr SourceTM( jl_ExecutionEngine->getTarget().createTargetMachine( @@ -1541,6 +1543,12 @@ void jl_dump_native_impl(void *native_code, GlobalVariable::ExternalLinkage, data, "jl_system_image_data"); sysdata->setAlignment(Align(64)); +#if JL_LLVM_VERSION >= 180000 + sysdata->setCodeModel(CodeModel::Large); +#else + if (TheTriple.isX86() && TheTriple.isArch64Bit() && TheTriple.isOSLinux()) + sysdata->setSection(".ldata"); +#endif addComdat(sysdata, TheTriple); Constant *len = ConstantInt::get(sysimgM.getDataLayout().getIntPtrType(Context), z->size); addComdat(new GlobalVariable(sysimgM, len->getType(), true, From f6a3c5f8d07faea45653b34a74175d7e8a46999b Mon Sep 17 00:00:00 2001 From: Kiran Pamnany Date: Wed, 20 Mar 2024 09:28:56 -0400 Subject: [PATCH 320/413] Remove some duplicates from emitted compilation traces for Julia 1.10 (#53776) When multiple threads concurrently attempt to compile the same method, `--trace-compile` could emit duplicate `precompile` statements. This small tweak eliminates one source of these duplicates. Backported to 1.10 from https://github.com/JuliaLang/julia/pull/53774. --- src/codegen-stubs.c | 2 +- src/gf.c | 5 +++-- src/jitlayers.cpp | 8 ++++++-- src/julia_internal.h | 2 +- 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/codegen-stubs.c b/src/codegen-stubs.c index de5f2a2770c04..b48ad7b98791f 100644 --- a/src/codegen-stubs.c +++ b/src/codegen-stubs.c @@ -38,7 +38,7 @@ JL_DLLEXPORT void jl_register_fptrs_fallback(uint64_t image_base, const struct _ (void)image_base; (void)fptrs; (void)linfos; (void)n; } -JL_DLLEXPORT jl_code_instance_t *jl_generate_fptr_fallback(jl_method_instance_t *mi JL_PROPAGATES_ROOT, size_t world) +JL_DLLEXPORT jl_code_instance_t *jl_generate_fptr_fallback(jl_method_instance_t *mi JL_PROPAGATES_ROOT, size_t world, int *did_compile) { return NULL; } diff --git a/src/gf.c b/src/gf.c index 1b6251078fa1f..186f8787cf519 100644 --- a/src/gf.c +++ b/src/gf.c @@ -2477,7 +2477,8 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t } } - codeinst = jl_generate_fptr(mi, world); + int did_compile = 0; + codeinst = jl_generate_fptr(mi, world, &did_compile); if (!codeinst) { jl_method_instance_t *unspec = jl_get_unspecialized_from_mi(mi); jl_code_instance_t *ucache = jl_get_method_inferred(unspec, (jl_value_t*)jl_any_type, 1, ~(size_t)0); @@ -2517,7 +2518,7 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t jl_atomic_store_release(&codeinst->invoke, ucache_invoke); jl_mi_cache_insert(mi, codeinst); } - else { + else if (did_compile) { record_precompile_statement(mi); } jl_atomic_store_relaxed(&codeinst->precompile, 1); diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index 099d74ccb37c1..d55090e161523 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -463,8 +463,10 @@ void jl_extern_c_impl(jl_value_t *declrt, jl_tupletype_t *sigt) // this compiles li and emits fptr extern "C" JL_DLLEXPORT_CODEGEN -jl_code_instance_t *jl_generate_fptr_impl(jl_method_instance_t *mi JL_PROPAGATES_ROOT, size_t world) +jl_code_instance_t *jl_generate_fptr_impl(jl_method_instance_t *mi JL_PROPAGATES_ROOT, size_t world, int *did_compile) { + if (did_compile != NULL) + *did_compile = 0; auto ct = jl_current_task; bool timed = (ct->reentrant_timing & 1) == 0; if (timed) @@ -518,6 +520,8 @@ jl_code_instance_t *jl_generate_fptr_impl(jl_method_instance_t *mi JL_PROPAGATES _jl_compile_codeinst(codeinst, src, world, *jl_ExecutionEngine->getContext(), is_recompile); if (jl_atomic_load_relaxed(&codeinst->invoke) == NULL) codeinst = NULL; + else if (did_compile != NULL) + *did_compile = 1; } else { codeinst = NULL; @@ -605,7 +609,7 @@ jl_value_t *jl_dump_method_asm_impl(jl_method_instance_t *mi, size_t world, char emit_mc, char getwrapper, const char* asm_variant, const char *debuginfo, char binary) { // printing via disassembly - jl_code_instance_t *codeinst = jl_generate_fptr(mi, world); + jl_code_instance_t *codeinst = jl_generate_fptr(mi, world, NULL); if (codeinst) { uintptr_t fptr = (uintptr_t)jl_atomic_load_acquire(&codeinst->invoke); if (getwrapper) diff --git a/src/julia_internal.h b/src/julia_internal.h index 4fa3154b765d1..85ce95b65613d 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -1661,7 +1661,7 @@ JL_DLLEXPORT uint32_t jl_crc32c(uint32_t crc, const char *buf, size_t len); // -- exports from codegen -- // -JL_DLLIMPORT jl_code_instance_t *jl_generate_fptr(jl_method_instance_t *mi JL_PROPAGATES_ROOT, size_t world); +JL_DLLIMPORT jl_code_instance_t *jl_generate_fptr(jl_method_instance_t *mi JL_PROPAGATES_ROOT, size_t world, int *did_compile); JL_DLLIMPORT void jl_generate_fptr_for_unspecialized(jl_code_instance_t *unspec); JL_DLLIMPORT void jl_generate_fptr_for_oc_wrapper(jl_code_instance_t *unspec); JL_DLLIMPORT int jl_compile_extern_c(LLVMOrcThreadSafeModuleRef llvmmod, void *params, void *sysimg, jl_value_t *declrt, jl_value_t *sigt); From 8c6595b995bcd9d303e61f873c4993e3085b82a1 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Mon, 23 Oct 2023 23:31:32 -0300 Subject: [PATCH 321/413] Add version string to sysimg triple (#51830) (cherry picked from commit abd00d09ce37c2e1a09efde6bb5a588f7b33cd72) --- src/aotcompile.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index a6a1b3071fb4c..ace4a0c270d5e 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -1493,7 +1493,13 @@ void jl_dump_native_impl(void *native_code, TheTriple.setObjectFormat(Triple::COFF); } else if (TheTriple.isOSDarwin()) { TheTriple.setObjectFormat(Triple::MachO); - TheTriple.setOS(llvm::Triple::MacOSX); + SmallString<16> Str; + Str += "macosx"; + if (TheTriple.isAArch64()) + Str += "11.0.0"; // Update this if MACOSX_VERSION_MIN changes + else + Str += "10.14.0"; + TheTriple.setOSName(Str); } Optional RelocModel; if (TheTriple.isOSLinux() || TheTriple.isOSFreeBSD()) { From e44f1ab0082a7a4276e9384092b0f513cc991837 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Thu, 21 Mar 2024 20:32:17 -0400 Subject: [PATCH 322/413] Add missing GC_POP() in emit_cfunction (#53809) ~~Apparently somewhere in codegen inside `emit_codeinst`some piece of code is relying on the implicit try catch gcstack restoring. I haven't got the analyzer working on that file yet (it has hundreds of issues and it doesn't like C++ code that much + the file is tens of thousands of lines after includes so it struggles).~~ This fixes the compileall segfault in apple-aarch64 ci. https://github.com/JuliaLang/julia/issues/53811 (cherry picked from commit 52fc79696e0b08fe1793a001daaefd1d91d59f0c) --- src/codegen.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/codegen.cpp b/src/codegen.cpp index f1e89e760aa1c..dd3376c334a37 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -6679,6 +6679,7 @@ static jl_cgval_t emit_cfunction(jl_codectx_t &ctx, jl_value_t *output_type, con if (ctx.emission_context.TargetTriple.isAArch64() || ctx.emission_context.TargetTriple.isARM() || ctx.emission_context.TargetTriple.isPPC64()) { if (nest) { emit_error(ctx, "cfunction: closures are not supported on this platform"); + JL_GC_POP(); return jl_cgval_t(); } } From 396f5d128cc48e6b3dc7526fb304cc349c1e8e1f Mon Sep 17 00:00:00 2001 From: N5N3 <2642243996@qq.com> Date: Thu, 7 Mar 2024 05:55:49 +0800 Subject: [PATCH 323/413] typeintersect: fix `UnionAll` unaliasing bug caused by innervars. (#53553) typeintersect: fix `UnionAll` unaliasing bug caused by innervars. (cherry picked from commit 56f1c8ae62c07cb940e0c4fc02d5dfac9ec73147) --- src/subtype.c | 71 ++++++++++++++++++++++++++++++++++++++----------- test/subtype.jl | 26 ++++++++++++++++++ 2 files changed, 81 insertions(+), 16 deletions(-) diff --git a/src/subtype.c b/src/subtype.c index 3d874872d6b44..10d2f19ae3209 100644 --- a/src/subtype.c +++ b/src/subtype.c @@ -872,10 +872,20 @@ static jl_unionall_t *unalias_unionall(jl_unionall_t *u, jl_stenv_t *e) // in the environment, rename to get a fresh var. JL_GC_PUSH1(&u); while (btemp != NULL) { - if (btemp->var == u->var || - // outer var can only refer to inner var if bounds changed + int aliased = btemp->var == u->var || + // outer var can only refer to inner var if bounds changed (mainly for subtyping path) (btemp->lb != btemp->var->lb && jl_has_typevar(btemp->lb, u->var)) || - (btemp->ub != btemp->var->ub && jl_has_typevar(btemp->ub, u->var))) { + (btemp->ub != btemp->var->ub && jl_has_typevar(btemp->ub, u->var)); + if (!aliased && btemp->innervars != NULL) { + for (size_t i = 0; i < jl_array_len(btemp->innervars); i++) { + jl_tvar_t *ivar = (jl_tvar_t*)jl_array_ptr_ref(btemp->innervars, i); + if (ivar == u->var) { + aliased = 1; + break; + } + } + } + if (aliased) { u = jl_rename_unionall(u); break; } @@ -2833,7 +2843,7 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind // I. Handle indirect innervars (make them behave like direct innervars). // 1) record if btemp->lb/ub has indirect innervars. - // 2) subtitute `vb->var` with `varval`/`varval` + // 2) substitute `vb->var` with `varval`/`newvar` // note: We only store the innervar in the outmost `varbinding`, // thus we must check all inner env to ensure the recording/subtitution // is complete @@ -2897,6 +2907,7 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind } envind++; } + // FIXME: innervar that depend on `ivar` should also be updated. } } } @@ -3012,7 +3023,8 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind } if (vb->innervars != NULL) { - for (size_t i = 0; i < jl_array_len(vb->innervars); i++) { + size_t len = jl_array_len(vb->innervars), count = 0; + for (size_t i = 0; i < len; i++) { jl_tvar_t *var = (jl_tvar_t*)jl_array_ptr_ref(vb->innervars, i); // the `btemp->prev` walk is only giving a sort of post-order guarantee (since we are // iterating 2 trees at once), so once we set `wrap`, there might remain other branches @@ -3026,11 +3038,45 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind if (wrap) { if (wrap->innervars == NULL) wrap->innervars = jl_alloc_array_1d(jl_array_any_type, 0); + // FIXME: `var`'s dependence should also be pushed into `wrap->innervars`. jl_array_ptr_1d_push(wrap->innervars, (jl_value_t*)var); + jl_array_ptr_set(vb->innervars, i, (jl_value_t*)NULL); + } + } + for (size_t i = 0; i < len; i++) { + jl_tvar_t *var = (jl_tvar_t*)jl_array_ptr_ref(vb->innervars, i); + if (var) { + if (count < i) + jl_array_ptr_set(vb->innervars, count, (jl_value_t*)var); + count++; + } + } + if (count != len) + jl_array_del_end(vb->innervars, len - count); + if (res != jl_bottom_type) { + while (count > 1) { + int changed = 0; + // Now need to re-sort the vb->innervars using the partial-ordering predicate `jl_has_typevar`. + // If this is slow, we could possibly switch to a simpler graph sort than this triple loop, such as Tarjan's SCC. + // But for now we use a variant on selection sort for partial-orders. + for (size_t i = 0; i < count - 1; i++) { + jl_tvar_t *vari = (jl_tvar_t*)jl_array_ptr_ref(vb->innervars, i); + for (size_t j = i+1; j < count; j++) { + jl_tvar_t *varj = (jl_tvar_t*)jl_array_ptr_ref(vb->innervars, j); + if (jl_has_typevar(varj->lb, vari) || jl_has_typevar(varj->ub, vari)) { + jl_array_ptr_set(vb->innervars, j, (jl_value_t*)vari); + jl_array_ptr_set(vb->innervars, i, (jl_value_t*)varj); + changed = 1; + break; + } + } + if (changed) break; + } + if (!changed) break; } - else if (res != jl_bottom_type) { - if (jl_has_typevar(res, var)) - res = jl_type_unionall((jl_tvar_t*)var, res); + for (size_t i = 0; i < count; i++) { + jl_tvar_t *var = (jl_tvar_t*)jl_array_ptr_ref(vb->innervars, i); + res = jl_type_unionall(var, res); } } } @@ -3050,9 +3096,6 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind static jl_value_t *intersect_unionall_(jl_value_t *t, jl_unionall_t *u, jl_stenv_t *e, int8_t R, int param, jl_varbinding_t *vb) { jl_varbinding_t *btemp = e->vars; - // if the var for this unionall (based on identity) already appears somewhere - // in the environment, rename to get a fresh var. - // TODO: might need to look inside types in btemp->lb and btemp->ub int envsize = 0; while (btemp != NULL) { envsize++; @@ -3060,13 +3103,9 @@ static jl_value_t *intersect_unionall_(jl_value_t *t, jl_unionall_t *u, jl_stenv vb->limited = 1; return t; } - if (btemp->var == u->var || btemp->lb == (jl_value_t*)u->var || - btemp->ub == (jl_value_t*)u->var) { - u = jl_rename_unionall(u); - break; - } btemp = btemp->prev; } + u = unalias_unionall(u, e); JL_GC_PUSH1(&u); vb->var = u->var; e->vars = vb; diff --git a/test/subtype.jl b/test/subtype.jl index cd856b0b7a2ff..3245e0583cda8 100644 --- a/test/subtype.jl +++ b/test/subtype.jl @@ -2563,6 +2563,32 @@ let a = Tuple{Union{Nothing, Type{Pair{T1}} where T1}} @test !Base.has_free_typevars(typeintersect(a, b)) end +#issue 53366 +let Y = Tuple{Val{T}, Val{Val{T}}} where T + A = Val{Val{T}} where T + T = TypeVar(:T, UnionAll(A.var, Val{A.var})) + B = UnionAll(T, Val{T}) + X = Tuple{A, B} + @testintersect(X, Y, !Union{}) +end + +#issue 53621 (requires assertions enabled) +abstract type A53621{T, R, C, U} <: AbstractSet{Union{C, U}} end +struct T53621{T, R<:Real, C, U} <: A53621{T, R, C, U} end +let + U = TypeVar(:U) + C = TypeVar(:C) + T = TypeVar(:T) + R = TypeVar(:R) + CC = TypeVar(:CC, Union{C, U}) + UU = TypeVar(:UU, Union{C, U}) + S1 = UnionAll(T, UnionAll(R, Type{UnionAll(C, UnionAll(U, T53621{T, R, C, U}))})) + S2 = UnionAll(C, UnionAll(U, UnionAll(CC, UnionAll(UU, UnionAll(T, UnionAll(R, T53621{T, R, CC, UU})))))) + S = Tuple{S1, S2} + T = Tuple{Type{T53621{T, R}}, AbstractSet{T}} where {T, R} + @testintersect(S, T, !Union{}) +end + #issue 53371 struct T53371{A,B,C,D,E} end S53371{A} = Union{Int, <:A} From c2d480c5059359142c77e292a363288b1de3fb58 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Mon, 11 Mar 2024 11:44:28 +0530 Subject: [PATCH 324/413] Fix linear indexing for ReshapedArray if the parent has offset axes (#41232) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This PR fixes ```julia julia> r = reshape(Base.IdentityUnitRange(3:4), 2, 1) 2×1 reshape(::Base.IdentityUnitRange{UnitRange{Int64}}, 2, 1) with eltype Int64: 3 4 julia> collect(r) == r false julia> collect(r) 2×1 Matrix{Int64}: 3258125826116431922 3688512103538242609 ``` After this PR, ```julia julia> collect(r) 2×1 Matrix{Int64}: 3 4 ``` (cherry picked from commit 6e3044d46acc90b7ba948bef7bd0c276f5817870) --- base/reshapedarray.jl | 9 ++++++--- test/abstractarray.jl | 30 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/base/reshapedarray.jl b/base/reshapedarray.jl index bcb47a9359392..70fb18b511710 100644 --- a/base/reshapedarray.jl +++ b/base/reshapedarray.jl @@ -228,7 +228,8 @@ offset_if_vec(i::Integer, axs::Tuple) = i @inline function isassigned(A::ReshapedArrayLF, index::Int) @boundscheck checkbounds(Bool, A, index) || return false - @inbounds ret = isassigned(parent(A), index) + indexparent = index - firstindex(A) + firstindex(parent(A)) + @inbounds ret = isassigned(parent(A), indexparent) ret end @inline function isassigned(A::ReshapedArray{T,N}, indices::Vararg{Int, N}) where {T,N} @@ -241,7 +242,8 @@ end @inline function getindex(A::ReshapedArrayLF, index::Int) @boundscheck checkbounds(A, index) - @inbounds ret = parent(A)[index] + indexparent = index - firstindex(A) + firstindex(parent(A)) + @inbounds ret = parent(A)[indexparent] ret end @inline function getindex(A::ReshapedArray{T,N}, indices::Vararg{Int,N}) where {T,N} @@ -265,7 +267,8 @@ end @inline function setindex!(A::ReshapedArrayLF, val, index::Int) @boundscheck checkbounds(A, index) - @inbounds parent(A)[index] = val + indexparent = index - firstindex(A) + firstindex(parent(A)) + @inbounds parent(A)[indexparent] = val val end @inline function setindex!(A::ReshapedArray{T,N}, val, indices::Vararg{Int,N}) where {T,N} diff --git a/test/abstractarray.jl b/test/abstractarray.jl index 6a60dac2e81e1..9691db88b6e99 100644 --- a/test/abstractarray.jl +++ b/test/abstractarray.jl @@ -1854,3 +1854,33 @@ f45952(x) = [x;;] @test_throws "invalid index: true of type Bool" isassigned(A, 1, true) @test_throws "invalid index: true of type Bool" isassigned(A, true) end + +@testset "reshape for offset arrays" begin + p = Base.IdentityUnitRange(3:4) + r = reshape(p, :, 1) + @test r[eachindex(r)] == UnitRange(p) + @test collect(r) == r + + struct ZeroBasedArray{T,N,A<:AbstractArray{T,N}} <: AbstractArray{T,N} + a :: A + function ZeroBasedArray(a::AbstractArray) + Base.require_one_based_indexing(a) + new{eltype(a), ndims(a), typeof(a)}(a) + end + end + Base.parent(z::ZeroBasedArray) = z.a + Base.size(z::ZeroBasedArray) = size(parent(z)) + Base.axes(z::ZeroBasedArray) = map(x -> Base.IdentityUnitRange(0:x - 1), size(parent(z))) + Base.getindex(z::ZeroBasedArray{<:Any, N}, i::Vararg{Int,N}) where {N} = parent(z)[map(x -> x + 1, i)...] + Base.setindex!(z::ZeroBasedArray{<:Any, N}, val, i::Vararg{Int,N}) where {N} = parent(z)[map(x -> x + 1, i)...] = val + + z = ZeroBasedArray(collect(1:4)) + r2 = reshape(z, :, 1) + @test r2[CartesianIndices(r2)] == r2[LinearIndices(r2)] + r2[firstindex(r2)] = 34 + @test z[0] == 34 + r2[eachindex(r2)] = r2 .* 2 + for (i, j) in zip(eachindex(r2), eachindex(z)) + @test r2[i] == z[j] + end +end From 2baebfe42e7db0de6eeec5ec764af4d243feac9c Mon Sep 17 00:00:00 2001 From: Kiran Pamnany Date: Wed, 10 Apr 2024 05:06:47 -0400 Subject: [PATCH 325/413] Fix the OpenBLAS checksum for Julia 1.10 (#54017) Closes https://github.com/JuliaLang/julia/issues/54015. `diff -r` on the source tree for the original archive vs. the archive that gets downloaded now shows no changes. --- deps/checksums/openblas | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/checksums/openblas b/deps/checksums/openblas index dd7c493c22941..0d176cafe7aca 100644 --- a/deps/checksums/openblas +++ b/deps/checksums/openblas @@ -91,4 +91,4 @@ OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/03099f50dc81427 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-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/sha512/12235f0459469b483a393844c228be5ad4bc60575bbe4b3238198f2480b7b457e4b0609730ce6d99530bb82e1d16fdd2338ceed6d28c952e6fff0da7f571f863 +openblas-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/sha512/3d1a096a738aa70c6c6c15acb9ac7fb77f3c8f9684c7f22dac1ceb7921c85131e3a7e55c893b6aed01f85f1bdff124d0b3a3fae3ca2dc5c0aae192c38c012417 From feceefe1417304feb55b35201dc70cfdb7a3a628 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Fri, 5 Apr 2024 23:18:05 +0530 Subject: [PATCH 326/413] `LazyString` in `LinearAlgebra.checksquare` error message (#53961) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reduces dynamic dispatch and makes JET happier. Testing on v1.11: ```julia julia> import LinearAlgebra: checksquare julia> using JET julia> @report_opt checksquare(rand(2,2), rand(2,2)) ═════ 4 possible errors found ═════ ┌ checksquare(::Matrix{Float64}, ::Matrix{Float64}) @ LinearAlgebra /cache/build/builder-amdci4-1/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/LinearAlgebra/src/LinearAlgebra.jl:307 │┌ string(::String, ::Tuple{Int64, Int64}) @ Base ./strings/io.jl:189 ││┌ print_to_string(::String, ::Tuple{Int64, Int64}) @ Base ./strings/io.jl:150 │││┌ _unsafe_take!(io::IOBuffer) @ Base ./iobuffer.jl:494 ││││┌ wrap(::Type{Array}, m::MemoryRef{UInt8}, l::Int64) @ Base ./array.jl:3101 │││││ failed to optimize due to recursion: wrap(::Type{Array}, ::MemoryRef{UInt8}, ::Int64) ││││└──────────────────── │││┌ print_to_string(::String, ::Vararg{Any}) @ Base ./strings/io.jl:143 ││││ runtime dispatch detected: Base._str_sizehint(%17::Any)::Int64 │││└──────────────────── │││┌ print_to_string(::String, ::Vararg{Any}) @ Base ./strings/io.jl:148 ││││ runtime dispatch detected: print(%59::IOBuffer, %97::Any)::Any │││└──────────────────── │││┌ string(::String, ::Int64, ::String, ::Tuple{Int64}, ::String, ::Int64, ::String, ::Int64, ::String) @ Base ./strings/io.jl:189 ││││ failed to optimize due to recursion: string(::String, ::Int64, ::String, ::Tuple{Int64}, ::String, ::Int64, ::String, ::Int64, ::String) │││└──────────────────── julia> function checksquare(A...) # This PR sizes = Int[] for a in A size(a,1)==size(a,2) || throw(DimensionMismatch(lazy"matrix is not square: dimensions are $(size(a))")) push!(sizes, size(a,1)) end return sizes end checksquare (generic function with 2 methods) julia> @report_opt checksquare(rand(2,2), rand(2,2)) No errors detected ``` (cherry picked from commit d505c8cdafa79387139f6cf3bf3aa43f0118c087) --- stdlib/LinearAlgebra/src/LinearAlgebra.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/LinearAlgebra/src/LinearAlgebra.jl b/stdlib/LinearAlgebra/src/LinearAlgebra.jl index 494572b1e8dd8..7b3ff8f0db53d 100644 --- a/stdlib/LinearAlgebra/src/LinearAlgebra.jl +++ b/stdlib/LinearAlgebra/src/LinearAlgebra.jl @@ -238,14 +238,14 @@ julia> LinearAlgebra.checksquare(A, B) """ function checksquare(A) m,n = size(A) - m == n || throw(DimensionMismatch("matrix is not square: dimensions are $(size(A))")) + m == n || throw(DimensionMismatch(lazy"matrix is not square: dimensions are $(size(A))")) m end function checksquare(A...) sizes = Int[] for a in A - size(a,1)==size(a,2) || throw(DimensionMismatch("matrix is not square: dimensions are $(size(a))")) + size(a,1)==size(a,2) || throw(DimensionMismatch(lazy"matrix is not square: dimensions are $(size(a))")) push!(sizes, size(a,1)) end return sizes From 8741c1a4c0d2c9cc4d10edd4c6536c590f386f00 Mon Sep 17 00:00:00 2001 From: jam-khan Date: Thu, 8 Feb 2024 06:52:35 -0500 Subject: [PATCH 327/413] Added docstring for Artifacts.jl (#52913) This is a part of issue #52725. --------- (cherry picked from commit 15e2af2c917fb6f343fc9973b3fc633e4b6efaea) Co-Authored-By: Steven G. Johnson Co-Authored-By: Max Horn --- stdlib/Artifacts/src/Artifacts.jl | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/stdlib/Artifacts/src/Artifacts.jl b/stdlib/Artifacts/src/Artifacts.jl index 5daf994bfbf10..6b406201f11d6 100644 --- a/stdlib/Artifacts/src/Artifacts.jl +++ b/stdlib/Artifacts/src/Artifacts.jl @@ -1,5 +1,11 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license +""" +Artifacts.jl is a Julia module that is used for managing and accessing +artifacts in Julia packages. Artifacts are containers for +platform-specific binaries, datasets, text, or any other kind of data +that would be convenient to place within an immutable, life-cycled datastore. +""" module Artifacts import Base: get, SHA1 From 756c16a8f498323290b5ab122625c68fa154e62f Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Thu, 11 Apr 2024 16:01:20 -0400 Subject: [PATCH 328/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20Pkg=20stdlib=20from=2070525539d=20to=20f487626b?= =?UTF-8?q?0=20(#54049)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stdlib: Pkg URL: https://github.com/JuliaLang/Pkg.jl.git Stdlib branch: release-1.10 Julia branch: backports-release-1.10 Old commit: 70525539d New commit: f487626b0 Julia version: 1.10.2 Pkg version: 1.10.0(Does not match) Bump invoked by: @IanButterworth Powered by: [BumpStdlibs.jl](https://github.com/JuliaLang/BumpStdlibs.jl) Diff: https://github.com/JuliaLang/Pkg.jl/compare/70525539d3157891445abe806962f780f64143cd...f487626b090b91493828cbcde30eed96fb9f8e8f ``` $ git log --oneline 70525539d..f487626b0 f487626b0 Merge pull request #3868 from JuliaLang/backports-release-1.10 e4a6078a2 prune manifest after the set of some deps have been "demoted" to weakdeps (#3864) 72ba57759 Report failures to download artifacts as failures (#3860) 4ee732f1b why: show more when package is both a direct and indirect dep (#3771) ``` Co-authored-by: Dilum Aluthge --- .../Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/md5 | 1 - .../Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/sha512 | 1 - .../Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/md5 | 1 + .../Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/sha512 | 1 + stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/sha512 create mode 100644 deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/md5 create mode 100644 deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/sha512 diff --git a/deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/md5 b/deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/md5 deleted file mode 100644 index 59643e2d8da35..0000000000000 --- a/deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -8a7db649c8ee8f4506925d1364af66ce diff --git a/deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/sha512 b/deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/sha512 deleted file mode 100644 index eb8207f429689..0000000000000 --- a/deps/checksums/Pkg-70525539d3157891445abe806962f780f64143cd.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -53c74a0630e1e57e7cf1dac0de84297de6a623ff913affbaf2a887c5b6ea68782985dff5f453a4fddc662b12e8b3a11e61a2a29bb72afde3bbc5d1f5c00bb0bd diff --git a/deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/md5 b/deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/md5 new file mode 100644 index 0000000000000..87f249089c1e2 --- /dev/null +++ b/deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/md5 @@ -0,0 +1 @@ +9ebc3751d48af21e9f932cfcb3b18781 diff --git a/deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/sha512 b/deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/sha512 new file mode 100644 index 0000000000000..c41c5df61579f --- /dev/null +++ b/deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/sha512 @@ -0,0 +1 @@ +adeedc81fee8360d427e3870d7b7861d0e653128c59c877ab1173284f19506ff2beeea063281ced3f5411be6a25dcca7c566e16eba21b7e91bbdcb2f5de8e268 diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index c3a452c1bd32f..2d2683e9e9bb1 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = 70525539d3157891445abe806962f780f64143cd +PKG_SHA1 = f487626b090b91493828cbcde30eed96fb9f8e8f PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From a8eedc69cc1e3e6a60ca9fed2ebb192cf8b9dc61 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Thu, 11 Apr 2024 16:04:47 -0400 Subject: [PATCH 329/413] switch Statistics branch to release-1.10 --- stdlib/Statistics.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/Statistics.version b/stdlib/Statistics.version index 336d7c731bd47..ba6a48e8aaac0 100644 --- a/stdlib/Statistics.version +++ b/stdlib/Statistics.version @@ -1,4 +1,4 @@ -STATISTICS_BRANCH = master +STATISTICS_BRANCH = release-1.10 STATISTICS_SHA1 = d147f9253aa0f2f71be9c3fed8d51c2215410408 STATISTICS_GIT_URL := https://github.com/JuliaStats/Statistics.jl.git STATISTICS_TAR_URL = https://api.github.com/repos/JuliaStats/Statistics.jl/tarball/$1 From ba33b120d8ae5f1b6beda17f040a299535611d09 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Thu, 11 Apr 2024 16:06:42 -0400 Subject: [PATCH 330/413] switch Tar branch to release-1.10 --- stdlib/Tar.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/Tar.version b/stdlib/Tar.version index 44e829b5fea54..09878004d6cd3 100644 --- a/stdlib/Tar.version +++ b/stdlib/Tar.version @@ -1,4 +1,4 @@ -TAR_BRANCH = master +TAR_BRANCH = release-1.10 TAR_SHA1 = ff55460f4d329949661a33e6c8168ce6d890676c TAR_GIT_URL := https://github.com/JuliaIO/Tar.jl.git TAR_TAR_URL = https://api.github.com/repos/JuliaIO/Tar.jl/tarball/$1 From e3865548895c28bdb7f2faadf39d1492be63da68 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Thu, 11 Apr 2024 16:09:16 -0400 Subject: [PATCH 331/413] switch ArgTools branch to release-1.10 --- stdlib/ArgTools.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/ArgTools.version b/stdlib/ArgTools.version index 0ae273bb18db6..4b573703df77a 100644 --- a/stdlib/ArgTools.version +++ b/stdlib/ArgTools.version @@ -1,4 +1,4 @@ -ARGTOOLS_BRANCH = master +ARGTOOLS_BRANCH = release-1.10 ARGTOOLS_SHA1 = 08b11b2707593d4d7f92e5f1b9dba7668285ff82 ARGTOOLS_GIT_URL := https://github.com/JuliaIO/ArgTools.jl.git ARGTOOLS_TAR_URL = https://api.github.com/repos/JuliaIO/ArgTools.jl/tarball/$1 From 32b0613b4ac3d0004af1862707fbafd796476b46 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Fri, 12 Apr 2024 08:44:24 -0400 Subject: [PATCH 332/413] switch SHA branch to release-0.7 --- stdlib/SHA.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/SHA.version b/stdlib/SHA.version index f2242a336c6fe..2892b917300ae 100644 --- a/stdlib/SHA.version +++ b/stdlib/SHA.version @@ -1,4 +1,4 @@ -SHA_BRANCH = master +SHA_BRANCH = release-0.7 SHA_SHA1 = 2d1f84e6f8417a1a368de48318640d948b023e7a SHA_GIT_URL := https://github.com/JuliaCrypto/SHA.jl.git SHA_TAR_URL = https://api.github.com/repos/JuliaCrypto/SHA.jl/tarball/$1 From 1bf60fe76bc5046fcb3a9589ecc70a66a82e2d38 Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Fri, 12 Apr 2024 08:48:57 -0400 Subject: [PATCH 333/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20SHA=20stdlib=20from=202d1f84e=20to=20e1af7dd=20?= =?UTF-8?q?(#54063)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stdlib: SHA URL: https://github.com/JuliaCrypto/SHA.jl.git Stdlib branch: release-0.7 Julia branch: backports-release-1.10 Old commit: 2d1f84e New commit: e1af7dd Julia version: 1.10.2 SHA version: 0.7.0(Does not match) Bump invoked by: @IanButterworth Powered by: [BumpStdlibs.jl](https://github.com/JuliaLang/BumpStdlibs.jl) Diff: https://github.com/JuliaCrypto/SHA.jl/compare/2d1f84e6f8417a1a368de48318640d948b023e7a...e1af7dd0863dee14a83550faf4b6e08971993ce8 ``` $ git log --oneline 2d1f84e..e1af7dd e1af7dd Hardcode doc edit backlink aaf2df6 [test] fix typo 0f70e8b [test] test `AbstractString` input 335322a [test] test branch in `digest!` 5992826 [test] Testing branch within the `HMAC_CTX` constructor 5e3a676 Protect against re-using digested context ``` Co-authored-by: Dilum Aluthge --- .../SHA-2d1f84e6f8417a1a368de48318640d948b023e7a.tar.gz/md5 | 1 - .../SHA-2d1f84e6f8417a1a368de48318640d948b023e7a.tar.gz/sha512 | 1 - .../SHA-e1af7dd0863dee14a83550faf4b6e08971993ce8.tar.gz/md5 | 1 + .../SHA-e1af7dd0863dee14a83550faf4b6e08971993ce8.tar.gz/sha512 | 1 + stdlib/SHA.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/SHA-2d1f84e6f8417a1a368de48318640d948b023e7a.tar.gz/md5 delete mode 100644 deps/checksums/SHA-2d1f84e6f8417a1a368de48318640d948b023e7a.tar.gz/sha512 create mode 100644 deps/checksums/SHA-e1af7dd0863dee14a83550faf4b6e08971993ce8.tar.gz/md5 create mode 100644 deps/checksums/SHA-e1af7dd0863dee14a83550faf4b6e08971993ce8.tar.gz/sha512 diff --git a/deps/checksums/SHA-2d1f84e6f8417a1a368de48318640d948b023e7a.tar.gz/md5 b/deps/checksums/SHA-2d1f84e6f8417a1a368de48318640d948b023e7a.tar.gz/md5 deleted file mode 100644 index f682cf3518658..0000000000000 --- a/deps/checksums/SHA-2d1f84e6f8417a1a368de48318640d948b023e7a.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -de53629eb0b1ce98ac6b245bdbf14e9d diff --git a/deps/checksums/SHA-2d1f84e6f8417a1a368de48318640d948b023e7a.tar.gz/sha512 b/deps/checksums/SHA-2d1f84e6f8417a1a368de48318640d948b023e7a.tar.gz/sha512 deleted file mode 100644 index 870098ef7aada..0000000000000 --- a/deps/checksums/SHA-2d1f84e6f8417a1a368de48318640d948b023e7a.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -71cdc58b03cc4f42f8c4b9c2353d6f94d77b4ac5c9d374387d435c57ba85e966f3be4e8c8447b34e184cb8e665c42b3cd2c9d9742c86f7fb5c71a85df5087966 diff --git a/deps/checksums/SHA-e1af7dd0863dee14a83550faf4b6e08971993ce8.tar.gz/md5 b/deps/checksums/SHA-e1af7dd0863dee14a83550faf4b6e08971993ce8.tar.gz/md5 new file mode 100644 index 0000000000000..13396f419845b --- /dev/null +++ b/deps/checksums/SHA-e1af7dd0863dee14a83550faf4b6e08971993ce8.tar.gz/md5 @@ -0,0 +1 @@ +75f38189d82446a19495d79daf5e2ed8 diff --git a/deps/checksums/SHA-e1af7dd0863dee14a83550faf4b6e08971993ce8.tar.gz/sha512 b/deps/checksums/SHA-e1af7dd0863dee14a83550faf4b6e08971993ce8.tar.gz/sha512 new file mode 100644 index 0000000000000..de4244eea7021 --- /dev/null +++ b/deps/checksums/SHA-e1af7dd0863dee14a83550faf4b6e08971993ce8.tar.gz/sha512 @@ -0,0 +1 @@ +f3bddf45ae180a00f51d04b5307b993220be7ddaef01cd36bc921a19e70c8268f302d39dd08b8fe7367763fde61c05fb9dab80d5374cc029262ce3640bab5037 diff --git a/stdlib/SHA.version b/stdlib/SHA.version index 2892b917300ae..f43d0a118e540 100644 --- a/stdlib/SHA.version +++ b/stdlib/SHA.version @@ -1,4 +1,4 @@ SHA_BRANCH = release-0.7 -SHA_SHA1 = 2d1f84e6f8417a1a368de48318640d948b023e7a +SHA_SHA1 = e1af7dd0863dee14a83550faf4b6e08971993ce8 SHA_GIT_URL := https://github.com/JuliaCrypto/SHA.jl.git SHA_TAR_URL = https://api.github.com/repos/JuliaCrypto/SHA.jl/tarball/$1 From ed943193f59461f3e43a7967572cfd3dece329b7 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Fri, 12 Apr 2024 08:56:09 -0400 Subject: [PATCH 334/413] switch SparseArrays branch to release-1.10 --- stdlib/SparseArrays.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/SparseArrays.version b/stdlib/SparseArrays.version index 8ff55582ca9df..803b6b4c24b15 100644 --- a/stdlib/SparseArrays.version +++ b/stdlib/SparseArrays.version @@ -1,4 +1,4 @@ -SPARSEARRAYS_BRANCH = main +SPARSEARRAYS_BRANCH = release-1.10 SPARSEARRAYS_SHA1 = 279b363ca8d3129d4742903d37c8b11545fa08a2 SPARSEARRAYS_GIT_URL := https://github.com/JuliaSparse/SparseArrays.jl.git SPARSEARRAYS_TAR_URL = https://api.github.com/repos/JuliaSparse/SparseArrays.jl/tarball/$1 From 3b324318bb03492f9f29f57c9f470c114cb2ee29 Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Fri, 12 Apr 2024 09:10:23 -0400 Subject: [PATCH 335/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20NetworkOptions=20stdlib=20from=200bd3345=20to?= =?UTF-8?q?=208eec5cb=20(#54065)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stdlib: NetworkOptions URL: https://github.com/JuliaLang/NetworkOptions.jl.git Stdlib branch: master Julia branch: backports-release-1.10 Old commit: 0bd3345 New commit: 8eec5cb Julia version: 1.10.2 NetworkOptions version: 1.2.0(Does not match) Bump invoked by: @IanButterworth Powered by: [BumpStdlibs.jl](https://github.com/JuliaLang/BumpStdlibs.jl) Diff: https://github.com/JuliaLang/NetworkOptions.jl/compare/0bd33455cf3c77f2f87bf64167b64611dc5ff128...8eec5cb0acec4591e6db3c017f7499426cd8e352 ``` $ git log --oneline 0bd3345..8eec5cb 8eec5cb Hardcode doc edit backlink (#32) ``` Co-authored-by: Dilum Aluthge --- .../md5 | 1 - .../sha512 | 1 - .../md5 | 1 + .../sha512 | 1 + stdlib/NetworkOptions.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/md5 delete mode 100644 deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/sha512 create mode 100644 deps/checksums/NetworkOptions-8eec5cb0acec4591e6db3c017f7499426cd8e352.tar.gz/md5 create mode 100644 deps/checksums/NetworkOptions-8eec5cb0acec4591e6db3c017f7499426cd8e352.tar.gz/sha512 diff --git a/deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/md5 b/deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/md5 deleted file mode 100644 index 36c148c3deeba..0000000000000 --- a/deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -193abc96d1ea3a83096ba8401acbc5fa diff --git a/deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/sha512 b/deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/sha512 deleted file mode 100644 index 26f1e116e4e6f..0000000000000 --- a/deps/checksums/NetworkOptions-0bd33455cf3c77f2f87bf64167b64611dc5ff128.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -17f7567be44c2ff3e2c567311cd716191127d0d0f9a4a226d7c06003a5b455343dd8e308032f942bb0a5b95e4b5defc530cc2cda9dfff482aab6f688080c20e7 diff --git a/deps/checksums/NetworkOptions-8eec5cb0acec4591e6db3c017f7499426cd8e352.tar.gz/md5 b/deps/checksums/NetworkOptions-8eec5cb0acec4591e6db3c017f7499426cd8e352.tar.gz/md5 new file mode 100644 index 0000000000000..7f391aac1e64d --- /dev/null +++ b/deps/checksums/NetworkOptions-8eec5cb0acec4591e6db3c017f7499426cd8e352.tar.gz/md5 @@ -0,0 +1 @@ +d2ccb9b91b0700bfb5ac7c01a03b4322 diff --git a/deps/checksums/NetworkOptions-8eec5cb0acec4591e6db3c017f7499426cd8e352.tar.gz/sha512 b/deps/checksums/NetworkOptions-8eec5cb0acec4591e6db3c017f7499426cd8e352.tar.gz/sha512 new file mode 100644 index 0000000000000..b7db226225d75 --- /dev/null +++ b/deps/checksums/NetworkOptions-8eec5cb0acec4591e6db3c017f7499426cd8e352.tar.gz/sha512 @@ -0,0 +1 @@ +051223ab45dce692c0bbea0755cc0057bb3322a40659c092007799932a10cc23e80ee6b88fa0d86f28af5e7fe5a455cc9fb8267c76af0cd2b425cf2718629e91 diff --git a/stdlib/NetworkOptions.version b/stdlib/NetworkOptions.version index 7f93eadcf7264..221b9b934f1a1 100644 --- a/stdlib/NetworkOptions.version +++ b/stdlib/NetworkOptions.version @@ -1,4 +1,4 @@ NETWORKOPTIONS_BRANCH = master -NETWORKOPTIONS_SHA1 = 0bd33455cf3c77f2f87bf64167b64611dc5ff128 +NETWORKOPTIONS_SHA1 = 8eec5cb0acec4591e6db3c017f7499426cd8e352 NETWORKOPTIONS_GIT_URL := https://github.com/JuliaLang/NetworkOptions.jl.git NETWORKOPTIONS_TAR_URL = https://api.github.com/repos/JuliaLang/NetworkOptions.jl/tarball/$1 From 97b0571cbd74cfc7959fe065b5dfc47d0636fc4e Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Fri, 12 Apr 2024 09:17:59 -0400 Subject: [PATCH 336/413] switch JuliaSyntax branch to release-0.4 --- deps/JuliaSyntax.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/JuliaSyntax.version b/deps/JuliaSyntax.version index 7f124715024ce..e7c119e7442a6 100644 --- a/deps/JuliaSyntax.version +++ b/deps/JuliaSyntax.version @@ -1,4 +1,4 @@ -JULIASYNTAX_BRANCH = main +JULIASYNTAX_BRANCH = release-0.4 JULIASYNTAX_SHA1 = 4f1731d6ce7c2465fc21ea245110b7a39f34658a JULIASYNTAX_GIT_URL := https://github.com/JuliaLang/JuliaSyntax.jl.git JULIASYNTAX_TAR_URL = https://api.github.com/repos/JuliaLang/JuliaSyntax.jl/tarball/$1 From b05a4f29776a043f36cb44c7f587793f8d95ded5 Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Mon, 15 Apr 2024 09:03:38 +0200 Subject: [PATCH 337/413] Revert "`LazyString` in `LinearAlgebra.checksquare` error message (#53961)" This reverts commit feceefe1417304feb55b35201dc70cfdb7a3a628. --- stdlib/LinearAlgebra/src/LinearAlgebra.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/LinearAlgebra/src/LinearAlgebra.jl b/stdlib/LinearAlgebra/src/LinearAlgebra.jl index 7b3ff8f0db53d..494572b1e8dd8 100644 --- a/stdlib/LinearAlgebra/src/LinearAlgebra.jl +++ b/stdlib/LinearAlgebra/src/LinearAlgebra.jl @@ -238,14 +238,14 @@ julia> LinearAlgebra.checksquare(A, B) """ function checksquare(A) m,n = size(A) - m == n || throw(DimensionMismatch(lazy"matrix is not square: dimensions are $(size(A))")) + m == n || throw(DimensionMismatch("matrix is not square: dimensions are $(size(A))")) m end function checksquare(A...) sizes = Int[] for a in A - size(a,1)==size(a,2) || throw(DimensionMismatch(lazy"matrix is not square: dimensions are $(size(a))")) + size(a,1)==size(a,2) || throw(DimensionMismatch("matrix is not square: dimensions are $(size(a))")) push!(sizes, size(a,1)) end return sizes From 5cf5146d8f29fd770f9fd44f870c6673bf350295 Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Tue, 16 Apr 2024 10:59:39 +0200 Subject: [PATCH 338/413] Revert "Default to the medium code model in x86 linux (#53391)" This reverts commit 7536f3508d6748fcf47139bce3845af8e3fe7ec0. --- src/aotcompile.cpp | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index ace4a0c270d5e..e2a2fb20b419f 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -4,7 +4,6 @@ #include "platform.h" // target support -#include "llvm/Support/CodeGen.h" #include #include #include @@ -1505,11 +1504,10 @@ void jl_dump_native_impl(void *native_code, if (TheTriple.isOSLinux() || TheTriple.isOSFreeBSD()) { RelocModel = Reloc::PIC_; } - CodeModel::Model CMModel = CodeModel::Small; - if (TheTriple.isPPC() || (TheTriple.isX86() && TheTriple.isArch64Bit() && TheTriple.isOSLinux())) { - // On PPC the small model is limited to 16bit offsets. For very large images the small code model - CMModel = CodeModel::Medium; // isn't good enough on x86 so use Medium, it has no cost because only the image goes in .ldata + if (TheTriple.isPPC()) { + // On PPC the small model is limited to 16bit offsets + CMModel = CodeModel::Medium; } std::unique_ptr SourceTM( jl_ExecutionEngine->getTarget().createTargetMachine( @@ -1549,12 +1547,6 @@ void jl_dump_native_impl(void *native_code, GlobalVariable::ExternalLinkage, data, "jl_system_image_data"); sysdata->setAlignment(Align(64)); -#if JL_LLVM_VERSION >= 180000 - sysdata->setCodeModel(CodeModel::Large); -#else - if (TheTriple.isX86() && TheTriple.isArch64Bit() && TheTriple.isOSLinux()) - sysdata->setSection(".ldata"); -#endif addComdat(sysdata, TheTriple); Constant *len = ConstantInt::get(sysimgM.getDataLayout().getIntPtrType(Context), z->size); addComdat(new GlobalVariable(sysimgM, len->getType(), true, From 61adee2b101b61eeb64d91c08cd7c1f750834e6c Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 23 Apr 2024 10:12:59 +0200 Subject: [PATCH 339/413] Backport 1.10: Add inventory writing via DocumenterInventoryWritingBackport (#54199) (cherry picked from commit 2d1442fc29507e2d152f5f1ef34296eb41cffad2) Co-authored-by: Michael Goerz --- doc/Manifest.toml | 60 +++++++++++++++++++++++++++++++++++++++++++---- doc/Project.toml | 1 + doc/make.jl | 1 + 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/doc/Manifest.toml b/doc/Manifest.toml index cf50a1d41ddbd..be49a18729b80 100644 --- a/doc/Manifest.toml +++ b/doc/Manifest.toml @@ -1,17 +1,26 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.9.0-DEV" +julia_version = "1.10.2" manifest_format = "2.0" -project_hash = "e0c77beb18dc1f6cce661ebd60658c0c1a77390f" +project_hash = "94441cf327e3c2e23c216d2e7b11c5c833d323b9" [[deps.ANSIColoredPrinters]] git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c" uuid = "a4c015fc-c6ff-483c-b24f-f7ea428134e9" version = "0.0.1" +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.4" + [[deps.Dates]] deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" @@ -28,6 +37,12 @@ git-tree-sha1 = "6030186b00a38e9d0434518627426570aac2ef95" uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4" version = "0.27.23" +[[deps.DocumenterInventoryWritingBackport]] +deps = ["CodecZlib", "Documenter", "TOML"] +git-tree-sha1 = "1b89024e375353961bb98b9818b44a4e38961cc4" +uuid = "195adf08-069f-4855-af3e-8933a2cdae94" +version = "0.1.0" + [[deps.IOCapture]] deps = ["Logging", "Random"] git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a" @@ -45,9 +60,22 @@ uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" version = "0.21.3" [[deps.LibGit2]] -deps = ["Base64", "NetworkOptions", "Printf", "SHA"] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" @@ -55,6 +83,11 @@ uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+1" + [[deps.Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" @@ -77,7 +110,7 @@ deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[deps.Random]] -deps = ["SHA", "Serialization"] +deps = ["SHA"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" [[deps.SHA]] @@ -90,9 +123,28 @@ uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + [[deps.Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +[[deps.TranscodingStreams]] +git-tree-sha1 = "3caa21522e7efac1ba21834a03734c57b4611c7e" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.10.4" +weakdeps = ["Random", "Test"] + + [deps.TranscodingStreams.extensions] + TestExt = ["Test", "Random"] + [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" diff --git a/doc/Project.toml b/doc/Project.toml index dfa65cd107d06..2f1addd369506 100644 --- a/doc/Project.toml +++ b/doc/Project.toml @@ -1,2 +1,3 @@ [deps] Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" +DocumenterInventoryWritingBackport = "195adf08-069f-4855-af3e-8933a2cdae94" diff --git a/doc/make.jl b/doc/make.jl index 6bbc94b925b60..917c3989bc254 100644 --- a/doc/make.jl +++ b/doc/make.jl @@ -8,6 +8,7 @@ using Pkg Pkg.instantiate() using Documenter +using DocumenterInventoryWritingBackport baremodule GenStdLib end From 5308c26608ffc887f04da59364461012465124b6 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Mon, 29 Apr 2024 15:04:22 +0200 Subject: [PATCH 340/413] Backport GC typo fix to 1.10 (#54299) Co-authored-by: Diogo Netto <61364108+d-netto@users.noreply.github.com> --- src/gc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gc.c b/src/gc.c index 0a456eced511e..d577c42d4859b 100644 --- a/src/gc.c +++ b/src/gc.c @@ -2052,7 +2052,7 @@ STATIC_INLINE void gc_mark_array8(jl_ptls_t ptls, jl_value_t *ary8_parent, jl_va pushed_chunk = 1; } } - for (; ary8_begin < ary8_end; ary8_begin += elsize) { + for (; ary8_begin < scan_end; ary8_begin += elsize) { for (uint8_t *pindex = elem_begin; pindex < elem_end; pindex++) { jl_value_t **slot = &ary8_begin[*pindex]; new_obj = *slot; From 0b4590a5507d3f3046e5bafc007cacbbfc9b310b Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 30 Apr 2024 12:59:45 +0200 Subject: [PATCH 341/413] set VERSION to 1.10.3 (#54246) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 5ad2491cf8808..587c5f0c73096 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.2 +1.10.3 From 54614fdb8401e5134a40a62b903a3055812c69e1 Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Wed, 1 May 2024 15:00:25 -0300 Subject: [PATCH 342/413] correctly track freed bytes in array_to_string (#54309) Should fix https://github.com/JuliaLang/julia/issues/54275. --- src/array.c | 1 + src/gc.c | 7 +++++++ src/gc.h | 2 -- src/julia_internal.h | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/array.c b/src/array.c index 5226c729d32e7..c7f71c9695e87 100644 --- a/src/array.c +++ b/src/array.c @@ -479,6 +479,7 @@ JL_DLLEXPORT jl_value_t *jl_array_to_string(jl_array_t *a) return o; } } + jl_gc_count_freed(jl_array_nbytes(a)); a->nrows = 0; a->length = 0; a->maxsize = 0; diff --git a/src/gc.c b/src/gc.c index d577c42d4859b..b298a5fa9571f 100644 --- a/src/gc.c +++ b/src/gc.c @@ -1128,6 +1128,13 @@ void jl_gc_count_allocd(size_t sz) JL_NOTSAFEPOINT jl_atomic_load_relaxed(&ptls->gc_num.allocd) + sz); } +void jl_gc_count_freed(size_t sz) JL_NOTSAFEPOINT +{ + jl_ptls_t ptls = jl_current_task->ptls; + jl_atomic_store_relaxed(&ptls->gc_num.freed, + jl_atomic_load_relaxed(&ptls->gc_num.freed) + sz); +} + static void combine_thread_gc_counts(jl_gc_num_t *dest) JL_NOTSAFEPOINT { int gc_n_threads; diff --git a/src/gc.h b/src/gc.h index 23e73eced6eb8..6ad521abe8c42 100644 --- a/src/gc.h +++ b/src/gc.h @@ -622,8 +622,6 @@ void gc_stats_big_obj(void); // For debugging void gc_count_pool(void); -size_t jl_array_nbytes(jl_array_t *a) JL_NOTSAFEPOINT; - JL_DLLEXPORT void jl_enable_gc_logging(int enable); JL_DLLEXPORT uint32_t jl_get_num_stack_mappings(void); void _report_gc_finished(uint64_t pause, uint64_t freed, int full, int recollect) JL_NOTSAFEPOINT; diff --git a/src/julia_internal.h b/src/julia_internal.h index 85ce95b65613d..d4b81d527aa86 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -569,7 +569,9 @@ JL_DLLEXPORT void JL_NORETURN jl_throw_out_of_memory_error(void); JL_DLLEXPORT int64_t jl_gc_diff_total_bytes(void) JL_NOTSAFEPOINT; JL_DLLEXPORT int64_t jl_gc_sync_total_bytes(int64_t offset) JL_NOTSAFEPOINT; void jl_gc_track_malloced_array(jl_ptls_t ptls, jl_array_t *a) JL_NOTSAFEPOINT; +size_t jl_array_nbytes(jl_array_t *a) JL_NOTSAFEPOINT; void jl_gc_count_allocd(size_t sz) JL_NOTSAFEPOINT; +void jl_gc_count_freed(size_t sz) JL_NOTSAFEPOINT; void jl_gc_run_all_finalizers(jl_task_t *ct); void jl_release_task_stack(jl_ptls_t ptls, jl_task_t *task); void jl_gc_add_finalizer_(jl_ptls_t ptls, void *v, void *f) JL_NOTSAFEPOINT; From b0f607a80715268e5be1f2fa6215e7c5e021dfd0 Mon Sep 17 00:00:00 2001 From: Michael Goerz Date: Mon, 4 Mar 2024 15:12:06 -0500 Subject: [PATCH 343/413] Add inventory writing via DocumenterInventoryWritingBackport (cherry picked from commit 2d1442fc29507e2d152f5f1ef34296eb41cffad2) --- doc/Manifest.toml | 60 +++++++++++++++++++++++++++++++++++++++++++---- doc/Project.toml | 1 + doc/make.jl | 1 + 3 files changed, 58 insertions(+), 4 deletions(-) diff --git a/doc/Manifest.toml b/doc/Manifest.toml index cf50a1d41ddbd..be49a18729b80 100644 --- a/doc/Manifest.toml +++ b/doc/Manifest.toml @@ -1,17 +1,26 @@ # This file is machine-generated - editing it directly is not advised -julia_version = "1.9.0-DEV" +julia_version = "1.10.2" manifest_format = "2.0" -project_hash = "e0c77beb18dc1f6cce661ebd60658c0c1a77390f" +project_hash = "94441cf327e3c2e23c216d2e7b11c5c833d323b9" [[deps.ANSIColoredPrinters]] git-tree-sha1 = "574baf8110975760d391c710b6341da1afa48d8c" uuid = "a4c015fc-c6ff-483c-b24f-f7ea428134e9" version = "0.0.1" +[[deps.Artifacts]] +uuid = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" + [[deps.Base64]] uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" +[[deps.CodecZlib]] +deps = ["TranscodingStreams", "Zlib_jll"] +git-tree-sha1 = "59939d8a997469ee05c4b4944560a820f9ba0d73" +uuid = "944b1d66-785c-5afd-91f1-9de20f533193" +version = "0.7.4" + [[deps.Dates]] deps = ["Printf"] uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" @@ -28,6 +37,12 @@ git-tree-sha1 = "6030186b00a38e9d0434518627426570aac2ef95" uuid = "e30172f5-a6a5-5a46-863b-614d45cd2de4" version = "0.27.23" +[[deps.DocumenterInventoryWritingBackport]] +deps = ["CodecZlib", "Documenter", "TOML"] +git-tree-sha1 = "1b89024e375353961bb98b9818b44a4e38961cc4" +uuid = "195adf08-069f-4855-af3e-8933a2cdae94" +version = "0.1.0" + [[deps.IOCapture]] deps = ["Logging", "Random"] git-tree-sha1 = "f7be53659ab06ddc986428d3a9dcc95f6fa6705a" @@ -45,9 +60,22 @@ uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" version = "0.21.3" [[deps.LibGit2]] -deps = ["Base64", "NetworkOptions", "Printf", "SHA"] +deps = ["Base64", "LibGit2_jll", "NetworkOptions", "Printf", "SHA"] uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" +[[deps.LibGit2_jll]] +deps = ["Artifacts", "LibSSH2_jll", "Libdl", "MbedTLS_jll"] +uuid = "e37daf67-58a4-590a-8e99-b0245dd2ffc5" +version = "1.6.4+0" + +[[deps.LibSSH2_jll]] +deps = ["Artifacts", "Libdl", "MbedTLS_jll"] +uuid = "29816b5a-b9ab-546f-933c-edad1886dfa8" +version = "1.11.0+1" + +[[deps.Libdl]] +uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" + [[deps.Logging]] uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" @@ -55,6 +83,11 @@ uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" deps = ["Base64"] uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" +[[deps.MbedTLS_jll]] +deps = ["Artifacts", "Libdl"] +uuid = "c8ffd9c3-330d-5841-b78e-0817d7145fa1" +version = "2.28.2+1" + [[deps.Mmap]] uuid = "a63ad114-7e13-5084-954f-fe012c677804" @@ -77,7 +110,7 @@ deps = ["InteractiveUtils", "Markdown", "Sockets", "Unicode"] uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" [[deps.Random]] -deps = ["SHA", "Serialization"] +deps = ["SHA"] uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" [[deps.SHA]] @@ -90,9 +123,28 @@ uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" +[[deps.TOML]] +deps = ["Dates"] +uuid = "fa267f1f-6049-4f14-aa54-33bafae1ed76" +version = "1.0.3" + [[deps.Test]] deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +[[deps.TranscodingStreams]] +git-tree-sha1 = "3caa21522e7efac1ba21834a03734c57b4611c7e" +uuid = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +version = "0.10.4" +weakdeps = ["Random", "Test"] + + [deps.TranscodingStreams.extensions] + TestExt = ["Test", "Random"] + [[deps.Unicode]] uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" + +[[deps.Zlib_jll]] +deps = ["Libdl"] +uuid = "83775a58-1f1d-513f-b197-d71354ab007a" +version = "1.2.13+1" diff --git a/doc/Project.toml b/doc/Project.toml index dfa65cd107d06..2f1addd369506 100644 --- a/doc/Project.toml +++ b/doc/Project.toml @@ -1,2 +1,3 @@ [deps] Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" +DocumenterInventoryWritingBackport = "195adf08-069f-4855-af3e-8933a2cdae94" diff --git a/doc/make.jl b/doc/make.jl index 6bbc94b925b60..917c3989bc254 100644 --- a/doc/make.jl +++ b/doc/make.jl @@ -8,6 +8,7 @@ using Pkg Pkg.instantiate() using Documenter +using DocumenterInventoryWritingBackport baremodule GenStdLib end From 525b3a2d2b20259bcfe61bac658c684c7e85fa36 Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Sat, 13 Apr 2024 22:07:01 +0200 Subject: [PATCH 344/413] Overload `Base.literal_pow` for `AbstractQ` (#54010) (cherry picked from commit b9aeafa171e13609b3d47f8a1d75d83c0148a991) --- stdlib/LinearAlgebra/src/abstractq.jl | 4 ++++ stdlib/LinearAlgebra/test/abstractq.jl | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/stdlib/LinearAlgebra/src/abstractq.jl b/stdlib/LinearAlgebra/src/abstractq.jl index b0d53320f4aa3..fd5324c769f09 100644 --- a/stdlib/LinearAlgebra/src/abstractq.jl +++ b/stdlib/LinearAlgebra/src/abstractq.jl @@ -18,6 +18,10 @@ transpose(Q::AbstractQ{<:Real}) = AdjointQ(Q) transpose(Q::AbstractQ) = error("transpose not implemented for $(typeof(Q)). Consider using adjoint instead of transpose.") adjoint(adjQ::AdjointQ) = adjQ.Q +(^)(Q::AbstractQ, p::Integer) = p < 0 ? power_by_squaring(inv(Q), -p) : power_by_squaring(Q, p) +@inline Base.literal_pow(::typeof(^), Q::AbstractQ, ::Val{1}) = Q +@inline Base.literal_pow(::typeof(^), Q::AbstractQ, ::Val{-1}) = inv(Q) + # promotion with AbstractMatrix, at least for equal eltypes promote_rule(::Type{<:AbstractMatrix{T}}, ::Type{<:AbstractQ{T}}) where {T} = (@inline; Union{AbstractMatrix{T},AbstractQ{T}}) diff --git a/stdlib/LinearAlgebra/test/abstractq.jl b/stdlib/LinearAlgebra/test/abstractq.jl index 19b872d685668..0eb88324e8c20 100644 --- a/stdlib/LinearAlgebra/test/abstractq.jl +++ b/stdlib/LinearAlgebra/test/abstractq.jl @@ -39,6 +39,12 @@ n = 5 @test Q'*I ≈ Q.Q'*I rtol=2eps(real(T)) @test I*Q ≈ Q.Q*I rtol=2eps(real(T)) @test I*Q' ≈ I*Q.Q' rtol=2eps(real(T)) + @test Q^3 ≈ Q*Q*Q + @test Q^2 ≈ Q*Q + @test Q^1 == Q + @test Q^(-1) == Q' + @test (Q')^(-1) == Q + @test (Q')^2 ≈ Q'*Q' @test abs(det(Q)) ≈ 1 @test logabsdet(Q)[1] ≈ 0 atol=2n*eps(real(T)) y = rand(T, n) From 58cf81ea7bb79401533795ac90f83e817c705bd3 Mon Sep 17 00:00:00 2001 From: Milan Bouchet-Valat Date: Mon, 22 Apr 2024 14:47:08 +0200 Subject: [PATCH 345/413] Fix `make install` from tarballs (#54143) This reverts part of 67b8ac0 (https://github.com/JuliaLang/julia/pull/47596#discussion_r1128658139). That change broke `make install` from tarballs due to building docs again, which fails as there's no git repo (and also requires Internet access to download UnicodeData.txt. Fixes #54037. (cherry picked from commit d6dda7c58552f0a8dfb7fb6d5441f69abdd1e99f) --- Makefile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index ba96b5c71697c..3991ced0f679b 100644 --- a/Makefile +++ b/Makefile @@ -61,6 +61,10 @@ $(foreach link,base $(JULIAHOME)/test,$(eval $(call symlink_target,$(link),$$(bu julia_flisp.boot.inc.phony: julia-deps @$(MAKE) $(QUIET_MAKE) -C $(BUILDROOT)/src julia_flisp.boot.inc.phony +# Build the HTML docs (skipped if already exists, notably in tarballs) +$(BUILDROOT)/doc/_build/html/en/index.html: $(shell find $(BUILDROOT)/base $(BUILDROOT)/doc \( -path $(BUILDROOT)/doc/_build -o -path $(BUILDROOT)/doc/deps -o -name *_constants.jl -o -name *_h.jl -o -name version_git.jl \) -prune -o -type f -print) + @$(MAKE) docs + julia-symlink: julia-cli-$(JULIA_BUILD_MODE) ifeq ($(OS),WINNT) echo '@"%~dp0/'"$$(echo '$(call rel_path,$(BUILDROOT),$(JULIA_EXECUTABLE))')"'" %*' | tr / '\\' > $(BUILDROOT)/julia.bat @@ -265,7 +269,7 @@ define stringreplace endef -install: $(build_depsbindir)/stringreplace docs +install: $(build_depsbindir)/stringreplace $(BUILDROOT)/doc/_build/html/en/index.html @$(MAKE) $(QUIET_MAKE) $(JULIA_BUILD_MODE) @for subdir in $(bindir) $(datarootdir)/julia/stdlib/$(VERSDIR) $(docdir) $(man1dir) $(includedir)/julia $(libdir) $(private_libdir) $(sysconfdir) $(private_libexecdir); do \ mkdir -p $(DESTDIR)$$subdir; \ @@ -523,7 +527,7 @@ app: darwinframework: $(MAKE) -C $(JULIAHOME)/contrib/mac/framework -light-source-dist.tmp: docs +light-source-dist.tmp: $(BUILDROOT)/doc/_build/html/en/index.html ifneq ($(BUILDROOT),$(JULIAHOME)) $(error make light-source-dist does not work in out-of-tree builds) endif From 3577557f8076796220ffe23de93aaba3710da22e Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Tue, 23 Apr 2024 10:38:41 +0530 Subject: [PATCH 346/413] LinearAlgebra: Correct zero element in `_generic_matvecmul!` for block adj/trans (#54151) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes the following issue on master, where the zero element is computed incorrectly (but subsequent terms are computed correctly): ```julia julia> using LinearAlgebra julia> x = [1 2 3; 4 5 6]; julia> A = reshape([x,2x,3x,4x],2,2); julia> b = fill(x, 2); julia> A' * b ERROR: DimensionMismatch: matrix A has axes (Base.OneTo(2),Base.OneTo(3)), matrix B has axes (Base.OneTo(2),Base.OneTo(3)) Stacktrace: [1] _generic_matmatmul!(C::Matrix{Int64}, A::Matrix{Int64}, B::Matrix{Int64}, _add::LinearAlgebra.MulAddMul{true, true, Bool, Bool}) @ LinearAlgebra ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/LinearAlgebra/src/matmul.jl:849 [2] generic_matmatmul! @ ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/LinearAlgebra/src/matmul.jl:834 [inlined] [3] _mul! @ ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/LinearAlgebra/src/matmul.jl:287 [inlined] [4] mul! @ ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/LinearAlgebra/src/matmul.jl:285 [inlined] [5] mul! @ ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/LinearAlgebra/src/matmul.jl:253 [inlined] [6] * @ ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/LinearAlgebra/src/matmul.jl:114 [inlined] [7] _generic_matvecmul!(C::Vector{Matrix{…}}, tA::Char, A::Matrix{Matrix{…}}, B::Vector{Matrix{…}}, _add::LinearAlgebra.MulAddMul{true, true, Bool, Bool}) @ LinearAlgebra ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/LinearAlgebra/src/matmul.jl:797 [8] generic_matvecmul! @ ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/LinearAlgebra/src/matmul.jl:755 [inlined] [9] _mul! @ ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/LinearAlgebra/src/matmul.jl:73 [inlined] [10] mul! @ ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/LinearAlgebra/src/matmul.jl:70 [inlined] [11] mul! @ ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/LinearAlgebra/src/matmul.jl:253 [inlined] [12] *(A::Adjoint{Adjoint{Int64, Matrix{Int64}}, Matrix{Matrix{Int64}}}, x::Vector{Matrix{Int64}}) @ LinearAlgebra ~/.julia/juliaup/julia-nightly/share/julia/stdlib/v1.12/LinearAlgebra/src/matmul.jl:60 [13] top-level scope @ REPL[10]:1 Some type information was truncated. Use `show(err)` to see complete types. ``` After this PR, ```julia julia> A' * b 2-element Vector{Matrix{Int64}}: [51 66 81; 66 87 108; 81 108 135] [119 154 189; 154 203 252; 189 252 315] ``` (cherry picked from commit 2b878f009a8771bacc1a71c20b337940c1e9009e) --- stdlib/LinearAlgebra/src/matmul.jl | 6 ++++-- stdlib/LinearAlgebra/test/matmul.jl | 12 ++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/stdlib/LinearAlgebra/src/matmul.jl b/stdlib/LinearAlgebra/src/matmul.jl index 018ad20e538c8..5994c95851827 100644 --- a/stdlib/LinearAlgebra/src/matmul.jl +++ b/stdlib/LinearAlgebra/src/matmul.jl @@ -711,7 +711,8 @@ function _generic_matvecmul!(C::AbstractVector, tA, A::AbstractVecOrMat, B::Abst else for k = 1:mA aoffs = (k-1)*Astride - s = zero(A[aoffs + 1]*B[1] + A[aoffs + 1]*B[1]) + firstterm = transpose(A[aoffs + 1])*B[1] + s = zero(firstterm + firstterm) for i = 1:nA s += transpose(A[aoffs+i]) * B[i] end @@ -726,7 +727,8 @@ function _generic_matvecmul!(C::AbstractVector, tA, A::AbstractVecOrMat, B::Abst else for k = 1:mA aoffs = (k-1)*Astride - s = zero(A[aoffs + 1]*B[1] + A[aoffs + 1]*B[1]) + firstterm = A[aoffs + 1]'B[1] + s = zero(firstterm + firstterm) for i = 1:nA s += A[aoffs + i]'B[i] end diff --git a/stdlib/LinearAlgebra/test/matmul.jl b/stdlib/LinearAlgebra/test/matmul.jl index 86606654e911a..0c6e421b3968b 100644 --- a/stdlib/LinearAlgebra/test/matmul.jl +++ b/stdlib/LinearAlgebra/test/matmul.jl @@ -209,6 +209,18 @@ end end end +@testset "generic_matvecmul for vectors of matrices" begin + x = [1 2 3; 4 5 6] + A = reshape([x,2x,3x,4x],2,2) + b = [x, 2x] + for f in (adjoint, transpose) + c = f(A) * b + for i in eachindex(c) + @test c[i] == sum(f(A)[i, j] * b[j] for j in eachindex(b)) + end + end +end + @testset "generic_matmatmul for matrices of vectors" begin B = Matrix{Vector{Int}}(undef, 2, 2) B[1, 1] = [1, 2] From 1de708b88f997f758a7d98c1cee6153dca4469f5 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Thu, 25 Apr 2024 08:31:13 -0400 Subject: [PATCH 347/413] set MAX_OS_WRITE on unix (#54233) Fixes #54225 (cherry picked from commit b35d3083e10b2161dfcd33a5546fbdbd88d8b25c) --- base/stream.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base/stream.jl b/base/stream.jl index 22af8d59359f3..1635f3c5ad22a 100644 --- a/base/stream.jl +++ b/base/stream.jl @@ -122,7 +122,7 @@ const DEFAULT_READ_BUFFER_SZ = 10485760 # 10 MB if Sys.iswindows() const MAX_OS_WRITE = UInt(0x1FF0_0000) # 511 MB (determined semi-empirically, limited to 31 MB on XP) else - const MAX_OS_WRITE = UInt(typemax(Csize_t)) + const MAX_OS_WRITE = UInt(0x7FFF_0000) # almost 2 GB (both macOS and linux have this kernel restriction, although only macOS documents it) end From f752249335177d5d15b6d71d568cbc7049aec4a2 Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Fri, 26 Apr 2024 13:50:30 -0300 Subject: [PATCH 348/413] fix typo in gc_mark_memory8 when chunking a large array (#54251) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Should fix https://github.com/JuliaLang/julia/issues/54247. - Before: ``` Julia Version 1.12.0-DEV.410 Commit 0735854ab3* (2024-04-25 14:35 UTC) Platform Info: OS: macOS (arm64-apple-darwin23.4.0) CPU: 12 × Apple M2 Max WORD_SIZE: 64 LLVM: libLLVM-16.0.6 (ORCJIT, apple-m2) Threads: 8 default, 0 interactive, 4 GC (on 8 virtual cores) ***** Vector ***** serial: 0.607365 seconds (3 allocations: 381.470 MiB, 0.22% gc time) serial: 0.597241 seconds (3 allocations: 381.470 MiB, 1.18% gc time) serial: 0.589679 seconds (3 allocations: 381.470 MiB, 1.21% gc time) serial: 0.581607 seconds (3 allocations: 381.470 MiB, 0.97% gc time) serial: 0.578147 seconds (3 allocations: 381.470 MiB, 0.96% gc time) serial: 0.577399 seconds (3 allocations: 381.470 MiB, 0.94% gc time) serial: 0.564742 seconds (3 allocations: 381.470 MiB, 0.93% gc time) serial: 0.591733 seconds (3 allocations: 381.470 MiB, 0.90% gc time) serial: 0.565088 seconds (3 allocations: 381.470 MiB, 0.97% gc time) serial: 0.556800 seconds (3 allocations: 381.470 MiB, 0.94% gc time) parallel: 0.563600 seconds (3.33 k allocations: 381.640 MiB, 0.10% gc time, 0.94% compilation time) parallel: 0.564652 seconds (9 allocations: 381.470 MiB, 1.02% gc time) parallel: 0.581996 seconds (9 allocations: 381.470 MiB, 0.95% gc time) parallel: 0.576503 seconds (9 allocations: 381.470 MiB, 0.90% gc time) parallel: 0.565595 seconds (9 allocations: 381.470 MiB, 0.94% gc time) parallel: 0.575850 seconds (9 allocations: 381.470 MiB, 0.95% gc time) parallel: 0.604621 seconds (9 allocations: 381.470 MiB, 0.91% gc time) parallel: 0.578168 seconds (9 allocations: 381.470 MiB, 0.91% gc time) parallel: 0.600408 seconds (9 allocations: 381.470 MiB, 0.92% gc time) parallel: 0.576794 seconds (9 allocations: 381.470 MiB, 0.95% gc time) ***** Astruct ***** serial: 0.659020 seconds (3 allocations: 762.940 MiB, 0.18% gc time) serial: 0.674630 seconds (3 allocations: 762.940 MiB, 1.63% gc time) serial: 0.670532 seconds (3 allocations: 762.940 MiB, 1.86% gc time) serial: 0.682483 seconds (3 allocations: 762.940 MiB, 1.57% gc time) serial: 0.673673 seconds (3 allocations: 762.940 MiB, 1.62% gc time) serial: 0.652506 seconds (3 allocations: 762.940 MiB, 1.72% gc time) serial: 0.667336 seconds (3 allocations: 762.940 MiB, 1.69% gc time) serial: 0.659686 seconds (3 allocations: 762.940 MiB, 1.76% gc time) serial: 0.673387 seconds (3 allocations: 762.940 MiB, 1.73% gc time) serial: 0.668930 seconds (3 allocations: 762.940 MiB, 1.67% gc time) parallel: 0.646382 seconds (3.42 k allocations: 763.114 MiB, 0.09% gc time, 0.77% compilation time) parallel: 0.665347 seconds (9 allocations: 762.940 MiB, 1.70% gc time) parallel: 0.676490 seconds (9 allocations: 762.940 MiB, 1.84% gc time) parallel: 22.732728 seconds (9 allocations: 762.940 MiB, 97.12% gc time) parallel: 22.668091 seconds (9 allocations: 762.940 MiB, 97.15% gc time) parallel: 0.629117 seconds (9 allocations: 762.940 MiB) parallel: 22.948883 seconds (9 allocations: 762.940 MiB, 97.26% gc time) parallel: 0.629834 seconds (9 allocations: 762.940 MiB) parallel: 1.108239 seconds (9 allocations: 762.940 MiB, 42.54% gc time) parallel: 0.648325 seconds (9 allocations: 762.940 MiB) ``` - After: ``` Julia Version 1.12.0-DEV.410 Commit 0735854ab3* (2024-04-25 14:35 UTC) Platform Info: OS: macOS (arm64-apple-darwin23.4.0) CPU: 12 × Apple M2 Max WORD_SIZE: 64 LLVM: libLLVM-16.0.6 (ORCJIT, apple-m2) Threads: 8 default, 0 interactive, 4 GC (on 8 virtual cores) ***** Vector ***** serial: 0.600418 seconds (3 allocations: 381.470 MiB, 0.20% gc time) serial: 0.613808 seconds (3 allocations: 381.470 MiB, 1.17% gc time) serial: 0.596335 seconds (3 allocations: 381.470 MiB, 1.21% gc time) serial: 0.589423 seconds (3 allocations: 381.470 MiB, 0.92% gc time) serial: 0.621845 seconds (3 allocations: 381.470 MiB, 0.89% gc time) serial: 0.580239 seconds (3 allocations: 381.470 MiB, 0.94% gc time) serial: 0.604881 seconds (3 allocations: 381.470 MiB, 0.90% gc time) serial: 0.581353 seconds (3 allocations: 381.470 MiB, 0.95% gc time) serial: 0.603317 seconds (3 allocations: 381.470 MiB, 0.89% gc time) serial: 0.599634 seconds (3 allocations: 381.470 MiB, 0.90% gc time) parallel: 0.589694 seconds (3.33 k allocations: 381.640 MiB, 0.10% gc time, 1.01% compilation time) parallel: 0.600812 seconds (9 allocations: 381.470 MiB, 0.98% gc time) parallel: 0.610956 seconds (9 allocations: 381.470 MiB, 5.13% gc time) parallel: 0.677189 seconds (9 allocations: 381.470 MiB, 14.26% gc time) parallel: 0.571583 seconds (9 allocations: 381.470 MiB, 1.80% gc time) parallel: 0.742617 seconds (9 allocations: 381.470 MiB, 17.81% gc time) parallel: 0.624541 seconds (9 allocations: 381.470 MiB, 5.02% gc time) parallel: 0.723963 seconds (9 allocations: 381.470 MiB, 14.03% gc time) parallel: 0.609618 seconds (9 allocations: 381.470 MiB) parallel: 0.708227 seconds (9 allocations: 381.470 MiB, 16.29% gc time) ***** Astruct ***** serial: 0.627853 seconds (3 allocations: 762.940 MiB) serial: 0.647795 seconds (3 allocations: 762.940 MiB, 2.14% gc time) serial: 0.640387 seconds (3 allocations: 762.940 MiB, 1.91% gc time) serial: 0.698194 seconds (3 allocations: 762.940 MiB, 1.73% gc time) serial: 0.673018 seconds (3 allocations: 762.940 MiB, 1.68% gc time) serial: 0.641571 seconds (3 allocations: 762.940 MiB, 1.79% gc time) serial: 0.669718 seconds (3 allocations: 762.940 MiB, 1.65% gc time) serial: 0.661993 seconds (3 allocations: 762.940 MiB, 1.73% gc time) serial: 0.661846 seconds (3 allocations: 762.940 MiB, 1.85% gc time) serial: 0.661637 seconds (3 allocations: 762.940 MiB, 1.73% gc time) parallel: 0.645750 seconds (3.42 k allocations: 763.114 MiB, 0.09% gc time, 0.83% compilation time) parallel: 0.653331 seconds (9 allocations: 762.940 MiB, 1.92% gc time) parallel: 0.673813 seconds (9 allocations: 762.940 MiB, 1.80% gc time) parallel: 0.720503 seconds (9 allocations: 762.940 MiB, 9.40% gc time) parallel: 0.889651 seconds (9 allocations: 762.940 MiB, 25.33% gc time) parallel: 0.644618 seconds (9 allocations: 762.940 MiB, 2.26% gc time) parallel: 0.919954 seconds (9 allocations: 762.940 MiB, 28.99% gc time) parallel: 0.750246 seconds (9 allocations: 762.940 MiB, 9.03% gc time) parallel: 0.767282 seconds (9 allocations: 762.940 MiB, 10.55% gc time) parallel: 0.899596 seconds (9 allocations: 762.940 MiB, 25.69% gc time) ``` (cherry picked from commit dc0a4779a8fa9e4150e246fcf46c36b3acce1ce9) --- src/gc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gc.c b/src/gc.c index 0a456eced511e..d577c42d4859b 100644 --- a/src/gc.c +++ b/src/gc.c @@ -2052,7 +2052,7 @@ STATIC_INLINE void gc_mark_array8(jl_ptls_t ptls, jl_value_t *ary8_parent, jl_va pushed_chunk = 1; } } - for (; ary8_begin < ary8_end; ary8_begin += elsize) { + for (; ary8_begin < scan_end; ary8_begin += elsize) { for (uint8_t *pindex = elem_begin; pindex < elem_end; pindex++) { jl_value_t **slot = &ary8_begin[*pindex]; new_obj = *slot; From 1b21830d2c6eea88338a56b3bc7424b41eafc0fd Mon Sep 17 00:00:00 2001 From: N5N3 <2642243996@qq.com> Date: Tue, 7 May 2024 11:26:34 +0800 Subject: [PATCH 349/413] typeintersect: fix another stack overflow caused by circular constraints (#54363) The added MWE has been broken since 1.8. The intersect result still looks quite unsoundness, but at least stack overflow get fixed. close #54356 (cherry picked from commit e47fedd49369eaeafd2dc3d3a3ebf89db80586ce) --- src/subtype.c | 24 +++++++++++++----------- test/subtype.jl | 13 ++++++++++--- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/subtype.c b/src/subtype.c index 10d2f19ae3209..16ec800b5c8f2 100644 --- a/src/subtype.c +++ b/src/subtype.c @@ -1301,6 +1301,8 @@ static int subtype_tuple(jl_datatype_t *xd, jl_datatype_t *yd, jl_stenv_t *e, in return ans; } +static int try_subtype_by_bounds(jl_value_t *a, jl_value_t *b, jl_stenv_t *e); + // `param` means we are currently looking at a parameter of a type constructor // (as opposed to being outside any type constructor, or comparing variable bounds). // this is used to record the positions where type variables occur for the @@ -1351,7 +1353,8 @@ static int subtype(jl_value_t *x, jl_value_t *y, jl_stenv_t *e, int param) if (yy) record_var_occurrence(yy, e, param); if (yr) { record_var_occurrence(xx, e, param); - return subtype(xx->lb, yy->ub, e, 0); + int trysub = e->intersection ? try_subtype_by_bounds(xx->lb, yy->ub, e) : 0; + return trysub || subtype(xx->lb, yy->ub, e, 0); } return var_lt((jl_tvar_t*)x, y, e, param); } @@ -2483,7 +2486,7 @@ static jl_value_t *bound_var_below(jl_tvar_t *tv, jl_varbinding_t *bb, jl_stenv_ static int subtype_by_bounds(jl_value_t *x, jl_value_t *y, jl_stenv_t *e) JL_NOTSAFEPOINT; -// similar to `subtype_by_bounds`, used to avoid stack-overflow caused by circulation constraints. +// similar to `subtype_by_bounds`, used to avoid stack-overflow caused by circular constraints. static int try_subtype_by_bounds(jl_value_t *a, jl_value_t *b, jl_stenv_t *e) { if (jl_is_uniontype(a)) @@ -2492,22 +2495,21 @@ static int try_subtype_by_bounds(jl_value_t *a, jl_value_t *b, jl_stenv_t *e) else if (jl_is_uniontype(b)) return try_subtype_by_bounds(a, ((jl_uniontype_t *)b)->a, e) || try_subtype_by_bounds(a, ((jl_uniontype_t *)b)->b, e); - else if (jl_egal(a, b)) + else if (a == jl_bottom_type || b == (jl_value_t *)jl_any_type || obviously_egal(a, b)) return 1; else if (!jl_is_typevar(b)) return 0; - jl_varbinding_t *vb = e->vars; - while (vb != NULL) { - if (subtype_by_bounds(b, (jl_value_t *)vb->var, e) && obviously_in_union(a, vb->ub)) - return 1; - vb = vb->prev; - } - return 0; + else if (jl_is_typevar(a) && subtype_by_bounds(a, b, e)) + return 1; + // check if `Union{a, ...} <: b`. + jl_varbinding_t *vb = lookup(e, (jl_tvar_t *)b); + jl_value_t *blb = vb ? vb->lb : ((jl_tvar_t *)b)->lb; + return obviously_in_union(a, blb); } static int try_subtype_in_env(jl_value_t *a, jl_value_t *b, jl_stenv_t *e) { - if (a == jl_bottom_type || b == (jl_value_t *)jl_any_type || try_subtype_by_bounds(a, b, e)) + if (try_subtype_by_bounds(a, b, e)) return 1; jl_savedenv_t se; save_env(e, &se, 1); diff --git a/test/subtype.jl b/test/subtype.jl index 3245e0583cda8..fffe5a3031fed 100644 --- a/test/subtype.jl +++ b/test/subtype.jl @@ -2327,9 +2327,10 @@ T46784{B<:Val, M<:AbstractMatrix} = Tuple{<:Union{B, <:Val{<:B}}, M, Union{Abstr #issue 36185 let S = Tuple{Type{T},Array{Union{T,Missing},N}} where {T,N}, T = Tuple{Type{T},Array{Union{T,Nothing},N}} where {T,N} - @testintersect(S, T, !Union{}) - @test_broken typeintersect(S, T) != S - @test_broken typeintersect(T, S) != T + I = typeintersect(S, T) + @test I == typeintersect(T, S) != Union{} + @test_broken I <: S + @test_broken I <: T end #issue 46736 @@ -2597,3 +2598,9 @@ let S = Type{T53371{A, B, C, D, E}} where {A, B<:R53371{A}, C<:R53371{A}, D<:R53 T = Type{T53371{A, B, C, D, E} where {A, B<:R53371{A}, C<:R53371{A}, D<:R53371{A}, E<:R53371{A}}} @test !(S <: T) end + +#issue 54356 +let S = Tuple{Val{Val{Union{Val{A2}, A2}}}, Val{Val{Union{Val{A2}, Val{A4}, A4}}}} where {A2, A4<:Union{Val{A2}, A2}}, + T = Tuple{Vararg{Val{V}}} where {V} + @testintersect(S, T, !Union{}) +end From e1b209931c68b01278e761e07062091fa259bb29 Mon Sep 17 00:00:00 2001 From: Florian Date: Fri, 17 May 2024 20:24:09 +0200 Subject: [PATCH 350/413] Fix an off-by-one error in interpreter's `do_invoke` (#54443) --- src/interpreter.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/interpreter.c b/src/interpreter.c index d84a1381fccad..570fda51a989b 100644 --- a/src/interpreter.c +++ b/src/interpreter.c @@ -135,10 +135,10 @@ static jl_value_t *do_invoke(jl_value_t **args, size_t nargs, interpreter_state JL_GC_PUSHARGS(argv, nargs - 1); size_t i; for (i = 1; i < nargs; i++) - argv[i] = eval_value(args[i], s); + argv[i-1] = eval_value(args[i], s); jl_method_instance_t *meth = (jl_method_instance_t*)args[0]; assert(jl_is_method_instance(meth)); - jl_value_t *result = jl_invoke(argv[1], &argv[2], nargs - 2, meth); + jl_value_t *result = jl_invoke(argv[0], nargs == 2 ? NULL : &argv[1], nargs - 2, meth); JL_GC_POP(); return result; } From 94bef5df035198caf96af0d71bbeaed4b3d8219e Mon Sep 17 00:00:00 2001 From: Nathan Daly Date: Wed, 22 May 2024 12:24:23 -0600 Subject: [PATCH 351/413] Make TestLogger thread-safe (introduce a lock) (#54497) Fixes https://github.com/JuliaLang/julia/issues/54439. - Lock around concurrent accesses to .logs, .message_limits, and .shouldlog_args. - Copy the vector out of the logger at the end, to shield against dangling Tasks. Before: ```julia julia> Threads.nthreads() 8 julia> function foo(n) @info "Doing foo with n=$n" @sync for i=1:n Threads.@spawn @info "Iteration $i" end 42 end foo (generic function with 1 method) julia> for _ in 1:1000 @test_logs (:info,"Doing foo with n=10000") match_mode=:any foo(10_000) end julia+RAI(56155,0x1f5157ac0) malloc: double free for ptr 0x128248000 julia+RAI(56155,0x1f5157ac0) malloc: *** set a breakpoint in malloc_error_break to debug [56155] signal (6): Abort trap: 6 in expression starting at REPL[8]:1 signal (6) thread (1) __pthread_kill at /usr/lib/system/libsystem_kernel.dylib (unknown line) Allocations: 54370881 (Pool: 54363911; Big: 6970); GC: 119 [1] 56154 abort julia -tauto ``` After: ```julia julia> Threads.nthreads() 8 julia> function foo(n) @info "Doing foo with n=$n" @sync for i=1:n Threads.@spawn @info "Iteration $i" end 42 end foo (generic function with 1 method) julia> for _ in 1:1000 @test_logs (:info,"Doing foo with n=10000") match_mode=:any foo(10_000) end ``` (no crash) :) (cherry picked from commit 0437210b2834146396f1dac75c062932bd8f471a) --- stdlib/Test/src/logging.jl | 42 +++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/stdlib/Test/src/logging.jl b/stdlib/Test/src/logging.jl index 7b3838903ce10..8df7b016a8944 100644 --- a/stdlib/Test/src/logging.jl +++ b/stdlib/Test/src/logging.jl @@ -2,6 +2,7 @@ using Logging: Logging, AbstractLogger, LogLevel, Info, with_logger import Base: occursin +using Base: @lock #------------------------------------------------------------------------------- """ @@ -35,11 +36,15 @@ struct Ignored ; end #------------------------------------------------------------------------------- # Logger with extra test-related state mutable struct TestLogger <: AbstractLogger - logs::Vector{LogRecord} + lock::ReentrantLock + logs::Vector{LogRecord} # Guarded by lock. min_level::LogLevel catch_exceptions::Bool - shouldlog_args - message_limits::Dict{Any,Int} + # Note: shouldlog_args only maintains the info for the most recent log message, which + # may not be meaningful in a multithreaded program. See: + # https://github.com/JuliaLang/julia/pull/54497#discussion_r1603691606 + shouldlog_args # Guarded by lock. + message_limits::Dict{Any,Int} # Guarded by lock. respect_maxlog::Bool end @@ -80,15 +85,17 @@ Test Passed ``` """ TestLogger(; min_level=Info, catch_exceptions=false, respect_maxlog=true) = - TestLogger(LogRecord[], min_level, catch_exceptions, nothing, Dict{Any, Int}(), respect_maxlog) + TestLogger(ReentrantLock(), LogRecord[], min_level, catch_exceptions, nothing, Dict{Any, Int}(), respect_maxlog) Logging.min_enabled_level(logger::TestLogger) = logger.min_level function Logging.shouldlog(logger::TestLogger, level, _module, group, id) - if get(logger.message_limits, id, 1) > 0 - logger.shouldlog_args = (level, _module, group, id) - true - else - false + @lock logger.lock begin + if get(logger.message_limits, id, 1) > 0 + logger.shouldlog_args = (level, _module, group, id) + return true + else + return false + end end end @@ -98,12 +105,17 @@ function Logging.handle_message(logger::TestLogger, level, msg, _module, if logger.respect_maxlog maxlog = get(kwargs, :maxlog, nothing) if maxlog isa Core.BuiltinInts - remaining = get!(logger.message_limits, id, Int(maxlog)::Int) - logger.message_limits[id] = remaining - 1 - remaining > 0 || return + @lock logger.lock begin + remaining = get!(logger.message_limits, id, Int(maxlog)::Int) + logger.message_limits[id] = remaining - 1 + remaining > 0 || return + end end end - push!(logger.logs, LogRecord(level, msg, _module, group, id, file, line, kwargs)) + r = LogRecord(level, msg, _module, group, id, file, line, kwargs) + @lock logger.lock begin + push!(logger.logs, r) + end end # Catch exceptions for the test logger only if specified @@ -112,7 +124,9 @@ Logging.catch_exceptions(logger::TestLogger) = logger.catch_exceptions function collect_test_logs(f; kwargs...) logger = TestLogger(; kwargs...) value = with_logger(f, logger) - logger.logs, value + @lock logger.lock begin + return copy(logger.logs), value + end end From 7eeeb56a83cb9810f5124e50ae553ca718fd26f1 Mon Sep 17 00:00:00 2001 From: Tianyi Pu <44583944+putianyi889@users.noreply.github.com> Date: Fri, 24 May 2024 23:55:33 +0100 Subject: [PATCH 352/413] Add a missing doc (#53796) (cherry picked from commit 0c65f6ffde9b555b0fd04c54411e287b63ff98a4) --- doc/src/base/math.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc/src/base/math.md b/doc/src/base/math.md index 62368424629c6..1b6b415b1d616 100644 --- a/doc/src/base/math.md +++ b/doc/src/base/math.md @@ -70,6 +70,7 @@ Base.Math.tand Base.Math.sincosd Base.Math.sinpi Base.Math.cospi +Base.Math.tanpi Base.Math.sincospi Base.sinh(::Number) Base.cosh(::Number) From 007d8ded0900ed626304ae99abe7366257ac1892 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Tue, 28 May 2024 11:34:27 -0300 Subject: [PATCH 353/413] Set storage class of julia globals to dllimport on windows to avoid auto-import weirdness (#54572) Fixes https://github.com/JuliaLang/julia/issues/54550 on 1.10. Master will require a similar but different PR. Co-authored-by: Keno Fischer Co-authored-by: Cody Tapscott <84105208+topolarity@users.noreply.github.com> --- Make.inc | 2 +- base/linking.jl | 2 +- cli/Makefile | 3 +-- src/aotcompile.cpp | 18 +++++++++++------- src/codegen.cpp | 8 ++++---- src/staticdata.c | 6 +++--- sysimage.mk | 2 +- 7 files changed, 22 insertions(+), 19 deletions(-) diff --git a/Make.inc b/Make.inc index 021508e620cd1..85ef1efded2f9 100644 --- a/Make.inc +++ b/Make.inc @@ -1365,7 +1365,7 @@ ifeq ($(OS), WINNT) HAVE_SSP := 1 OSLIBS += -Wl,--export-all-symbols -Wl,--version-script=$(BUILDROOT)/src/julia.expmap \ $(NO_WHOLE_ARCHIVE) -lpsapi -lkernel32 -lws2_32 -liphlpapi -lwinmm -ldbghelp -luserenv -lsecur32 -latomic -JLDFLAGS += -Wl,--stack,8388608 +JLDFLAGS += -Wl,--stack,8388608 --disable-auto-import --disable-runtime-pseudo-reloc ifeq ($(ARCH),i686) JLDFLAGS += -Wl,--large-address-aware endif diff --git a/base/linking.jl b/base/linking.jl index 2d68ea730c0fb..4bf0198962346 100644 --- a/base/linking.jl +++ b/base/linking.jl @@ -110,7 +110,7 @@ function ld() # LLD supports mingw style linking flavor = "gnu" m = Sys.ARCH == :x86_64 ? "i386pep" : "i386pe" - default_args = `-m $m -Bdynamic --enable-auto-image-base --allow-multiple-definition` + default_args = `-m $m -Bdynamic --enable-auto-image-base --allow-multiple-definition --disable-auto-import --disable-runtime-pseudo-reloc` elseif Sys.isapple() flavor = "darwin" arch = Sys.ARCH == :aarch64 ? :arm64 : Sys.ARCH diff --git a/cli/Makefile b/cli/Makefile index 911e8ff54e246..e269e9205f496 100644 --- a/cli/Makefile +++ b/cli/Makefile @@ -17,8 +17,7 @@ LOADER_CFLAGS += -DGLIBCXX_LEAST_VERSION_SYMBOL=\"$(shell echo "$(CSL_NEXT_GLIBC endif ifeq ($(OS),WINNT) -LOADER_LDFLAGS += -municode -mconsole -nostdlib --disable-auto-import \ - --disable-runtime-pseudo-reloc -lntdll -lkernel32 -lpsapi +LOADER_LDFLAGS += -municode -mconsole -nostdlib -lntdll -lkernel32 -lpsapi else ifeq ($(OS),Linux) LOADER_LDFLAGS += -Wl,--no-as-needed -ldl -lpthread -rdynamic -lc -Wl,--as-needed else ifeq ($(OS),FreeBSD) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index e2a2fb20b419f..7b3d80061413b 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -1166,6 +1166,8 @@ static void materializePreserved(Module &M, Partition &partition) { GV.setInitializer(nullptr); GV.setLinkage(GlobalValue::ExternalLinkage); GV.setVisibility(GlobalValue::HiddenVisibility); + if (GV.getDLLStorageClass() != GlobalValue::DLLStorageClassTypes::DefaultStorageClass) + continue; // Don't mess with exported or imported globals GV.setDSOLocal(true); } @@ -1645,6 +1647,7 @@ void jl_dump_native_impl(void *native_code, if (jl_small_typeof_copy) { jl_small_typeof_copy->setVisibility(GlobalValue::HiddenVisibility); jl_small_typeof_copy->setDSOLocal(true); + jl_small_typeof_copy->setDLLStorageClass(GlobalValue::DLLStorageClassTypes::DefaultStorageClass); } } @@ -1673,16 +1676,17 @@ void jl_dump_native_impl(void *native_code, // reflect the address of the jl_RTLD_DEFAULT_handle variable // back to the caller, so that we can check for consistency issues GlobalValue *jlRTLD_DEFAULT_var = jl_emit_RTLD_DEFAULT_var(&metadataM); - addComdat(new GlobalVariable(metadataM, - jlRTLD_DEFAULT_var->getType(), - true, - GlobalVariable::ExternalLinkage, - jlRTLD_DEFAULT_var, - "jl_RTLD_DEFAULT_handle_pointer"), TheTriple); - Type *T_size = DL.getIntPtrType(Context); Type *T_psize = T_size->getPointerTo(); + auto FT = FunctionType::get(Type::getInt8Ty(Context)->getPointerTo()->getPointerTo(), {}, false); + auto F = Function::Create(FT, Function::ExternalLinkage, "get_jl_RTLD_DEFAULT_handle_addr", metadataM); + llvm::IRBuilder<> builder(BasicBlock::Create(Context, "top", F)); + builder.CreateRet(jlRTLD_DEFAULT_var); + F->setLinkage(GlobalValue::ExternalLinkage); + if (TheTriple.isOSBinFormatCOFF()) + F->setDLLStorageClass(GlobalValue::DLLStorageClassTypes::DLLExportStorageClass); + if (TheTriple.isOSWindows()) { // Windows expect that the function `_DllMainStartup` is present in an dll. // Normal compilers use something like Zig's crtdll.c instead we provide a diff --git a/src/codegen.cpp b/src/codegen.cpp index dd3376c334a37..4019f6d7e32d1 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -493,9 +493,12 @@ struct JuliaVariable { if (GlobalValue *V = m->getNamedValue(name)) return cast(V); auto T_size = m->getDataLayout().getIntPtrType(m->getContext()); - return new GlobalVariable(*m, _type(T_size), + auto var = new GlobalVariable(*m, _type(T_size), isconst, GlobalVariable::ExternalLinkage, NULL, name); + if (Triple(m->getTargetTriple()).isOSWindows()) + var->setDLLStorageClass(GlobalValue::DLLStorageClassTypes::DLLImportStorageClass); // Cross-library imports must be explicit for COFF (Windows) + return var; } GlobalVariable *realize(jl_codectx_t &ctx); }; @@ -1786,9 +1789,6 @@ static inline GlobalVariable *prepare_global_in(Module *M, GlobalVariable *G) G->isConstant(), GlobalVariable::ExternalLinkage, nullptr, G->getName(), nullptr, G->getThreadLocalMode()); proto->copyAttributesFrom(G); - // DLLImport only needs to be set for the shadow module - // it just gets annoying in the JIT - proto->setDLLStorageClass(GlobalValue::DefaultStorageClass); return proto; } return cast(local); diff --git a/src/staticdata.c b/src/staticdata.c index c130c2e7569fe..a55342604f21d 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -2838,9 +2838,9 @@ JL_DLLEXPORT void jl_preload_sysimg_so(const char *fname) // Allow passing in a module handle directly, rather than a path JL_DLLEXPORT void jl_set_sysimg_so(void *handle) { - void* *jl_RTLD_DEFAULT_handle_pointer; - int symbol_found = jl_dlsym(handle, "jl_RTLD_DEFAULT_handle_pointer", (void **)&jl_RTLD_DEFAULT_handle_pointer, 0); - if (!symbol_found || (void*)&jl_RTLD_DEFAULT_handle != *jl_RTLD_DEFAULT_handle_pointer) + void** (*get_jl_RTLD_DEFAULT_handle_addr)(void) = NULL; + int symbol_found = jl_dlsym(handle, "get_jl_RTLD_DEFAULT_handle_addr", (void **)&get_jl_RTLD_DEFAULT_handle_addr, 0); + if (!symbol_found || (void*)&jl_RTLD_DEFAULT_handle != (get_jl_RTLD_DEFAULT_handle_addr())) jl_error("System image file failed consistency check: maybe opened the wrong version?"); if (jl_options.cpu_target == NULL) jl_options.cpu_target = "native"; diff --git a/sysimage.mk b/sysimage.mk index 993ee9a990058..0d2c9aff126e4 100644 --- a/sysimage.mk +++ b/sysimage.mk @@ -16,7 +16,7 @@ $(build_private_libdir)/%.$(SHLIB_EXT): $(build_private_libdir)/%-o.a @$(call PRINT_LINK, $(CXX) $(LDFLAGS) -shared $(fPIC) -L$(build_private_libdir) -L$(build_libdir) -L$(build_shlibdir) -o $@ \ $(WHOLE_ARCHIVE) $< $(NO_WHOLE_ARCHIVE) \ $(if $(findstring -debug,$(notdir $@)),-ljulia-internal-debug -ljulia-debug,-ljulia-internal -ljulia) \ - $$([ $(OS) = WINNT ] && echo '' -lssp)) + $$([ $(OS) = WINNT ] && echo '' -lssp --disable-auto-import --disable-runtime-pseudo-reloc)) @$(INSTALL_NAME_CMD)$(notdir $@) $@ @$(DSYMUTIL) $@ From c81d02cf41ea0e3aa3d46acb9ac468110d0fb1b3 Mon Sep 17 00:00:00 2001 From: N5N3 <2642243996@qq.com> Date: Thu, 16 May 2024 19:46:49 +0800 Subject: [PATCH 354/413] typeintersect: conservative typevar subtitution during `finish_unionall` (#54465) (cherry picked from commit a946631240cc085c883e38b6a69c4ae01c715414) --- src/builtins.c | 6 +- src/gf.c | 4 +- src/jltypes.c | 295 ++++++++++++++++++++++++++++++------------- src/julia_internal.h | 3 +- src/subtype.c | 41 +++--- test/subtype.jl | 17 +++ 6 files changed, 245 insertions(+), 121 deletions(-) diff --git a/src/builtins.c b/src/builtins.c index e4bc75bdcd28d..2fd57059f8ac2 100644 --- a/src/builtins.c +++ b/src/builtins.c @@ -1365,11 +1365,11 @@ JL_CALLABLE(jl_f_apply_type) jl_vararg_t *vm = (jl_vararg_t*)args[0]; if (!vm->T) { JL_NARGS(apply_type, 2, 3); - return (jl_value_t*)jl_wrap_vararg(args[1], nargs == 3 ? args[2] : NULL, 1); + return (jl_value_t*)jl_wrap_vararg(args[1], nargs == 3 ? args[2] : NULL, 1, 0); } else if (!vm->N) { JL_NARGS(apply_type, 2, 2); - return (jl_value_t*)jl_wrap_vararg(vm->T, args[1], 1); + return (jl_value_t*)jl_wrap_vararg(vm->T, args[1], 1, 0); } } else if (jl_is_unionall(args[0])) { @@ -2060,7 +2060,7 @@ void jl_init_primitives(void) JL_GC_DISABLED add_builtin("Tuple", (jl_value_t*)jl_anytuple_type); add_builtin("TypeofVararg", (jl_value_t*)jl_vararg_type); add_builtin("SimpleVector", (jl_value_t*)jl_simplevector_type); - add_builtin("Vararg", (jl_value_t*)jl_wrap_vararg(NULL, NULL, 0)); + add_builtin("Vararg", (jl_value_t*)jl_wrap_vararg(NULL, NULL, 0, 0)); add_builtin("Module", (jl_value_t*)jl_module_type); add_builtin("MethodTable", (jl_value_t*)jl_methtable_type); diff --git a/src/gf.c b/src/gf.c index 186f8787cf519..5a9f18ffad9f2 100644 --- a/src/gf.c +++ b/src/gf.c @@ -735,7 +735,7 @@ static jl_value_t *inst_varargp_in_env(jl_value_t *decl, jl_svec_t *sparams) vm = T_has_tv ? jl_type_unionall(v, T) : T; if (N_has_tv) N = NULL; - vm = (jl_value_t*)jl_wrap_vararg(vm, N, 1); // this cannot throw for these inputs + vm = (jl_value_t*)jl_wrap_vararg(vm, N, 1, 0); // this cannot throw for these inputs } sp++; decl = ((jl_unionall_t*)decl)->body; @@ -984,7 +984,7 @@ static void jl_compilation_sig( // avoid Vararg{Type{Type{...}}} if (jl_is_type_type(type_i) && jl_is_type_type(jl_tparam0(type_i))) type_i = (jl_value_t*)jl_type_type; - type_i = (jl_value_t*)jl_wrap_vararg(type_i, (jl_value_t*)NULL, 1); // this cannot throw for these inputs + type_i = (jl_value_t*)jl_wrap_vararg(type_i, (jl_value_t*)NULL, 1, 0); // this cannot throw for these inputs } else { type_i = inst_varargp_in_env(decl, sparams); diff --git a/src/jltypes.c b/src/jltypes.c index e3089c650eda8..b39997ada2dd8 100644 --- a/src/jltypes.c +++ b/src/jltypes.c @@ -847,14 +847,14 @@ JL_DLLEXPORT jl_value_t *jl_type_unionall(jl_tvar_t *v, jl_value_t *body) if (T_has_tv) { jl_value_t *wrapped = jl_type_unionall(v, vm->T); JL_GC_PUSH1(&wrapped); - wrapped = (jl_value_t*)jl_wrap_vararg(wrapped, vm->N, 1); + wrapped = (jl_value_t*)jl_wrap_vararg(wrapped, vm->N, 1, 0); JL_GC_POP(); return wrapped; } else { assert(N_has_tv); assert(vm->N == (jl_value_t*)v); - return (jl_value_t*)jl_wrap_vararg(vm->T, NULL, 1); + return (jl_value_t*)jl_wrap_vararg(vm->T, NULL, 1, 0); } } if (!jl_is_type(body) && !jl_is_typevar(body)) @@ -1317,7 +1317,7 @@ struct _jl_typestack_t; typedef struct _jl_typestack_t jl_typestack_t; static jl_value_t *inst_datatype_inner(jl_datatype_t *dt, jl_svec_t *p, jl_value_t **iparams, size_t ntp, - jl_typestack_t *stack, jl_typeenv_t *env, int check); + jl_typestack_t *stack, jl_typeenv_t *env, int check, int nothrow); // Build an environment mapping a TypeName's parameters to parameter values. // This is the environment needed for instantiating a type's supertype and field types. @@ -1325,7 +1325,7 @@ static jl_value_t *inst_datatype_env(jl_value_t *dt, jl_svec_t *p, jl_value_t ** jl_typestack_t *stack, jl_typeenv_t *env, int c) { if (jl_is_datatype(dt)) - return inst_datatype_inner((jl_datatype_t*)dt, p, iparams, ntp, stack, env, 1); + return inst_datatype_inner((jl_datatype_t*)dt, p, iparams, ntp, stack, env, 1, 0); assert(jl_is_unionall(dt)); jl_unionall_t *ua = (jl_unionall_t*)dt; jl_typeenv_t e = { ua->var, iparams[c], env }; @@ -1432,12 +1432,12 @@ jl_datatype_t *jl_apply_cmpswap_type(jl_value_t *ty) } // used to expand an NTuple to a flat representation -static jl_value_t *jl_tupletype_fill(size_t n, jl_value_t *v) +static jl_value_t *jl_tupletype_fill(size_t n, jl_value_t *v, int check, int nothrow) { jl_value_t *p = NULL; JL_GC_PUSH1(&p); p = (jl_value_t*)jl_svec_fill(n, v); - p = jl_apply_tuple_type((jl_svec_t*)p); + p = inst_datatype_inner(jl_anytuple_type, (jl_svec_t*)p, jl_svec_data(p), n, NULL, NULL, check, nothrow); JL_GC_POP(); return p; } @@ -1447,13 +1447,13 @@ JL_EXTENSION struct _jl_typestack_t { struct _jl_typestack_t *prev; }; -static jl_value_t *inst_type_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t *stack, int check); +static jl_value_t *inst_type_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t *stack, int check, int nothrow); static jl_svec_t *inst_ftypes(jl_svec_t *p, jl_typeenv_t *env, jl_typestack_t *stack); JL_DLLEXPORT jl_value_t *jl_instantiate_unionall(jl_unionall_t *u, jl_value_t *p) { jl_typeenv_t env = { u->var, p, NULL }; - return inst_type_w_(u->body, &env, NULL, 1); + return inst_type_w_(u->body, &env, NULL, 1, 0); } jl_unionall_t *jl_rename_unionall(jl_unionall_t *u) @@ -1462,18 +1462,27 @@ jl_unionall_t *jl_rename_unionall(jl_unionall_t *u) jl_value_t *t = NULL; JL_GC_PUSH2(&v, &t); jl_typeenv_t env = { u->var, (jl_value_t *)v, NULL }; - t = inst_type_w_(u->body, &env, NULL, 0); + t = inst_type_w_(u->body, &env, NULL, 0, 0); t = jl_new_struct(jl_unionall_type, v, t); JL_GC_POP(); return (jl_unionall_t*)t; } +jl_value_t *jl_substitute_var_nothrow(jl_value_t *t, jl_tvar_t *var, jl_value_t *val) +{ + if (val == (jl_value_t*)var) + return t; + int nothrow = jl_is_typevar(val) ? 0 : 1; + jl_typeenv_t env = { var, val, NULL }; + return inst_type_w_(t, &env, NULL, 1, nothrow); +} + jl_value_t *jl_substitute_var(jl_value_t *t, jl_tvar_t *var, jl_value_t *val) { if (val == (jl_value_t*)var) return t; jl_typeenv_t env = { var, val, NULL }; - return inst_type_w_(t, &env, NULL, 1); + return inst_type_w_(t, &env, NULL, 1, 0); } jl_value_t *jl_unwrap_unionall(jl_value_t *v) @@ -1839,7 +1848,7 @@ jl_value_t *normalize_unionalls(jl_value_t *t) static jl_value_t *_jl_instantiate_type_in_env(jl_value_t *ty, jl_unionall_t *env, jl_value_t **vals, jl_typeenv_t *prev, jl_typestack_t *stack); static jl_value_t *inst_datatype_inner(jl_datatype_t *dt, jl_svec_t *p, jl_value_t **iparams, size_t ntp, - jl_typestack_t *stack, jl_typeenv_t *env, int check) + jl_typestack_t *stack, jl_typeenv_t *env, int check, int nothrow) { jl_typestack_t top; jl_typename_t *tn = dt->name; @@ -1870,8 +1879,11 @@ static jl_value_t *inst_datatype_inner(jl_datatype_t *dt, jl_svec_t *p, jl_value break; } } - if (pi == jl_bottom_type) + if (pi == jl_bottom_type) { + if (nothrow) + return NULL; jl_errorf("Tuple field type cannot be Union{}"); + } if (cacheable && !jl_is_concrete_type(pi)) cacheable = 0; } @@ -1931,7 +1943,13 @@ static jl_value_t *inst_datatype_inner(jl_datatype_t *dt, jl_svec_t *p, jl_value // for whether this is even valid if (check && !istuple) { assert(ntp > 0); - check_datatype_parameters(tn, iparams, ntp); + JL_TRY { + check_datatype_parameters(tn, iparams, ntp); + } + JL_CATCH { + if (!nothrow) jl_rethrow(); + return NULL; + } } else if (ntp == 0 && jl_emptytuple_type != NULL) { // empty tuple type case @@ -1958,7 +1976,7 @@ static jl_value_t *inst_datatype_inner(jl_datatype_t *dt, jl_svec_t *p, jl_value if (nt == 0 || !jl_has_free_typevars(va0)) { if (ntp == 1) { JL_GC_POP(); - return jl_tupletype_fill(nt, va0); + return jl_tupletype_fill(nt, va0, 0, 0); } size_t i, l; p = jl_alloc_svec(ntp - 1 + nt); @@ -1967,7 +1985,9 @@ static jl_value_t *inst_datatype_inner(jl_datatype_t *dt, jl_svec_t *p, jl_value l = ntp - 1 + nt; for (; i < l; i++) jl_svecset(p, i, va0); - jl_value_t *ndt = jl_apply_tuple_type(p); + size_t np = jl_svec_len(p); + jl_value_t **pp = jl_svec_data(p); + jl_value_t *ndt = inst_datatype_inner(jl_anytuple_type, p, pp, np, NULL, NULL, check, nothrow); JL_GC_POP(); return ndt; } @@ -2046,6 +2066,7 @@ static jl_value_t *inst_datatype_inner(jl_datatype_t *dt, jl_svec_t *p, jl_value ndt->parameters = p; jl_gc_wb(ndt, ndt->parameters); ndt->types = NULL; // to be filled in below + int invalid = 0; if (istuple) { ndt->types = p; // TODO: this may need to filter out certain types } @@ -2053,26 +2074,41 @@ static jl_value_t *inst_datatype_inner(jl_datatype_t *dt, jl_svec_t *p, jl_value jl_value_t *names_tup = jl_svecref(p, 0); jl_value_t *values_tt = jl_svecref(p, 1); if (!jl_has_free_typevars(names_tup) && !jl_has_free_typevars(values_tt)) { - if (!jl_is_tuple(names_tup)) - jl_type_error_rt("NamedTuple", "names", (jl_value_t*)jl_anytuple_type, names_tup); + if (!jl_is_tuple(names_tup)) { + if (!nothrow) + jl_type_error_rt("NamedTuple", "names", (jl_value_t*)jl_anytuple_type, names_tup); + invalid = 1; + } size_t nf = jl_nfields(names_tup); for (size_t i = 0; i < nf; i++) { jl_value_t *ni = jl_fieldref(names_tup, i); - if (!jl_is_symbol(ni)) - jl_type_error_rt("NamedTuple", "name", (jl_value_t*)jl_symbol_type, ni); + if (!jl_is_symbol(ni)) { + if (!nothrow) + jl_type_error_rt("NamedTuple", "name", (jl_value_t*)jl_symbol_type, ni); + invalid = 1; break; + } for (size_t j = 0; j < i; j++) { - if (ni == jl_fieldref_noalloc(names_tup, j)) - jl_errorf("duplicate field name in NamedTuple: \"%s\" is not unique", jl_symbol_name((jl_sym_t*)ni)); + if (ni == jl_fieldref_noalloc(names_tup, j)) { + if (!nothrow) + jl_errorf("duplicate field name in NamedTuple: \"%s\" is not unique", jl_symbol_name((jl_sym_t*)ni)); + invalid = 1; break; + } } + if (invalid) break; } if (values_tt == jl_bottom_type && nf > 0) { ndt->types = jl_svec_fill(nf, jl_bottom_type); } else { - if (!jl_is_datatype(values_tt)) + if (!jl_is_datatype(values_tt)) { + // should have been checked within `check_datatype_parameters`. jl_error("NamedTuple field type must be a tuple datatype"); - if (jl_is_va_tuple((jl_datatype_t*)values_tt) || jl_nparams(values_tt) != nf) - jl_error("NamedTuple names and field types must have matching lengths"); + } + if (jl_is_va_tuple((jl_datatype_t*)values_tt) || jl_nparams(values_tt) != nf) { + if (!nothrow) + jl_error("NamedTuple names and field types must have matching lengths"); + invalid = 1; + } ndt->types = ((jl_datatype_t*)values_tt)->parameters; } jl_gc_wb(ndt, ndt->types); @@ -2082,6 +2118,12 @@ static jl_value_t *inst_datatype_inner(jl_datatype_t *dt, jl_svec_t *p, jl_value } } + if (nothrow && invalid) { + if (cacheable) + JL_UNLOCK(&typecache_lock); + JL_GC_POP(); + return NULL; + } jl_datatype_t *primarydt = ((jl_datatype_t*)jl_unwrap_unionall(tn->wrapper)); jl_precompute_memoized_dt(ndt, cacheable); if (primarydt->layout) @@ -2091,7 +2133,14 @@ static jl_value_t *inst_datatype_inner(jl_datatype_t *dt, jl_svec_t *p, jl_value ndt->super = jl_any_type; } else if (dt->super) { - ndt->super = (jl_datatype_t*)inst_type_w_((jl_value_t*)dt->super, env, stack, check); + jl_value_t *super = inst_type_w_((jl_value_t*)dt->super, env, stack, check, nothrow); + if (nothrow && super == NULL) { + if (cacheable) + JL_UNLOCK(&typecache_lock); + JL_GC_POP(); + return NULL; + } + ndt->super = (jl_datatype_t *)super; jl_gc_wb(ndt, ndt->super); } jl_svec_t *ftypes = dt->types; @@ -2139,7 +2188,7 @@ static jl_value_t *inst_datatype_inner(jl_datatype_t *dt, jl_svec_t *p, jl_value static jl_value_t *jl_apply_tuple_type_v_(jl_value_t **p, size_t np, jl_svec_t *params) { - return inst_datatype_inner(jl_anytuple_type, params, p, np, NULL, NULL, 1); + return inst_datatype_inner(jl_anytuple_type, params, p, np, NULL, NULL, 1, 0); } JL_DLLEXPORT jl_value_t *jl_apply_tuple_type(jl_svec_t *params) @@ -2178,7 +2227,7 @@ jl_tupletype_t *jl_inst_arg_tuple_type(jl_value_t *arg1, jl_value_t **args, size } jl_svecset(params, i, ai); } - tt = (jl_datatype_t*)inst_datatype_inner(jl_anytuple_type, params, jl_svec_data(params), nargs, NULL, NULL, 1); + tt = (jl_datatype_t*)inst_datatype_inner(jl_anytuple_type, params, jl_svec_data(params), nargs, NULL, NULL, 1, 0); JL_GC_POP(); } return tt; @@ -2193,7 +2242,7 @@ static jl_svec_t *inst_ftypes(jl_svec_t *p, jl_typeenv_t *env, jl_typestack_t *s for (i = 0; i < lp; i++) { jl_value_t *pi = jl_svecref(p, i); JL_TRY { - pi = inst_type_w_(pi, env, stack, 1); + pi = inst_type_w_(pi, env, stack, 1, 0); if (!jl_is_type(pi) && !jl_is_typevar(pi)) { pi = jl_bottom_type; } @@ -2207,7 +2256,7 @@ static jl_svec_t *inst_ftypes(jl_svec_t *p, jl_typeenv_t *env, jl_typestack_t *s return np; } -static jl_value_t *inst_tuple_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t *stack, int check) +static jl_value_t *inst_tuple_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t *stack, int check, int nothrow) { jl_datatype_t *tt = (jl_datatype_t*)t; jl_svec_t *tp = tt->parameters; @@ -2231,9 +2280,11 @@ static jl_value_t *inst_tuple_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_ } if (T != NULL && N != NULL && jl_is_long(N)) { ssize_t nt = jl_unbox_long(N); - if (nt < 0) - jl_errorf("size or dimension is negative: %zd", nt); - return jl_tupletype_fill(nt, T); + if (nt >= 0) + return jl_tupletype_fill(nt, T, check, nothrow); + if (nothrow) + return NULL; + jl_errorf("Vararg length is negative: %zd", nt); } } jl_value_t **iparams; @@ -2245,23 +2296,31 @@ static jl_value_t *inst_tuple_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_ iparams[0] = (jl_value_t*)ip_heap; iparams = jl_svec_data(ip_heap); } - int bound = 0; - int i; + int i, bound = 0; for (i = 0; i < ntp; i++) { jl_value_t *elt = jl_svecref(tp, i); - jl_value_t *pi = inst_type_w_(elt, env, stack, check); + jl_value_t *pi = inst_type_w_(elt, env, stack, check, nothrow); + if (pi == NULL) { + if (i == ntp-1 && jl_is_vararg(elt)) { + t = NULL; + break; + } + else { + pi = jl_bottom_type; + } + } iparams[i] = pi; if (ip_heap) jl_gc_wb(ip_heap, pi); bound |= (pi != elt); } - if (bound) - t = inst_datatype_inner(tt, ip_heap, iparams, ntp, stack, env, check); + if (t != NULL && bound) + t = inst_datatype_inner(tt, ip_heap, iparams, ntp, stack, env, check, nothrow); JL_GC_POP(); return t; } -static jl_value_t *inst_type_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t *stack, int check) +static jl_value_t *inst_type_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t *stack, int check, int nothrow) { size_t i; if (jl_is_typevar(t)) { @@ -2281,42 +2340,71 @@ static jl_value_t *inst_type_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t jl_value_t *var = NULL; jl_value_t *newbody = NULL; JL_GC_PUSH3(&lb, &var, &newbody); - lb = inst_type_w_(ua->var->lb, env, stack, check); - var = inst_type_w_(ua->var->ub, env, stack, check); - if (lb != ua->var->lb || var != ua->var->ub) { - var = (jl_value_t*)jl_new_typevar(ua->var->name, lb, var); - } - else { - var = (jl_value_t*)ua->var; + JL_TRY { + lb = inst_type_w_(ua->var->lb, env, stack, check, 0); } - jl_typeenv_t newenv = { ua->var, var, env }; - newbody = inst_type_w_(ua->body, &newenv, stack, check); - if (newbody == (jl_value_t*)jl_emptytuple_type) { - // NTuple{0} => Tuple{} can make a typevar disappear - t = (jl_value_t*)jl_emptytuple_type; + JL_CATCH { + if (!nothrow) jl_rethrow(); + t = NULL; + } + if (t != NULL) { + var = inst_type_w_(ua->var->ub, env, stack, check, nothrow); + if (var == NULL) { + if (lb == jl_bottom_type) + var = jl_bottom_type; + else + t = NULL; + } + else if (lb != ua->var->lb || var != ua->var->ub) { + var = (jl_value_t*)jl_new_typevar(ua->var->name, lb, var); + } + else { + var = (jl_value_t*)ua->var; + } } - else if (newbody != ua->body || var != (jl_value_t*)ua->var) { - // if t's parameters are not bound in the environment, return it uncopied (#9378) - t = jl_new_struct(jl_unionall_type, var, newbody); + if (t != NULL) { + jl_typeenv_t newenv = { ua->var, var, env }; + newbody = inst_type_w_(ua->body, &newenv, stack, check, nothrow); + if (newbody == NULL) { + t = NULL; + } + else if (newbody == (jl_value_t*)jl_emptytuple_type) { + // NTuple{0} => Tuple{} can make a typevar disappear + t = (jl_value_t*)jl_emptytuple_type; + } + else if (nothrow && !jl_has_typevar(newbody, (jl_tvar_t *)var)) { + t = newbody; + } + else if (newbody != ua->body || var != (jl_value_t*)ua->var) { + // if t's parameters are not bound in the environment, return it uncopied (#9378) + t = jl_new_struct(jl_unionall_type, var, newbody); + } } JL_GC_POP(); return t; } if (jl_is_uniontype(t)) { jl_uniontype_t *u = (jl_uniontype_t*)t; - jl_value_t *a = inst_type_w_(u->a, env, stack, check); + jl_value_t *a = inst_type_w_(u->a, env, stack, check, nothrow); jl_value_t *b = NULL; JL_GC_PUSH2(&a, &b); - b = inst_type_w_(u->b, env, stack, check); + b = inst_type_w_(u->b, env, stack, check, nothrow); if (a != u->a || b != u->b) { - if (check) { - jl_value_t *uargs[2] = {a, b}; - t = jl_type_union(uargs, 2); - } - else { + if (!check) { // fast path for `jl_rename_unionall`. t = jl_new_struct(jl_uniontype_type, a, b); } + else if (nothrow && a == NULL) { + t = b; + } + else if (nothrow && b == NULL) { + t = a; + } + else { + assert(a != NULL && b != NULL); + jl_value_t *uargs[2] = {a, b}; + t = jl_type_union(uargs, 2); + } } JL_GC_POP(); return t; @@ -2327,12 +2415,15 @@ static jl_value_t *inst_type_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t jl_value_t *N = NULL; JL_GC_PUSH2(&T, &N); if (v->T) { - T = inst_type_w_(v->T, env, stack, check); - if (v->N) - N = inst_type_w_(v->N, env, stack, check); + T = inst_type_w_(v->T, env, stack, check, nothrow); + if (T == NULL) + T = jl_bottom_type; + if (v->N) // This branch should never throw. + N = inst_type_w_(v->N, env, stack, check, 0); } if (T != v->T || N != v->N) { - t = (jl_value_t*)jl_wrap_vararg(T, N, check); + // `Vararg` is special, we'd better handle inner error at Tuple level. + t = (jl_value_t*)jl_wrap_vararg(T, N, check, nothrow); } JL_GC_POP(); return t; @@ -2345,20 +2436,27 @@ static jl_value_t *inst_type_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t return t; jl_typename_t *tn = tt->name; if (tn == jl_tuple_typename) - return inst_tuple_w_(t, env, stack, check); + return inst_tuple_w_(t, env, stack, check, nothrow); size_t ntp = jl_svec_len(tp); jl_value_t **iparams; JL_GC_PUSHARGS(iparams, ntp); int bound = 0; for (i = 0; i < ntp; i++) { jl_value_t *elt = jl_svecref(tp, i); - jl_value_t *pi = inst_type_w_(elt, env, stack, check); - iparams[i] = pi; - bound |= (pi != elt); + JL_TRY { + jl_value_t *pi = inst_type_w_(elt, env, stack, check, 0); + iparams[i] = pi; + bound |= (pi != elt); + } + JL_CATCH { + if (!nothrow) jl_rethrow(); + t = NULL; + } + if (t == NULL) break; } // if t's parameters are not bound in the environment, return it uncopied (#9378) - if (bound) - t = inst_datatype_inner(tt, NULL, iparams, ntp, stack, env, check); + if (t != NULL && bound) + t = inst_datatype_inner(tt, NULL, iparams, ntp, stack, env, check, nothrow); JL_GC_POP(); return t; } @@ -2369,7 +2467,7 @@ static jl_value_t *instantiate_with(jl_value_t *t, jl_value_t **env, size_t n, j jl_typeenv_t en = { (jl_tvar_t*)env[0], env[1], te }; return instantiate_with(t, &env[2], n-1, &en ); } - return inst_type_w_(t, te, NULL, 1); + return inst_type_w_(t, te, NULL, 1, 0); } jl_value_t *jl_instantiate_type_with(jl_value_t *t, jl_value_t **env, size_t n) @@ -2383,7 +2481,7 @@ static jl_value_t *_jl_instantiate_type_in_env(jl_value_t *ty, jl_unionall_t *en if (jl_is_unionall(env->body)) return _jl_instantiate_type_in_env(ty, (jl_unionall_t*)env->body, vals + 1, &en, stack); else - return inst_type_w_(ty, &en, stack, 1); + return inst_type_w_(ty, &en, stack, 1, 0); } JL_DLLEXPORT jl_value_t *jl_instantiate_type_in_env(jl_value_t *ty, jl_unionall_t *env, jl_value_t **vals) @@ -2405,8 +2503,10 @@ jl_datatype_t *jl_wrap_Type(jl_value_t *t) return (jl_datatype_t*)jl_instantiate_unionall(jl_type_type, t); } -jl_vararg_t *jl_wrap_vararg(jl_value_t *t, jl_value_t *n, int check) +jl_vararg_t *jl_wrap_vararg(jl_value_t *t, jl_value_t *n, int check, int nothrow) { + int valid = 1; + jl_vararg_t *vm = NULL; jl_task_t *ct = jl_current_task; JL_GC_PUSH1(&t); if (check) { @@ -2417,31 +2517,44 @@ jl_vararg_t *jl_wrap_vararg(jl_value_t *t, jl_value_t *n, int check) // values and not the bounds of variables. /* jl_tvar_t *N = (jl_tvar_t*)n; - if (!(N->lb == jl_bottom_type && N->ub == (jl_value_t*)jl_any_type)) - jl_error("TypeVar in Vararg length must have bounds Union{} and Any"); + if (valid && !(N->lb == jl_bottom_type && N->ub == (jl_value_t*)jl_any_type)) { + if (!nothrow) + jl_error("TypeVar in Vararg length must have bounds Union{} and Any"); + invalid = 1; + } */ } - else if (!jl_is_long(n)) { - jl_type_error_rt("Vararg", "count", (jl_value_t*)jl_long_type, n); + else if (valid && !jl_is_long(n)) { + if (!nothrow) + jl_type_error_rt("Vararg", "count", (jl_value_t*)jl_long_type, n); + valid = 0; } - else if (jl_unbox_long(n) < 0) { - jl_errorf("Vararg length is negative: %zd", jl_unbox_long(n)); + else if (valid && jl_unbox_long(n) < 0) { + if (!nothrow) + jl_errorf("Vararg length is negative: %zd", jl_unbox_long(n)); + valid = 0; } } if (t) { - if (!jl_valid_type_param(t)) { - jl_type_error_rt("Vararg", "type", (jl_value_t*)jl_type_type, t); + if (valid && !jl_valid_type_param(t)) { + if (!nothrow) + jl_type_error_rt("Vararg", "type", (jl_value_t*)jl_type_type, t); + valid = 0; + } + if (valid) { + t = normalize_unionalls(t); + jl_value_t *tw = extract_wrapper(t); + if (tw && t != tw && jl_types_equal(t, tw)) + t = tw; } - t = normalize_unionalls(t); - jl_value_t *tw = extract_wrapper(t); - if (tw && t != tw && jl_types_equal(t, tw)) - t = tw; } } - jl_vararg_t *vm = (jl_vararg_t *)jl_gc_alloc(ct->ptls, sizeof(jl_vararg_t), jl_vararg_type); - jl_set_typetagof(vm, jl_vararg_tag, 0); - vm->T = t; - vm->N = n; + if (valid) { + vm = (jl_vararg_t *)jl_gc_alloc(ct->ptls, sizeof(jl_vararg_t), jl_vararg_type); + jl_set_typetagof(vm, jl_vararg_tag, 0); + vm->T = t; + vm->N = n; + } JL_GC_POP(); return vm; } @@ -2502,7 +2615,7 @@ void jl_reinstantiate_inner_types(jl_datatype_t *t) // can throw! for (i = 0; i < n; i++) env[i].val = jl_svecref(ndt->parameters, i); - ndt->super = (jl_datatype_t*)inst_type_w_((jl_value_t*)t->super, &env[n - 1], &top, 1); + ndt->super = (jl_datatype_t*)inst_type_w_((jl_value_t*)t->super, &env[n - 1], &top, 1, 0); jl_gc_wb(ndt, ndt->super); } @@ -2725,7 +2838,7 @@ void jl_init_types(void) JL_GC_DISABLED // It seems like we probably usually end up needing the box for kinds (often used in an Any context), so force it to exist jl_vararg_type->name->mayinlinealloc = 0; - jl_svec_t *anytuple_params = jl_svec(1, jl_wrap_vararg((jl_value_t*)jl_any_type, (jl_value_t*)NULL, 0)); + jl_svec_t *anytuple_params = jl_svec(1, jl_wrap_vararg((jl_value_t*)jl_any_type, (jl_value_t*)NULL, 0, 0)); jl_anytuple_type = jl_new_datatype(jl_symbol("Tuple"), core, jl_any_type, anytuple_params, jl_emptysvec, anytuple_params, jl_emptysvec, 0, 0, 0); jl_tuple_typename = jl_anytuple_type->name; diff --git a/src/julia_internal.h b/src/julia_internal.h index 85ce95b65613d..5bd101d35d20c 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -711,6 +711,7 @@ JL_DLLEXPORT int jl_type_morespecific_no_subtype(jl_value_t *a, jl_value_t *b); jl_value_t *jl_instantiate_type_with(jl_value_t *t, jl_value_t **env, size_t n); JL_DLLEXPORT jl_value_t *jl_instantiate_type_in_env(jl_value_t *ty, jl_unionall_t *env, jl_value_t **vals); jl_value_t *jl_substitute_var(jl_value_t *t, jl_tvar_t *var, jl_value_t *val); +jl_value_t *jl_substitute_var_nothrow(jl_value_t *t, jl_tvar_t *var, jl_value_t *val); jl_unionall_t *jl_rename_unionall(jl_unionall_t *u); JL_DLLEXPORT jl_value_t *jl_unwrap_unionall(jl_value_t *v JL_PROPAGATES_ROOT) JL_NOTSAFEPOINT; JL_DLLEXPORT jl_value_t *jl_rewrap_unionall(jl_value_t *t, jl_value_t *u); @@ -723,7 +724,7 @@ jl_datatype_t *jl_new_abstracttype(jl_value_t *name, jl_module_t *module, jl_datatype_t *jl_new_uninitialized_datatype(void); void jl_precompute_memoized_dt(jl_datatype_t *dt, int cacheable); JL_DLLEXPORT jl_datatype_t *jl_wrap_Type(jl_value_t *t); // x -> Type{x} -jl_vararg_t *jl_wrap_vararg(jl_value_t *t, jl_value_t *n, int check); +jl_vararg_t *jl_wrap_vararg(jl_value_t *t, jl_value_t *n, int check, int nothrow); void jl_reinstantiate_inner_types(jl_datatype_t *t); jl_datatype_t *jl_lookup_cache_type_(jl_datatype_t *type); void jl_cache_type_(jl_datatype_t *type); diff --git a/src/subtype.c b/src/subtype.c index 16ec800b5c8f2..c9ad92fff94d7 100644 --- a/src/subtype.c +++ b/src/subtype.c @@ -963,7 +963,7 @@ static int subtype_unionall(jl_value_t *t, jl_unionall_t *u, jl_stenv_t *e, int8 if (R && ans && e->envidx < e->envsz) { jl_value_t *val; if (vb.intvalued && vb.lb == (jl_value_t*)jl_any_type) - val = (jl_value_t*)jl_wrap_vararg(NULL, NULL, 0); // special token result that represents N::Int in the envout + val = (jl_value_t*)jl_wrap_vararg(NULL, NULL, 0, 0); // special token result that represents N::Int in the envout else if (!vb.occurs_inv && vb.lb != jl_bottom_type) val = is_leaf_bound(vb.lb) ? vb.lb : (jl_value_t*)jl_new_typevar(u->var->name, jl_bottom_type, vb.lb); else if (vb.lb == vb.ub) @@ -2770,12 +2770,9 @@ static jl_value_t *omit_bad_union(jl_value_t *u, jl_tvar_t *t) res = jl_bottom_type; } else if (obviously_egal(var->lb, ub)) { - JL_TRY { - res = jl_substitute_var(body, var, ub); - } - JL_CATCH { + res = jl_substitute_var_nothrow(body, var, ub); + if (res == NULL) res = jl_bottom_type; - } } else { if (ub != var->ub) { @@ -2964,12 +2961,9 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind } if (varval) { if (ub_has_dep) { // inner substitution has been handled - JL_TRY { - btemp->ub = jl_substitute_var(btemp->ub, vb->var, varval); - } - JL_CATCH { + btemp->ub = jl_substitute_var_nothrow(btemp->ub, vb->var, varval); + if (btemp->ub == NULL) res = jl_bottom_type; - } } } else if (btemp->ub == (jl_value_t*)vb->var) { @@ -3002,18 +2996,17 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind // if `v` still occurs, re-wrap body in `UnionAll v` or eliminate the UnionAll if (jl_has_typevar(res, vb->var)) { if (varval) { - JL_TRY { - // you can construct `T{x} where x` even if T's parameter is actually - // limited. in that case we might get an invalid instantiation here. - res = jl_substitute_var(res, vb->var, varval); - // simplify chains of UnionAlls where bounds become equal - while (jl_is_unionall(res) && obviously_egal(((jl_unionall_t*)res)->var->lb, - ((jl_unionall_t*)res)->var->ub)) - res = jl_instantiate_unionall((jl_unionall_t*)res, ((jl_unionall_t*)res)->var->lb); + // you can construct `T{x} where x` even if T's parameter is actually + // limited. in that case we might get an invalid instantiation here. + res = jl_substitute_var_nothrow(res, vb->var, varval); + // simplify chains of UnionAlls where bounds become equal + while (res != NULL && jl_is_unionall(res) && obviously_egal(((jl_unionall_t*)res)->var->lb, + ((jl_unionall_t*)res)->var->ub)) { + jl_unionall_t * ures = (jl_unionall_t *)res; + res = jl_substitute_var_nothrow(ures->body, ures->var, ures->var->lb); } - JL_CATCH { + if (res == NULL) res = jl_bottom_type; - } } else { if (newvar != vb->var) @@ -3273,7 +3266,7 @@ static jl_value_t *intersect_varargs(jl_vararg_t *vmx, jl_vararg_t *vmy, ssize_t ii = (jl_value_t*)vmy; else { JL_GC_PUSH1(&ii); - ii = (jl_value_t*)jl_wrap_vararg(ii, NULL, 1); + ii = (jl_value_t*)jl_wrap_vararg(ii, NULL, 1, 0); JL_GC_POP(); } return ii; @@ -3314,7 +3307,7 @@ static jl_value_t *intersect_varargs(jl_vararg_t *vmx, jl_vararg_t *vmy, ssize_t else if (yp2 && obviously_egal(yp1, ii) && obviously_egal(yp2, i2)) ii = (jl_value_t*)vmy; else - ii = (jl_value_t*)jl_wrap_vararg(ii, i2, 1); + ii = (jl_value_t*)jl_wrap_vararg(ii, i2, 1, 0); JL_GC_POP(); return ii; } @@ -4515,7 +4508,7 @@ static jl_value_t *insert_nondiagonal(jl_value_t *type, jl_varbinding_t *troot, JL_GC_PUSH2(&newt, &n); newt = insert_nondiagonal(t, troot, widen2ub); if (t != newt) - type = (jl_value_t *)jl_wrap_vararg(newt, n, 0); + type = (jl_value_t *)jl_wrap_vararg(newt, n, 0, 0); JL_GC_POP(); } else if (jl_is_datatype(type)) { diff --git a/test/subtype.jl b/test/subtype.jl index fffe5a3031fed..d222a35d2e6c9 100644 --- a/test/subtype.jl +++ b/test/subtype.jl @@ -2604,3 +2604,20 @@ let S = Tuple{Val{Val{Union{Val{A2}, A2}}}, Val{Val{Union{Val{A2}, Val{A4}, A4}} T = Tuple{Vararg{Val{V}}} where {V} @testintersect(S, T, !Union{}) end + +#issue 54356 +abstract type A54356{T<:Real} end +struct B54356{T} <: A54356{T} end +let S = Tuple{Val, Val{T}} where {T}, R = Tuple{Val{Val{T}}, Val{T}} where {T} + # general parameters check + @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, Complex{B}}}, S{1}, R{1}) + @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, B54356{B}}}, S{1}, R{1}) + # extra check for Vararg + @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, NTuple{B,Any}}}, S{-1}, R{-1}) + @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, Tuple{Any,Vararg{Any,B}}}}, S{-1}, R{-1}) + # extra check for NamedTuple + @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, NamedTuple{B,Tuple{Int}}}}, S{1}, R{1}) + @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, NamedTuple{B,Tuple{Int}}}}, S{(1,)}, R{(1,)}) + @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, NamedTuple{(:a),B}}}, S{NTuple{2,Int}}, R{NTuple{2,Int}}) + @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, NamedTuple{B,Tuple{Int,Int}}}}, S{(:a,:a)}, R{(:a,:a)}) +end From 7ebe20315f05041f68f7f99cd8491480ea5c0906 Mon Sep 17 00:00:00 2001 From: N5N3 <2642243996@qq.com> Date: Sun, 19 May 2024 13:10:05 +0800 Subject: [PATCH 355/413] typeintersect: followup cleanup for the nothrow path of type instantiation (#54514) (cherry picked from commit af545b90c5657e0e210aa638542052e16ca90fef) --- src/jltypes.c | 109 ++++++++++++++++++++++++++----------------- src/julia_internal.h | 2 +- src/subtype.c | 12 +++-- test/subtype.jl | 21 ++++++++- 4 files changed, 94 insertions(+), 50 deletions(-) diff --git a/src/jltypes.c b/src/jltypes.c index b39997ada2dd8..dd26d1df06625 100644 --- a/src/jltypes.c +++ b/src/jltypes.c @@ -1468,11 +1468,11 @@ jl_unionall_t *jl_rename_unionall(jl_unionall_t *u) return (jl_unionall_t*)t; } -jl_value_t *jl_substitute_var_nothrow(jl_value_t *t, jl_tvar_t *var, jl_value_t *val) +jl_value_t *jl_substitute_var_nothrow(jl_value_t *t, jl_tvar_t *var, jl_value_t *val, int nothrow) { if (val == (jl_value_t*)var) return t; - int nothrow = jl_is_typevar(val) ? 0 : 1; + nothrow = jl_is_typevar(val) ? 0 : nothrow; jl_typeenv_t env = { var, val, NULL }; return inst_type_w_(t, &env, NULL, 1, nothrow); } @@ -1694,7 +1694,7 @@ void jl_precompute_memoized_dt(jl_datatype_t *dt, int cacheable) dt->hash = typekey_hash(dt->name, jl_svec_data(dt->parameters), l, cacheable); } -static void check_datatype_parameters(jl_typename_t *tn, jl_value_t **params, size_t np) +static int check_datatype_parameters(jl_typename_t *tn, jl_value_t **params, size_t np, int nothrow) { jl_value_t *wrapper = tn->wrapper; jl_value_t **bounds; @@ -1712,6 +1712,10 @@ static void check_datatype_parameters(jl_typename_t *tn, jl_value_t **params, si assert(jl_is_unionall(wrapper)); jl_tvar_t *tv = ((jl_unionall_t*)wrapper)->var; if (!within_typevar(params[i], bounds[2*i], bounds[2*i+1])) { + if (nothrow) { + JL_GC_POP(); + return 1; + } if (tv->lb != bounds[2*i] || tv->ub != bounds[2*i+1]) // pass a new version of `tv` containing the instantiated bounds tv = jl_new_typevar(tv->name, bounds[2*i], bounds[2*i+1]); @@ -1721,12 +1725,26 @@ static void check_datatype_parameters(jl_typename_t *tn, jl_value_t **params, si int j; for (j = 2*i + 2; j < 2*np; j++) { jl_value_t *bj = bounds[j]; - if (bj != (jl_value_t*)jl_any_type && bj != jl_bottom_type) - bounds[j] = jl_substitute_var(bj, tv, params[i]); + if (bj != (jl_value_t*)jl_any_type && bj != jl_bottom_type) { + int isub = j & 1; + // use different nothrow level for lb and ub substitution. + // TODO: This assuming the top instantiation could only start with + // `nothrow == 2` or `nothrow == 0`. If `nothrow` is initially set to 1 + // then we might miss some inner error, perhaps the normal path should + // also follow this rule? + jl_value_t *nb = jl_substitute_var_nothrow(bj, tv, params[i], nothrow ? (isub ? 2 : 1) : 0 ); + if (nb == NULL) { + assert(nothrow); + JL_GC_POP(); + return 1; + } + bounds[j] = nb; + } } wrapper = ((jl_unionall_t*)wrapper)->body; } JL_GC_POP(); + return 0; } jl_value_t *extract_wrapper(jl_value_t *t JL_PROPAGATES_ROOT) JL_GLOBALLY_ROOTED @@ -1943,13 +1961,8 @@ static jl_value_t *inst_datatype_inner(jl_datatype_t *dt, jl_svec_t *p, jl_value // for whether this is even valid if (check && !istuple) { assert(ntp > 0); - JL_TRY { - check_datatype_parameters(tn, iparams, ntp); - } - JL_CATCH { - if (!nothrow) jl_rethrow(); + if (check_datatype_parameters(tn, iparams, ntp, nothrow)) return NULL; - } } else if (ntp == 0 && jl_emptytuple_type != NULL) { // empty tuple type case @@ -2301,7 +2314,8 @@ static jl_value_t *inst_tuple_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_ jl_value_t *elt = jl_svecref(tp, i); jl_value_t *pi = inst_type_w_(elt, env, stack, check, nothrow); if (pi == NULL) { - if (i == ntp-1 && jl_is_vararg(elt)) { + assert(nothrow); + if (nothrow == 1 || (i == ntp-1 && jl_is_vararg(elt))) { t = NULL; break; } @@ -2320,6 +2334,10 @@ static jl_value_t *inst_tuple_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_ return t; } +// `nothrow` means that when type checking fails, the type instantiation should +// return `NULL` instead of immediately throwing an error. If `nothrow` == 2 then +// we further assume that the imprecise instantiation for non invariant parameters +// is acceptable, and inner error (`NULL`) would be ignored. static jl_value_t *inst_type_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t *stack, int check, int nothrow) { size_t i; @@ -2340,11 +2358,10 @@ static jl_value_t *inst_type_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t jl_value_t *var = NULL; jl_value_t *newbody = NULL; JL_GC_PUSH3(&lb, &var, &newbody); - JL_TRY { - lb = inst_type_w_(ua->var->lb, env, stack, check, 0); - } - JL_CATCH { - if (!nothrow) jl_rethrow(); + // set nothrow <= 1 to ensure lb's accuracy. + lb = inst_type_w_(ua->var->lb, env, stack, check, nothrow ? 1 : 0); + if (lb == NULL) { + assert(nothrow); t = NULL; } if (t != NULL) { @@ -2368,11 +2385,9 @@ static jl_value_t *inst_type_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t if (newbody == NULL) { t = NULL; } - else if (newbody == (jl_value_t*)jl_emptytuple_type) { - // NTuple{0} => Tuple{} can make a typevar disappear - t = (jl_value_t*)jl_emptytuple_type; - } - else if (nothrow && !jl_has_typevar(newbody, (jl_tvar_t *)var)) { + else if (!jl_has_typevar(newbody, (jl_tvar_t *)var)) { + // inner instantiation might make a typevar disappear, e.g. + // NTuple{0,T} => Tuple{} t = newbody; } else if (newbody != ua->body || var != (jl_value_t*)ua->var) { @@ -2389,16 +2404,21 @@ static jl_value_t *inst_type_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t jl_value_t *b = NULL; JL_GC_PUSH2(&a, &b); b = inst_type_w_(u->b, env, stack, check, nothrow); + if (nothrow) { + // ensure jl_type_union nothrow. + if (a && !(jl_is_typevar(a) || jl_is_type(a))) + a = NULL; + if (b && !(jl_is_typevar(b) || jl_is_type(b))) + b = NULL; + } if (a != u->a || b != u->b) { if (!check) { // fast path for `jl_rename_unionall`. t = jl_new_struct(jl_uniontype_type, a, b); } - else if (nothrow && a == NULL) { - t = b; - } - else if (nothrow && b == NULL) { - t = a; + else if (a == NULL || b == NULL) { + assert(nothrow); + t = nothrow == 1 ? NULL : a == NULL ? b : a; } else { assert(a != NULL && b != NULL); @@ -2416,15 +2436,21 @@ static jl_value_t *inst_type_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t JL_GC_PUSH2(&T, &N); if (v->T) { T = inst_type_w_(v->T, env, stack, check, nothrow); - if (T == NULL) - T = jl_bottom_type; - if (v->N) // This branch should never throw. - N = inst_type_w_(v->N, env, stack, check, 0); + if (T == NULL) { + if (nothrow == 2) + T = jl_bottom_type; + else + t = NULL; + } + if (t && v->N) { + // set nothrow <= 1 to ensure invariant parameter's accuracy. + N = inst_type_w_(v->N, env, stack, check, nothrow ? 1 : 0); + if (N == NULL) + t = NULL; + } } - if (T != v->T || N != v->N) { - // `Vararg` is special, we'd better handle inner error at Tuple level. + if (t && (T != v->T || N != v->N)) t = (jl_value_t*)jl_wrap_vararg(T, N, check, nothrow); - } JL_GC_POP(); return t; } @@ -2443,16 +2469,15 @@ static jl_value_t *inst_type_w_(jl_value_t *t, jl_typeenv_t *env, jl_typestack_t int bound = 0; for (i = 0; i < ntp; i++) { jl_value_t *elt = jl_svecref(tp, i); - JL_TRY { - jl_value_t *pi = inst_type_w_(elt, env, stack, check, 0); - iparams[i] = pi; - bound |= (pi != elt); - } - JL_CATCH { - if (!nothrow) jl_rethrow(); + // set nothrow <= 1 to ensure invariant parameter's accuracy. + jl_value_t *pi = inst_type_w_(elt, env, stack, check, nothrow ? 1 : 0); + if (pi == NULL) { + assert(nothrow); t = NULL; + break; } - if (t == NULL) break; + iparams[i] = pi; + bound |= (pi != elt); } // if t's parameters are not bound in the environment, return it uncopied (#9378) if (t != NULL && bound) diff --git a/src/julia_internal.h b/src/julia_internal.h index 5bd101d35d20c..ca8038c3f3f20 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -711,7 +711,7 @@ JL_DLLEXPORT int jl_type_morespecific_no_subtype(jl_value_t *a, jl_value_t *b); jl_value_t *jl_instantiate_type_with(jl_value_t *t, jl_value_t **env, size_t n); JL_DLLEXPORT jl_value_t *jl_instantiate_type_in_env(jl_value_t *ty, jl_unionall_t *env, jl_value_t **vals); jl_value_t *jl_substitute_var(jl_value_t *t, jl_tvar_t *var, jl_value_t *val); -jl_value_t *jl_substitute_var_nothrow(jl_value_t *t, jl_tvar_t *var, jl_value_t *val); +jl_value_t *jl_substitute_var_nothrow(jl_value_t *t, jl_tvar_t *var, jl_value_t *val, int nothrow); jl_unionall_t *jl_rename_unionall(jl_unionall_t *u); JL_DLLEXPORT jl_value_t *jl_unwrap_unionall(jl_value_t *v JL_PROPAGATES_ROOT) JL_NOTSAFEPOINT; JL_DLLEXPORT jl_value_t *jl_rewrap_unionall(jl_value_t *t, jl_value_t *u); diff --git a/src/subtype.c b/src/subtype.c index c9ad92fff94d7..8a1ea03fdd6fd 100644 --- a/src/subtype.c +++ b/src/subtype.c @@ -2770,7 +2770,7 @@ static jl_value_t *omit_bad_union(jl_value_t *u, jl_tvar_t *t) res = jl_bottom_type; } else if (obviously_egal(var->lb, ub)) { - res = jl_substitute_var_nothrow(body, var, ub); + res = jl_substitute_var_nothrow(body, var, ub, 2); if (res == NULL) res = jl_bottom_type; } @@ -2961,9 +2961,11 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind } if (varval) { if (ub_has_dep) { // inner substitution has been handled - btemp->ub = jl_substitute_var_nothrow(btemp->ub, vb->var, varval); - if (btemp->ub == NULL) + jl_value_t *bub = jl_substitute_var_nothrow(btemp->ub, vb->var, varval, 2); + if (bub == NULL) res = jl_bottom_type; + else + btemp->ub = bub; } } else if (btemp->ub == (jl_value_t*)vb->var) { @@ -2998,12 +3000,12 @@ static jl_value_t *finish_unionall(jl_value_t *res JL_MAYBE_UNROOTED, jl_varbind if (varval) { // you can construct `T{x} where x` even if T's parameter is actually // limited. in that case we might get an invalid instantiation here. - res = jl_substitute_var_nothrow(res, vb->var, varval); + res = jl_substitute_var_nothrow(res, vb->var, varval, 2); // simplify chains of UnionAlls where bounds become equal while (res != NULL && jl_is_unionall(res) && obviously_egal(((jl_unionall_t*)res)->var->lb, ((jl_unionall_t*)res)->var->ub)) { jl_unionall_t * ures = (jl_unionall_t *)res; - res = jl_substitute_var_nothrow(ures->body, ures->var, ures->var->lb); + res = jl_substitute_var_nothrow(ures->body, ures->var, ures->var->lb, 2); } if (res == NULL) res = jl_bottom_type; diff --git a/test/subtype.jl b/test/subtype.jl index d222a35d2e6c9..d3f1dc217f699 100644 --- a/test/subtype.jl +++ b/test/subtype.jl @@ -2608,13 +2608,30 @@ end #issue 54356 abstract type A54356{T<:Real} end struct B54356{T} <: A54356{T} end -let S = Tuple{Val, Val{T}} where {T}, R = Tuple{Val{Val{T}}, Val{T}} where {T} - # general parameters check +struct C54356{S,T<:Union{S,Complex{S}}} end +struct D54356{S<:Real,T} end +let S = Tuple{Val, Val{T}} where {T}, R = Tuple{Val{Val{T}}, Val{T}} where {T}, + SS = Tuple{Val, Val{T}, Val{T}} where {T}, RR = Tuple{Val{Val{T}}, Val{T}, Val{T}} where {T} + # parameters check for self @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, Complex{B}}}, S{1}, R{1}) + # parameters check for supertype (B54356 -> A54356) @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, B54356{B}}}, S{1}, R{1}) + # enure unused TypeVar skips the `UnionAll` wrapping + @testintersect(Tuple{Val{A}, A} where {B, A<:(Union{Val{B}, D54356{B,C}} where {C})}, S{1}, R{1}) + # invariant parameter should not get narrowed + @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, Val{Union{Int,Complex{B}}}}}, S{1}, R{1}) + # bit value could not be `Union` element + @testintersect(Tuple{Val{A}, A, Val{B}} where {B, A<:Union{B, Val{B}}}, SS{1}, RR{1}) + @testintersect(Tuple{Val{A}, A, Val{B}} where {B, A<:Union{B, Complex{B}}}, SS{1}, Union{}) + # `check_datatype_parameters` should ignore bad `Union` elements in constraint's ub + T = Tuple{Val{Union{Val{Nothing}, Val{C54356{V,V}}}}, Val{Nothing}} where {Nothing<:V<:Nothing} + @test T <: S{Nothing} + @test T <: Tuple{Val{A}, A} where {B, C, A<:Union{Val{B}, Val{C54356{B,C}}}} + @test T <: typeintersect(Tuple{Val{A}, A} where {B, C, A<:Union{Val{B}, Val{C54356{B,C}}}}, S{Nothing}) # extra check for Vararg @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, NTuple{B,Any}}}, S{-1}, R{-1}) @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, Tuple{Any,Vararg{Any,B}}}}, S{-1}, R{-1}) + @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, Tuple{Vararg{Int,Union{Int,Complex{B}}}}}}, S{1}, R{1}) # extra check for NamedTuple @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, NamedTuple{B,Tuple{Int}}}}, S{1}, R{1}) @testintersect(Tuple{Val{A}, A} where {B, A<:Union{Val{B}, NamedTuple{B,Tuple{Int}}}}, S{(1,)}, R{(1,)}) From 61f98475cd62e526f611f413c3178b8a5667a704 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Fri, 31 May 2024 16:55:27 +0200 Subject: [PATCH 356/413] backport 1.10: create phantom task for GC threads (#53815) (#54632) A common idiom used throughout the codebase is to get a pointer to thread-local-state through `jl_current_task->ptls`. Create a phantom task for GC threads so that we can make use of this idiom when running in the GC threads as well. Idea originally suggested by @vchuravy, bugs are mine. (cherry picked from commit 9636ef72eebe0155710471fb79eb5c75cc26949b) Co-authored-by: Diogo Netto <61364108+d-netto@users.noreply.github.com> Co-authored-by: Max Horn --- src/partr.c | 12 ++++++++++-- src/task.c | 1 + 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/partr.c b/src/partr.c index 0f3b581f5122f..cb82dc2c3d5fe 100644 --- a/src/partr.c +++ b/src/partr.c @@ -121,7 +121,11 @@ void jl_gc_mark_threadfun(void *arg) // initialize this thread (set tid and create heap) jl_ptls_t ptls = jl_init_threadtls(targ->tid); - + void *stack_lo, *stack_hi; + jl_init_stack_limits(0, &stack_lo, &stack_hi); + // warning: this changes `jl_current_task`, so be careful not to call that from this function + jl_task_t *ct = jl_init_root_task(ptls, stack_lo, stack_hi); + JL_GC_PROMISE_ROOTED(ct); // wait for all threads jl_gc_state_set(ptls, JL_GC_STATE_WAITING, 0); uv_barrier_wait(targ->barrier); @@ -146,7 +150,11 @@ void jl_gc_sweep_threadfun(void *arg) // initialize this thread (set tid and create heap) jl_ptls_t ptls = jl_init_threadtls(targ->tid); - + void *stack_lo, *stack_hi; + jl_init_stack_limits(0, &stack_lo, &stack_hi); + // warning: this changes `jl_current_task`, so be careful not to call that from this function + jl_task_t *ct = jl_init_root_task(ptls, stack_lo, stack_hi); + JL_GC_PROMISE_ROOTED(ct); // wait for all threads jl_gc_state_set(ptls, JL_GC_STATE_WAITING, 0); uv_barrier_wait(targ->barrier); diff --git a/src/task.c b/src/task.c index 1dab8688cb079..86033a81ddf41 100644 --- a/src/task.c +++ b/src/task.c @@ -1685,6 +1685,7 @@ jl_task_t *jl_init_root_task(jl_ptls_t ptls, void *stack_lo, void *stack_hi) JL_GC_PROMISE_ROOTED(ct); jl_set_pgcstack(&ct->gcstack); assert(jl_current_task == ct); + assert(jl_current_task->ptls == ptls); #ifdef _COMPILER_TSAN_ENABLED_ ct->ctx.tsan_state = __tsan_get_current_fiber(); From d2ea48422255caaf37e1c2601e7d35d328aadd82 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 4 Jun 2024 12:26:25 +0200 Subject: [PATCH 357/413] backport: fix missing uuid check on extension when finding the location of an extension (#54658) (#54663) --- base/loading.jl | 8 ++++---- test/loading.jl | 13 +++++++++++++ .../Extensions/ExtNameCollision_A/Project.toml | 9 +++++++++ .../Extensions/ExtNameCollision_A/ext/REPLExt.jl | 0 .../ExtNameCollision_A/src/ExtNameCollision_A.jl | 5 +++++ .../Extensions/ExtNameCollision_B/Project.toml | 9 +++++++++ .../Extensions/ExtNameCollision_B/ext/REPLExt.jl | 0 .../ExtNameCollision_B/src/ExtNameCollision_B.jl | 5 +++++ 8 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 test/project/Extensions/ExtNameCollision_A/Project.toml create mode 100644 test/project/Extensions/ExtNameCollision_A/ext/REPLExt.jl create mode 100644 test/project/Extensions/ExtNameCollision_A/src/ExtNameCollision_A.jl create mode 100644 test/project/Extensions/ExtNameCollision_B/Project.toml create mode 100644 test/project/Extensions/ExtNameCollision_B/ext/REPLExt.jl create mode 100644 test/project/Extensions/ExtNameCollision_B/src/ExtNameCollision_B.jl diff --git a/base/loading.jl b/base/loading.jl index b652e56c922e0..c6405e8c5b37e 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -658,7 +658,7 @@ function manifest_uuid_path(env::String, pkg::PkgId)::Union{Nothing,String,Missi # if `pkg` matches the project, return the project itself return project_file_path(project_file) end - mby_ext = project_file_ext_path(project_file, pkg.name) + mby_ext = project_file_ext_path(project_file, pkg) mby_ext === nothing || return mby_ext # look for manifest file and `where` stanza return explicit_manifest_uuid_path(project_file, pkg) @@ -676,13 +676,13 @@ function find_ext_path(project_path::String, extname::String) return joinpath(project_path, "ext", extname * ".jl") end -function project_file_ext_path(project_file::String, name::String) +function project_file_ext_path(project_file::String, ext::PkgId) d = parsed_toml(project_file) p = project_file_path(project_file) exts = get(d, "extensions", nothing)::Union{Dict{String, Any}, Nothing} if exts !== nothing - if name in keys(exts) - return find_ext_path(p, name) + if ext.name in keys(exts) && ext.uuid == uuid5(UUID(d["uuid"]::String), ext.name) + return find_ext_path(p, ext.name) end end return nothing diff --git a/test/loading.jl b/test/loading.jl index 394c13c5f2962..292eabe28a878 100644 --- a/test/loading.jl +++ b/test/loading.jl @@ -1183,3 +1183,16 @@ end @testset "Upgradable stdlibs" begin @test success(`$(Base.julia_cmd()) --startup-file=no -e 'using DelimitedFiles'`) end + +@testset "extension path computation name collision" begin + old_load_path = copy(LOAD_PATH) + try + empty!(LOAD_PATH) + push!(LOAD_PATH, joinpath(@__DIR__, "project", "Extensions", "ExtNameCollision_A")) + push!(LOAD_PATH, joinpath(@__DIR__, "project", "Extensions", "ExtNameCollision_B")) + ext_B = Base.PkgId(Base.uuid5(Base.identify_package("ExtNameCollision_B").uuid, "REPLExt"), "REPLExt") + @test Base.locate_package(ext_B) == joinpath(@__DIR__, "project", "Extensions", "ExtNameCollision_B", "ext", "REPLExt.jl") + finally + copy!(LOAD_PATH, old_load_path) + end +end diff --git a/test/project/Extensions/ExtNameCollision_A/Project.toml b/test/project/Extensions/ExtNameCollision_A/Project.toml new file mode 100644 index 0000000000000..f4cc37786f508 --- /dev/null +++ b/test/project/Extensions/ExtNameCollision_A/Project.toml @@ -0,0 +1,9 @@ +name = "ExtNameCollision_A" +uuid = "9f48de98-8f56-4937-aa32-2a5530882eaa" +version = "0.1.0" + +[weakdeps] +REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[extensions] +REPLExt = "REPL" diff --git a/test/project/Extensions/ExtNameCollision_A/ext/REPLExt.jl b/test/project/Extensions/ExtNameCollision_A/ext/REPLExt.jl new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/test/project/Extensions/ExtNameCollision_A/src/ExtNameCollision_A.jl b/test/project/Extensions/ExtNameCollision_A/src/ExtNameCollision_A.jl new file mode 100644 index 0000000000000..2f47a862dd9c5 --- /dev/null +++ b/test/project/Extensions/ExtNameCollision_A/src/ExtNameCollision_A.jl @@ -0,0 +1,5 @@ +module ExtNameCollision_A + +greet() = print("Hello World!") + +end # module ExtNameCollision_A diff --git a/test/project/Extensions/ExtNameCollision_B/Project.toml b/test/project/Extensions/ExtNameCollision_B/Project.toml new file mode 100644 index 0000000000000..ac52d64a82a7c --- /dev/null +++ b/test/project/Extensions/ExtNameCollision_B/Project.toml @@ -0,0 +1,9 @@ +name = "ExtNameCollision_B" +uuid = "597d654f-44d8-4443-9b1e-1f2f4b45906f" +version = "0.1.0" + +[weakdeps] +REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" + +[extensions] +REPLExt = "REPL" diff --git a/test/project/Extensions/ExtNameCollision_B/ext/REPLExt.jl b/test/project/Extensions/ExtNameCollision_B/ext/REPLExt.jl new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/test/project/Extensions/ExtNameCollision_B/src/ExtNameCollision_B.jl b/test/project/Extensions/ExtNameCollision_B/src/ExtNameCollision_B.jl new file mode 100644 index 0000000000000..e7665982a79b3 --- /dev/null +++ b/test/project/Extensions/ExtNameCollision_B/src/ExtNameCollision_B.jl @@ -0,0 +1,5 @@ +module ExtNameCollision_B + +greet() = print("Hello World!") + +end # module ExtNameCollision_B From 48d4fd48430af58502699fdf3504b90589df3852 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 4 Jun 2024 12:41:39 +0200 Subject: [PATCH 358/413] set VERSION to 1.10.4 (#54625) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 587c5f0c73096..18b3114206503 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.3 +1.10.4 From 7c22da6a2316027941d6958670078e59371150d1 Mon Sep 17 00:00:00 2001 From: "Viral B. Shah" Date: Wed, 29 May 2024 20:23:06 -0400 Subject: [PATCH 359/413] Allow libquadmath to also fail as it is not available on all systems (#54605) Fix #41613. Co-authored-by: FX Coudert (cherry picked from commit e5549c23045c2cc082d04b01a28b7c317f8aa877) --- base/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/Makefile b/base/Makefile index ad2bb6a63ccc0..d27325e7600f8 100644 --- a/base/Makefile +++ b/base/Makefile @@ -243,12 +243,12 @@ endif ifneq (,$(LIBGFORTRAN_VERSION)) $(eval $(call symlink_system_library,CSL,libgfortran,$(LIBGFORTRAN_VERSION))) endif -$(eval $(call symlink_system_library,CSL,libquadmath,0)) $(eval $(call symlink_system_library,CSL,libstdc++,6)) -# We allow libssp, libatomic and libgomp to fail as they are not available on all systems +# We allow libssp, libatomic, libgomp and libquadmath to fail as they are not available on all systems $(eval $(call symlink_system_library,CSL,libssp,0,ALLOW_FAILURE)) $(eval $(call symlink_system_library,CSL,libatomic,1,ALLOW_FAILURE)) $(eval $(call symlink_system_library,CSL,libgomp,1,ALLOW_FAILURE)) +$(eval $(call symlink_system_library,CSL,libquadmath,0,ALLOW_FAILURE)) $(eval $(call symlink_system_library,PCRE,libpcre2-8)) $(eval $(call symlink_system_library,DSFMT,libdSFMT)) $(eval $(call symlink_system_library,LIBBLASTRAMPOLINE,libblastrampoline)) From 3f35094d298b41d57f3f3a8c5a9abd52bcf47b30 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Thu, 30 May 2024 16:25:00 -0300 Subject: [PATCH 360/413] Fix trampoline assembly for build on clang 18 on apple silicon (#54634) This avoids a: `error: non-private labels cannot appear between .cfi_startproc / .cfi_endproc pairs` error. That error was introduced in https://reviews.llvm.org/D155245#4657075 see also https://github.com/llvm/llvm-project/issues/72802 (cherry picked from commit a4e793ee31612625d9c48ebd89a53c3a5c0f6eb6) --- cli/trampolines/trampolines_aarch64.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/trampolines/trampolines_aarch64.S b/cli/trampolines/trampolines_aarch64.S index 2d87ae6dcdb1c..ccb9a647ac6c3 100644 --- a/cli/trampolines/trampolines_aarch64.S +++ b/cli/trampolines/trampolines_aarch64.S @@ -5,9 +5,9 @@ #define XX(name) \ .global CNAME(name) SEP \ +CNAME(name)##: SEP \ .cfi_startproc SEP \ .p2align 2 SEP \ -CNAME(name)##: SEP \ adrp x16, PAGE(CNAME(name##_addr)) SEP \ ldr x16, [x16, PAGEOFF(CNAME(name##_addr))] SEP \ br x16 SEP \ From e52719b2f90230e3e765a5206d4c67eb9bee49f7 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Fri, 31 May 2024 15:39:13 +0530 Subject: [PATCH 361/413] Aggressive constprop in trevc! to stabilize triangular eigvec (#54635) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We may use aggressive constprop in `trevc!` to eliminate branches, which makes the return type of `eigvec(::UpperTriangular)` concretely inferred. ```julia julia> @inferred eigvecs(UpperTriangular([1 0; 0 1])) 2×2 Matrix{Float32}: 1.0 -0.0 0.0 1.0 ``` (cherry picked from commit ea8b4aff3b5dcf78ce7a4fbe17c46ac8a51a7643) --- stdlib/LinearAlgebra/src/lapack.jl | 2 +- stdlib/LinearAlgebra/test/triangular.jl | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/stdlib/LinearAlgebra/src/lapack.jl b/stdlib/LinearAlgebra/src/lapack.jl index 6353f9fa8d266..035028f7512cf 100644 --- a/stdlib/LinearAlgebra/src/lapack.jl +++ b/stdlib/LinearAlgebra/src/lapack.jl @@ -3633,7 +3633,7 @@ for (trcon, trevc, trrfs, elty) in # LOGICAL SELECT( * ) # DOUBLE PRECISION T( LDT, * ), VL( LDVL, * ), VR( LDVR, * ), #$ WORK( * ) - function trevc!(side::AbstractChar, howmny::AbstractChar, select::AbstractVector{BlasInt}, T::AbstractMatrix{$elty}, + Base.@constprop :aggressive function trevc!(side::AbstractChar, howmny::AbstractChar, select::AbstractVector{BlasInt}, T::AbstractMatrix{$elty}, VL::AbstractMatrix{$elty} = similar(T), VR::AbstractMatrix{$elty} = similar(T)) require_one_based_indexing(select, T, VL, VR) diff --git a/stdlib/LinearAlgebra/test/triangular.jl b/stdlib/LinearAlgebra/test/triangular.jl index 759f89f6f7220..7be97baa7084a 100644 --- a/stdlib/LinearAlgebra/test/triangular.jl +++ b/stdlib/LinearAlgebra/test/triangular.jl @@ -879,4 +879,10 @@ end @test transpose!(U) == Ut end +@testset "type-stable eigvecs" begin + D = Float64[1 0; 0 2] + V = @inferred eigvecs(UpperTriangular(D)) + @test V == Diagonal([1, 1]) +end + end # module TestTriangular From 236d2cebfb58fd9266e7a0b74eed16fbd9c92d14 Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Fri, 31 May 2024 16:51:48 -0300 Subject: [PATCH 362/413] ensure we set the right value to gc_first_tid (#54645) This may introduce a correctness issue in the work-stealing termination loop if we're using interactive threads and GC threads simultaneously. Indeed, if we forget to add `nthreadsi` to `nthreads`, then we're checking in the mark-loop termination protocol a range `[gc_first_tid, gc_first_tid + jl_n_markthreads)` of threads which is "shifted to the left" compared to what it should be. This implies that we will not be checking whether the GC threads with higher TID actually have terminated the mark-loop. (cherry picked from commit c52eee220654e4b4aca43edb07f5bcf896d3d9bf) --- src/threading.c | 2 +- test/gc.jl | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/threading.c b/src/threading.c index b82e36f66d994..67617da0951dd 100644 --- a/src/threading.c +++ b/src/threading.c @@ -710,7 +710,7 @@ void jl_init_threading(void) jl_atomic_store_release(&jl_all_tls_states, (jl_ptls_t*)calloc(jl_all_tls_states_size, sizeof(jl_ptls_t))); jl_atomic_store_release(&jl_n_threads, jl_all_tls_states_size); jl_n_gcthreads = ngcthreads; - gc_first_tid = nthreads; + gc_first_tid = nthreads + nthreadsi; } static uv_barrier_t thread_init_done; diff --git a/test/gc.jl b/test/gc.jl index e085c1d8658e5..eedc7e27d1f4f 100644 --- a/test/gc.jl +++ b/test/gc.jl @@ -5,11 +5,13 @@ using Test function run_gctest(file) let cmd = `$(Base.julia_cmd()) --depwarn=error --rr-detach --startup-file=no $file` @testset for test_nthreads in (1, 2, 4) - @testset for concurrent_sweep in (0, 1) - new_env = copy(ENV) - new_env["JULIA_NUM_THREADS"] = string(test_nthreads) - new_env["JULIA_NUM_GC_THREADS"] = "$(test_nthreads),$(concurrent_sweep)" - @test success(run(pipeline(setenv(cmd, new_env), stdout = stdout, stderr = stderr))) + @testset for test_nithreads in (0, 1) + @testset for concurrent_sweep in (0, 1) + new_env = copy(ENV) + new_env["JULIA_NUM_THREADS"] = "$test_nthreads,$test_nithreads" + new_env["JULIA_NUM_GC_THREADS"] = "$(test_nthreads),$(concurrent_sweep)" + @test success(run(pipeline(setenv(cmd, new_env), stdout = stdout, stderr = stderr))) + end end end end From 936673bdb2128fc4d949198c9cbdc9f981363748 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Tue, 4 Jun 2024 21:06:14 -0300 Subject: [PATCH 363/413] Add boundscheck in bindingkey_eq to avoid OOB access due to data race (#54671) The race here is that svec might be replaced and a new binding introduced into the keyset while we hold a reference to the old svec, which led to a OOB access on the svec with the index a binding introduced at the same time. This now introduces a bounds check which will force taking the lock if we fail the lookup i.e we had a data race. Fixes https://github.com/JuliaLang/julia/issues/54285 --------- Co-authored-by: Jameson Nash (cherry picked from commit 20f03ddcefffaf5e42d9060144a6cc3aa1313dd4) --- src/module.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/module.c b/src/module.c index 59bd308d99a41..d39b7e377b2df 100644 --- a/src/module.c +++ b/src/module.c @@ -702,13 +702,15 @@ JL_DLLEXPORT int jl_binding_resolved_p(jl_module_t *m, jl_sym_t *var) static uint_t bindingkey_hash(size_t idx, jl_svec_t *data) { - jl_binding_t *b = (jl_binding_t*)jl_svecref(data, idx); + jl_binding_t *b = (jl_binding_t*)jl_svecref(data, idx); // This must always happen inside the lock jl_sym_t *var = b->globalref->name; return var->hash; } static int bindingkey_eq(size_t idx, const void *var, 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_binding_t *b = (jl_binding_t*)jl_svecref(data, idx); jl_sym_t *name = b->globalref->name; return var == name; From 51e2229084ca43bc4a90fffb322ac78a6a82a593 Mon Sep 17 00:00:00 2001 From: Cody Tapscott <84105208+topolarity@users.noreply.github.com> Date: Tue, 4 Jun 2024 22:17:38 -0400 Subject: [PATCH 364/413] make: Fix `sed` command for LLVM libraries with no symbol versioning (#54672) If the LLVM library was built without symbol versioning, previously this would return the `nm` output in its entirety, instead of correctly reporting "" as the LLVM symbol version. (cherry picked from commit debaa73a93f6829cab34dcf896284fff36e28cd8) --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index 08fb816d302a0..de0b9b45ef292 100644 --- a/src/Makefile +++ b/src/Makefile @@ -120,7 +120,7 @@ ifneq ($(USE_SYSTEM_LLVM),0) # USE_SYSTEM_LLVM != 0 CG_LLVMLINK += $(LLVM_LDFLAGS) $(shell $(LLVM_CONFIG_HOST) --libs --system-libs) LLVM_SHLIB_SYMBOL_VERSION := $(shell nm -D --with-symbol-versions $(shell $(LLVM_CONFIG_HOST) --libfiles --link-shared | awk '{print $1; exit}') | \ - grep _ZN4llvm3Any6TypeId | head -n 1 | sed -e 's/.*@//') + grep _ZN4llvm3Any6TypeId | head -n 1 | sed -ne 's/.*@//p') # HACK: llvm-config doesn't correctly point to shared libs on all platforms # https://github.com/JuliaLang/julia/issues/29981 From 9fac39402ce0c4b4d632245706dfce179ad78d31 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Fri, 7 Jun 2024 14:06:03 +0530 Subject: [PATCH 365/413] LazyString in reinterpretarray error messages (#54704) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This should remove the dynamic dispatch flagged by JET, e.g. in ```julia julia> using JET julia> @report_opt reinterpret(Float64, [1.0im;;]) [ Info: tracking Base ┌ Warning: skipping (::Base.var"#thrownonint#375")(S::Type, T::Type, dim) @ Base reinterpretarray.jl:68 to avoid parsing too much code └ @ Revise ~/.julia/packages/Revise/bAgL0/src/packagedef.jl:1092 ┌ Warning: skipping (::Base.var"#show_bound#661")(io::IO, b) @ Base show.jl:2777 to avoid parsing too much code └ @ Revise ~/.julia/packages/Revise/bAgL0/src/packagedef.jl:1092 ┌ Warning: skipping (::Base.var"#show_bound#661")(io::IO, b) @ Base show.jl:2777 to avoid parsing too much code └ @ Revise ~/.julia/packages/Revise/bAgL0/src/packagedef.jl:1092 ═════ 32 possible errors found ═════ ┌ reinterpret(::Type{Float64}, a::Matrix{ComplexF64}) @ Base ./reinterpretarray.jl:88 │┌ (::Base.var"#thrownonint#375")(S::Type{ComplexF64}, T::Type{Float64}, dim::Int64) @ Base ./reinterpretarray.jl:70 ││┌ string(::String, ::Type{ComplexF64}, ::String, ::Type{Float64}, ::String, ::Int64, ::String) @ Base ./strings/io.jl:189 │││┌ print_to_string(::String, ::Type{ComplexF64}, ::String, ::Type{Float64}, ::String, ::Int64, ::String) @ Base ./strings/io.jl:148 ││││┌ print(io::IOBuffer, x::DataType) @ Base ./strings/io.jl:35 │││││┌ show(io::IOBuffer, x::DataType) @ Base ./show.jl:970 ││││││┌ _show_type(io::IOBuffer, x::Type) @ Base ./show.jl:975 │││││││┌ show_typealias(io::IOBuffer, x::Type) @ Base ./show.jl:810 ││││││││┌ make_typealias(x::Type) @ Base ./show.jl:620 │││││││││┌ modulesof!(s::Set{Module}, x::Type) @ Base ./show.jl:595 ││││││││││ runtime dispatch detected: Base.modulesof!(s::Set{Module}, %20::Any)::Any │││││││││└──────────────────── │││││││││┌ modulesof!(s::Set{Module}, x::Type) @ Base ./show.jl:596 ││││││││││ runtime dispatch detected: Base.modulesof!(s::Set{Module}, %34::Any)::Any │││││││││└──────────────────── │││││││││┌ modulesof!(s::Set{Module}, x::TypeVar) @ Base ./show.jl:589 ││││││││││ runtime dispatch detected: Base.modulesof!(s::Set{Module}, %1::Any)::Set{Module} │││││││││└──────────────────── │││││││┌ show_typealias(io::IOBuffer, x::Type) @ Base ./show.jl:813 ││││││││┌ show_typealias(io::IOBuffer, name::GlobalRef, x::Type, env::Core.SimpleVector, wheres::Vector{TypeVar}) @ Base ./show.jl:760 │││││││││┌ show_typeparams(io::IOContext{IOBuffer}, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar}) @ Base ./show.jl:724 ││││││││││┌ show(io::IOContext{IOBuffer}, tv::TypeVar) @ Base ./show.jl:2788 │││││││││││┌ (::Base.var"#show_bound#661")(io::IOContext{IOBuffer}, b::Any) @ Base ./show.jl:2780 ││││││││││││ runtime dispatch detected: show(io::IOContext{IOBuffer}, b::Any)::Any │││││││││││└──────────────────── │││││││││┌ show_typeparams(io::IOContext{IOBuffer}, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar}) @ Base ./show.jl:719 ││││││││││ runtime dispatch detected: show(io::IOContext{IOBuffer}, %252::Any)::Any │││││││││└──────────────────── │││││││││┌ show_typeparams(io::IOContext{IOBuffer}, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar}) @ Base ./show.jl:722 ││││││││││ runtime dispatch detected: show(io::IOContext{IOBuffer}, %313::Any)::Any │││││││││└──────────────────── │││││││││┌ show_typeparams(io::IOContext{IOBuffer}, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar}) @ Base ./show.jl:727 ││││││││││ runtime dispatch detected: show(io::IOContext{IOBuffer}, %191::Any)::Any │││││││││└──────────────────── ││││││┌ _show_type(io::IOBuffer, x::Type) @ Base ./show.jl:978 │││││││┌ show_datatype(io::IOBuffer, x::DataType) @ Base ./show.jl:1094 ││││││││┌ show_datatype(io::IOBuffer, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1097 │││││││││┌ maybe_kws_nt(x::DataType) @ Base ./show.jl:1085 ││││││││││ runtime dispatch detected: eltype(%76::DataType)::Any │││││││││└──────────────────── ││││││││┌ show_datatype(io::IOBuffer, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1186 │││││││││┌ show_typeparams(io::IOBuffer, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar}) @ Base ./show.jl:724 ││││││││││┌ show(io::IOBuffer, tv::TypeVar) @ Base ./show.jl:2788 │││││││││││┌ (::Base.var"#show_bound#661")(io::IOBuffer, b::Any) @ Base ./show.jl:2780 ││││││││││││ runtime dispatch detected: show(io::IOBuffer, b::Any)::Any │││││││││││└──────────────────── │││││││││┌ show_typeparams(io::IOBuffer, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar}) @ Base ./show.jl:719 ││││││││││ runtime dispatch detected: show(io::IOBuffer, %250::Any)::Any │││││││││└──────────────────── │││││││││┌ show_typeparams(io::IOBuffer, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar}) @ Base ./show.jl:722 ││││││││││ runtime dispatch detected: show(io::IOBuffer, %310::Any)::Any │││││││││└──────────────────── │││││││││┌ show_typeparams(io::IOBuffer, env::Core.SimpleVector, orig::Core.SimpleVector, wheres::Vector{TypeVar}) @ Base ./show.jl:727 ││││││││││ runtime dispatch detected: show(io::IOBuffer, %190::Any)::Any │││││││││└──────────────────── ││││││││┌ show_datatype(io::IOBuffer, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1157 │││││││││ runtime dispatch detected: show(io::IOBuffer, %224::Any)::Any ││││││││└──────────────────── ││││││││┌ show_datatype(io::IOBuffer, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1162 │││││││││ runtime dispatch detected: show(io::IOBuffer, %54::Any)::Any ││││││││└──────────────────── ││││││││┌ show_datatype(io::IOBuffer, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1148 │││││││││ runtime dispatch detected: show(io::IOBuffer, %57::Any)::Any ││││││││└──────────────────── ││││││││┌ show_datatype(io::IOBuffer, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1150 │││││││││ runtime dispatch detected: show(io::IOBuffer, %54::Any)::Any ││││││││└──────────────────── ││││││││┌ show_datatype(io::IOBuffer, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1172 │││││││││ runtime dispatch detected: Base.show_at_namedtuple(io::IOBuffer, %329::Tuple, %328::DataType)::Any ││││││││└──────────────────── ││││││┌ _show_type(io::IOBuffer, x::Type) @ Base ./show.jl:981 │││││││┌ show_unionaliases(io::IOBuffer, x::Union) @ Base ./show.jl:901 ││││││││┌ make_typealiases(x::Union) @ Base ./show.jl:822 │││││││││┌ modulesof!(s::Set{Module}, x::Union) @ Base ./show.jl:595 ││││││││││ runtime dispatch detected: Base.modulesof!(s::Set{Module}, %3::Any)::Any │││││││││└──────────────────── │││││││││┌ modulesof!(s::Set{Module}, x::Union) @ Base ./show.jl:596 ││││││││││ runtime dispatch detected: Base.modulesof!(s::Set{Module}, %17::Any)::Any │││││││││└──────────────────── │││││││┌ show_unionaliases(io::IOBuffer, x::Union) @ Base ./show.jl:914 ││││││││ runtime dispatch detected: show(io::IOBuffer, %89::Any)::Any │││││││└──────────────────── │││││││┌ show_unionaliases(io::IOBuffer, x::Union) @ Base ./show.jl:920 ││││││││ runtime dispatch detected: Base.show_typealias(io::IOBuffer, %206::Any, x::Union, %204::Core.SimpleVector, %205::Vector{TypeVar})::Any │││││││└──────────────────── │││││││┌ show_unionaliases(io::IOBuffer, x::Union) @ Base ./show.jl:928 ││││││││ runtime dispatch detected: Base.show_typealias(io::IOBuffer, %269::Any, x::Union, %267::Core.SimpleVector, %268::Vector{TypeVar})::Any │││││││└──────────────────── ││││││┌ _show_type(io::IOBuffer, x::Type) @ Base ./show.jl:985 │││││││┌ show_delim_array(io::IOBuffer, itr::Vector{Any}, op::Char, delim::Char, cl::Char, delim_one::Bool) @ Base ./show.jl:1392 ││││││││┌ show_delim_array(io::IOBuffer, itr::Vector{Any}, op::Char, delim::Char, cl::Char, delim_one::Bool, i1::Int64, l::Int64) @ Base ./show.jl:1403 │││││││││ runtime dispatch detected: show(%3::IOContext{IOBuffer}, %52::Any)::Any ││││││││└──────────────────── ││││││┌ _show_type(io::IOBuffer, x::Type) @ Base ./show.jl:1012 │││││││┌ show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1185 ││││││││┌ show_type_name(io::IOContext{IOBuffer}, tn::Core.TypeName) @ Base ./show.jl:1059 │││││││││ runtime dispatch detected: Base.isvisible(%29::Symbol, %86::Module, %80::Any)::Bool ││││││││└──────────────────── │││││││┌ show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1157 ││││││││ runtime dispatch detected: show(io::IOContext{IOBuffer}, %227::Any)::Any │││││││└──────────────────── │││││││┌ show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1162 ││││││││ runtime dispatch detected: show(io::IOContext{IOBuffer}, %55::Any)::Any │││││││└──────────────────── │││││││┌ show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1148 ││││││││ runtime dispatch detected: show(io::IOContext{IOBuffer}, %58::Any)::Any │││││││└──────────────────── │││││││┌ show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1150 ││││││││ runtime dispatch detected: show(io::IOContext{IOBuffer}, %55::Any)::Any │││││││└──────────────────── │││││││┌ show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1172 ││││││││ runtime dispatch detected: Base.show_at_namedtuple(io::IOContext{IOBuffer}, %338::Tuple, %337::DataType)::Any │││││││└──────────────────── │││││││┌ show_datatype(io::IOContext{IOBuffer}, x::DataType, wheres::Vector{TypeVar}) @ Base ./show.jl:1180 ││││││││ runtime dispatch detected: Base.show_at_namedtuple(io::IOContext{IOBuffer}, %387::Tuple, %391::DataType)::Any │││││││└──────────────────── ││││││┌ _show_type(io::IOBuffer, x::Type) @ Base ./show.jl:1014 │││││││ runtime dispatch detected: show(%98::IOContext{IOBuffer}, %99::Any)::Any ││││││└──────────────────── │││││┌ show(io::IOBuffer, x::DataType) @ Base ./show.jl:970 ││││││ runtime dispatch detected: Base._show_type(io::IOBuffer, %1::Any)::Nothing │││││└──────────────────── ``` (cherry picked from commit b54c688a3aa01445028a9a6cd61dfcac05e9b512) --- base/reinterpretarray.jl | 31 ++++++++++++++++++------------- test/reinterpretarray.jl | 5 ++--- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/base/reinterpretarray.jl b/base/reinterpretarray.jl index 3844edc331c7c..4194659c63675 100644 --- a/base/reinterpretarray.jl +++ b/base/reinterpretarray.jl @@ -13,15 +13,16 @@ struct ReinterpretArray{T,N,S,A<:AbstractArray{S},IsReshaped} <: AbstractArray{T function throwbits(S::Type, T::Type, U::Type) @noinline - throw(ArgumentError("cannot reinterpret `$(S)` as `$(T)`, type `$(U)` is not a bits type")) + throw(ArgumentError(LazyString("cannot reinterpret `", S, "` as `", T, "`, type `", U, "` is not a bits type"))) end function throwsize0(S::Type, T::Type, msg) @noinline - throw(ArgumentError("cannot reinterpret a zero-dimensional `$(S)` array to `$(T)` which is of a $msg size")) + throw(ArgumentError(LazyString("cannot reinterpret a zero-dimensional `", S, "` array to `", T, + "` which is of a ", msg, " size"))) end function throwsingleton(S::Type, T::Type) @noinline - throw(ArgumentError("cannot reinterpret a `$(S)` array to `$(T)` which is a singleton type")) + throw(ArgumentError(LazyString("cannot reinterpret a `", S, "` array to `", T, "` which is a singleton type"))) end global reinterpret @@ -50,14 +51,14 @@ struct ReinterpretArray{T,N,S,A<:AbstractArray{S},IsReshaped} <: AbstractArray{T function reinterpret(::Type{T}, a::A) where {T,N,S,A<:AbstractArray{S, N}} function thrownonint(S::Type, T::Type, dim) @noinline - throw(ArgumentError(""" - cannot reinterpret an `$(S)` array to `$(T)` whose first dimension has size `$(dim)`. - The resulting array would have non-integral first dimension. - """)) + throw(ArgumentError(LazyString( + "cannot reinterpret an `", S, "` array to `", T, "` whose first dimension has size `", dim, + "`. The resulting array would have a non-integral first dimension."))) end function throwaxes1(S::Type, T::Type, ax1) @noinline - throw(ArgumentError("cannot reinterpret a `$(S)` array to `$(T)` when the first axis is $ax1. Try reshaping first.")) + throw(ArgumentError(LazyString("cannot reinterpret a `", S, "` array to `", T, + "` when the first axis is ", ax1, ". Try reshaping first."))) end isbitstype(T) || throwbits(S, T, T) isbitstype(S) || throwbits(S, T, S) @@ -82,15 +83,19 @@ struct ReinterpretArray{T,N,S,A<:AbstractArray{S},IsReshaped} <: AbstractArray{T function reinterpret(::typeof(reshape), ::Type{T}, a::A) where {T,S,A<:AbstractArray{S}} function throwintmult(S::Type, T::Type) @noinline - throw(ArgumentError("`reinterpret(reshape, T, a)` requires that one of `sizeof(T)` (got $(sizeof(T))) and `sizeof(eltype(a))` (got $(sizeof(S))) be an integer multiple of the other")) + throw(ArgumentError(LazyString("`reinterpret(reshape, T, a)` requires that one of `sizeof(T)` (got ", + sizeof(T), ") and `sizeof(eltype(a))` (got ", sizeof(S), ") be an integer multiple of the other"))) end function throwsize1(a::AbstractArray, T::Type) @noinline - throw(ArgumentError("`reinterpret(reshape, $T, a)` where `eltype(a)` is $(eltype(a)) requires that `axes(a, 1)` (got $(axes(a, 1))) be equal to 1:$(sizeof(T) ÷ sizeof(eltype(a))) (from the ratio of element sizes)")) + throw(ArgumentError(LazyString("`reinterpret(reshape, ", T, ", a)` where `eltype(a)` is ", eltype(a), + " requires that `axes(a, 1)` (got ", axes(a, 1), ") be equal to 1:", + sizeof(T) ÷ sizeof(eltype(a)), " (from the ratio of element sizes)"))) end function throwfromsingleton(S, T) @noinline - throw(ArgumentError("`reinterpret(reshape, $T, a)` where `eltype(a)` is $S requires that $T be a singleton type, since $S is one")) + throw(ArgumentError(LazyString("`reinterpret(reshape, ", T, ", a)` where `eltype(a)` is ", S, + " requires that ", T, " be a singleton type, since ", S, " is one"))) end isbitstype(T) || throwbits(S, T, T) isbitstype(S) || throwbits(S, T, S) @@ -804,8 +809,8 @@ end inpackedsize = packedsize(In) outpackedsize = packedsize(Out) inpackedsize == outpackedsize || - throw(ArgumentError("Packed sizes of types $Out and $In do not match; got $outpackedsize \ - and $inpackedsize, respectively.")) + throw(ArgumentError(LazyString("Packed sizes of types ", Out, " and ", In, + " do not match; got ", outpackedsize, " and ", inpackedsize, ", respectively."))) in = Ref{In}(x) out = Ref{Out}() if struct_subpadding(Out, In) diff --git a/test/reinterpretarray.jl b/test/reinterpretarray.jl index 501e9f4a9b57f..cda0d61ddb05f 100644 --- a/test/reinterpretarray.jl +++ b/test/reinterpretarray.jl @@ -32,9 +32,8 @@ end @test_throws ArgumentError("cannot reinterpret `Vector{Int32}` as `Int32`, type `Vector{Int32}` is not a bits type") reinterpret(Int32, Av) @test_throws ArgumentError("cannot reinterpret a zero-dimensional `Int64` array to `Int32` which is of a different size") reinterpret(Int32, reshape([Int64(0)])) @test_throws ArgumentError("cannot reinterpret a zero-dimensional `Int32` array to `Int64` which is of a different size") reinterpret(Int64, reshape([Int32(0)])) -@test_throws ArgumentError("""cannot reinterpret an `$Int` array to `Tuple{$Int, $Int}` whose first dimension has size `5`. - The resulting array would have non-integral first dimension. - """) reinterpret(Tuple{Int,Int}, [1,2,3,4,5]) +@test_throws ArgumentError("cannot reinterpret an `$Int` array to `Tuple{$Int, $Int}` whose first dimension has size `5`."* + " The resulting array would have a non-integral first dimension.") reinterpret(Tuple{Int,Int}, [1,2,3,4,5]) @test_throws ArgumentError("`reinterpret(reshape, Complex{Int64}, a)` where `eltype(a)` is Int64 requires that `axes(a, 1)` (got Base.OneTo(4)) be equal to 1:2 (from the ratio of element sizes)") reinterpret(reshape, Complex{Int64}, A) @test_throws ArgumentError("`reinterpret(reshape, T, a)` requires that one of `sizeof(T)` (got 24) and `sizeof(eltype(a))` (got 16) be an integer multiple of the other") reinterpret(reshape, NTuple{3, Int64}, B) From 005fd2ffccd48c0e08ade80a54224729b33f08a8 Mon Sep 17 00:00:00 2001 From: Cody Tapscott <84105208+topolarity@users.noreply.github.com> Date: Mon, 10 Jun 2024 16:01:35 -0400 Subject: [PATCH 366/413] make: use `readelf` for LLVM symbol version detection (#54713) Apparently on some distributions `nm --with-symbol-versions` does not report symbol versions, despite the flag. `readelf` should be a more reliable alternative which is also part of binutils. See https://github.com/spack/spack/issues/44534#issuecomment-2151796917 for more information (cherry picked from commit d0f165f056f6e6f6e69fa963539934bc665311be) --- src/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Makefile b/src/Makefile index de0b9b45ef292..b91302d384fa7 100644 --- a/src/Makefile +++ b/src/Makefile @@ -119,7 +119,7 @@ ifeq ($(JULIACODEGEN),LLVM) ifneq ($(USE_SYSTEM_LLVM),0) # USE_SYSTEM_LLVM != 0 CG_LLVMLINK += $(LLVM_LDFLAGS) $(shell $(LLVM_CONFIG_HOST) --libs --system-libs) -LLVM_SHLIB_SYMBOL_VERSION := $(shell nm -D --with-symbol-versions $(shell $(LLVM_CONFIG_HOST) --libfiles --link-shared | awk '{print $1; exit}') | \ +LLVM_SHLIB_SYMBOL_VERSION := $(shell readelf -W --dyn-syms $(shell $(LLVM_CONFIG_HOST) --libfiles --link-shared | awk '{print $1; exit}') | \ grep _ZN4llvm3Any6TypeId | head -n 1 | sed -ne 's/.*@//p') # HACK: llvm-config doesn't correctly point to shared libs on all platforms From fb977a293c2132f0b8da8738551a1f9972eab025 Mon Sep 17 00:00:00 2001 From: Elliot Saba Date: Thu, 13 Jun 2024 10:33:35 -0700 Subject: [PATCH 367/413] [LinearAlgebra] Improve resilience to unknown libblastrampoline flags (#54781) When testing a new version of `libblastrampoline` that may have flags and values that we don't know about, raise a nice warning rather than a hard error. (cherry picked from commit 50445067690394c95ecc2d456542fb35c6c36c1d) --- stdlib/LinearAlgebra/src/lbt.jl | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/stdlib/LinearAlgebra/src/lbt.jl b/stdlib/LinearAlgebra/src/lbt.jl index b133741611adc..28a529fd5b0a3 100644 --- a/stdlib/LinearAlgebra/src/lbt.jl +++ b/stdlib/LinearAlgebra/src/lbt.jl @@ -13,6 +13,19 @@ struct lbt_library_info_t f2c::Int32 cblas::Int32 end + +macro get_warn(map, key) + return quote + if !haskey($(esc(map)), $(esc(key))) + @warn(string("[LBT] Unknown key into ", $(string(map)), ": ", $(esc(key)), ", defaulting to :unknown")) + # All the unknown values share a common value: `-1` + $(esc(map))[$(esc(LBT_INTERFACE_UNKNOWN))] + else + $(esc(map))[$(esc(key))] + end + end +end + const LBT_INTERFACE_LP64 = 32 const LBT_INTERFACE_ILP64 = 64 const LBT_INTERFACE_UNKNOWN = -1 @@ -35,10 +48,12 @@ const LBT_INV_F2C_MAP = Dict(v => k for (k, v) in LBT_F2C_MAP) const LBT_COMPLEX_RETSTYLE_NORMAL = 0 const LBT_COMPLEX_RETSTYLE_ARGUMENT = 1 +const LBT_COMPLEX_RETSTYLE_FNDA = 2 const LBT_COMPLEX_RETSTYLE_UNKNOWN = -1 const LBT_COMPLEX_RETSTYLE_MAP = Dict( LBT_COMPLEX_RETSTYLE_NORMAL => :normal, LBT_COMPLEX_RETSTYLE_ARGUMENT => :argument, + LBT_COMPLEX_RETSTYLE_FNDA => :float_normal_double_argument, LBT_COMPLEX_RETSTYLE_UNKNOWN => :unknown, ) const LBT_INV_COMPLEX_RETSTYLE_MAP = Dict(v => k for (k, v) in LBT_COMPLEX_RETSTYLE_MAP) @@ -69,10 +84,10 @@ struct LBTLibraryInfo lib_info.handle, unsafe_string(lib_info.suffix), unsafe_wrap(Vector{UInt8}, lib_info.active_forwards, div(num_exported_symbols,8)+1), - LBT_INTERFACE_MAP[lib_info.interface], - LBT_COMPLEX_RETSTYLE_MAP[lib_info.complex_retstyle], - LBT_F2C_MAP[lib_info.f2c], - LBT_CBLAS_MAP[lib_info.cblas], + @get_warn(LBT_INTERFACE_MAP, lib_info.interface), + @get_warn(LBT_COMPLEX_RETSTYLE_MAP, lib_info.complex_retstyle), + @get_warn(LBT_F2C_MAP, lib_info.f2c), + @get_warn(LBT_CBLAS_MAP, lib_info.cblas), ) end end From 82aa263ebfd2a9346f4c7ff6a9d1d2e612804279 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Tue, 18 Jun 2024 10:42:51 -0400 Subject: [PATCH 368/413] add sticky task warning to `@task` and `schedule` (#54815) The fact that `@async` causes the task that it was scheduled from to also become sticky is well documented in the warning in [`@async` docs](https://docs.julialang.org/en/v1/base/parallel/#Base.@async), but it's not clear that creating a task and scheduling it also has the same effect, by default. (cherry picked from commit a9b48697deff2e53515d3c7611168466ce81f078) --- base/docs/basedocs.jl | 3 ++- base/task.jl | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/base/docs/basedocs.jl b/base/docs/basedocs.jl index b0aadb2b97fff..b6e744050b2b6 100644 --- a/base/docs/basedocs.jl +++ b/base/docs/basedocs.jl @@ -1747,7 +1747,8 @@ The task will run in the "world age" from the parent at construction when [`sche !!! warning By default tasks will have the sticky bit set to true `t.sticky`. This models the historic default for [`@async`](@ref). Sticky tasks can only be run on the worker thread - they are first scheduled on. To obtain the behavior of [`Threads.@spawn`](@ref) set the sticky + they are first scheduled on, and when scheduled will make the task that they were scheduled + from sticky. To obtain the behavior of [`Threads.@spawn`](@ref) set the sticky bit manually to `false`. # Examples diff --git a/base/task.jl b/base/task.jl index 137b0f7c4a3f6..ed6d1f507b8f0 100644 --- a/base/task.jl +++ b/base/task.jl @@ -113,6 +113,13 @@ end Wrap an expression in a [`Task`](@ref) without executing it, and return the [`Task`](@ref). This only creates a task, and does not run it. +!!! warning + By default tasks will have the sticky bit set to true `t.sticky`. This models the + historic default for [`@async`](@ref). Sticky tasks can only be run on the worker thread + they are first scheduled on, and when scheduled will make the task that they were scheduled + from sticky. To obtain the behavior of [`Threads.@spawn`](@ref) set the sticky + bit manually to `false`. + # Examples ```jldoctest julia> a1() = sum(i for i in 1:1000); @@ -826,6 +833,13 @@ the woken task. It is incorrect to use `schedule` on an arbitrary `Task` that has already been started. See [the API reference](@ref low-level-schedule-wait) for more information. +!!! warning + By default tasks will have the sticky bit set to true `t.sticky`. This models the + historic default for [`@async`](@ref). Sticky tasks can only be run on the worker thread + they are first scheduled on, and when scheduled will make the task that they were scheduled + from sticky. To obtain the behavior of [`Threads.@spawn`](@ref) set the sticky + bit manually to `false`. + # Examples ```jldoctest julia> a5() = sum(i for i in 1:1000); From 48e140b9a91b96efb2f07e939ba3160dc1092967 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Tue, 18 Jun 2024 07:40:20 -0300 Subject: [PATCH 369/413] Do not add type tag size to the `alloc_typed` lowering for GC allocations (#54837) Enzyme.jl hit an issue where, in a dynamically typed allocation of size `GC_MAX_SZCLASS`, because we mistakenly added they type tag size to the allocation, the runtime disagreed if this was a pool allocation or a big allocation. Causing a crash in the GC (cherry picked from commit ded0b28f7f94c2785a6330786fe5efea2a440c86) --- src/julia_internal.h | 2 ++ src/llvm-final-gc-lowering.cpp | 2 +- test/llvmpasses/final-lower-gc.ll | 5 ++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/julia_internal.h b/src/julia_internal.h index fb82a152bffa7..07a1ab628fadf 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -463,6 +463,8 @@ STATIC_INLINE uint8_t JL_CONST_FUNC jl_gc_szclass_align8(unsigned sz) JL_NOTSAFE #define GC_MAX_SZCLASS (2032-sizeof(void*)) static_assert(ARRAY_CACHE_ALIGN_THRESHOLD > GC_MAX_SZCLASS, ""); + +// Size does NOT include the type tag!! STATIC_INLINE jl_value_t *jl_gc_alloc_(jl_ptls_t ptls, size_t sz, void *ty) { jl_value_t *v; diff --git a/src/llvm-final-gc-lowering.cpp b/src/llvm-final-gc-lowering.cpp index e31bcb21199f5..1cb8caf81e771 100644 --- a/src/llvm-final-gc-lowering.cpp +++ b/src/llvm-final-gc-lowering.cpp @@ -214,7 +214,7 @@ Value *FinalLowerGC::lowerGCAllocBytes(CallInst *target, Function &F) } } else { auto size = builder.CreateZExtOrTrunc(target->getArgOperand(1), T_size); - size = builder.CreateAdd(size, ConstantInt::get(T_size, sizeof(void*))); + // allocTypedFunc does not include the type tag in the allocation size! newI = builder.CreateCall(allocTypedFunc, { ptls, size, ConstantPointerNull::get(Type::getInt8PtrTy(F.getContext())) }); derefAttr = Attribute::getWithDereferenceableBytes(F.getContext(), sizeof(void*)); } diff --git a/test/llvmpasses/final-lower-gc.ll b/test/llvmpasses/final-lower-gc.ll index 5bbaa2f4d81ea..b109abe769782 100644 --- a/test/llvmpasses/final-lower-gc.ll +++ b/test/llvmpasses/final-lower-gc.ll @@ -95,9 +95,8 @@ top: %pgcstack = call {}*** @julia.get_pgcstack() %ptls = call {}*** @julia.ptls_states() %ptls_i8 = bitcast {}*** %ptls to i8* -; CHECK: %0 = add i64 %size, 8 -; TYPED: %v = call noalias nonnull dereferenceable(8) {} addrspace(10)* @ijl_gc_alloc_typed(i8* %ptls_i8, i64 %0, i8* null) -; OPAQUE: %v = call noalias nonnull dereferenceable(8) ptr addrspace(10) @ijl_gc_alloc_typed(ptr %ptls_i8, i64 %0, ptr null) +; TYPED: %v = call noalias nonnull dereferenceable(8) {} addrspace(10)* @ijl_gc_alloc_typed(i8* %ptls_i8, i64 %size, i8* null) +; OPAQUE: %v = call noalias nonnull dereferenceable(8) ptr addrspace(10) @ijl_gc_alloc_typed(ptr %ptls_i8, i64 %size, ptr null) %v = call {} addrspace(10)* @julia.gc_alloc_bytes(i8* %ptls_i8, i64 %size) %0 = bitcast {} addrspace(10)* %v to {} addrspace(10)* addrspace(10)* %1 = getelementptr {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %0, i64 -1 From 4954197196d657d14edd3e9c61ac101866e6fa25 Mon Sep 17 00:00:00 2001 From: Diogo Netto <61364108+d-netto@users.noreply.github.com> Date: Sat, 29 Jun 2024 08:03:49 -0300 Subject: [PATCH 370/413] [release-1.10] fix a race condition in jl_gc_realloc_string (#54967) Fix https://github.com/JuliaLang/julia/issues/54963. --- src/gc.c | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/src/gc.c b/src/gc.c index b298a5fa9571f..98a36992d70ea 100644 --- a/src/gc.c +++ b/src/gc.c @@ -3897,35 +3897,8 @@ jl_value_t *jl_gc_realloc_string(jl_value_t *s, size_t sz) { size_t len = jl_string_len(s); if (sz <= len) return s; - jl_taggedvalue_t *v = jl_astaggedvalue(s); - size_t strsz = len + sizeof(size_t) + 1; - if (strsz <= GC_MAX_SZCLASS || - // TODO: because of issue #17971 we can't resize old objects - gc_marked(v->bits.gc)) { - // pool allocated; can't be grown in place so allocate a new object. - jl_value_t *snew = jl_alloc_string(sz); - memcpy(jl_string_data(snew), jl_string_data(s), len); - return snew; - } - size_t newsz = sz + sizeof(size_t) + 1; - size_t offs = sizeof(bigval_t); - size_t oldsz = LLT_ALIGN(strsz + offs, JL_CACHE_BYTE_ALIGNMENT); - size_t allocsz = LLT_ALIGN(newsz + offs, JL_CACHE_BYTE_ALIGNMENT); - if (allocsz < sz) // overflow in adding offs, size was "negative" - jl_throw(jl_memory_exception); - bigval_t *hdr = bigval_header(v); - jl_ptls_t ptls = jl_current_task->ptls; - maybe_collect(ptls); // don't want this to happen during jl_gc_managed_realloc - gc_big_object_unlink(hdr); - // TODO: this is not safe since it frees the old pointer. ideally we'd like - // the old pointer to be left alone if we can't grow in place. - // for now it's up to the caller to make sure there are no references to the - // old pointer. - bigval_t *newbig = (bigval_t*)gc_managed_realloc_(ptls, hdr, allocsz, oldsz, 1, s, 0); - newbig->sz = allocsz; - gc_big_object_link(newbig, &ptls->heap.big_objects); - jl_value_t *snew = jl_valueof(&newbig->header); - *(size_t*)snew = sz; + jl_value_t *snew = jl_alloc_string(sz); + memcpy(jl_string_data(snew), jl_string_data(s), len); return snew; } From 9af34c4b2edb6614e65f97d3a327d4b517d68d3b Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Sat, 13 Jul 2024 08:47:37 -0400 Subject: [PATCH 371/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20Pkg=20stdlib=20from=20f487626b0=20to=206d73ac1f?= =?UTF-8?q?c=20(#55114)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/md5 | 1 + .../Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/sha512 | 1 + .../Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/md5 | 1 - .../Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/sha512 | 1 - stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/md5 create mode 100644 deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/sha512 delete mode 100644 deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/sha512 diff --git a/deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/md5 b/deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/md5 new file mode 100644 index 0000000000000..2870152492a2f --- /dev/null +++ b/deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/md5 @@ -0,0 +1 @@ +5274a71fefb4ea1c4b0790285d65ec70 diff --git a/deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/sha512 b/deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/sha512 new file mode 100644 index 0000000000000..a6816cf4af5fc --- /dev/null +++ b/deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/sha512 @@ -0,0 +1 @@ +88426df8263206866d0ba9967bf8027287062b699ba3e579ed6f730670ed753f7446d6dea28b61c31a30c65f47b51e415da4e06576854bce7febd970d5e5707d diff --git a/deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/md5 b/deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/md5 deleted file mode 100644 index 87f249089c1e2..0000000000000 --- a/deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -9ebc3751d48af21e9f932cfcb3b18781 diff --git a/deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/sha512 b/deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/sha512 deleted file mode 100644 index c41c5df61579f..0000000000000 --- a/deps/checksums/Pkg-f487626b090b91493828cbcde30eed96fb9f8e8f.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -adeedc81fee8360d427e3870d7b7861d0e653128c59c877ab1173284f19506ff2beeea063281ced3f5411be6a25dcca7c566e16eba21b7e91bbdcb2f5de8e268 diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 2d2683e9e9bb1..b2ac22c075d26 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = f487626b090b91493828cbcde30eed96fb9f8e8f +PKG_SHA1 = 6d73ac1fc16cd4356dd58653b7e8dc13c037bdba PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 396ef2760651d255beac9991d3b3fe45c15b08b2 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Wed, 17 Jul 2024 17:39:27 +0900 Subject: [PATCH 372/413] =?UTF-8?q?LinearAlgebra:=20use=20`=E2=89=88`=20in?= =?UTF-8?q?stead=20of=20`=3D=3D`=20for=20`tr`=20tests=20in=20symmetric.jl?= =?UTF-8?q?=20(#55143)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After investigating JuliaLang/julia#54090, I found that the issue was not caused by the effects of `checksquare`, but by the use of the `@simd` macro within `tr(::Matrix)`: https://github.com/JuliaLang/julia/blob/0945b9d7740855c82a09fed42fbf6bc561e02c77/stdlib/LinearAlgebra/src/dense.jl#L373-L380 While simply removing the `@simd` macro was considered, the strict left-to-right summation without `@simd` otherwise is not necessarily more accurate, so I concluded that the problem lies in the test code, which tests the (strict) equality of two different `tr` execution results. I have modified the test code to use `≈` instead of `==`. - fixes #54090 --- stdlib/LinearAlgebra/test/symmetric.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/LinearAlgebra/test/symmetric.jl b/stdlib/LinearAlgebra/test/symmetric.jl index f45ca2def04ff..16c83f3ecdf48 100644 --- a/stdlib/LinearAlgebra/test/symmetric.jl +++ b/stdlib/LinearAlgebra/test/symmetric.jl @@ -220,8 +220,8 @@ end @testset "linalg unary ops" begin @testset "tr" begin - @test tr(asym) == tr(Symmetric(asym)) - @test tr(aherm) == tr(Hermitian(aherm)) + @test tr(asym) ≈ tr(Symmetric(asym)) + @test tr(aherm) ≈ tr(Hermitian(aherm)) end @testset "isposdef[!]" begin From ddf7090aa2971f9bb176220d4aa888b72478b279 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Fri, 5 Apr 2024 23:18:05 +0530 Subject: [PATCH 373/413] `LazyString` in `LinearAlgebra.checksquare` error message (#53961) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reduces dynamic dispatch and makes JET happier. Testing on v1.11: ```julia julia> import LinearAlgebra: checksquare julia> using JET julia> @report_opt checksquare(rand(2,2), rand(2,2)) ═════ 4 possible errors found ═════ ┌ checksquare(::Matrix{Float64}, ::Matrix{Float64}) @ LinearAlgebra /cache/build/builder-amdci4-1/julialang/julia-release-1-dot-11/usr/share/julia/stdlib/v1.11/LinearAlgebra/src/LinearAlgebra.jl:307 │┌ string(::String, ::Tuple{Int64, Int64}) @ Base ./strings/io.jl:189 ││┌ print_to_string(::String, ::Tuple{Int64, Int64}) @ Base ./strings/io.jl:150 │││┌ _unsafe_take!(io::IOBuffer) @ Base ./iobuffer.jl:494 ││││┌ wrap(::Type{Array}, m::MemoryRef{UInt8}, l::Int64) @ Base ./array.jl:3101 │││││ failed to optimize due to recursion: wrap(::Type{Array}, ::MemoryRef{UInt8}, ::Int64) ││││└──────────────────── │││┌ print_to_string(::String, ::Vararg{Any}) @ Base ./strings/io.jl:143 ││││ runtime dispatch detected: Base._str_sizehint(%17::Any)::Int64 │││└──────────────────── │││┌ print_to_string(::String, ::Vararg{Any}) @ Base ./strings/io.jl:148 ││││ runtime dispatch detected: print(%59::IOBuffer, %97::Any)::Any │││└──────────────────── │││┌ string(::String, ::Int64, ::String, ::Tuple{Int64}, ::String, ::Int64, ::String, ::Int64, ::String) @ Base ./strings/io.jl:189 ││││ failed to optimize due to recursion: string(::String, ::Int64, ::String, ::Tuple{Int64}, ::String, ::Int64, ::String, ::Int64, ::String) │││└──────────────────── julia> function checksquare(A...) # This PR sizes = Int[] for a in A size(a,1)==size(a,2) || throw(DimensionMismatch(lazy"matrix is not square: dimensions are $(size(a))")) push!(sizes, size(a,1)) end return sizes end checksquare (generic function with 2 methods) julia> @report_opt checksquare(rand(2,2), rand(2,2)) No errors detected ``` --- stdlib/LinearAlgebra/src/LinearAlgebra.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/LinearAlgebra/src/LinearAlgebra.jl b/stdlib/LinearAlgebra/src/LinearAlgebra.jl index 494572b1e8dd8..7b3ff8f0db53d 100644 --- a/stdlib/LinearAlgebra/src/LinearAlgebra.jl +++ b/stdlib/LinearAlgebra/src/LinearAlgebra.jl @@ -238,14 +238,14 @@ julia> LinearAlgebra.checksquare(A, B) """ function checksquare(A) m,n = size(A) - m == n || throw(DimensionMismatch("matrix is not square: dimensions are $(size(A))")) + m == n || throw(DimensionMismatch(lazy"matrix is not square: dimensions are $(size(A))")) m end function checksquare(A...) sizes = Int[] for a in A - size(a,1)==size(a,2) || throw(DimensionMismatch("matrix is not square: dimensions are $(size(a))")) + size(a,1)==size(a,2) || throw(DimensionMismatch(lazy"matrix is not square: dimensions are $(size(a))")) push!(sizes, size(a,1)) end return sizes From 44992952d4a9cf45321cb7ed631dca49729ad730 Mon Sep 17 00:00:00 2001 From: Zentrik Date: Mon, 18 Sep 2023 13:50:13 +0100 Subject: [PATCH 374/413] Remove boxing in pinv (#51351) As discussed in https://discourse.julialang.org/t/pinv-not-type-stable/103885/14, the `tol` variable is captured which leads to it being boxed, as suggested can be fixed by having two separate variables. (cherry picked from commit 8e21b21ad0ca09e8758039ba0d66a5c1931c29ea) --- stdlib/LinearAlgebra/src/dense.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/LinearAlgebra/src/dense.jl b/stdlib/LinearAlgebra/src/dense.jl index b8a44159de8bd..8d5a3e6ea8de2 100644 --- a/stdlib/LinearAlgebra/src/dense.jl +++ b/stdlib/LinearAlgebra/src/dense.jl @@ -1483,10 +1483,10 @@ function pinv(A::AbstractMatrix{T}; atol::Real = 0.0, rtol::Real = (eps(real(flo return B end SVD = svd(A) - tol = max(rtol*maximum(SVD.S), atol) + tol2 = max(rtol*maximum(SVD.S), atol) Stype = eltype(SVD.S) Sinv = fill!(similar(A, Stype, length(SVD.S)), 0) - index = SVD.S .> tol + index = SVD.S .> tol2 Sinv[index] .= pinv.(view(SVD.S, index)) return SVD.Vt' * (Diagonal(Sinv) * SVD.U') end From 6c58b41c0bd590c1753cac7146f35f9c29b89185 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Mon, 1 Jan 2024 20:58:53 -0500 Subject: [PATCH 375/413] Profile: Improve module docstring (#52678) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ![Screenshot 2023-12-30 at 7 24 10 PM](https://github.com/JuliaLang/julia/assets/1694067/a7c78943-5e4a-475c-864c-3b0005305471) (cherry picked from commit 0f62824530feb9ab39c179175b3fc4702d21c552) --- stdlib/Profile/src/Profile.jl | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/stdlib/Profile/src/Profile.jl b/stdlib/Profile/src/Profile.jl index 690d0465b3ec0..899437312c950 100644 --- a/stdlib/Profile/src/Profile.jl +++ b/stdlib/Profile/src/Profile.jl @@ -1,7 +1,24 @@ # This file is a part of Julia. License is MIT: https://julialang.org/license """ -Profiling support, main entry point is the [`@profile`](@ref) macro. + Profile + +Profiling support. + +## CPU profiling +- `@profile foo()` to profile a specific call. +- `Profile.print()` to print the report. +- `Profile.clear()` to clear the buffer. +- Send a $(Sys.isbsd() ? "SIGINFO (ctrl-t)" : "SIGUSR1") signal to the process to automatically trigger a profile and print. + +## Memory profiling +- `Profile.Allocs.@profile [sample_rate=0.1] foo()` to sample allocations within a specific call. A sample rate of 1.0 will record everything; 0.0 will record nothing. +- `Profile.Allocs.print()` to print the report. +- `Profile.Allocs.clear()` to clear the buffer. + +## Heap profiling +- `Profile.take_heap_snapshot()` to record a `.heapsnapshot` record of the heap. +- Set `JULIA_PROFILE_PEEK_HEAP_SNAPSHOT=true` to capture a heap snapshot when signal $(Sys.isbsd() ? "SIGINFO (ctrl-t)" : "SIGUSR1") is sent. """ module Profile From bfa01f9c482a7338c5dfcd4768080e52abd716ad Mon Sep 17 00:00:00 2001 From: Daniel Karrasch Date: Tue, 23 Apr 2024 18:51:20 +0200 Subject: [PATCH 376/413] Fix generic triangular solves with empty matrices (#54201) (cherry picked from commit 8945914d4f86cd38f1b079cfc916f881eddbb3c2) --- stdlib/LinearAlgebra/src/triangular.jl | 2 ++ stdlib/LinearAlgebra/test/lu.jl | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/stdlib/LinearAlgebra/src/triangular.jl b/stdlib/LinearAlgebra/src/triangular.jl index e8291b1081df2..3e87f6d346e2c 100644 --- a/stdlib/LinearAlgebra/src/triangular.jl +++ b/stdlib/LinearAlgebra/src/triangular.jl @@ -1131,6 +1131,7 @@ function generic_trimatdiv!(C::AbstractVecOrMat, uploc, isunitc, tfun::Function, if size(C) != size(B) throw(DimensionMismatch("size of output, $(size(C)), does not match size of right hand side, $(size(B))")) end + iszero(mA) && return C oA = oneunit(eltype(A)) @inbounds if uploc == 'U' if isunitc == 'N' @@ -1267,6 +1268,7 @@ function generic_trimatdiv!(C::AbstractVecOrMat, uploc, isunitc, ::Function, xA: if size(C) != size(B) throw(DimensionMismatch("size of output, $(size(C)), does not match size of right hand side, $(size(B))")) end + iszero(mA) && return C oA = oneunit(eltype(A)) @inbounds if uploc == 'U' if isunitc == 'N' diff --git a/stdlib/LinearAlgebra/test/lu.jl b/stdlib/LinearAlgebra/test/lu.jl index 744cc543b993e..1797d8b5a9017 100644 --- a/stdlib/LinearAlgebra/test/lu.jl +++ b/stdlib/LinearAlgebra/test/lu.jl @@ -480,4 +480,17 @@ end LinearAlgebra.generic_lufact!(fill(Inf, 2, 2), check=false) end +@testset "lu for empty matrices" begin + for T in (Float64, BigFloat) + A = fill(T(0.0), 0, 0) + v = fill(T(1.0), 0, 10) + @test A \ v ≈ lu(A) \ v + vt = permutedims(v) + @test vt / A ≈ vt / lu(A) + B = UpperTriangular(transpose(fill(complex(T(0.0)), 0, 0)')) + @test B \ v ≈ v + @test vt / B ≈ vt + end +end + end # module TestLU From 4b0f303f23ec8b3088dd2abf0e95fb9797a8ae85 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Tue, 16 Jul 2024 21:47:18 +0200 Subject: [PATCH 377/413] Update the aarch64 devdocs to reflect the current state of its support (#55141) The devdocs here reflect a time when aarch64 was much less well supported, it also reference Cudadrv which has been archived for years (cherry picked from commit 2efcfd9829a898965978199c1fef9f831824f196) --- doc/src/devdocs/build/arm.md | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/doc/src/devdocs/build/arm.md b/doc/src/devdocs/build/arm.md index 747ee25d22a04..df9ede07d270f 100644 --- a/doc/src/devdocs/build/arm.md +++ b/doc/src/devdocs/build/arm.md @@ -55,18 +55,9 @@ due to unsupported inline assembly. In that case, add `MCPU=armv7-a` to ## AArch64 (ARMv8) -Julia has been successfully built on the following ARMv8 devices: +Julia is expected to work and build on ARMv8 cpus. One should follow the general [build instructions](https://github.com/JuliaLang/julia/blob/master/README.md). Julia expects to have around 8GB of ram or swap enabled to build itself. -* [nVidia Jetson TX1 & TX2](https://www.nvidia.com/object/embedded-systems-dev-kits-modules.html); -* [X-Gene 1](https://www.apm.com/products/data-center/x-gene-family/x-gene/); -* [Overdrive 3000](https://softiron.com/products/overdrive-3000/); -* [Cavium ThunderX](https://www.cavium.com/ThunderX_ARM_Processors.html) on [packet.net](https://www.packet.net). - -Compilation on `ARMv8-A` requires that `Make.user` is configured as follows: - -``` -MCPU=armv8-a -``` +### Known issues Starting from Julia v1.10, [JITLink](https://llvm.org/docs/JITLink.html) is automatically enabled on this architecture for all operating systems when linking to LLVM 15 or later versions. Due to a [bug in LLVM memory manager](https://github.com/llvm/llvm-project/issues/63236), non-trivial workloads may generate too many memory mappings that on Linux can exceed the limit of memory mappings (`mmap`) set in the file `/proc/sys/vm/max_map_count`, resulting in an error like @@ -77,21 +68,3 @@ Should this happen, ask your system administrator to increase the limit of memor ``` sysctl -w vm.max_map_count=262144 ``` - -### nVidia Jetson TX2 - -Julia builds and runs on the [nVidia Jetson TX2](https://www.nvidia.com/object/embedded-systems-dev-kits-modules.html) -platform with minimal configuration changes. - -After configuring `Make.user` as per the `AArch64` instructions in this document, -follow the general [build instructions](https://github.com/JuliaLang/julia/blob/master/README.md). -The majority of the build dependencies specified in the instructions are installed by -the default configuration flashed by [Jetpack 3.0](https://developer.nvidia.com/embedded/jetpack). The remaining tools can be installed by issuing the following command: - -``` -sudo apt-get install gfortran wget cmake -``` - -A full parallel build, including LLVM, -will complete in around two hours. All tests pass and CUDA functionality is available -through, e.g., [CUDAdrv](https://github.com/JuliaGPU/CUDAdrv.jl). From 9ca08e9cf40b7831a3b858de6ed01f21833dbc99 Mon Sep 17 00:00:00 2001 From: mikmoore <95002244+mikmoore@users.noreply.github.com> Date: Fri, 19 Jul 2024 18:09:17 -0600 Subject: [PATCH 378/413] Compat for `Base.@nospecializeinfer` (#55178) This macro was added in v1.10 but was missing a compat notice. (cherry picked from commit 3290904379766c37796016180993c19c34c8c31a) --- base/expr.jl | 3 +++ 1 file changed, 3 insertions(+) diff --git a/base/expr.jl b/base/expr.jl index e007306063db1..75e54a2249508 100644 --- a/base/expr.jl +++ b/base/expr.jl @@ -795,6 +795,9 @@ while it can not infer the concrete return type of it. Without the `@nospecializeinfer`, `f([1.0])` would infer the return type of `g` as `Float64`, indicating that inference ran for `g(::Vector{Float64})` despite the prohibition on specialized code generation. + +!!! compat "Julia 1.10" + Using `Base.@nospecializeinfer` requires Julia version 1.10. """ macro nospecializeinfer(ex) esc(isa(ex, Expr) ? pushmeta!(ex, :nospecializeinfer) : ex) From 21d33b4814fb25a51d01831973c04a9eaa6ae3e6 Mon Sep 17 00:00:00 2001 From: "Steven G. Johnson" Date: Sun, 21 Jul 2024 18:41:13 -0400 Subject: [PATCH 379/413] compat notice for a[begin] indexing (#55197) `a[begin]` indexing was added by #35779 in Julia 1.6, so this feature needs a compat notice in the docstring. (cherry picked from commit 43df7fb6722a18f1e4f9a4649be664b23af6a0d5) --- base/docs/basedocs.jl | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/base/docs/basedocs.jl b/base/docs/basedocs.jl index b6e744050b2b6..eace6aa4030bb 100644 --- a/base/docs/basedocs.jl +++ b/base/docs/basedocs.jl @@ -1335,7 +1335,11 @@ Usually `begin` will not be necessary, since keywords such as [`function`](@ref) implicitly begin blocks of code. See also [`;`](@ref). `begin` may also be used when indexing to represent the first index of a -collection or the first index of a dimension of an array. +collection or the first index of a dimension of an array. For example, +`a[begin]` is the first element of an array `a`. + +!!! compat "Julia 1.6" + Use of `begin` as an index requires Julia 1.6 or later. # Examples ```jldoctest From 6225d9a4cc970a45e20dd49992b780e7a1a3993a Mon Sep 17 00:00:00 2001 From: "Steven G. Johnson" Date: Mon, 22 Jul 2024 18:02:29 -0400 Subject: [PATCH 380/413] correction to compat notice for a[begin] (#55209) Correction to #55197: `a[begin]` indexing was added in Julia 1.4 (#33946), not in Julia 1.6 (which just changed the implementation in #35779). My bad. (cherry picked from commit 06467eb35c463dd4b957efc27651925edb3de35a) --- base/docs/basedocs.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/docs/basedocs.jl b/base/docs/basedocs.jl index eace6aa4030bb..3d1e81bf2a570 100644 --- a/base/docs/basedocs.jl +++ b/base/docs/basedocs.jl @@ -1338,8 +1338,8 @@ implicitly begin blocks of code. See also [`;`](@ref). collection or the first index of a dimension of an array. For example, `a[begin]` is the first element of an array `a`. -!!! compat "Julia 1.6" - Use of `begin` as an index requires Julia 1.6 or later. +!!! compat "Julia 1.4" + Use of `begin` as an index requires Julia 1.4 or later. # Examples ```jldoctest From 43cdc58a1c2bec3e8b92437980ba743ce08a8649 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Mon, 22 Jul 2024 21:43:43 -0400 Subject: [PATCH 381/413] document mutable struct const fields (#55203) Introduced in https://github.com/JuliaLang/julia/pull/43305 (cherry picked from commit 6b08e80bd1217c5c2eb6c89604c21faa5b2a156f) --- base/docs/basedocs.jl | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/base/docs/basedocs.jl b/base/docs/basedocs.jl index 3d1e81bf2a570..c802f50493001 100644 --- a/base/docs/basedocs.jl +++ b/base/docs/basedocs.jl @@ -1400,8 +1400,20 @@ kw"struct" mutable struct `mutable struct` is similar to [`struct`](@ref), but additionally allows the -fields of the type to be set after construction. See the manual section on -[Composite Types](@ref) for more information. +fields of the type to be set after construction. + +Individual fields of a mutable struct can be marked as `const` to make them immutable: + +```julia +mutable struct Baz + a::Int + const b::Float64 +end +``` +!!! compat "Julia 1.8" + The `const` keyword for fields of mutable structs requires at least Julia 1.8. + +See the manual section on [Composite Types](@ref) for more information. """ kw"mutable struct" From 4b063cf269aea4f5b07f854fd6a742b334d3d8ca Mon Sep 17 00:00:00 2001 From: Matt Bauman Date: Wed, 5 Jun 2024 04:22:47 -0400 Subject: [PATCH 382/413] more precise aliasing checks for SubArray (#54624) This avoids returning false positives where only the indices are shared. As the indices are not mutated by array assignments (and are explicitly warned against mutation in general), we can ignore the case where _only_ the indices are aliasing. Fix #54621 (cherry picked from commit 97bf1484bce0e15fe8c400bd338a68c9424508f8) --- base/multidimensional.jl | 41 ++++++++++++++++++++++++---------------- test/subarray.jl | 31 ++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 16 deletions(-) diff --git a/base/multidimensional.jl b/base/multidimensional.jl index 050e1503d2e58..b7e95ed7dfba4 100644 --- a/base/multidimensional.jl +++ b/base/multidimensional.jl @@ -1025,25 +1025,34 @@ end ### from abstractarray.jl -# In the common case where we have two views into the same parent, aliasing checks -# are _much_ easier and more important to get right -function mightalias(A::SubArray{T,<:Any,P}, B::SubArray{T,<:Any,P}) where {T,P} - if !_parentsmatch(A.parent, B.parent) - # We cannot do any better than the usual dataids check - return !_isdisjoint(dataids(A), dataids(B)) - end - # Now we know that A.parent === B.parent. This means that the indices of A - # and B are the same length and indexing into the same dimensions. We can - # just walk through them and check for overlaps: O(ndims(A)). We must finally - # ensure that the indices don't alias with either parent - return _indicesmightoverlap(A.indices, B.indices) || - !_isdisjoint(dataids(A.parent), _splatmap(dataids, B.indices)) || - !_isdisjoint(dataids(B.parent), _splatmap(dataids, A.indices)) +function mightalias(A::SubArray, B::SubArray) + # There are three ways that SubArrays might _problematically_ alias one another: + # 1. The parents are the same we can conservatively check if the indices might overlap OR + # 2. The parents alias eachother in a more complicated manner (and we can't trace indices) OR + # 3. One's parent is used in the other's indices + # Note that it's ok for just the indices to alias each other as those should not be mutated, + # so we can always do better than the default !_isdisjoint(dataids(A), dataids(B)) + if isbits(A.parent) || isbits(B.parent) + return false # Quick out for immutables + elseif _parentsmatch(A.parent, B.parent) + # Each SubArray unaliases its own parent from its own indices upon construction, so if + # the two parents are the same, then by construction one cannot alias the other's indices + # and therefore this is the only test we need to perform: + return _indicesmightoverlap(A.indices, B.indices) + else + A_parent_ids = dataids(A.parent) + B_parent_ids = dataids(B.parent) + return !_isdisjoint(A_parent_ids, B_parent_ids) || + !_isdisjoint(A_parent_ids, _splatmap(dataids, B.indices)) || + !_isdisjoint(B_parent_ids, _splatmap(dataids, A.indices)) + end end +# Test if two arrays are backed by exactly the same memory in exactly the same order _parentsmatch(A::AbstractArray, B::AbstractArray) = A === B -# Two reshape(::Array)s of the same size aren't `===` because they have different headers -_parentsmatch(A::Array, B::Array) = pointer(A) == pointer(B) && size(A) == size(B) +_parentsmatch(A::DenseArray, B::DenseArray) = elsize(A) == elsize(B) && pointer(A) == pointer(B) && size(A) == size(B) +_parentsmatch(A::StridedArray, B::StridedArray) = elsize(A) == elsize(B) && pointer(A) == pointer(B) && strides(A) == strides(B) +# Given two SubArrays with the same parent, check if the indices might overlap (returning true if unsure) _indicesmightoverlap(A::Tuple{}, B::Tuple{}) = true _indicesmightoverlap(A::Tuple{}, B::Tuple) = error("malformed subarray") _indicesmightoverlap(A::Tuple, B::Tuple{}) = error("malformed subarray") diff --git a/test/subarray.jl b/test/subarray.jl index 11d18185dd753..7bd47cac0bb64 100644 --- a/test/subarray.jl +++ b/test/subarray.jl @@ -779,3 +779,34 @@ end @test parent(@inferred(view(A, :, 3, 1, CartesianIndices(()), 1))) === A @test_throws BoundsError view(A, :, 3, 2, CartesianIndices(()), 1) end + +@testset "aliasing checks with shared indices" begin + indices = [1,3] + a = rand(3) + av = @view a[indices] + b = rand(3) + bv = @view b[indices] + @test !Base.mightalias(av, bv) + @test Base.mightalias(a, av) + @test Base.mightalias(b, bv) + @test Base.mightalias(indices, av) + @test Base.mightalias(indices, bv) + @test Base.mightalias(view(indices, :), av) + @test Base.mightalias(view(indices, :), bv) +end + +@testset "aliasing checks with disjoint arrays" begin + A = rand(3,4,5) + @test Base.mightalias(view(A, :, :, 1), view(A, :, :, 1)) + @test !Base.mightalias(view(A, :, :, 1), view(A, :, :, 2)) + + B = reinterpret(UInt64, A) + @test Base.mightalias(view(B, :, :, 1), view(A, :, :, 1)) + @test !Base.mightalias(view(B, :, :, 1), view(A, :, :, 2)) + + C = reinterpret(UInt32, A) + @test Base.mightalias(view(C, :, :, 1), view(A, :, :, 1)) + @test Base.mightalias(view(C, :, :, 1), view(A, :, :, 2)) # This is overly conservative + @test Base.mightalias(@view(C[begin:2:end, :, 1]), view(A, :, :, 1)) + @test Base.mightalias(@view(C[begin:2:end, :, 1]), view(A, :, :, 2)) # This is overly conservative +end From 6ee9546507e117dc71c9025f411be87304164f80 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Thu, 6 Jun 2024 00:00:18 -0300 Subject: [PATCH 383/413] Fix assertion/crash when optimizing function with dead basic block (#54690) AllocOpt probably needs to handle that in other places more smartly but this seems to at least stop it crashing. Fixes issue found in https://github.com/JuliaLang/julia/pull/54604#issuecomment-2136320508 by @topolarity. (cherry picked from commit 5cb1107cce1f8361b44e8609f08d5e3b0e11c77d) --- src/llvm-alloc-opt.cpp | 2 + test/compiler/codegen.jl | 18 ++++ test/llvmpasses/alloc-opt-pass.ll | 156 ++++++++++++++++++------------ 3 files changed, 116 insertions(+), 60 deletions(-) diff --git a/src/llvm-alloc-opt.cpp b/src/llvm-alloc-opt.cpp index 751cae6419dda..7feaf7e5826aa 100644 --- a/src/llvm-alloc-opt.cpp +++ b/src/llvm-alloc-opt.cpp @@ -400,6 +400,8 @@ void Optimizer::insertLifetime(Value *ptr, Constant *sz, Instruction *orig) auto bb = use->getParent(); if (!bbs.insert(bb).second) continue; + if (pred_empty(bb)) + continue; // No predecessors so the block is dead assert(lifetime_stack.empty()); Lifetime::Frame cur{bb}; while (true) { diff --git a/test/compiler/codegen.jl b/test/compiler/codegen.jl index 88f9948bb30a5..f7df1be04f18d 100644 --- a/test/compiler/codegen.jl +++ b/test/compiler/codegen.jl @@ -852,3 +852,21 @@ end # https://github.com/JuliaLang/julia/issues/51233 obj51233 = (1,) @test_throws ErrorException obj51233.x + +bar54599() = Base.inferencebarrier(true) ? (Base.PkgId(Main),1) : nothing + +function foo54599() + pkginfo = @noinline bar54599() + pkgid = pkginfo !== nothing ? pkginfo[1] : nothing + @noinline println(devnull, pkgid) + pkgid.uuid !== nothing ? pkgid.uuid : false +end + +#this function used to crash allocopt due to a no predecessors bug +barnopreds() = Base.inferencebarrier(true) ? (Base.PkgId(Test),1) : nothing +function foonopreds() + pkginfo = @noinline barnopreds() + pkgid = pkginfo !== nothing ? pkginfo[1] : nothing + pkgid.uuid !== nothing ? pkgid.uuid : false +end +@test foonopreds() !== nothing diff --git a/test/llvmpasses/alloc-opt-pass.ll b/test/llvmpasses/alloc-opt-pass.ll index b7e0647263caa..4bfcf17ca454f 100644 --- a/test/llvmpasses/alloc-opt-pass.ll +++ b/test/llvmpasses/alloc-opt-pass.ll @@ -23,23 +23,23 @@ ; CHECK-NEXT: br label %L3 ; CHECK: L3: -define void @preserve_branches(i8* %fptr, i1 %b, i1 %b2) { - %pgcstack = call {}*** @julia.get_pgcstack() - %ptls = call {}*** @julia.ptls_states() - %ptls_i8 = bitcast {}*** %ptls to i8* +define void @preserve_branches(ptr %fptr, i1 %b, i1 %b2) { + %pgcstack = call ptr @julia.get_pgcstack() + %ptls = call ptr @julia.ptls_states() + %ptls_i8 = bitcast ptr %ptls to ptr br i1 %b, label %L1, label %L3 -L1: - %v = call noalias {} addrspace(10)* @julia.gc_alloc_obj(i8* %ptls_i8, i64 8, {} addrspace(10)* @tag) - %tok = call token (...) @llvm.julia.gc_preserve_begin({} addrspace(10)* nonnull %v) +L1: ; preds = %0 + %v = call noalias ptr addrspace(10) @julia.gc_alloc_obj(ptr %ptls_i8, i64 8, ptr addrspace(10) @tag) + %tok = call token (...) @llvm.julia.gc_preserve_begin(ptr addrspace(10) nonnull %v) call void @external_function() br i1 %b2, label %L2, label %L3 -L2: +L2: ; preds = %L1 call void @external_function() br label %L3 -L3: +L3: ; preds = %L2, %L1, %0 ret void } ; CHECK-LABEL: }{{$}} @@ -58,24 +58,24 @@ L3: ; CHECK-NEXT: br label %L3 ; CHECK: L3: -define void @preserve_branches2(i8* %fptr, i1 %b, i1 %b2) { - %pgcstack = call {}*** @julia.get_pgcstack() - %ptls = call {}*** @julia.ptls_states() - %ptls_i8 = bitcast {}*** %ptls to i8* - %v2 = call {} addrspace(10)* @external_function2() +define void @preserve_branches2(ptr %fptr, i1 %b, i1 %b2) { + %pgcstack = call ptr @julia.get_pgcstack() + %ptls = call ptr @julia.ptls_states() + %ptls_i8 = bitcast ptr %ptls to ptr + %v2 = call ptr addrspace(10) @external_function2() br i1 %b, label %L1, label %L3 -L1: - %v = call noalias {} addrspace(10)* @julia.gc_alloc_obj(i8* %ptls_i8, i64 8, {} addrspace(10)* @tag) - %tok = call token (...) @llvm.julia.gc_preserve_begin({} addrspace(10)* %v, {} addrspace(10)* nonnull %v2) +L1: ; preds = %0 + %v = call noalias ptr addrspace(10) @julia.gc_alloc_obj(ptr %ptls_i8, i64 8, ptr addrspace(10) @tag) + %tok = call token (...) @llvm.julia.gc_preserve_begin(ptr addrspace(10) %v, ptr addrspace(10) nonnull %v2) call void @external_function() br i1 %b2, label %L2, label %L3 -L2: +L2: ; preds = %L1 call void @external_function() br label %L3 -L3: +L3: ; preds = %L2, %L1, %0 ret void } ; CHECK-LABEL: }{{$}} @@ -85,26 +85,30 @@ L3: ; CHECK-NOT: alloca i96 ; CHECK: ret void define void @legal_int_types() { - %pgcstack = call {}*** @julia.get_pgcstack() - %ptls = call {}*** @julia.ptls_states() - %ptls_i8 = bitcast {}*** %ptls to i8* - %var1 = call {} addrspace(10)* @julia.gc_alloc_obj(i8* %ptls_i8, i64 12, {} addrspace(10)* @tag) - %var2 = addrspacecast {} addrspace(10)* %var1 to {} addrspace(11)* - %var3 = call {}* @julia.pointer_from_objref({} addrspace(11)* %var2) + %pgcstack = call ptr @julia.get_pgcstack() + %ptls = call ptr @julia.ptls_states() + %ptls_i8 = bitcast ptr %ptls to ptr + %var1 = call ptr addrspace(10) @julia.gc_alloc_obj(ptr %ptls_i8, i64 12, ptr addrspace(10) @tag) + %var2 = addrspacecast ptr addrspace(10) %var1 to ptr addrspace(11) + %var3 = call ptr @julia.pointer_from_objref(ptr addrspace(11) %var2) ret void } ; CHECK-LABEL: }{{$}} - declare void @external_function() -declare {} addrspace(10)* @external_function2() -declare {}*** @julia.ptls_states() -declare {}*** @julia.get_pgcstack() -declare noalias {} addrspace(10)* @julia.gc_alloc_obj(i8*, i64, {} addrspace(10)*) -declare {}* @julia.pointer_from_objref({} addrspace(11)*) -declare void @llvm.memcpy.p11i8.p0i8.i64(i8 addrspace(11)* nocapture writeonly, i8* nocapture readonly, i64, i32, i1) -declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture writeonly, i8* nocapture readonly, i64, i1) + +declare ptr addrspace(10) @external_function2() + +declare ptr @julia.ptls_states() + +declare ptr @julia.get_pgcstack() + +declare noalias ptr addrspace(10) @julia.gc_alloc_obj(ptr, i64, ptr addrspace(10)) + +declare ptr @julia.pointer_from_objref(ptr addrspace(11)) + declare token @llvm.julia.gc_preserve_begin(...) + declare void @llvm.julia.gc_preserve_end(token) ; CHECK-LABEL: @memref_collision @@ -121,24 +125,25 @@ declare void @llvm.julia.gc_preserve_end(token) ; CHECK: L2: ; CHECK: load i define void @memref_collision(i64 %x) { - %pgcstack = call {}*** @julia.get_pgcstack() - %ptls = call {}*** @julia.ptls_states() - %ptls_i8 = bitcast {}*** %ptls to i8* - %v = call noalias {} addrspace(10)* @julia.gc_alloc_obj(i8* %ptls_i8, i64 8, {} addrspace(10)* @tag) - %v_p = bitcast {} addrspace(10)* %v to i64 addrspace(10)* - store i64 %x, i64 addrspace(10)* %v_p - br i1 0, label %L1, label %L2 - -L1: - %v1 = bitcast {} addrspace(10)* %v to {} addrspace(10)* addrspace(10)* - %v1_x = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %v1 + %pgcstack = call ptr @julia.get_pgcstack() + %ptls = call ptr @julia.ptls_states() + %ptls_i8 = bitcast ptr %ptls to ptr + %v = call noalias ptr addrspace(10) @julia.gc_alloc_obj(ptr %ptls_i8, i64 8, ptr addrspace(10) @tag) + %v_p = bitcast ptr addrspace(10) %v to ptr addrspace(10) + store i64 %x, ptr addrspace(10) %v_p, align 4 + br i1 false, label %L1, label %L2 + +L1: ; preds = %0 + %v1 = bitcast ptr addrspace(10) %v to ptr addrspace(10) + %v1_x = load ptr addrspace(10), ptr addrspace(10) %v1, align 8 ret void -L2: - %v2 = bitcast {} addrspace(10)* %v to i64 addrspace(10)* - %v2_x = load i64, i64 addrspace(10)* %v2 +L2: ; preds = %0 + %v2 = bitcast ptr addrspace(10) %v to ptr addrspace(10) + %v2_x = load i64, ptr addrspace(10) %v2, align 4 ret void } + ; CHECK-LABEL: }{{$}} ; CHECK-LABEL: @lifetime_no_preserve_end @@ -146,19 +151,50 @@ L2: ; CHECK-NOT: call token(...) @llvm.julia.gc_preserve_begin ; CHECK: call void @llvm.lifetime.start ; CHECK-NOT: call void @llvm.lifetime.end -define void @lifetime_no_preserve_end({}* noalias nocapture noundef nonnull sret({}) %0) { - %pgcstack = call {}*** @julia.get_pgcstack() - %ptls = call {}*** @julia.ptls_states() - %ptls_i8 = bitcast {}*** %ptls to i8* - %v = call noalias {} addrspace(10)* @julia.gc_alloc_obj(i8* %ptls_i8, i64 8, {} addrspace(10)* @tag) - %token = call token (...) @llvm.julia.gc_preserve_begin({} addrspace(10)* %v) - %v_derived = addrspacecast {} addrspace(10)* %v to {} addrspace(11)* - %ptr = call nonnull {}* @julia.pointer_from_objref({} addrspace(11)* %v_derived) - %ptr_raw = bitcast {}* %ptr to i8* - call void @external_function() ; safepoint - %ret_raw = bitcast {}* %0 to i8* - call void @llvm.memcpy.p0i8.p0i8.i64(i8* align 8 %ret_raw, i8 * align 8 %ptr_raw, i64 0, i1 false) - %ret_raw2 = bitcast {}* %0 to i8* +define void @lifetime_no_preserve_end(ptr noalias nocapture noundef nonnull sret({}) %0) { + %pgcstack = call ptr @julia.get_pgcstack() + %ptls = call ptr @julia.ptls_states() + %ptls_i8 = bitcast ptr %ptls to ptr + %v = call noalias ptr addrspace(10) @julia.gc_alloc_obj(ptr %ptls_i8, i64 8, ptr addrspace(10) @tag) + %token = call token (...) @llvm.julia.gc_preserve_begin(ptr addrspace(10) %v) + %v_derived = addrspacecast ptr addrspace(10) %v to ptr addrspace(11) + %ptr = call nonnull ptr @julia.pointer_from_objref(ptr addrspace(11) %v_derived) + %ptr_raw = bitcast ptr %ptr to ptr + call void @external_function() + %ret_raw = bitcast ptr %0 to ptr + call void @llvm.memcpy.p0.p0.i64(ptr align 8 %ret_raw, ptr align 8 %ptr_raw, i64 0, i1 false) + %ret_raw2 = bitcast ptr %0 to ptr ret void } ; CHECK-LABEL: }{{$}} + +; Test that the pass handles dead basic blocks with references to the allocation +; CHECK-LABEL: @nopreds +; CHECK: alloca i8, i64 0, align 1 +; CHECK: call void @llvm.lifetime.start +define swiftcc { ptr addrspace(10), i8 } @nopreds() { +top: + %0 = call ptr addrspace(10) @julia.gc_alloc_obj(ptr null, i64 0, ptr addrspace(10) null) + %1 = addrspacecast ptr addrspace(10) %0 to ptr addrspace(11) + br label %common.ret + +common.ret: ; preds = %union_move9, %top + ret { ptr addrspace(10), i8 } zeroinitializer + +union_move9: ; No predecessors! + call void @llvm.memcpy.p0.p11.i64(ptr null, ptr addrspace(11) %1, i64 0, i1 false) + br label %common.ret +} +; CHECK-LABEL: }{{$}} + +; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) +declare void @llvm.memcpy.p11.p0.i64(ptr addrspace(11) noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #0 +; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) +declare void @llvm.memcpy.p0.p11.i64(ptr noalias nocapture writeonly, ptr addrspace(11) noalias nocapture readonly, i64, i1 immarg) #0 +; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) +declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #0 + +attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) } +attributes #1 = { allockind("alloc") } +attributes #2 = { allockind("alloc,uninitialized") } +attributes #3 = { allockind("alloc,zeroed") } From 8b72c09f2c5071d590ca0a9bcdaa73979d13a4e0 Mon Sep 17 00:00:00 2001 From: Phillip Alday Date: Tue, 9 Jul 2024 18:59:02 +0000 Subject: [PATCH 384/413] Use triple quotes in TOML.print when string contains newline (#55084) closes #55083 Shouldu this also check for `\r`? --------- Co-authored-by: Alex Arslan (cherry picked from commit e732706bbcff002860d88aee64a8113311529252) --- stdlib/TOML/src/print.jl | 5 +++-- stdlib/TOML/test/print.jl | 10 ++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/stdlib/TOML/src/print.jl b/stdlib/TOML/src/print.jl index 1fa9f97405504..af792b72d2dcc 100644 --- a/stdlib/TOML/src/print.jl +++ b/stdlib/TOML/src/print.jl @@ -97,9 +97,10 @@ function printvalue(f::MbyFunc, io::IO, value::TOMLValue) value isa AbstractFloat ? Base.print(io, isnan(value) ? "nan" : isinf(value) ? string(value > 0 ? "+" : "-", "inf") : Float64(value)) : # TOML specifies IEEE 754 binary64 for float - value isa AbstractString ? (Base.print(io, "\""); + value isa AbstractString ? (qmark = Base.contains(value, "\n") ? "\"\"\"" : "\""; + Base.print(io, qmark); print_toml_escaped(io, value); - Base.print(io, "\"")) : + Base.print(io, qmark)) : value isa AbstractDict ? print_inline_table(f, io, value) : error("internal error in TOML printing, unhandled value") end diff --git a/stdlib/TOML/test/print.jl b/stdlib/TOML/test/print.jl index 765b6feb491a5..d5b325ff9b3b6 100644 --- a/stdlib/TOML/test/print.jl +++ b/stdlib/TOML/test/print.jl @@ -140,3 +140,13 @@ d = "hello" a = 2 b = 9.9 """ + +# multiline strings (#55083) +s = """ +a = \"\"\"lorem ipsum + + + +alpha\"\"\" +""" +@test roundtrip(s) From 95919610a6f32224cffadb58d5e916c380e3c6da Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Wed, 10 Jul 2024 09:45:20 +0530 Subject: [PATCH 385/413] LinearAlgebra: LazyString in error messages for Diagonal/Bidiagonal (#55070) (cherry picked from commit ec013f10cc0c6528a2390e7233e4a5440d677f99) --- stdlib/LinearAlgebra/src/bidiag.jl | 16 ++++++++-------- stdlib/LinearAlgebra/src/diagonal.jl | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/stdlib/LinearAlgebra/src/bidiag.jl b/stdlib/LinearAlgebra/src/bidiag.jl index e0280a54f2b82..a5f0af4720cf5 100644 --- a/stdlib/LinearAlgebra/src/bidiag.jl +++ b/stdlib/LinearAlgebra/src/bidiag.jl @@ -165,8 +165,8 @@ end elseif A.uplo == 'L' && (i == j + 1) @inbounds A.ev[j] = x elseif !iszero(x) - throw(ArgumentError(string("cannot set entry ($i, $j) off the ", - "$(istriu(A) ? "upper" : "lower") bidiagonal band to a nonzero value ($x)"))) + throw(ArgumentError(LazyString(lazy"cannot set entry ($i, $j) off the ", + istriu(A) ? "upper" : "lower", " bidiagonal band to a nonzero value ", x))) end return x end @@ -337,8 +337,8 @@ isdiag(M::Bidiagonal) = iszero(M.ev) function tril!(M::Bidiagonal{T}, k::Integer=0) where T n = length(M.dv) if !(-n - 1 <= k <= n - 1) - throw(ArgumentError(string("the requested diagonal, $k, must be at least ", - "$(-n - 1) and at most $(n - 1) in an $n-by-$n matrix"))) + throw(ArgumentError(LazyString(lazy"the requested diagonal, $k, must be at least ", + lazy"$(-n - 1) and at most $(n - 1) in an $n-by-$n matrix"))) elseif M.uplo == 'U' && k < 0 fill!(M.dv, zero(T)) fill!(M.ev, zero(T)) @@ -356,8 +356,8 @@ end function triu!(M::Bidiagonal{T}, k::Integer=0) where T n = length(M.dv) if !(-n + 1 <= k <= n + 1) - throw(ArgumentError(string("the requested diagonal, $k, must be at least", - "$(-n + 1) and at most $(n + 1) in an $n-by-$n matrix"))) + throw(ArgumentError(LazyString(lazy"the requested diagonal, $k, must be at least", + lazy"$(-n + 1) and at most $(n + 1) in an $n-by-$n matrix"))) elseif M.uplo == 'L' && k > 0 fill!(M.dv, zero(T)) fill!(M.ev, zero(T)) @@ -382,8 +382,8 @@ function diag(M::Bidiagonal{T}, n::Integer=0) where T elseif -size(M,1) <= n <= size(M,1) return fill!(similar(M.dv, size(M,1)-abs(n)), zero(T)) else - throw(ArgumentError(string("requested diagonal, $n, must be at least $(-size(M, 1)) ", - "and at most $(size(M, 2)) for an $(size(M, 1))-by-$(size(M, 2)) matrix"))) + throw(ArgumentError(LazyString(lazy"requested diagonal, $n, must be at least $(-size(M, 1)) ", + lazy"and at most $(size(M, 2)) for an $(size(M, 1))-by-$(size(M, 2)) matrix"))) end end diff --git a/stdlib/LinearAlgebra/src/diagonal.jl b/stdlib/LinearAlgebra/src/diagonal.jl index 29c190e87df72..042a75ffa8630 100644 --- a/stdlib/LinearAlgebra/src/diagonal.jl +++ b/stdlib/LinearAlgebra/src/diagonal.jl @@ -212,8 +212,8 @@ end function tril!(D::Diagonal{T}, k::Integer=0) where T n = size(D,1) if !(-n - 1 <= k <= n - 1) - throw(ArgumentError(string("the requested diagonal, $k, must be at least ", - "$(-n - 1) and at most $(n - 1) in an $n-by-$n matrix"))) + throw(ArgumentError(LazyString(lazy"the requested diagonal, $k, must be at least ", + lazy"$(-n - 1) and at most $(n - 1) in an $n-by-$n matrix"))) elseif k < 0 fill!(D.diag, zero(T)) end From c7bf7b8158a166f6631fde7edce427bd72189b7d Mon Sep 17 00:00:00 2001 From: Phillip Alday Date: Wed, 12 Jun 2024 03:13:31 +0000 Subject: [PATCH 386/413] add missing compat entry to edit (#54769) (cherry picked from commit 3f8e1bd953ebff71cc430ec87977d06bd16e16f2) --- stdlib/InteractiveUtils/src/editless.jl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/stdlib/InteractiveUtils/src/editless.jl b/stdlib/InteractiveUtils/src/editless.jl index 539e9b12f4071..1b52caa4cdee3 100644 --- a/stdlib/InteractiveUtils/src/editless.jl +++ b/stdlib/InteractiveUtils/src/editless.jl @@ -223,7 +223,10 @@ Edit a file or directory optionally providing a line number to edit the file at. Return to the `julia` prompt when you quit the editor. The editor can be changed by setting `JULIA_EDITOR`, `VISUAL` or `EDITOR` as an environment variable. -See also [`define_editor`](@ref). +!!! compat "Julia 1.9" + The `column` argument requires at least Julia 1.9. + +See also [`InteractiveUtils.define_editor`](@ref). """ function edit(path::AbstractString, line::Integer=0, column::Integer=0) path isa String || (path = convert(String, path)) From dbb0640ada8e24d78bc8b0f67ee1b38a9ba3a23d Mon Sep 17 00:00:00 2001 From: Elliot Saba Date: Thu, 13 Jun 2024 22:13:52 -0700 Subject: [PATCH 387/413] Bump libblastrampoline to v5.10.1 (#54791) This release fixes issues with complex valued returns from functions such as `cdotc` on Windows x64. See this discussion [0] for initial diagnosis, and this PR [1] for the relevant fixes. [0] https://github.com/JuliaLinearAlgebra/BLISBLAS.jl/issues/15 [1] https://github.com/JuliaLinearAlgebra/libblastrampoline/pull/129 (cherry picked from commit 3054c00d3317b50d180537bfd7547e7fd6251d48) --- deps/blastrampoline.version | 6 +- deps/checksums/blastrampoline | 68 +++++++++++------------ stdlib/libblastrampoline_jll/Project.toml | 2 +- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/deps/blastrampoline.version b/deps/blastrampoline.version index 616300377e3e6..871053db3c9f2 100644 --- a/deps/blastrampoline.version +++ b/deps/blastrampoline.version @@ -2,6 +2,6 @@ BLASTRAMPOLINE_JLL_NAME := libblastrampoline ## source build -BLASTRAMPOLINE_VER := 5.8.0 -BLASTRAMPOLINE_BRANCH=v5.8.0 -BLASTRAMPOLINE_SHA1=81316155d4838392e8462a92bcac3eebe9acd0c7 +BLASTRAMPOLINE_VER := 5.10.1 +BLASTRAMPOLINE_BRANCH=v5.10.1 +BLASTRAMPOLINE_SHA1=ff05ebb4e450deda0aebe8dce4d4f054e23fecfc diff --git a/deps/checksums/blastrampoline b/deps/checksums/blastrampoline index d72a584fd1b0c..b8c4c68c661ba 100644 --- a/deps/checksums/blastrampoline +++ b/deps/checksums/blastrampoline @@ -1,34 +1,34 @@ -blastrampoline-81316155d4838392e8462a92bcac3eebe9acd0c7.tar.gz/md5/0478361eac783b99002b1ad985182f05 -blastrampoline-81316155d4838392e8462a92bcac3eebe9acd0c7.tar.gz/sha512/2489ce5770a9861889a2d07e61440ba4f233a92efd4a3544747f83320e0e7a229a8fe01553d99f5f1d98713316f2506daf0adb7d024a46e32b3de1bb2966d637 -libblastrampoline.v5.8.0+1.aarch64-apple-darwin.tar.gz/md5/a28837b9838fef2b3831de3278ec7949 -libblastrampoline.v5.8.0+1.aarch64-apple-darwin.tar.gz/sha512/111ac2fe5f8f8102f2f7c9e9e6aa1d1a12d2db941238c949ff8e64b30335e8b2f6ecce0d5f577879c231eb839c06e259302b709f3d34e94a97047bfa984222f6 -libblastrampoline.v5.8.0+1.aarch64-linux-gnu.tar.gz/md5/9e781a026e03118df81347fb90f10d45 -libblastrampoline.v5.8.0+1.aarch64-linux-gnu.tar.gz/sha512/89469f32a666efd46437351a8fb16758c35e5aecc563d202b480c10ddf9fa5350a5a321076b79b0a1a07ec2cea0b73aa5c28979cc382a198fa96cca0b5899d25 -libblastrampoline.v5.8.0+1.aarch64-linux-musl.tar.gz/md5/b7acda2fdd157bbb183d0dd33643beef -libblastrampoline.v5.8.0+1.aarch64-linux-musl.tar.gz/sha512/cf4125a47334fe2ec0d5a4b11624b12e1366ec031500218f680ad5a53152b9d752c0c02a0b92d0e07f3eb21f2f8f58d0c587438a4869a72197bbd5e91531369d -libblastrampoline.v5.8.0+1.armv6l-linux-gnueabihf.tar.gz/md5/eafabd99fb1287d495acb8efb8091fde -libblastrampoline.v5.8.0+1.armv6l-linux-gnueabihf.tar.gz/sha512/63ff4e6bc400fa8ee713a1c5ae4af0a8e152d49860c6f5e94a17e426ad9f780d41cc0f84d33c75ea5347af1a53f07fc012798d603b6a94ea39f37cfd651a0719 -libblastrampoline.v5.8.0+1.armv6l-linux-musleabihf.tar.gz/md5/9788f74b375ef6b84c16c080f2be5bdd -libblastrampoline.v5.8.0+1.armv6l-linux-musleabihf.tar.gz/sha512/f00ebf794927404e2294a2fbb759b1e3e57836c7f683525fac0b2ac570da2c75904e43f154cf76fce310a624f9b35fbd40e6c7757882bb6f30db790f4221a543 -libblastrampoline.v5.8.0+1.armv7l-linux-gnueabihf.tar.gz/md5/4492bace63d8274d68ecdaa735e47e99 -libblastrampoline.v5.8.0+1.armv7l-linux-gnueabihf.tar.gz/sha512/8868283e6c5224b80145fdfd17f13f713053ba94e49c170f38f0cbf9f794185d7dec9c107ce65dc76121d3ac5b21d2f3857f619d8279bede86a906230ff59a71 -libblastrampoline.v5.8.0+1.armv7l-linux-musleabihf.tar.gz/md5/d66b6ed1d4e5f6a130f36791063e651d -libblastrampoline.v5.8.0+1.armv7l-linux-musleabihf.tar.gz/sha512/414ad07574a6e9aa670bbfea13eaea11da13129c9ccb4193cad708014c31493ff10ff427558b90cb16040fa64c8a325c2e375e3310c39fb37bb3e7fdb6a72a5f -libblastrampoline.v5.8.0+1.i686-linux-gnu.tar.gz/md5/595199a3a01174cfa4d9ce3407bf30dc -libblastrampoline.v5.8.0+1.i686-linux-gnu.tar.gz/sha512/02c3b0c3c0a411d5090a081f3bbbe38aaae40eaa5fe63d0690e0582e233cd9ce76483922557d4f65dc457e29a4e84d86ee5af20a60b082aec7bec4ca8607c1ca -libblastrampoline.v5.8.0+1.i686-linux-musl.tar.gz/md5/5832d0044842cb84f4e1e1b0a04b8205 -libblastrampoline.v5.8.0+1.i686-linux-musl.tar.gz/sha512/d28954d0feef6a33fa0bfeb59acb68821222d36a4e353eaf41936ee2c9aace719c2d0f0b0f080eafe2baecc67a29de4cacc0446aac776bbb615c4426d35c9c8f -libblastrampoline.v5.8.0+1.i686-w64-mingw32.tar.gz/md5/46391ac222980a0ad2c2d6d2b54db26d -libblastrampoline.v5.8.0+1.i686-w64-mingw32.tar.gz/sha512/6dd3434648a297639ef327efa5827d6aea70df551774e52ba395cdf187bfb603d365eed84780913fda5f3d12512ac54ccf784da3cf6317671ab346211f5984b3 -libblastrampoline.v5.8.0+1.powerpc64le-linux-gnu.tar.gz/md5/5f76f5c6a88c0caaa6419ba212f8cb94 -libblastrampoline.v5.8.0+1.powerpc64le-linux-gnu.tar.gz/sha512/785071e682075b2cebd992394e66169f4ee2db3a8e23affb88dc05d9abf55f49d597b2a7400a13c83ad106ad825b5ee666b01f8625e51aec267132573273991e -libblastrampoline.v5.8.0+1.x86_64-apple-darwin.tar.gz/md5/21beb51d448bd22e4608a16b3f4fde05 -libblastrampoline.v5.8.0+1.x86_64-apple-darwin.tar.gz/sha512/620ba64d93ef416e483f813617aa313957282d8361f920b5444702fa911ff0051d1f8a8814b5fa0b082fd4dc77d96cb8b763937c786959bbc97cbb6131617152 -libblastrampoline.v5.8.0+1.x86_64-linux-gnu.tar.gz/md5/14c1045ba4d400f490ddea5343a46f04 -libblastrampoline.v5.8.0+1.x86_64-linux-gnu.tar.gz/sha512/0fdae83f4df93b28951521cf426736367f568c1e76fb68eea42b045cc9a288b6836abb3206a6d61e4f88adcf198553e911c45231aecb0f552e06de28eb3bec54 -libblastrampoline.v5.8.0+1.x86_64-linux-musl.tar.gz/md5/59b110676fcb2fcfdcf670a5d435d555 -libblastrampoline.v5.8.0+1.x86_64-linux-musl.tar.gz/sha512/57a5022e9fabc0637a29f3c32f6180cb4f6a90282191232e299df6cea5265b535e4a0af4fde15c8fe80e5a59edea0fae96dd3a510f5720ecd78e85a2a9ffbfe0 -libblastrampoline.v5.8.0+1.x86_64-unknown-freebsd.tar.gz/md5/c22da112cfc7f9fa0f103d08f4b78965 -libblastrampoline.v5.8.0+1.x86_64-unknown-freebsd.tar.gz/sha512/ace02fac0dc6df472456007a081e0aaa85a6b17290321fb214349aac0f2d0f893df602dca28fc26ddfd4ed574fd9063bacff343249e5a1109f5d92dc9cb7a1d3 -libblastrampoline.v5.8.0+1.x86_64-w64-mingw32.tar.gz/md5/34fdc53745245887f968f420b2f02ed9 -libblastrampoline.v5.8.0+1.x86_64-w64-mingw32.tar.gz/sha512/bbf478736b7bd57b340ccd5b6744d526a7a95fc524d30fdf9af6e9d79285641be26fae5f9e5302d71a5be76b05c379e969a829e259d8100ba9c6ce202b632b3d +blastrampoline-ff05ebb4e450deda0aebe8dce4d4f054e23fecfc.tar.gz/md5/48ec847f7a687dd36789d6365d3c5645 +blastrampoline-ff05ebb4e450deda0aebe8dce4d4f054e23fecfc.tar.gz/sha512/85f6a46e7fe5f76ff8cef5776dad73b17eb97be3b16ca1af961cf2c2cbe125c629bd808b0243b793e4235dcb545a02cc082eaf14b3a438f3e0973d46921550a3 +libblastrampoline.v5.10.1+0.aarch64-apple-darwin.tar.gz/md5/cbbb4b5a6ebee04d686f072a69e855be +libblastrampoline.v5.10.1+0.aarch64-apple-darwin.tar.gz/sha512/32eaebb0fa3c0bc85a270b5c13fecaaa86ee10b4cea04405672badbaaa5ae3f22757dc758d9d971c811dc100a8ebd72fa00391238c0227de3690341f0434842a +libblastrampoline.v5.10.1+0.aarch64-linux-gnu.tar.gz/md5/da097a9459dcb8554f3d9511ea1a1c88 +libblastrampoline.v5.10.1+0.aarch64-linux-gnu.tar.gz/sha512/0159dbd4579d2a334f4341a64841bc1cef1354fc744709055339957b299b2b36b30162c2c90367abc04a2fb2f236aaa1fe6eb290393702f6fb97eaa79e4bb028 +libblastrampoline.v5.10.1+0.aarch64-linux-musl.tar.gz/md5/f32839481836dad6a1b159d9c33db752 +libblastrampoline.v5.10.1+0.aarch64-linux-musl.tar.gz/sha512/b973e739ab4af6ba93328943b03f16f02625553efc2375909b5e5bed4446287a21f99025817ce73267cac2d0b6b65f7dc2a5bd4b4c88d263b3c923b2ec3ad5c4 +libblastrampoline.v5.10.1+0.armv6l-linux-gnueabihf.tar.gz/md5/23eb2cbc1a547f94935fa4f9ffa2285b +libblastrampoline.v5.10.1+0.armv6l-linux-gnueabihf.tar.gz/sha512/0681497bac1d8f3ff1932adbb9fdd0b710b2a28ca7f2f4bb0093ba1123b14acd8bcb062e81e538c6e51ed8449ffea582cdb5b610e97d0c76a6feb58545938a6b +libblastrampoline.v5.10.1+0.armv6l-linux-musleabihf.tar.gz/md5/4e5168b1ada4e36861aeb3f4a6ace318 +libblastrampoline.v5.10.1+0.armv6l-linux-musleabihf.tar.gz/sha512/4ee663d2d3665e6ea356cfac60274c5f06ab08c1ee99b345ddda6872125663acb5559f704d0a918706e6cb075fc3071aaec4bcc3b9fee5fee72696e2f1454fb3 +libblastrampoline.v5.10.1+0.armv7l-linux-gnueabihf.tar.gz/md5/a28e3820fdf1435027f69204a553b5f9 +libblastrampoline.v5.10.1+0.armv7l-linux-gnueabihf.tar.gz/sha512/48edfc069aeaead468ffb6145986b11a040286990520b191e0f9cfa99f0b9458e6b17e523c8cc81889af7c9c2adce6372c65f2205a20c8e778614eaa06d288f9 +libblastrampoline.v5.10.1+0.armv7l-linux-musleabihf.tar.gz/md5/c5ea1756f3d58f8a74e76958f3a93658 +libblastrampoline.v5.10.1+0.armv7l-linux-musleabihf.tar.gz/sha512/f3eb003f954ffc346ae1037325b56fb2e4db9a6f88cc878862f921df79d8e0a5c8da9d229610dcd5d21c3d7af0a61ddcc0e70e32bf45fc9ea828d9ab2d1ddda8 +libblastrampoline.v5.10.1+0.i686-linux-gnu.tar.gz/md5/8bbdd602fed40577c4c9f020a8304c57 +libblastrampoline.v5.10.1+0.i686-linux-gnu.tar.gz/sha512/67947bd68c9f1131311d5d6a0fbcc92540f2fb2e1d2d0fa46951033fd75658661ba355c415b68de5dcd1bf0c440e27e3362ece70f5fd989fade796e9e723becd +libblastrampoline.v5.10.1+0.i686-linux-musl.tar.gz/md5/455bb539e7646e060fa24fb59c82f2f0 +libblastrampoline.v5.10.1+0.i686-linux-musl.tar.gz/sha512/e392334512ebce93ea4b34265ead802c543db5678c30083fb0dce08c071dd7140a9532d3162f215815807650138ffec5ad5d6d848025ee3913dfe353308d8e57 +libblastrampoline.v5.10.1+0.i686-w64-mingw32.tar.gz/md5/9a1c6845cb2e85b3497cd01d3a89b06b +libblastrampoline.v5.10.1+0.i686-w64-mingw32.tar.gz/sha512/66a9429a70575f4fd19d1cfb263c4c7801ac4a88408f98125f6e347b0ba35d2fdc4cbb82bf7407462beab1f7a7df2184163f76d5f2330f485bc1c7e5354716aa +libblastrampoline.v5.10.1+0.powerpc64le-linux-gnu.tar.gz/md5/b2b3eea1cfce87642a1f2afa125dcc5c +libblastrampoline.v5.10.1+0.powerpc64le-linux-gnu.tar.gz/sha512/43d5bf6535ad8f0910a523a3940787db956a3700681cc0dc1e2a1aabdaafa669e46e42854df29c0dcff06b3ade899159cb4845a48a6e618ba52af7276151fd0e +libblastrampoline.v5.10.1+0.x86_64-apple-darwin.tar.gz/md5/497a8f88c810a12b3faf12851427c784 +libblastrampoline.v5.10.1+0.x86_64-apple-darwin.tar.gz/sha512/7e3ed2117c6248761ba5bc3fd339f12ca98050d163d5c3668a62ee90aec10858d30fe9d78cea01796c9b2231cdd4f9ad0ae886bf8e984cb24d745e9f8c0fd62b +libblastrampoline.v5.10.1+0.x86_64-linux-gnu.tar.gz/md5/355612dc7c383dd860dc03498254814b +libblastrampoline.v5.10.1+0.x86_64-linux-gnu.tar.gz/sha512/12d803c53f705dacf2bf5f3884bd9b40f89a248ebda8bce1da6bba0cfe4331222bed5124dc45ea377e7c0fcc2d0dc624cc71b0eb454319fd12e2fd4c58d265f7 +libblastrampoline.v5.10.1+0.x86_64-linux-musl.tar.gz/md5/78a09fe918b1b0b3dc72c17c2e62799b +libblastrampoline.v5.10.1+0.x86_64-linux-musl.tar.gz/sha512/1ff3d7e8d36d450f430119b30e03a64f2d78d6d13a04e4a4b97c64966e341f486080c733dbd73ee3ed7c1557ad737f37c013335578e1555d162f0591929de747 +libblastrampoline.v5.10.1+0.x86_64-unknown-freebsd.tar.gz/md5/ad9f213bc4a7882784ad09017fc82234 +libblastrampoline.v5.10.1+0.x86_64-unknown-freebsd.tar.gz/sha512/4de6f08a45cb3c3819f71ccd44688b847c2e9b36e0d4bce94191558fe2d775c2790f4c68eea1a366d0a869f0c986aa33626d427946403cf4e128f45b5881f70e +libblastrampoline.v5.10.1+0.x86_64-w64-mingw32.tar.gz/md5/2d0cf117d8d797e7716f8d836dfdd9f5 +libblastrampoline.v5.10.1+0.x86_64-w64-mingw32.tar.gz/sha512/d7a94f3a71400b22b6c14648455e38dff750eb88661928b66b307f721d53769dea3aec43bb86e2200145ed072475c32e1bfc38e0fc35445c4c42e5752754b0e5 diff --git a/stdlib/libblastrampoline_jll/Project.toml b/stdlib/libblastrampoline_jll/Project.toml index 6ee704bc7e1c4..97ee9bb32eeb1 100644 --- a/stdlib/libblastrampoline_jll/Project.toml +++ b/stdlib/libblastrampoline_jll/Project.toml @@ -1,6 +1,6 @@ name = "libblastrampoline_jll" uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.8.0+1" +version = "5.10.1+0" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" From c632ee69c4287f9493e8750eced6793e4e787fce Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Wed, 24 Jul 2024 12:40:35 +0200 Subject: [PATCH 388/413] bump Pkg to latest v1.10 --- .../Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/md5 | 1 - .../Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/sha512 | 1 - .../Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/md5 | 1 + .../Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/sha512 | 1 + stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/sha512 create mode 100644 deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/md5 create mode 100644 deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/sha512 diff --git a/deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/md5 b/deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/md5 deleted file mode 100644 index 2870152492a2f..0000000000000 --- a/deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -5274a71fefb4ea1c4b0790285d65ec70 diff --git a/deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/sha512 b/deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/sha512 deleted file mode 100644 index a6816cf4af5fc..0000000000000 --- a/deps/checksums/Pkg-6d73ac1fc16cd4356dd58653b7e8dc13c037bdba.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -88426df8263206866d0ba9967bf8027287062b699ba3e579ed6f730670ed753f7446d6dea28b61c31a30c65f47b51e415da4e06576854bce7febd970d5e5707d diff --git a/deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/md5 b/deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/md5 new file mode 100644 index 0000000000000..aeb21d1afff00 --- /dev/null +++ b/deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/md5 @@ -0,0 +1 @@ +f27b48b97dba6b51f066cb94cc4acea7 diff --git a/deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/sha512 b/deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/sha512 new file mode 100644 index 0000000000000..c19108890dd3c --- /dev/null +++ b/deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/sha512 @@ -0,0 +1 @@ +a385218df4e3cbdeccbc8685638f313e6b921e3e4bc9d341f63eae0dd726e9fecaa5ad5c540f97c41a9d5b1327934e977e1634f74573ef49fe2935fc052e0d3f diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index b2ac22c075d26..96e51642b5086 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = 6d73ac1fc16cd4356dd58653b7e8dc13c037bdba +PKG_SHA1 = bf83c387bc1d8f3edd28efd2c1dedf2f80d99320 PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 884c71eea68c6c6e2e8f8f0816d6bc0270d5bd23 Mon Sep 17 00:00:00 2001 From: gbaraldi Date: Wed, 24 Jul 2024 11:12:42 -0300 Subject: [PATCH 389/413] Disable typed pointer tests for alloc-opt-pass since the base file is now using opaque pointers --- test/llvmpasses/alloc-opt-pass.ll | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/llvmpasses/alloc-opt-pass.ll b/test/llvmpasses/alloc-opt-pass.ll index 4bfcf17ca454f..f405f8d71ab3d 100644 --- a/test/llvmpasses/alloc-opt-pass.ll +++ b/test/llvmpasses/alloc-opt-pass.ll @@ -1,8 +1,5 @@ ; This file is a part of Julia. License is MIT: https://julialang.org/license -; RUN: opt -enable-new-pm=0 --opaque-pointers=0 -load libjulia-codegen%shlibext -AllocOpt -S %s | FileCheck %s --check-prefixes=CHECK,TYPED -; RUN: opt -enable-new-pm=1 --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='function(AllocOpt)' -S %s | FileCheck %s --check-prefixes=CHECK,TYPED - ; RUN: opt -enable-new-pm=0 --opaque-pointers=1 -load libjulia-codegen%shlibext -AllocOpt -S %s | FileCheck %s --check-prefixes=CHECK,OPAQUE ; RUN: opt -enable-new-pm=1 --opaque-pointers=1 --load-pass-plugin=libjulia-codegen%shlibext -passes='function(AllocOpt)' -S %s | FileCheck %s --check-prefixes=CHECK,OPAQUE From b8c84fdfa02f921fec32a80bd558ff24adbb2243 Mon Sep 17 00:00:00 2001 From: gbaraldi Date: Fri, 26 Jul 2024 08:54:33 -0300 Subject: [PATCH 390/413] Remove reference to memory attribute in llvm pass --- test/llvmpasses/alloc-opt-pass.ll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/llvmpasses/alloc-opt-pass.ll b/test/llvmpasses/alloc-opt-pass.ll index f405f8d71ab3d..81a1f5dd2300b 100644 --- a/test/llvmpasses/alloc-opt-pass.ll +++ b/test/llvmpasses/alloc-opt-pass.ll @@ -191,7 +191,7 @@ declare void @llvm.memcpy.p0.p11.i64(ptr noalias nocapture writeonly, ptr addrsp ; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite) declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #0 -attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) } +attributes #0 = { nocallback nofree nounwind willreturn } attributes #1 = { allockind("alloc") } attributes #2 = { allockind("alloc,uninitialized") } attributes #3 = { allockind("alloc,zeroed") } From 6cd6f8d109eb5681f89369005c0bd634da0986b7 Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Fri, 26 Jul 2024 16:21:03 +0200 Subject: [PATCH 391/413] relax equality in trace test --- stdlib/LinearAlgebra/test/adjtrans.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/LinearAlgebra/test/adjtrans.jl b/stdlib/LinearAlgebra/test/adjtrans.jl index 2362ec7fb28f2..93d2f264b05fe 100644 --- a/stdlib/LinearAlgebra/test/adjtrans.jl +++ b/stdlib/LinearAlgebra/test/adjtrans.jl @@ -639,7 +639,7 @@ end @testset "trace" begin for T in (Float64, ComplexF64), t in (adjoint, transpose) A = randn(T, 10, 10) - @test tr(t(A)) == tr(copy(t(A))) == t(tr(A)) + @test tr(t(A)) ≈ tr(copy(t(A))) ≈ t(tr(A)) end end From 71b0b314fe3377bb1ea7da0b918848585ff6b234 Mon Sep 17 00:00:00 2001 From: Zentrik Date: Mon, 1 Apr 2024 19:13:18 +0100 Subject: [PATCH 392/413] Fix calling LLVM_SIZE on windows (#53902) Per https://github.com/JuliaCI/julia-buildkite/pull/224#issuecomment-1474914609, the path needs to be updated so that `llvm-size` can find `libLLVM.dll`. (cherry picked from commit 657ce0482d54f9658c9cf4fd3560ca51aafdb03b) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 3991ced0f679b..6a220b0494fec 100644 --- a/Makefile +++ b/Makefile @@ -649,7 +649,7 @@ win-extras: ifeq ($(USE_SYSTEM_LLVM), 1) LLVM_SIZE := llvm-size$(EXE) else -LLVM_SIZE := $(build_depsbindir)/llvm-size$(EXE) +LLVM_SIZE := PATH=$(build_bindir):$$PATH; $(build_depsbindir)/llvm-size$(EXE) endif build-stats: ifeq ($(USE_BINARYBUILDER_LLVM),1) From 23fb255d5006a8896dc20dda594968d31297a09b Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Thu, 1 Aug 2024 13:19:06 +0200 Subject: [PATCH 393/413] fixup some casts in uv code, extraced from commit e5496e0 --- src/jl_uv.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/jl_uv.c b/src/jl_uv.c index 62dc3a628d085..8bb09636506b9 100644 --- a/src/jl_uv.c +++ b/src/jl_uv.c @@ -39,21 +39,24 @@ static void walk_print_cb(uv_handle_t *h, void *arg) const char *type = uv_handle_type_name(h->type); if (!type) type = ""; + size_t resource_id; // fits an int or pid_t on Unix, HANDLE or PID on Windows uv_os_fd_t fd; if (h->type == UV_PROCESS) - fd = uv_process_get_pid((uv_process_t*)h); - else if (uv_fileno(h, &fd)) - fd = (uv_os_fd_t)-1; + resource_id = (size_t)uv_process_get_pid((uv_process_t*)h); + else if (uv_fileno(h, &fd) == 0) + resource_id = (size_t)fd; + else + resource_id = -1; const char *pad = " "; // 16 spaces - int npad = fd == -1 ? 0 : snprintf(NULL, 0, "%zd", (size_t)fd); + int npad = resource_id == -1 ? 0 : snprintf(NULL, 0, "%zd", resource_id); if (npad < 0) npad = 0; npad += strlen(type); pad += npad < strlen(pad) ? npad : strlen(pad); - if (fd == -1) + if (resource_id == -1) jl_safe_printf(" %s %s%p->%p\n", type, pad, (void*)h, (void*)h->data); else - jl_safe_printf(" %s[%zd] %s%p->%p\n", type, (size_t)fd, pad, (void*)h, (void*)h->data); + jl_safe_printf(" %s[%zd] %s%p->%p\n", type, resource_id, pad, (void*)h, (void*)h->data); } static void wait_empty_func(uv_timer_t *t) From 6dc961c3e7303856b29167ca11f2a4633ba41ffb Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Sat, 13 Jan 2024 19:24:35 -0500 Subject: [PATCH 394/413] Do not hide libssp.dll.a (Windows import library) in private library dir (#52820) Fix #51740 Since we are providing libssp.dll on Windows and we want to dynamically link to it, exposing libssp.dll.a is necessary. The inconsistency is that libjulia-codegen.so looks in build_libdir and build_private_libdir while standard library precompilation looks in build_shlibdir and build_private_dir. (cherry picked from commit c3836e1b4d934ce9dfbd4e4a529840842490b1dd) --- deps/csl.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deps/csl.mk b/deps/csl.mk index aaebc8f50c053..1fb12ad394b12 100644 --- a/deps/csl.mk +++ b/deps/csl.mk @@ -111,6 +111,7 @@ install-csl: cp -a $(build_libdir)/gcc/$(BB_TRIPLET)/13/libgcc.a $(build_private_libdir)/ cp -a $(build_libdir)/gcc/$(BB_TRIPLET)/13/libmsvcrt.a $(build_private_libdir)/ cp -a $(build_libdir)/gcc/$(BB_TRIPLET)/13/libssp.dll.a $(build_private_libdir)/ + cp -a $(build_libdir)/gcc/$(BB_TRIPLET)/13/libssp.dll.a $(build_libdir)/ endif endif ifeq ($(OS),WINNT) @@ -120,4 +121,5 @@ uninstall-gcc-libraries: -rm -f $(build_private_libdir)/libgcc.a -rm -f $(build_private_libdir)/libmsvcrt.a -rm -f $(build_private_libdir)/libssp.dll.a + -rm -f $(build_libdir)/libssp.dll.a endif From b5d12a526032919f14f0e2c211d8792bf10c1f80 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Mon, 5 Aug 2024 12:06:05 +0200 Subject: [PATCH 395/413] Remove the WarnMissedTransformations pass from the 1.10 pipeline (#55377) Backport of https://github.com/JuliaLang/julia/pull/54871 onto 1.10 We don't have the luxury of modifying the C-API. This pass surfaces LLVM missed transformation warnings, which is surprising to users. It can be very helpful, but it can also add unactionable noise to the output of Julia programs. This PR simply removes it from the pipeline. --- src/pipeline.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/pipeline.cpp b/src/pipeline.cpp index 88c2da5d729c9..8a9410aa98247 100644 --- a/src/pipeline.cpp +++ b/src/pipeline.cpp @@ -72,7 +72,6 @@ #include #include #include -#include #include #include #include @@ -568,7 +567,6 @@ static void buildPipeline(ModulePassManager &MPM, PassBuilder *PB, OptimizationL if (O.getSpeedupLevel() >= 2) { buildVectorPipeline(FPM, PB, O, options); } - FPM.addPass(WarnMissedTransformationsPass()); MPM.addPass(createModuleToFunctionPassAdaptor(std::move(FPM))); } buildIntrinsicLoweringPipeline(MPM, PB, O, options); From 1de44aba1c78402218b1fbfe621581a4c0af68e8 Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Mon, 17 Jun 2024 22:55:18 -0400 Subject: [PATCH 396/413] Add openlibm to sysimg link line on windows (#53672) LLVM generates calls to math intrinsics like `trunc` and `rint` (at least in my local i686 mingw) build, so linking to openlibm is required. We already have this on the sysimg link line in `Base.link_image`, so this aligns those options. --------- Co-authored-by: Elliot Saba (cherry picked from commit 320366bbc00331671b38f7aba15812ffabcf1fcb) --- sysimage.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sysimage.mk b/sysimage.mk index 0d2c9aff126e4..fa7d46cc81fb0 100644 --- a/sysimage.mk +++ b/sysimage.mk @@ -16,7 +16,7 @@ $(build_private_libdir)/%.$(SHLIB_EXT): $(build_private_libdir)/%-o.a @$(call PRINT_LINK, $(CXX) $(LDFLAGS) -shared $(fPIC) -L$(build_private_libdir) -L$(build_libdir) -L$(build_shlibdir) -o $@ \ $(WHOLE_ARCHIVE) $< $(NO_WHOLE_ARCHIVE) \ $(if $(findstring -debug,$(notdir $@)),-ljulia-internal-debug -ljulia-debug,-ljulia-internal -ljulia) \ - $$([ $(OS) = WINNT ] && echo '' -lssp --disable-auto-import --disable-runtime-pseudo-reloc)) + $$([ $(OS) = WINNT ] && echo '' $(LIBM) -lssp --disable-auto-import --disable-runtime-pseudo-reloc)) @$(INSTALL_NAME_CMD)$(notdir $@) $@ @$(DSYMUTIL) $@ From b1fee19b413ace11caf094991437fb1c6bfcad5f Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Mon, 5 Aug 2024 17:44:38 -0400 Subject: [PATCH 397/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20Pkg=20stdlib=20from=20bf83c387b=20to=20ff18647d?= =?UTF-8?q?8=20(#55385)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/md5 | 1 - .../Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/sha512 | 1 - .../Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/md5 | 1 + .../Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/sha512 | 1 + stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/sha512 create mode 100644 deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/md5 create mode 100644 deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/sha512 diff --git a/deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/md5 b/deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/md5 deleted file mode 100644 index aeb21d1afff00..0000000000000 --- a/deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -f27b48b97dba6b51f066cb94cc4acea7 diff --git a/deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/sha512 b/deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/sha512 deleted file mode 100644 index c19108890dd3c..0000000000000 --- a/deps/checksums/Pkg-bf83c387bc1d8f3edd28efd2c1dedf2f80d99320.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -a385218df4e3cbdeccbc8685638f313e6b921e3e4bc9d341f63eae0dd726e9fecaa5ad5c540f97c41a9d5b1327934e977e1634f74573ef49fe2935fc052e0d3f diff --git a/deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/md5 b/deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/md5 new file mode 100644 index 0000000000000..484ab97cf1125 --- /dev/null +++ b/deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/md5 @@ -0,0 +1 @@ +9761b21f038bf170fa2b6e4fb6d6aea1 diff --git a/deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/sha512 b/deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/sha512 new file mode 100644 index 0000000000000..b57a45db7923e --- /dev/null +++ b/deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/sha512 @@ -0,0 +1 @@ +502898b4a5272b4feaea37fbc7c9c4ebaa78a2d25ed6120881308b696bb8235d453aa3717efee7a1bdcff1fd7fb3280e0dca99d42402c6cc430661909e2fe917 diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 96e51642b5086..5df1ed0435629 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = bf83c387bc1d8f3edd28efd2c1dedf2f80d99320 +PKG_SHA1 = ff18647d8cb7b26a612698334b691a80566da24d PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 0be37db8c5b5a440bd9a11960ae9c998027b7337 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mos=C3=A8=20Giordano?= Date: Tue, 6 Aug 2024 10:46:41 +0200 Subject: [PATCH 398/413] [build] Some improvements to the LLVM build system (#55354) After #55180 we implicitly require an LLVM built with Zlib support, but compiling Julia with `make USE_BINARYBUILDER_LLVM=0` builds an LLVM without Zlib support, despite the fact we attempt to request it at https://github.com/JuliaLang/julia/blob/996351f5f6651d1508aef3c35c7d37eb22a0fb1e/deps/llvm.mk#L97 This was first identified in #55337. `ZLIB_LIBRARY` must be the path to the zlib library, but we currently set it to the libdir where the library is installed (introduced in https://github.com/JuliaLang/julia/blob/996351f5f6651d1508aef3c35c7d37eb22a0fb1e/deps/llvm.mk#L97 which is wrong. However, CMake is actually able to find Zlib correctly, but then the check at https://github.com/llvm/llvm-project/blob/46425b8d0fac3c529aa4a716d19abd7032e452f3/llvm/cmake/config-ix.cmake#L139-L141 uses the value of `ZLIB_LIBRARY` to list the Zlib to link for the test, but being `ZLIB_LIBRARY` a directory, CMake doesn't see any valid Zlib and thus tries to run the test without linking any Zlib, and the test silently fails (they're silent only when `LLVM_ENABLE_ZLIB=ON`), resulting in no usable Zlib available, even if found. `ZLIB_ROOT` is the only [hint recommended by the CMake module `FindZLIB`](https://cmake.org/cmake/help/latest/module/FindZLIB.html#hints). This PR replaces a broken `ZLIB_LIBRARY` with an appropriate `ZLIB_ROOT`. Also, we set `LLVM_ENABLE_ZLIB=FORCE_ON` which is the only way to make CMake fail loudly if no usable Zlib is available, and avoid going on with a non-usable build. I confirm this fixes #55337 for me, it should likely address https://github.com/JuliaCI/julia-buildkite/issues/373 as well. Also, options `COMPILER_RT_ENABLE_IOS`, `COMPILER_RT_ENABLE_WATCHOS`, `COMPILER_RT_ENABLE_TVOS`, and `HAVE_HISTEDIT_H` don't exist anymore, and they are removed. --- deps/llvm.mk | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/deps/llvm.mk b/deps/llvm.mk index a06db1fb0781b..8a6f9b7c8e81b 100644 --- a/deps/llvm.mk +++ b/deps/llvm.mk @@ -93,15 +93,14 @@ LLVM_LDFLAGS += $(LDFLAGS) LLVM_CMAKE += -DLLVM_TARGETS_TO_BUILD:STRING="$(LLVM_TARGETS)" -DCMAKE_BUILD_TYPE="$(LLVM_CMAKE_BUILDTYPE)" LLVM_CMAKE += -DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD:STRING="$(LLVM_EXPERIMENTAL_TARGETS)" LLVM_CMAKE += -DLLVM_ENABLE_LIBXML2=OFF -DLLVM_HOST_TRIPLE="$(or $(XC_HOST),$(BUILD_MACHINE))" -LLVM_CMAKE += -DLLVM_ENABLE_ZLIB=ON -DZLIB_LIBRARY="$(build_prefix)/lib" -LLVM_CMAKE += -DCOMPILER_RT_ENABLE_IOS=OFF -DCOMPILER_RT_ENABLE_WATCHOS=OFF -DCOMPILER_RT_ENABLE_TVOS=OFF +LLVM_CMAKE += -DLLVM_ENABLE_ZLIB=FORCE_ON -DZLIB_ROOT="$(build_prefix)" ifeq ($(USE_POLLY_ACC),1) LLVM_CMAKE += -DPOLLY_ENABLE_GPGPU_CODEGEN=ON endif LLVM_CMAKE += -DLLVM_TOOLS_INSTALL_DIR=$(call rel_path,$(build_prefix),$(build_depsbindir)) LLVM_CMAKE += -DLLVM_UTILS_INSTALL_DIR=$(call rel_path,$(build_prefix),$(build_depsbindir)) LLVM_CMAKE += -DLLVM_INCLUDE_UTILS=ON -DLLVM_INSTALL_UTILS=ON -LLVM_CMAKE += -DLLVM_BINDINGS_LIST="" -DLLVM_ENABLE_BINDINGS=OFF -DLLVM_INCLUDE_DOCS=Off -DLLVM_ENABLE_TERMINFO=Off -DHAVE_HISTEDIT_H=Off -DHAVE_LIBEDIT=Off +LLVM_CMAKE += -DLLVM_BINDINGS_LIST="" -DLLVM_ENABLE_BINDINGS=OFF -DLLVM_INCLUDE_DOCS=Off -DLLVM_ENABLE_TERMINFO=Off -DHAVE_LIBEDIT=Off ifeq ($(LLVM_ASSERTIONS), 1) LLVM_CMAKE += -DLLVM_ENABLE_ASSERTIONS:BOOL=ON endif # LLVM_ASSERTIONS From 1b641c969d903070510c6edbc263f6a7d3a8a982 Mon Sep 17 00:00:00 2001 From: William Moses Date: Wed, 7 Aug 2024 05:32:59 -0700 Subject: [PATCH 399/413] AllocOpt: Fix stack lowering where alloca continas boxed and unboxed data (#55306) (#55397) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …data (#55306) Co-authored-by: Valentin Churavy Co-authored-by: Mosè Giordano Co-authored-by: Gabriel Baraldi --- src/llvm-alloc-helpers.cpp | 10 +++++++- src/llvm-alloc-helpers.h | 7 ++++++ src/llvm-alloc-opt.cpp | 15 +++++++++++ test/llvmpasses/alloc-opt-bits.ll | 41 +++++++++++++++++++++++++++++++ 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 test/llvmpasses/alloc-opt-bits.ll diff --git a/src/llvm-alloc-helpers.cpp b/src/llvm-alloc-helpers.cpp index d24c08b4b4930..0acef5557c838 100644 --- a/src/llvm-alloc-helpers.cpp +++ b/src/llvm-alloc-helpers.cpp @@ -88,6 +88,8 @@ bool AllocUseInfo::addMemOp(Instruction *inst, unsigned opno, uint32_t offset, memop.isaggr = isa(elty) || isa(elty) || isa(elty); memop.isobjref = hasObjref(elty); auto &field = getField(offset, size, elty); + field.second.hasunboxed |= !hasObjref(elty) || (hasObjref(elty) && !isa(elty)); + if (field.second.hasobjref != memop.isobjref) field.second.multiloc = true; // can't split this field, since it contains a mix of references and bits if (!isstore) @@ -189,6 +191,7 @@ void jl_alloc::runEscapeAnalysis(llvm::Instruction *I, EscapeAnalysisRequiredArg auto elty = inst->getType(); required.use_info.has_unknown_objref |= hasObjref(elty); required.use_info.has_unknown_objrefaggr |= hasObjref(elty) && !isa(elty); + required.use_info.has_unknown_unboxed |= !hasObjref(elty) || (hasObjref(elty) && !isa(elty)); required.use_info.hasunknownmem = true; } else if (!required.use_info.addMemOp(inst, 0, cur.offset, inst->getType(), @@ -280,6 +283,7 @@ void jl_alloc::runEscapeAnalysis(llvm::Instruction *I, EscapeAnalysisRequiredArg auto elty = storev->getType(); required.use_info.has_unknown_objref |= hasObjref(elty); required.use_info.has_unknown_objrefaggr |= hasObjref(elty) && !isa(elty); + required.use_info.has_unknown_unboxed |= !hasObjref(elty) || (hasObjref(elty) && !isa(elty)); required.use_info.hasunknownmem = true; } else if (!required.use_info.addMemOp(inst, use->getOperandNo(), cur.offset, storev->getType(), @@ -301,10 +305,14 @@ void jl_alloc::runEscapeAnalysis(llvm::Instruction *I, EscapeAnalysisRequiredArg } required.use_info.hasload = true; auto storev = isa(inst) ? cast(inst)->getNewValOperand() : cast(inst)->getValOperand(); + Type *elty = storev->getType(); if (cur.offset == UINT32_MAX || !required.use_info.addMemOp(inst, use->getOperandNo(), - cur.offset, storev->getType(), + cur.offset, elty, true, required.DL)) { LLVM_DEBUG(dbgs() << "Atomic inst has unknown offset\n"); + required.use_info.has_unknown_objref |= hasObjref(elty); + required.use_info.has_unknown_objrefaggr |= hasObjref(elty) && !isa(elty); + required.use_info.has_unknown_unboxed |= !hasObjref(elty) || (hasObjref(elty) && !isa(elty)); required.use_info.hasunknownmem = true; } required.use_info.refload = true; diff --git a/src/llvm-alloc-helpers.h b/src/llvm-alloc-helpers.h index 3bd80704a0888..0bbf499f9f2f7 100644 --- a/src/llvm-alloc-helpers.h +++ b/src/llvm-alloc-helpers.h @@ -46,6 +46,8 @@ namespace jl_alloc { bool hasaggr:1; bool multiloc:1; bool hasload:1; + // The alloc has a unboxed object at this offset. + bool hasunboxed:1; llvm::Type *elty; llvm::SmallVector accesses; Field(uint32_t size, llvm::Type *elty) @@ -54,6 +56,7 @@ namespace jl_alloc { hasaggr(false), multiloc(false), hasload(false), + hasunboxed(false), elty(elty) { } @@ -93,6 +96,9 @@ namespace jl_alloc { // The alloc has an aggregate Julia object reference not in an explicit field. bool has_unknown_objrefaggr:1; + // The alloc has an unboxed object at an unknown offset. + bool has_unknown_unboxed:1; + void reset() { escaped = false; @@ -107,6 +113,7 @@ namespace jl_alloc { haserror = false; has_unknown_objref = false; has_unknown_objrefaggr = false; + has_unknown_unboxed = false; uses.clear(); preserves.clear(); memops.clear(); diff --git a/src/llvm-alloc-opt.cpp b/src/llvm-alloc-opt.cpp index 7feaf7e5826aa..f84cb6587cf9f 100644 --- a/src/llvm-alloc-opt.cpp +++ b/src/llvm-alloc-opt.cpp @@ -252,10 +252,12 @@ void Optimizer::optimizeAll() removeAlloc(orig); continue; } + bool has_unboxed = use_info.has_unknown_unboxed; bool has_ref = use_info.has_unknown_objref; bool has_refaggr = use_info.has_unknown_objrefaggr; for (auto memop: use_info.memops) { auto &field = memop.second; + has_unboxed |= field.hasunboxed; if (field.hasobjref) { has_ref = true; // This can be relaxed a little based on hasload @@ -284,6 +286,19 @@ void Optimizer::optimizeAll() splitOnStack(orig); continue; } + // The move to stack code below, if has_ref is set, changes the allocation to an array of jlvalue_t's. This is fine + // if all objects are jlvalue_t's. However, if part of the allocation is an unboxed value (e.g. it is a { float, jlvaluet }), + // then moveToStack will create a [2 x jlvaluet] bitcast to { float, jlvaluet }. + // This later causes the GC rooting pass, to miss-characterize the float as a pointer to a GC value + if (has_unboxed && has_ref) { + REMARK([&]() { + return OptimizationRemarkMissed(DEBUG_TYPE, "Escaped", orig) + << "GC allocation could not be split since it contains both boxed and unboxed values, unable to move to stack " << ore::NV("GC Allocation", orig); + }); + if (use_info.hastypeof) + optimizeTag(orig); + continue; + } REMARK([&](){ return OptimizationRemark(DEBUG_TYPE, "Stack Move Allocation", orig) << "GC allocation moved to stack " << ore::NV("GC Allocation", orig); diff --git a/test/llvmpasses/alloc-opt-bits.ll b/test/llvmpasses/alloc-opt-bits.ll new file mode 100644 index 0000000000000..6159ae1f8ebb3 --- /dev/null +++ b/test/llvmpasses/alloc-opt-bits.ll @@ -0,0 +1,41 @@ +; This file is a part of Julia. License is MIT: https://julialang.org/license + + +; RUN: opt -enable-new-pm=0 --opaque-pointers=0 -load libjulia-codegen%shlibext -AllocOpt -S %s | FileCheck %s --check-prefixes=CHECK,TYPED +; RUN: opt -enable-new-pm=1 --opaque-pointers=0 --load-pass-plugin=libjulia-codegen%shlibext -passes='function(AllocOpt)' -S %s | FileCheck %s --check-prefixes=CHECK,TYPED + +; RUN: opt -enable-new-pm=0 --opaque-pointers=1 -load libjulia-codegen%shlibext -AllocOpt -S %s | FileCheck %s --check-prefixes=CHECK,OPAQUE +; RUN: opt -enable-new-pm=1 --opaque-pointers=1 --load-pass-plugin=libjulia-codegen%shlibext -passes='function(AllocOpt)' -S %s | FileCheck %s --check-prefixes=CHECK,OPAQUE + + +@tag = external addrspace(10) global {} + +@glob = external addrspace(10) global {} + +; Test that the gc_preserve intrinsics are deleted directly. + +; CHECK-LABEL: @ptr_and_bits +; CHECK-NOT: alloca +; OPAQUE: call noalias ptr addrspace(10) @julia.gc_alloc_obj +; TYPED: call noalias {} addrspace(10)* @julia.gc_alloc_obj + +define void @ptr_and_bits(i8* %fptr, i1 %b, i1 %b2, i32 %idx) { + %pgcstack = call {}*** @julia.get_pgcstack() + %gcstack = bitcast {}*** %pgcstack to {}** + %current_task = getelementptr inbounds {}*, {}** %gcstack, i64 -12 + %v = call noalias {} addrspace(10)* @julia.gc_alloc_obj({}** %current_task, i64 16, {} addrspace(10)* @tag) + %v2 = bitcast {} addrspace(10)* %v to { i64, {} addrspace(10)* } addrspace(10)* + %g0 = getelementptr { i64, {} addrspace(10)* }, { i64, {} addrspace(10)* } addrspace(10)* %v2, i32 %idx, i32 1 + store {} addrspace(10)* @glob, {} addrspace(10)* addrspace(10)* %g0 + + %g1 = getelementptr { i64, {} addrspace(10)* }, { i64, {} addrspace(10)* } addrspace(10)* %v2, i32 %idx, i32 0 + store i64 7, i64 addrspace(10)* %g1 + + %res = load {} addrspace(10)*, {} addrspace(10)* addrspace(10)* %g0 + %res2 = load i64, i64 addrspace(10)* %g1 + ret void +} + +declare noalias {} addrspace(10)* @julia.gc_alloc_obj({}**, i64, {} addrspace(10)*) + +declare {}*** @julia.get_pgcstack() From f91f502d30f56475951d0427cf3cbb6c4338e596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateus=20Ara=C3=BAjo?= Date: Thu, 25 Jul 2024 10:02:50 +0200 Subject: [PATCH 400/413] [docs] change docstring to match code (#55013) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The docstring of `LinearAlgebra.reflectorApply!` is incorrect. It says the function is applying `(I - τ*[1; x] * [1; x]')*A`, but in reality it is applying `(I - conj(τ)*[1; x[2:end]]*[1; x[2:end]]')*A`. You can check that by looking at the code, or running for example ```julia using LinearAlgebra T=ComplexF64;d=5; τ=randn(T);x=randn(T,d);A=randn(T,d,d); (I - conj(τ)*[1; x[2:end]]*[1; x[2:end]]')*A LinearAlgebra.reflectorApply!(x,τ,A) ``` (cherry picked from commit 1ece299e4a1ebf9410099d2442c8dd2a19f9f615) --- stdlib/LinearAlgebra/src/generic.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/stdlib/LinearAlgebra/src/generic.jl b/stdlib/LinearAlgebra/src/generic.jl index 9cbe3f76ccfb9..227b91ebb669f 100644 --- a/stdlib/LinearAlgebra/src/generic.jl +++ b/stdlib/LinearAlgebra/src/generic.jl @@ -1594,7 +1594,7 @@ end """ reflectorApply!(x, τ, A) -Multiplies `A` in-place by a Householder reflection on the left. It is equivalent to `A .= (I - τ*[1; x] * [1; x]')*A`. +Multiplies `A` in-place by a Householder reflection on the left. It is equivalent to `A .= (I - conj(τ)*[1; x[2:end]]*[1; x[2:end]]')*A`. """ @inline function reflectorApply!(x::AbstractVector, τ::Number, A::AbstractVecOrMat) require_one_based_indexing(x) From 980b83d3f8703f3dd0ee03df8a6916364265baef Mon Sep 17 00:00:00 2001 From: Michael Abbott <32575566+mcabbott@users.noreply.github.com> Date: Thu, 25 Jul 2024 05:48:10 -0400 Subject: [PATCH 401/413] Fix a bug in `stack`'s DimensionMismatch error message (#54033) `stack` does not require that the inner iterator defines `axes`, but the code to assemble an error message assumed this. Found here: https://discourse.julialang.org/t/reduce-hcat-is-type-unstable/112800/3 (cherry picked from commit ae483c352273af392e1dd6bd2cb3b044ffa46111) --- base/abstractarray.jl | 2 +- test/abstractarray.jl | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/base/abstractarray.jl b/base/abstractarray.jl index 7be13ad34a66d..d7ef5e2b69f2b 100644 --- a/base/abstractarray.jl +++ b/base/abstractarray.jl @@ -2891,7 +2891,7 @@ end @inline function _stack_size_check(x, ax1::Tuple) if _iterator_axes(x) != ax1 uax1 = map(UnitRange, ax1) - uaxN = map(UnitRange, axes(x)) + uaxN = map(UnitRange, _iterator_axes(x)) throw(DimensionMismatch( LazyString("stack expects uniform slices, got axes(x) == ", uaxN, " while first had ", uax1))) end diff --git a/test/abstractarray.jl b/test/abstractarray.jl index 9691db88b6e99..8d0c83897611b 100644 --- a/test/abstractarray.jl +++ b/test/abstractarray.jl @@ -1684,6 +1684,9 @@ end @test_throws ArgumentError stack([1:3, 4:6]; dims=3) @test_throws ArgumentError stack(abs2, 1:3; dims=2) + @test stack(["hello", "world"]) isa Matrix{Char} + @test_throws DimensionMismatch stack(["hello", "world!"]) # had a bug in error printing + # Empty @test_throws ArgumentError stack(()) @test_throws ArgumentError stack([]) From f7056112eee8a504d35f3738bc9acdbb456cddec Mon Sep 17 00:00:00 2001 From: Elliot Saba Date: Mon, 29 Jul 2024 22:10:30 -0700 Subject: [PATCH 402/413] Add `lbt_forwarded_funcs()` to debug LBT forwarding issues (#55302) It can be very helpful, when struggling with LBT forwarding, to see what functions were actually forwarded to a new library. This utility function makes it easy to query which functions are forwarded to that library. (cherry picked from commit e0f2e295091dc293561a15d302d22bf96d810018) --- stdlib/LinearAlgebra/src/lbt.jl | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/stdlib/LinearAlgebra/src/lbt.jl b/stdlib/LinearAlgebra/src/lbt.jl index 28a529fd5b0a3..909f673740a08 100644 --- a/stdlib/LinearAlgebra/src/lbt.jl +++ b/stdlib/LinearAlgebra/src/lbt.jl @@ -284,6 +284,25 @@ function lbt_find_backing_library(symbol_name, interface::Symbol; end +""" + lbt_forwarded_funcs(config::LBTConfig, lib::LBTLibraryInfo) + +Given a backing library `lib`, return the list of all functions that are +forwarded to that library, as a vector of `String`s. +""" +function lbt_forwarded_funcs(config::LBTConfig, lib::LBTLibraryInfo) + forwarded_funcs = String[] + for (symbol_idx, symbol) in enumerate(config.exported_symbols) + forward_byte_offset = div(symbol_idx - 1, 8) + forward_byte_mask = 1 << mod(symbol_idx - 1, 8) + if lib.active_forwards[forward_byte_offset+1] & forward_byte_mask != 0x00 + push!(forwarded_funcs, symbol) + end + end + return forwarded_funcs +end + + ## NOTE: Manually setting forwards is referred to as the 'footgun API'. It allows truly ## bizarre and complex setups to be created. If you run into strange errors while using ## it, the first thing you should ask yourself is whether you've set things up properly. From 2eef480e4b9692819db99f885051400c11a60004 Mon Sep 17 00:00:00 2001 From: jariji <96840304+jariji@users.noreply.github.com> Date: Wed, 31 Jul 2024 10:59:55 -0700 Subject: [PATCH 403/413] Restrict argument to `isleapyear(::Integer)` (#55317) In 1.10 we have ```jl julia> isleapyear(Year(1992)) false ``` which is semantically incorrect because `Year(1992)` is a duration (1992 years), not an instant. This PR restricts the currently unrestricted argument to integers. (cherry picked from commit fdecc597878ddd29c16463c621adb4b6d0a25462) --- stdlib/Dates/src/types.jl | 2 +- stdlib/Dates/test/types.jl | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/stdlib/Dates/src/types.jl b/stdlib/Dates/src/types.jl index 1d9769a05bd3d..1a80f1408ba54 100644 --- a/stdlib/Dates/src/types.jl +++ b/stdlib/Dates/src/types.jl @@ -183,7 +183,7 @@ function totaldays(y, m, d) end # If the year is divisible by 4, except for every 100 years, except for every 400 years -isleapyear(y) = (y % 4 == 0) && ((y % 100 != 0) || (y % 400 == 0)) +isleapyear(y::Integer) = (y % 4 == 0) && ((y % 100 != 0) || (y % 400 == 0)) # Number of days in month const DAYSINMONTH = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) diff --git a/stdlib/Dates/test/types.jl b/stdlib/Dates/test/types.jl index 8823e56e41a2f..b634f503d4d2f 100644 --- a/stdlib/Dates/test/types.jl +++ b/stdlib/Dates/test/types.jl @@ -41,6 +41,7 @@ end @test Dates.isleapyear(-1) == false @test Dates.isleapyear(4) == true @test Dates.isleapyear(-4) == true + @test_throws MethodError Dates.isleapyear(Dates.Year(1992)) end # Create "test" check manually y = Dates.Year(1) From 82dc2d6c134eec91e1217237c969a9678d43bff6 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Wed, 31 Jul 2024 20:48:42 -0400 Subject: [PATCH 404/413] Profile: Fix stdlib paths (#55327) (cherry picked from commit b759fe29a3e1f84b7cb928f1f87417d43f7fc72a) --- src/signals-mach.c | 8 ++++---- src/signals-unix.c | 8 ++++---- src/signals-win.c | 8 ++++---- stdlib/Profile/src/Profile.jl | 4 ++-- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/signals-mach.c b/src/signals-mach.c index 6ec8f95570f17..d33e2124bb0fa 100644 --- a/src/signals-mach.c +++ b/src/signals-mach.c @@ -681,16 +681,16 @@ void *mach_profile_listener(void *arg) #endif jl_ptls_t ptls = jl_atomic_load_relaxed(&jl_all_tls_states)[i]; - // store threadid but add 1 as 0 is preserved to indicate end of block + // META_OFFSET_THREADID store threadid but add 1 as 0 is preserved to indicate end of block bt_data_prof[bt_size_cur++].uintptr = ptls->tid + 1; - // store task id (never null) + // META_OFFSET_TASKID store task id (never null) bt_data_prof[bt_size_cur++].jlvalue = (jl_value_t*)jl_atomic_load_relaxed(&ptls->current_task); - // store cpu cycle clock + // META_OFFSET_CPUCYCLECLOCK store cpu cycle clock bt_data_prof[bt_size_cur++].uintptr = cycleclock(); - // store whether thread is sleeping but add 1 as 0 is preserved to indicate end of block + // META_OFFSET_SLEEPSTATE store whether thread is sleeping but add 1 as 0 is preserved to indicate end of block bt_data_prof[bt_size_cur++].uintptr = jl_atomic_load_relaxed(&ptls->sleep_check_state) + 1; // Mark the end of this block with two 0's diff --git a/src/signals-unix.c b/src/signals-unix.c index 0d5ad9b1be7c5..fe21463a48db8 100644 --- a/src/signals-unix.c +++ b/src/signals-unix.c @@ -899,16 +899,16 @@ static void *signal_listener(void *arg) jl_ptls_t ptls2 = jl_atomic_load_relaxed(&jl_all_tls_states)[i]; - // store threadid but add 1 as 0 is preserved to indicate end of block + // META_OFFSET_THREADID store threadid but add 1 as 0 is preserved to indicate end of block bt_data_prof[bt_size_cur++].uintptr = ptls2->tid + 1; - // store task id (never null) + // META_OFFSET_TASKID store task id (never null) bt_data_prof[bt_size_cur++].jlvalue = (jl_value_t*)jl_atomic_load_relaxed(&ptls2->current_task); - // store cpu cycle clock + // META_OFFSET_CPUCYCLECLOCK store cpu cycle clock bt_data_prof[bt_size_cur++].uintptr = cycleclock(); - // store whether thread is sleeping but add 1 as 0 is preserved to indicate end of block + // META_OFFSET_SLEEPSTATE store whether thread is sleeping but add 1 as 0 is preserved to indicate end of block bt_data_prof[bt_size_cur++].uintptr = jl_atomic_load_relaxed(&ptls2->sleep_check_state) + 1; // Mark the end of this block with two 0's diff --git a/src/signals-win.c b/src/signals-win.c index 10bd0dec7f480..25de2e3e821ff 100644 --- a/src/signals-win.c +++ b/src/signals-win.c @@ -420,16 +420,16 @@ static DWORD WINAPI profile_bt( LPVOID lparam ) jl_ptls_t ptls = jl_atomic_load_relaxed(&jl_all_tls_states)[0]; // given only profiling hMainThread - // store threadid but add 1 as 0 is preserved to indicate end of block + // META_OFFSET_THREADID store threadid but add 1 as 0 is preserved to indicate end of block bt_data_prof[bt_size_cur++].uintptr = ptls->tid + 1; - // store task id (never null) + // META_OFFSET_TASKID store task id (never null) bt_data_prof[bt_size_cur++].jlvalue = (jl_value_t*)jl_atomic_load_relaxed(&ptls->current_task); - // store cpu cycle clock + // META_OFFSET_CPUCYCLECLOCK store cpu cycle clock bt_data_prof[bt_size_cur++].uintptr = cycleclock(); - // store whether thread is sleeping but add 1 as 0 is preserved to indicate end of block + // META_OFFSET_SLEEPSTATE store whether thread is sleeping but add 1 as 0 is preserved to indicate end of block bt_data_prof[bt_size_cur++].uintptr = jl_atomic_load_relaxed(&ptls->sleep_check_state) + 1; // Mark the end of this block with two 0's diff --git a/stdlib/Profile/src/Profile.jl b/stdlib/Profile/src/Profile.jl index 899437312c950..2a4dc5074ebc3 100644 --- a/stdlib/Profile/src/Profile.jl +++ b/stdlib/Profile/src/Profile.jl @@ -492,7 +492,7 @@ end # based on the package ecosystem function short_path(spath::Symbol, filenamecache::Dict{Symbol, String}) return get!(filenamecache, spath) do - path = string(spath) + path = Base.fixup_stdlib_path(string(spath)) if isabspath(path) if ispath(path) # try to replace the file-system prefix with a short "@Module" one, @@ -668,7 +668,7 @@ function add_fake_meta(data; threadid = 1, taskid = 0xf0f0f0f0) for i = 1:length(data) val = data[i] if iszero(val) - # (threadid, taskid, cpu_cycle_clock, thread_sleeping) + # META_OFFSET_THREADID, META_OFFSET_TASKID, META_OFFSET_CPUCYCLECLOCK, META_OFFSET_SLEEPSTATE push!(data_with_meta, threadid, taskid, cpu_clock_cycle+=1, false+1, 0, 0) else push!(data_with_meta, val) From a28e527f24a198659562c011b8405bc1b8c434f4 Mon Sep 17 00:00:00 2001 From: Elliot Saba Date: Wed, 31 Jul 2024 20:24:02 -0700 Subject: [PATCH 405/413] [libblastrampoline] Bump to v5.11.0 (#55330) This includes support to properly forward MKL v2024's ILP64 CBLAS symbols, which fixes this [Enzyme issue](https://github.com/EnzymeAD/Enzyme.jl/issues/1683) (cherry picked from commit 602b582a66ca15bbfe2328546ee04f98167e67c9) --- deps/blastrampoline.version | 6 +- deps/checksums/blastrampoline | 68 +++++++++++------------ stdlib/libblastrampoline_jll/Project.toml | 2 +- 3 files changed, 38 insertions(+), 38 deletions(-) diff --git a/deps/blastrampoline.version b/deps/blastrampoline.version index 871053db3c9f2..fd055e1ae8120 100644 --- a/deps/blastrampoline.version +++ b/deps/blastrampoline.version @@ -2,6 +2,6 @@ BLASTRAMPOLINE_JLL_NAME := libblastrampoline ## source build -BLASTRAMPOLINE_VER := 5.10.1 -BLASTRAMPOLINE_BRANCH=v5.10.1 -BLASTRAMPOLINE_SHA1=ff05ebb4e450deda0aebe8dce4d4f054e23fecfc +BLASTRAMPOLINE_VER := 5.11.0 +BLASTRAMPOLINE_BRANCH=v5.11.0 +BLASTRAMPOLINE_SHA1=05083d50611b5538df69706f0a952d8e642b0b4b diff --git a/deps/checksums/blastrampoline b/deps/checksums/blastrampoline index b8c4c68c661ba..edb8cadc74846 100644 --- a/deps/checksums/blastrampoline +++ b/deps/checksums/blastrampoline @@ -1,34 +1,34 @@ -blastrampoline-ff05ebb4e450deda0aebe8dce4d4f054e23fecfc.tar.gz/md5/48ec847f7a687dd36789d6365d3c5645 -blastrampoline-ff05ebb4e450deda0aebe8dce4d4f054e23fecfc.tar.gz/sha512/85f6a46e7fe5f76ff8cef5776dad73b17eb97be3b16ca1af961cf2c2cbe125c629bd808b0243b793e4235dcb545a02cc082eaf14b3a438f3e0973d46921550a3 -libblastrampoline.v5.10.1+0.aarch64-apple-darwin.tar.gz/md5/cbbb4b5a6ebee04d686f072a69e855be -libblastrampoline.v5.10.1+0.aarch64-apple-darwin.tar.gz/sha512/32eaebb0fa3c0bc85a270b5c13fecaaa86ee10b4cea04405672badbaaa5ae3f22757dc758d9d971c811dc100a8ebd72fa00391238c0227de3690341f0434842a -libblastrampoline.v5.10.1+0.aarch64-linux-gnu.tar.gz/md5/da097a9459dcb8554f3d9511ea1a1c88 -libblastrampoline.v5.10.1+0.aarch64-linux-gnu.tar.gz/sha512/0159dbd4579d2a334f4341a64841bc1cef1354fc744709055339957b299b2b36b30162c2c90367abc04a2fb2f236aaa1fe6eb290393702f6fb97eaa79e4bb028 -libblastrampoline.v5.10.1+0.aarch64-linux-musl.tar.gz/md5/f32839481836dad6a1b159d9c33db752 -libblastrampoline.v5.10.1+0.aarch64-linux-musl.tar.gz/sha512/b973e739ab4af6ba93328943b03f16f02625553efc2375909b5e5bed4446287a21f99025817ce73267cac2d0b6b65f7dc2a5bd4b4c88d263b3c923b2ec3ad5c4 -libblastrampoline.v5.10.1+0.armv6l-linux-gnueabihf.tar.gz/md5/23eb2cbc1a547f94935fa4f9ffa2285b -libblastrampoline.v5.10.1+0.armv6l-linux-gnueabihf.tar.gz/sha512/0681497bac1d8f3ff1932adbb9fdd0b710b2a28ca7f2f4bb0093ba1123b14acd8bcb062e81e538c6e51ed8449ffea582cdb5b610e97d0c76a6feb58545938a6b -libblastrampoline.v5.10.1+0.armv6l-linux-musleabihf.tar.gz/md5/4e5168b1ada4e36861aeb3f4a6ace318 -libblastrampoline.v5.10.1+0.armv6l-linux-musleabihf.tar.gz/sha512/4ee663d2d3665e6ea356cfac60274c5f06ab08c1ee99b345ddda6872125663acb5559f704d0a918706e6cb075fc3071aaec4bcc3b9fee5fee72696e2f1454fb3 -libblastrampoline.v5.10.1+0.armv7l-linux-gnueabihf.tar.gz/md5/a28e3820fdf1435027f69204a553b5f9 -libblastrampoline.v5.10.1+0.armv7l-linux-gnueabihf.tar.gz/sha512/48edfc069aeaead468ffb6145986b11a040286990520b191e0f9cfa99f0b9458e6b17e523c8cc81889af7c9c2adce6372c65f2205a20c8e778614eaa06d288f9 -libblastrampoline.v5.10.1+0.armv7l-linux-musleabihf.tar.gz/md5/c5ea1756f3d58f8a74e76958f3a93658 -libblastrampoline.v5.10.1+0.armv7l-linux-musleabihf.tar.gz/sha512/f3eb003f954ffc346ae1037325b56fb2e4db9a6f88cc878862f921df79d8e0a5c8da9d229610dcd5d21c3d7af0a61ddcc0e70e32bf45fc9ea828d9ab2d1ddda8 -libblastrampoline.v5.10.1+0.i686-linux-gnu.tar.gz/md5/8bbdd602fed40577c4c9f020a8304c57 -libblastrampoline.v5.10.1+0.i686-linux-gnu.tar.gz/sha512/67947bd68c9f1131311d5d6a0fbcc92540f2fb2e1d2d0fa46951033fd75658661ba355c415b68de5dcd1bf0c440e27e3362ece70f5fd989fade796e9e723becd -libblastrampoline.v5.10.1+0.i686-linux-musl.tar.gz/md5/455bb539e7646e060fa24fb59c82f2f0 -libblastrampoline.v5.10.1+0.i686-linux-musl.tar.gz/sha512/e392334512ebce93ea4b34265ead802c543db5678c30083fb0dce08c071dd7140a9532d3162f215815807650138ffec5ad5d6d848025ee3913dfe353308d8e57 -libblastrampoline.v5.10.1+0.i686-w64-mingw32.tar.gz/md5/9a1c6845cb2e85b3497cd01d3a89b06b -libblastrampoline.v5.10.1+0.i686-w64-mingw32.tar.gz/sha512/66a9429a70575f4fd19d1cfb263c4c7801ac4a88408f98125f6e347b0ba35d2fdc4cbb82bf7407462beab1f7a7df2184163f76d5f2330f485bc1c7e5354716aa -libblastrampoline.v5.10.1+0.powerpc64le-linux-gnu.tar.gz/md5/b2b3eea1cfce87642a1f2afa125dcc5c -libblastrampoline.v5.10.1+0.powerpc64le-linux-gnu.tar.gz/sha512/43d5bf6535ad8f0910a523a3940787db956a3700681cc0dc1e2a1aabdaafa669e46e42854df29c0dcff06b3ade899159cb4845a48a6e618ba52af7276151fd0e -libblastrampoline.v5.10.1+0.x86_64-apple-darwin.tar.gz/md5/497a8f88c810a12b3faf12851427c784 -libblastrampoline.v5.10.1+0.x86_64-apple-darwin.tar.gz/sha512/7e3ed2117c6248761ba5bc3fd339f12ca98050d163d5c3668a62ee90aec10858d30fe9d78cea01796c9b2231cdd4f9ad0ae886bf8e984cb24d745e9f8c0fd62b -libblastrampoline.v5.10.1+0.x86_64-linux-gnu.tar.gz/md5/355612dc7c383dd860dc03498254814b -libblastrampoline.v5.10.1+0.x86_64-linux-gnu.tar.gz/sha512/12d803c53f705dacf2bf5f3884bd9b40f89a248ebda8bce1da6bba0cfe4331222bed5124dc45ea377e7c0fcc2d0dc624cc71b0eb454319fd12e2fd4c58d265f7 -libblastrampoline.v5.10.1+0.x86_64-linux-musl.tar.gz/md5/78a09fe918b1b0b3dc72c17c2e62799b -libblastrampoline.v5.10.1+0.x86_64-linux-musl.tar.gz/sha512/1ff3d7e8d36d450f430119b30e03a64f2d78d6d13a04e4a4b97c64966e341f486080c733dbd73ee3ed7c1557ad737f37c013335578e1555d162f0591929de747 -libblastrampoline.v5.10.1+0.x86_64-unknown-freebsd.tar.gz/md5/ad9f213bc4a7882784ad09017fc82234 -libblastrampoline.v5.10.1+0.x86_64-unknown-freebsd.tar.gz/sha512/4de6f08a45cb3c3819f71ccd44688b847c2e9b36e0d4bce94191558fe2d775c2790f4c68eea1a366d0a869f0c986aa33626d427946403cf4e128f45b5881f70e -libblastrampoline.v5.10.1+0.x86_64-w64-mingw32.tar.gz/md5/2d0cf117d8d797e7716f8d836dfdd9f5 -libblastrampoline.v5.10.1+0.x86_64-w64-mingw32.tar.gz/sha512/d7a94f3a71400b22b6c14648455e38dff750eb88661928b66b307f721d53769dea3aec43bb86e2200145ed072475c32e1bfc38e0fc35445c4c42e5752754b0e5 +blastrampoline-05083d50611b5538df69706f0a952d8e642b0b4b.tar.gz/md5/700b22cb26291736bd1263cd2a7f2d75 +blastrampoline-05083d50611b5538df69706f0a952d8e642b0b4b.tar.gz/sha512/967c16d28834df112916c0904dd4c7231a1c5e4edf279adb26411faa17da28eee4680ce2347b3941520dccbc768944277a8f724b21976960d00f840349b90e36 +libblastrampoline.v5.11.0+0.aarch64-apple-darwin.tar.gz/md5/769458d40e004d6126cae6b34351068f +libblastrampoline.v5.11.0+0.aarch64-apple-darwin.tar.gz/sha512/75a726b9a4f41b70344ceb9e1f1a7ad370bfa84ce44c70b8a965061d777871e3bf2237ae055da7e6202ddef78932ba8baf2a01a675b1b0cec5338ef16ea2081b +libblastrampoline.v5.11.0+0.aarch64-linux-gnu.tar.gz/md5/d92cf3f3fa1e977ea3a1a74acc8442d1 +libblastrampoline.v5.11.0+0.aarch64-linux-gnu.tar.gz/sha512/3354f4eec2a410f81cc0546a04ce98ddd416d441c1701a59ec5bebea99af8823b5af10a85cb4e3377548422c6d6a0a870f2e7a05ad0cda52c6143361d59ba4fb +libblastrampoline.v5.11.0+0.aarch64-linux-musl.tar.gz/md5/41d060c03202b662e47bda5fbf7b1e84 +libblastrampoline.v5.11.0+0.aarch64-linux-musl.tar.gz/sha512/54a05516e12350441c33341fde53bc912aa52dc4b746089c2d21cb75f24f0fb140849a520327db6f52895743eab090b59fa974a2a426a49f8b4e38693340a306 +libblastrampoline.v5.11.0+0.armv6l-linux-gnueabihf.tar.gz/md5/4930dceefac63e7aa5a93e1ba0e00e59 +libblastrampoline.v5.11.0+0.armv6l-linux-gnueabihf.tar.gz/sha512/dafce083c2b409ead61fdbdf4f46b7c93cab00c82a74a181d381c4a93f1e7af035cd6caf407b0199c1f8c2f2f68f93d67938ef092fa4a8d1133f0ea73fb51a9c +libblastrampoline.v5.11.0+0.armv6l-linux-musleabihf.tar.gz/md5/82346cc4ddeaa29ea7a081edfdfcb08b +libblastrampoline.v5.11.0+0.armv6l-linux-musleabihf.tar.gz/sha512/72e387bd661096a46077e8c15e12f8a6f18fd6aaf30af0678d00eca0d83af10758874643f5716539dd38269e831e4649d45db739aeb60996bf1b96277cea1d17 +libblastrampoline.v5.11.0+0.armv7l-linux-gnueabihf.tar.gz/md5/7e8f115268e8c62acaa2a53ecd32e2fe +libblastrampoline.v5.11.0+0.armv7l-linux-gnueabihf.tar.gz/sha512/4210c306ff7ccb53aa6c9f45e134c63b238c563ed753f7536dfc21f6962dfea35d9de62e429e2685b70d0db780ac766b72fd5e76e2d62df74000e3e5d553c30f +libblastrampoline.v5.11.0+0.armv7l-linux-musleabihf.tar.gz/md5/7f388611c477b528a091f697b0d334d9 +libblastrampoline.v5.11.0+0.armv7l-linux-musleabihf.tar.gz/sha512/e9b017dfa8c19cb940395b253f3b28511a6619469fabff7ab1671ed0936e9e0681d1385c3d1f5d6417ccb65ffbdcf53a0c8519d4ef8e89f9500a05ca00296144 +libblastrampoline.v5.11.0+0.i686-linux-gnu.tar.gz/md5/254948ea87a435251b1e064a77b3d635 +libblastrampoline.v5.11.0+0.i686-linux-gnu.tar.gz/sha512/5a51d3c20c49c497a8f0c2d2e7b38b49ec5e367c7013a7f0efa4fc099639da20ef9c0bfdbdfbdc40b27ce61f189b18f5cf617d7a0ed4bc5300da692f7d6b77a4 +libblastrampoline.v5.11.0+0.i686-linux-musl.tar.gz/md5/a9504870af8db1e247be02c5e188f7a5 +libblastrampoline.v5.11.0+0.i686-linux-musl.tar.gz/sha512/5f0109168a16edb8ca66fcf10c2c10b57fe9c3061c0b08dac4dea936538fa5854aa1b66079f127b5d9902288b61772054013256aa307b682de38e350b1bbb367 +libblastrampoline.v5.11.0+0.i686-w64-mingw32.tar.gz/md5/815822f6bacb42c35b80bc77458c5c49 +libblastrampoline.v5.11.0+0.i686-w64-mingw32.tar.gz/sha512/c82f8c6fe0b7917860e5601c79e35d56297c53b6f7f992841d4f048e7981533e459f9db0805a16d82a9e03d452489760def0d9c57181dcfa5dc363102180eecd +libblastrampoline.v5.11.0+0.powerpc64le-linux-gnu.tar.gz/md5/ee30c9cb4c51df03026f9e471040e9cc +libblastrampoline.v5.11.0+0.powerpc64le-linux-gnu.tar.gz/sha512/5055d83a1b0625364ddd97652a4c6fa39c795078123cad33a085283889274f66c9dc053be0591c14be262dc7eef666726afa922c66ae8d05c2791c3d6bd7009e +libblastrampoline.v5.11.0+0.x86_64-apple-darwin.tar.gz/md5/210cd354c9b4a8aa2a2b55723597e58b +libblastrampoline.v5.11.0+0.x86_64-apple-darwin.tar.gz/sha512/1ee65d598f9f8a2cf7137135c8c2c431520b1cde319fc33dddfbdae9fe01d986e979a97c24cf85c090cc40064cfe47c376dfeb088ff417d17868c4df84fb2fd4 +libblastrampoline.v5.11.0+0.x86_64-linux-gnu.tar.gz/md5/e2213c42eebee6e45079ef6831077b3f +libblastrampoline.v5.11.0+0.x86_64-linux-gnu.tar.gz/sha512/ab2c3026d34962a2ca5116d71a4e8eaaca5182d53f21edd3e4be81ce26e74e427c88797308af7fbbf1b9ee615e0383acf0dae1d0eb207ebc64dddaf927f00b48 +libblastrampoline.v5.11.0+0.x86_64-linux-musl.tar.gz/md5/8cde3c618e882ea2b7c8a017a69175c7 +libblastrampoline.v5.11.0+0.x86_64-linux-musl.tar.gz/sha512/8a3aca5691c3936d114c804471b2429b9ae81308f020247765614d2f792f93a012263ce4baa31cf42f4dacc23a7161a4c7f9debfba8d9028879f1ed3fc4e2433 +libblastrampoline.v5.11.0+0.x86_64-unknown-freebsd.tar.gz/md5/b02eb694e1486ef8ffe9534ac2bd5ec6 +libblastrampoline.v5.11.0+0.x86_64-unknown-freebsd.tar.gz/sha512/989273809ae567d7e7193529740423ac1870eae3a0effeecc67f84da914d81649786f393e101f013b7232ef5fe35066d89b3cb776ad0e87394799491ef28a467 +libblastrampoline.v5.11.0+0.x86_64-w64-mingw32.tar.gz/md5/6e7f602ab0bf5a5c28bf4e959a1bbf77 +libblastrampoline.v5.11.0+0.x86_64-w64-mingw32.tar.gz/sha512/556e7ca1a2576c1d7825ac1bc2449ffe2cd40391cf316b10f60681a5c736939c97eb5221c2837640928b5544f89f44cb14ca44ccf54092376390ea1a6012c9e5 diff --git a/stdlib/libblastrampoline_jll/Project.toml b/stdlib/libblastrampoline_jll/Project.toml index 97ee9bb32eeb1..fef963a88f5fd 100644 --- a/stdlib/libblastrampoline_jll/Project.toml +++ b/stdlib/libblastrampoline_jll/Project.toml @@ -1,6 +1,6 @@ name = "libblastrampoline_jll" uuid = "8e850b90-86db-534c-a0d3-1478176c7d93" -version = "5.10.1+0" +version = "5.11.0+0" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" From 67ac373379999114fd1fc02198e33402a0ff5dc1 Mon Sep 17 00:00:00 2001 From: Jishnu Bhattacharya Date: Mon, 5 Aug 2024 06:06:39 +0000 Subject: [PATCH 406/413] Fix tr for block SymTridiagonal (#55371) This ensures that `tr` for a block `SymTridiagonal` symmetrizes the diagonal elements. (cherry picked from commit a163483e6714631e9f6fecf141bd2dca999fbd6a) --- stdlib/LinearAlgebra/src/tridiag.jl | 2 +- stdlib/LinearAlgebra/test/tridiag.jl | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/stdlib/LinearAlgebra/src/tridiag.jl b/stdlib/LinearAlgebra/src/tridiag.jl index 174b368a8615a..1df166311aceb 100644 --- a/stdlib/LinearAlgebra/src/tridiag.jl +++ b/stdlib/LinearAlgebra/src/tridiag.jl @@ -173,7 +173,7 @@ Base.copy(S::Adjoint{<:Any,<:SymTridiagonal}) = SymTridiagonal(map(x -> copy.(ad ishermitian(S::SymTridiagonal) = isreal(S.dv) && isreal(_evview(S)) issymmetric(S::SymTridiagonal) = true -tr(S::SymTridiagonal) = sum(S.dv) +tr(S::SymTridiagonal) = sum(symmetric, S.dv) function diag(M::SymTridiagonal{T}, n::Integer=0) where T<:Number # every branch call similar(..., ::Int) to make sure the diff --git a/stdlib/LinearAlgebra/test/tridiag.jl b/stdlib/LinearAlgebra/test/tridiag.jl index d4b2dd5e3f269..bb6b2426b68bb 100644 --- a/stdlib/LinearAlgebra/test/tridiag.jl +++ b/stdlib/LinearAlgebra/test/tridiag.jl @@ -459,7 +459,7 @@ end end @testset "SymTridiagonal/Tridiagonal block matrix" begin - M = [1 2; 2 4] + M = [1 2; 3 4] n = 5 A = SymTridiagonal(fill(M, n), fill(M, n-1)) @test @inferred A[1,1] == Symmetric(M) @@ -473,6 +473,9 @@ end @test_throws ArgumentError diag(A, n+1) @test_throws ArgumentError diag(A, -n-1) + @test tr(A) == sum(diag(A)) + @test issymmetric(tr(A)) + A = Tridiagonal(fill(M, n-1), fill(M, n), fill(M, n-1)) @test @inferred A[1,1] == M @test @inferred A[1,2] == M From fd6d9e0086070129d50a9c27fa1d6153539d49a9 Mon Sep 17 00:00:00 2001 From: KristofferC Date: Thu, 8 Aug 2024 16:38:09 +0200 Subject: [PATCH 407/413] bump Pkg to latest 1.10 --- .../Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/md5 | 1 + .../Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/sha512 | 1 + .../Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/md5 | 1 - .../Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/sha512 | 1 - stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/md5 create mode 100644 deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/sha512 delete mode 100644 deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/sha512 diff --git a/deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/md5 b/deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/md5 new file mode 100644 index 0000000000000..72001bfc98776 --- /dev/null +++ b/deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/md5 @@ -0,0 +1 @@ +381910e0089a1d5de177d88f7b0198cd diff --git a/deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/sha512 b/deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/sha512 new file mode 100644 index 0000000000000..1709b32a4505d --- /dev/null +++ b/deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/sha512 @@ -0,0 +1 @@ +ab86ff01ebf6d5c7cbd45454f0168ff89834f9afbdb06fc18b283fe103b2facba4d91f1b9251ccc77ab42d3676c524976ea5e0c9f482c1b35515039ab24eeb25 diff --git a/deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/md5 b/deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/md5 deleted file mode 100644 index 484ab97cf1125..0000000000000 --- a/deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -9761b21f038bf170fa2b6e4fb6d6aea1 diff --git a/deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/sha512 b/deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/sha512 deleted file mode 100644 index b57a45db7923e..0000000000000 --- a/deps/checksums/Pkg-ff18647d8cb7b26a612698334b691a80566da24d.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -502898b4a5272b4feaea37fbc7c9c4ebaa78a2d25ed6120881308b696bb8235d453aa3717efee7a1bdcff1fd7fb3280e0dca99d42402c6cc430661909e2fe917 diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 5df1ed0435629..8ebc3de6f46b8 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = ff18647d8cb7b26a612698334b691a80566da24d +PKG_SHA1 = 9cb6d35f8b83937921e9c4c466f9cd68d83ebdab PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 3a4ccaa990c8a3d623b6f67d6b140a5fb202d2c2 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Fri, 9 Aug 2024 19:47:20 +0200 Subject: [PATCH 408/413] `stale_cachefile`: handle if the expected cache file is missing (#55419) Part of fixing https://github.com/JuliaLang/Pkg.jl/issues/3984 --- base/loading.jl | 8 +++++++- test/precompile.jl | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/base/loading.jl b/base/loading.jl index c6405e8c5b37e..a8e3549da5260 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -3005,7 +3005,13 @@ end return stale_cachefile(PkgId(""), UInt128(0), modpath, cachefile; ignore_loaded) end @constprop :none function stale_cachefile(modkey::PkgId, build_id::UInt128, modpath::String, cachefile::String; ignore_loaded::Bool = false) - io = open(cachefile, "r") + io = try + open(cachefile, "r") + catch ex + ex isa IOError || ex isa SystemError || rethrow() + @debug "Rejecting cache file $cachefile for $modkey because it could not be opened" isfile(cachefile) + return true + end try checksum = isvalid_cache_header(io) if iszero(checksum) diff --git a/test/precompile.jl b/test/precompile.jl index d317731b51370..0b9cc9eab3417 100644 --- a/test/precompile.jl +++ b/test/precompile.jl @@ -522,6 +522,10 @@ precompile_test_harness(false) do dir @eval using Baz @test Base.invokelatest(Baz.baz) == 1 + # should not throw if the cachefile does not exist + @test !isfile("DoesNotExist.ji") + @test Base.stale_cachefile("", "DoesNotExist.ji") === true + # Issue #12720 FooBar1_file = joinpath(dir, "FooBar1.jl") write(FooBar1_file, From b4b16460a988c0fa3b07950579f7737ded919b9b Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Fri, 9 Aug 2024 13:56:23 -0400 Subject: [PATCH 409/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20Pkg=20stdlib=20from=209cb6d35f8=20to=2045521a6e?= =?UTF-8?q?8=20(#55437)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stdlib: Pkg URL: https://github.com/JuliaLang/Pkg.jl.git Stdlib branch: release-1.10 Julia branch: backports-release-1.10 Old commit: 9cb6d35f8 New commit: 45521a6e8 Julia version: 1.10.4 Pkg version: 1.10.0(Does not match) Bump invoked by: @IanButterworth Powered by: [BumpStdlibs.jl](https://github.com/JuliaLang/BumpStdlibs.jl) Diff: https://github.com/JuliaLang/Pkg.jl/compare/9cb6d35f8b83937921e9c4c466f9cd68d83ebdab...45521a6e870e0b9efc51d1799a356a3a7e92ebdd ``` $ git log --oneline 9cb6d35f8..45521a6e8 45521a6e8 backport extension dependency modeling from Base 1.11 to Pkg 1.10 (#3986) 1810b1123 don't swallow internal errors (#3987) ``` Co-authored-by: Dilum Aluthge --- .../Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/md5 | 1 + .../Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/sha512 | 1 + .../Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/md5 | 1 - .../Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/sha512 | 1 - stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/md5 create mode 100644 deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/sha512 delete mode 100644 deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/sha512 diff --git a/deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/md5 b/deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/md5 new file mode 100644 index 0000000000000..6100cffa8aa06 --- /dev/null +++ b/deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/md5 @@ -0,0 +1 @@ +81101fd579f257d8e5a67a75062baf92 diff --git a/deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/sha512 b/deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/sha512 new file mode 100644 index 0000000000000..61732f26a3506 --- /dev/null +++ b/deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/sha512 @@ -0,0 +1 @@ +811c0cdf418a5dccf5654a3890ea23f3c231f2f322ea0d90b6e574468031d7256c7c6683a8297cebfcd2f90106749fd238cddf1dfeed33e3498c8d89f2de98f4 diff --git a/deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/md5 b/deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/md5 deleted file mode 100644 index 72001bfc98776..0000000000000 --- a/deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -381910e0089a1d5de177d88f7b0198cd diff --git a/deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/sha512 b/deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/sha512 deleted file mode 100644 index 1709b32a4505d..0000000000000 --- a/deps/checksums/Pkg-9cb6d35f8b83937921e9c4c466f9cd68d83ebdab.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -ab86ff01ebf6d5c7cbd45454f0168ff89834f9afbdb06fc18b283fe103b2facba4d91f1b9251ccc77ab42d3676c524976ea5e0c9f482c1b35515039ab24eeb25 diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 8ebc3de6f46b8..681c7ce4aadba 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = 9cb6d35f8b83937921e9c4c466f9cd68d83ebdab +PKG_SHA1 = 45521a6e870e0b9efc51d1799a356a3a7e92ebdd PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 746ea6a69bf5b2a4117c684051dcd211811ec8c9 Mon Sep 17 00:00:00 2001 From: DilumAluthgeBot <43731525+DilumAluthgeBot@users.noreply.github.com> Date: Sun, 11 Aug 2024 10:21:11 -0400 Subject: [PATCH 410/413] =?UTF-8?q?=F0=9F=A4=96=20[backports-release-1.10]?= =?UTF-8?q?=20Bump=20the=20Pkg=20stdlib=20from=2045521a6e8=20to=20a4f26cff?= =?UTF-8?q?6=20(#55463)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stdlib: Pkg URL: https://github.com/JuliaLang/Pkg.jl.git Stdlib branch: release-1.10 Julia branch: backports-release-1.10 Old commit: 45521a6e8 New commit: a4f26cff6 Julia version: 1.10.4 Pkg version: 1.10.0(Does not match) Bump invoked by: @IanButterworth Powered by: [BumpStdlibs.jl](https://github.com/JuliaLang/BumpStdlibs.jl) Diff: https://github.com/JuliaLang/Pkg.jl/compare/45521a6e870e0b9efc51d1799a356a3a7e92ebdd...a4f26cff605a5f83402a38c51b4cc13d15a5c518 ``` $ git log --oneline 45521a6e8..a4f26cff6 a4f26cff6 [release-1.10] Pkg.precompile: Handle when the terminal is very short (#3988) ``` Co-authored-by: Dilum Aluthge --- .../Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/md5 | 1 - .../Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/sha512 | 1 - .../Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/md5 | 1 + .../Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/sha512 | 1 + stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/sha512 create mode 100644 deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/md5 create mode 100644 deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/sha512 diff --git a/deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/md5 b/deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/md5 deleted file mode 100644 index 6100cffa8aa06..0000000000000 --- a/deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -81101fd579f257d8e5a67a75062baf92 diff --git a/deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/sha512 b/deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/sha512 deleted file mode 100644 index 61732f26a3506..0000000000000 --- a/deps/checksums/Pkg-45521a6e870e0b9efc51d1799a356a3a7e92ebdd.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -811c0cdf418a5dccf5654a3890ea23f3c231f2f322ea0d90b6e574468031d7256c7c6683a8297cebfcd2f90106749fd238cddf1dfeed33e3498c8d89f2de98f4 diff --git a/deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/md5 b/deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/md5 new file mode 100644 index 0000000000000..efc1de8958026 --- /dev/null +++ b/deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/md5 @@ -0,0 +1 @@ +f4eeb4d14e661481129891c314476423 diff --git a/deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/sha512 b/deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/sha512 new file mode 100644 index 0000000000000..ff4183fc1dee9 --- /dev/null +++ b/deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/sha512 @@ -0,0 +1 @@ +bf1579d06bf910bc1cc40a8958368dc6fda7650c25c5d23eca1bfc1aa72902257bb3a57c0e3bfc8909e90890567900c241afbf6aa97129cf02abfa11d5791a98 diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 681c7ce4aadba..4ca1d2c548daa 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = 45521a6e870e0b9efc51d1799a356a3a7e92ebdd +PKG_SHA1 = a4f26cff605a5f83402a38c51b4cc13d15a5c518 PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 5b677f9e9fe07905288c87961acd877ec3968bf6 Mon Sep 17 00:00:00 2001 From: KristofferC Date: Tue, 13 Aug 2024 10:51:02 +0200 Subject: [PATCH 411/413] bump Pkg to latest 1.10 --- .../Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/md5 | 1 - .../Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/sha512 | 1 - .../Pkg-edfa2ed0ea117d61d33405d4214edb6513b3f236.tar.gz/md5 | 1 + .../Pkg-edfa2ed0ea117d61d33405d4214edb6513b3f236.tar.gz/sha512 | 1 + stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/sha512 create mode 100644 deps/checksums/Pkg-edfa2ed0ea117d61d33405d4214edb6513b3f236.tar.gz/md5 create mode 100644 deps/checksums/Pkg-edfa2ed0ea117d61d33405d4214edb6513b3f236.tar.gz/sha512 diff --git a/deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/md5 b/deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/md5 deleted file mode 100644 index efc1de8958026..0000000000000 --- a/deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -f4eeb4d14e661481129891c314476423 diff --git a/deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/sha512 b/deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/sha512 deleted file mode 100644 index ff4183fc1dee9..0000000000000 --- a/deps/checksums/Pkg-a4f26cff605a5f83402a38c51b4cc13d15a5c518.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -bf1579d06bf910bc1cc40a8958368dc6fda7650c25c5d23eca1bfc1aa72902257bb3a57c0e3bfc8909e90890567900c241afbf6aa97129cf02abfa11d5791a98 diff --git a/deps/checksums/Pkg-edfa2ed0ea117d61d33405d4214edb6513b3f236.tar.gz/md5 b/deps/checksums/Pkg-edfa2ed0ea117d61d33405d4214edb6513b3f236.tar.gz/md5 new file mode 100644 index 0000000000000..8a9534c09de47 --- /dev/null +++ b/deps/checksums/Pkg-edfa2ed0ea117d61d33405d4214edb6513b3f236.tar.gz/md5 @@ -0,0 +1 @@ +0a9d28868d4ed82d053a586d398ed0ed diff --git a/deps/checksums/Pkg-edfa2ed0ea117d61d33405d4214edb6513b3f236.tar.gz/sha512 b/deps/checksums/Pkg-edfa2ed0ea117d61d33405d4214edb6513b3f236.tar.gz/sha512 new file mode 100644 index 0000000000000..09f6d2b057d65 --- /dev/null +++ b/deps/checksums/Pkg-edfa2ed0ea117d61d33405d4214edb6513b3f236.tar.gz/sha512 @@ -0,0 +1 @@ +8c8bc23cfe2b181cfe37a715057e03dc3d8c811e0480586c6e557a2d9e3fb0f1fef93eef4abc94354e6436ac837bcee8414a5c988a00cba5fe822da9aafcd45f diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index 4ca1d2c548daa..709c896f68ca0 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.10 -PKG_SHA1 = a4f26cff605a5f83402a38c51b4cc13d15a5c518 +PKG_SHA1 = edfa2ed0ea117d61d33405d4214edb6513b3f236 PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 From 6f3fdf7b36250fb95f512a2b927ad2518c07d2b5 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 27 Aug 2024 16:19:47 +0200 Subject: [PATCH 412/413] set VERSION to 1.10.5 (#55526) --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 18b3114206503..db77e0ee9760a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.10.4 +1.10.5 From bd32e389dda4a318b619de30b1b0d632a3ee6e06 Mon Sep 17 00:00:00 2001 From: N5N3 <2642243996@qq.com> Date: Thu, 10 Aug 2023 08:23:14 +0800 Subject: [PATCH 413/413] Subtype: bug fix for bounds with deeper covariant var (#50832) fix #50716. --- base/namedtuple.jl | 19 +++++++++---------- src/subtype.c | 4 ++-- stdlib/LinearAlgebra/src/bidiag.jl | 2 +- test/subtype.jl | 3 +++ 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/base/namedtuple.jl b/base/namedtuple.jl index 94bd3e87fd55c..687ada6417e11 100644 --- a/base/namedtuple.jl +++ b/base/namedtuple.jl @@ -180,16 +180,15 @@ nextind(@nospecialize(t::NamedTuple), i::Integer) = Int(i)+1 convert(::Type{NT}, nt::NT) where {names, NT<:NamedTuple{names}} = nt convert(::Type{NT}, nt::NT) where {names, T<:Tuple, NT<:NamedTuple{names,T}} = nt -function convert(::Type{NT}, nt::NamedTuple{names}) where {names, T<:Tuple, NT<:NamedTuple{names,T}} - if !@isdefined T - # converting abstract NT to an abstract Tuple type, to a concrete NT1, is not straightforward, so this could just be an error, but we define it anyways - # _tuple_error(NT, nt) - T1 = Tuple{ntuple(i -> fieldtype(NT, i), Val(length(names)))...} - NT1 = NamedTuple{names, T1} - else - T1 = T - NT1 = NT - end +function convert(::Type{NamedTuple{names,T}}, nt::NamedTuple{names}) where {names,T<:Tuple} + NamedTuple{names,T}(T(nt))::NamedTuple{names,T} +end + +function convert(::Type{NT}, nt::NamedTuple{names}) where {names, NT<:NamedTuple{names}} + # converting abstract NT to an abstract Tuple type, to a concrete NT1, is not straightforward, so this could just be an error, but we define it anyways + # _tuple_error(NT, nt) + T1 = Tuple{ntuple(i -> fieldtype(NT, i), Val(length(names)))...} + NT1 = NamedTuple{names, T1} return NT1(T1(nt))::NT1::NT end diff --git a/src/subtype.c b/src/subtype.c index 8a1ea03fdd6fd..0b1e987e5ee1b 100644 --- a/src/subtype.c +++ b/src/subtype.c @@ -951,8 +951,8 @@ static int subtype_unionall(jl_value_t *t, jl_unionall_t *u, jl_stenv_t *e, int8 jl_value_t *vl = btemp->lb; // TODO: this takes a significant amount of time if (btemp->depth0 != vb.depth0 && - ((vu != (jl_value_t*)vb.var && btemp->var->ub != vu && var_occurs_invariant(vu, vb.var)) || - (vl != (jl_value_t*)vb.var && btemp->var->lb != vl && var_occurs_invariant(vl, vb.var)))) { + ((vu != (jl_value_t*)vb.var && btemp->var->ub != vu && var_occurs_inside(vu, vb.var, 0, 0)) || + (vl != (jl_value_t*)vb.var && btemp->var->lb != vl && var_occurs_inside(vl, vb.var, 0, 0)))) { ans = 0; break; } btemp = btemp->prev; diff --git a/stdlib/LinearAlgebra/src/bidiag.jl b/stdlib/LinearAlgebra/src/bidiag.jl index a5f0af4720cf5..303b38ee86c0c 100644 --- a/stdlib/LinearAlgebra/src/bidiag.jl +++ b/stdlib/LinearAlgebra/src/bidiag.jl @@ -201,7 +201,7 @@ Matrix(A::Bidiagonal{T}) where {T} = Matrix{promote_type(T, typeof(zero(T)))}(A) Array(A::Bidiagonal) = Matrix(A) promote_rule(::Type{Matrix{T}}, ::Type{<:Bidiagonal{S}}) where {T,S} = @isdefined(T) && @isdefined(S) ? Matrix{promote_type(T,S)} : Matrix -promote_rule(::Type{Matrix}, ::Type{<:Bidiagonal}) = Matrix +promote_rule(::Type{<:Matrix}, ::Type{<:Bidiagonal}) = Matrix #Converting from Bidiagonal to Tridiagonal function Tridiagonal{T}(A::Bidiagonal) where T diff --git a/test/subtype.jl b/test/subtype.jl index d3f1dc217f699..f0b81bd72d7d7 100644 --- a/test/subtype.jl +++ b/test/subtype.jl @@ -1436,6 +1436,9 @@ struct A23764_2{T, N, S} <: AbstractArray{Union{Ref{T}, S}, N}; end @test Tuple{A23764_2{T, 1, Nothing} where T} <: Tuple{AbstractArray{T,N}} where {T,N} @test Tuple{A23764_2{T, 1, Nothing} where T} <: Tuple{AbstractArray{T,N} where {T,N}} +# issue #50716 +@test !<:(Ref{Vector{Tuple{K}} where K}, Ref{<:Vector{K}} where K) + # issue #26131 @test !(Vector{Vector{Number}} <: Vector{Union{Vector{Number}, Vector{S}}} where S<:Integer)