diff --git a/Make.inc b/Make.inc index 9fd75d76190e9..609f698059a13 100644 --- a/Make.inc +++ b/Make.inc @@ -691,7 +691,10 @@ SANITIZE_LDFLAGS := ifeq ($(SANITIZE_MEMORY),1) SANITIZE_OPTS += -fsanitize=memory -fsanitize-memory-track-origins -fno-omit-frame-pointer SANITIZE_LDFLAGS += $(SANITIZE_OPTS) -endif +ifneq ($(findstring $(OS),Linux FreeBSD),) +SANITIZE_LDFLAGS += -Wl,--warn-unresolved-symbols +endif # OS Linux or FreeBSD +endif # SANITIZE_MEMORY=1 ifeq ($(SANITIZE_ADDRESS),1) SANITIZE_OPTS += -fsanitize=address SANITIZE_LDFLAGS += -fsanitize=address @@ -848,7 +851,6 @@ endif # If we are running on powerpc64le or ppc64le, set certain options automatically ifneq (,$(filter $(ARCH), powerpc64le ppc64le)) JCFLAGS += -fsigned-char -OPENBLAS_DYNAMIC_ARCH:=0 OPENBLAS_TARGET_ARCH:=POWER8 BINARY:=64 # GCC doesn't do -march= on ppc64le @@ -1036,6 +1038,10 @@ PATCHELF := patchelf else PATCHELF := $(build_depsbindir)/patchelf endif +# In the standard build system we want to patch files with `--set-rpath`, but downstream +# packagers like Spack may want to use `--add-rpath` instead, leave them the possibility to +# choose the command. +PATCHELF_SET_RPATH_ARG := --set-rpath ifeq ($(USE_SYSTEM_LIBWHICH), 1) LIBWHICH := libwhich diff --git a/Makefile b/Makefile index 8010088bd1b17..9c3dd44b704cd 100644 --- a/Makefile +++ b/Makefile @@ -317,6 +317,9 @@ endif # Install `lld` into libexec/ $(INSTALL_M) $(build_depsbindir)/lld$(EXE) $(DESTDIR)$(libexecdir)/ + # Install `dsymutil` into libexec/ + $(INSTALL_M) $(build_depsbindir)/dsymutil$(EXE) $(DESTDIR)$(libexecdir)/ + # Copy public headers cp -R -L $(build_includedir)/julia/* $(DESTDIR)$(includedir)/julia # Copy system image @@ -365,7 +368,7 @@ ifneq ($(DARWIN_FRAMEWORK),1) endif else ifneq (,$(findstring $(OS),Linux FreeBSD)) for j in $(JL_TARGETS) ; do \ - $(PATCHELF) --set-rpath '$$ORIGIN/$(private_libdir_rel):$$ORIGIN/$(libdir_rel)' $(DESTDIR)$(bindir)/$$j; \ + $(PATCHELF) $(PATCHELF_SET_RPATH_ARG) '$$ORIGIN/$(private_libdir_rel):$$ORIGIN/$(libdir_rel)' $(DESTDIR)$(bindir)/$$j; \ done endif @@ -397,17 +400,17 @@ endif endif else ifneq (,$(findstring $(OS),Linux FreeBSD)) ifeq ($(JULIA_BUILD_MODE),release) - $(PATCHELF) --set-rpath '$$ORIGIN:$$ORIGIN/$(reverse_private_libdir_rel)' $(DESTDIR)$(private_libdir)/libjulia-internal.$(SHLIB_EXT) - $(PATCHELF) --set-rpath '$$ORIGIN:$$ORIGIN/$(reverse_private_libdir_rel)' $(DESTDIR)$(private_libdir)/libjulia-codegen.$(SHLIB_EXT) + $(PATCHELF) $(PATCHELF_SET_RPATH_ARG) '$$ORIGIN:$$ORIGIN/$(reverse_private_libdir_rel)' $(DESTDIR)$(private_libdir)/libjulia-internal.$(SHLIB_EXT) + $(PATCHELF) $(PATCHELF_SET_RPATH_ARG) '$$ORIGIN:$$ORIGIN/$(reverse_private_libdir_rel)' $(DESTDIR)$(private_libdir)/libjulia-codegen.$(SHLIB_EXT) else ifeq ($(JULIA_BUILD_MODE),debug) - $(PATCHELF) --set-rpath '$$ORIGIN:$$ORIGIN/$(reverse_private_libdir_rel)' $(DESTDIR)$(private_libdir)/libjulia-internal-debug.$(SHLIB_EXT) - $(PATCHELF) --set-rpath '$$ORIGIN:$$ORIGIN/$(reverse_private_libdir_rel)' $(DESTDIR)$(private_libdir)/libjulia-codegen-debug.$(SHLIB_EXT) + $(PATCHELF) $(PATCHELF_SET_RPATH_ARG) '$$ORIGIN:$$ORIGIN/$(reverse_private_libdir_rel)' $(DESTDIR)$(private_libdir)/libjulia-internal-debug.$(SHLIB_EXT) + $(PATCHELF) $(PATCHELF_SET_RPATH_ARG) '$$ORIGIN:$$ORIGIN/$(reverse_private_libdir_rel)' $(DESTDIR)$(private_libdir)/libjulia-codegen-debug.$(SHLIB_EXT) endif endif # Fix rpaths for dependencies. This should be fixed in BinaryBuilder later. ifeq ($(OS), Linux) - -$(PATCHELF) --set-rpath '$$ORIGIN' $(DESTDIR)$(private_shlibdir)/libLLVM.$(SHLIB_EXT) + -$(PATCHELF) $(PATCHELF_SET_RPATH_ARG) '$$ORIGIN' $(DESTDIR)$(private_shlibdir)/libLLVM.$(SHLIB_EXT) endif ifneq ($(LOADER_BUILD_DEP_LIBS),$(LOADER_INSTALL_DEP_LIBS)) @@ -437,7 +440,7 @@ ifeq ($(OS),FreeBSD) # don't set libgfortran's RPATH, it won't be able to find its friends on systems # that don't have the exact GCC port installed used for the build. for lib in $(DESTDIR)$(private_libdir)/libgfortran*$(SHLIB_EXT)*; do \ - $(PATCHELF) --set-rpath '$$ORIGIN' $$lib; \ + $(PATCHELF) $(PATCHELF_SET_RPATH_ARG) '$$ORIGIN' $$lib; \ done endif diff --git a/NEWS.md b/NEWS.md index a4840f77483c1..01360b37ef2c2 100644 --- a/NEWS.md +++ b/NEWS.md @@ -141,6 +141,7 @@ Standard library changes the keybinding Alt-m ([#33872]). * An "IPython mode" which mimics the behaviour of the prompts and storing the evaluated result in `Out` can be activated with `REPL.ipython_mode!()`. See the manual for how to enable this at startup ([#46474]). +* Tab completion displays available keyword arguments ([#43536]) #### SuiteSparse diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 554ba191d4449..1ee84f50edf2f 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -53,7 +53,7 @@ end function abstract_call_gf_by_type(interp::AbstractInterpreter, @nospecialize(f), arginfo::ArgInfo, si::StmtInfo, @nospecialize(atype), sv::InferenceState, max_methods::Int) - ⊑ᵢ = ⊑(typeinf_lattice(interp)) + ⊑ₚ = ⊑(ipo_lattice(interp)) if !should_infer_this_call(sv) add_remark!(interp, sv, "Skipped call in throw block") nonoverlayed = false @@ -111,10 +111,9 @@ function abstract_call_gf_by_type(interp::AbstractInterpreter, @nospecialize(f), match = applicable[i]::MethodMatch method = match.method sig = match.spec_types - if bail_out_toplevel_call(interp, sig, sv) + if bail_out_toplevel_call(interp, InferenceLoopState(sig, rettype, all_effects), sv) # only infer concrete call sites in top-level expressions add_remark!(interp, sv, "Refusing to infer non-concrete call site in top-level expression") - rettype = Any break end this_rt = Bottom @@ -133,7 +132,7 @@ function abstract_call_gf_by_type(interp::AbstractInterpreter, @nospecialize(f), result, f, this_arginfo, si, match, sv) const_result = nothing if const_call_result !== nothing - if const_call_result.rt ⊑ᵢ rt + if const_call_result.rt ⊑ₚ rt rt = const_call_result.rt (; effects, const_result, edge) = const_call_result end @@ -166,7 +165,7 @@ function abstract_call_gf_by_type(interp::AbstractInterpreter, @nospecialize(f), this_const_rt = widenwrappedconditional(const_call_result.rt) # return type of const-prop' inference can be wider than that of non const-prop' inference # e.g. in cases when there are cycles but cached result is still accurate - if this_const_rt ⊑ᵢ this_rt + if this_const_rt ⊑ₚ this_rt this_conditional = this_const_conditional this_rt = this_const_rt (; effects, const_result, edge) = const_call_result @@ -191,7 +190,8 @@ function abstract_call_gf_by_type(interp::AbstractInterpreter, @nospecialize(f), conditionals[2][i] = tmerge(conditionals[2][i], cnd.elsetype) end end - if bail_out_call(interp, rettype, sv) + if bail_out_call(interp, InferenceLoopState(sig, rettype, all_effects), sv) + add_remark!(interp, sv, "Call inference reached maximally imprecise information. Bailing on.") break end end @@ -201,10 +201,10 @@ function abstract_call_gf_by_type(interp::AbstractInterpreter, @nospecialize(f), info = ConstCallInfo(info, const_results) end - if seen != napplicable - # there may be unanalyzed effects within unseen dispatch candidate, - # but we can still ignore nonoverlayed effect here since we already accounted for it - all_effects = merge_effects(all_effects, EFFECTS_UNKNOWN) + if seen ≠ napplicable + # there is unanalyzed candidate, widen type and effects to the top + rettype = Any + all_effects = Effects() elseif isa(matches, MethodMatches) ? (!matches.fullmatch || any_ambig(matches)) : (!all(matches.fullmatches) || any_ambig(matches)) # Account for the fact that we may encounter a MethodError with a non-covered or ambiguous signature. @@ -1529,7 +1529,9 @@ function abstract_apply(interp::AbstractInterpreter, argtypes::Vector{Any}, si:: end retinfos = ApplyCallInfo[] retinfo = UnionSplitApplyCallInfo(retinfos) - for i = 1:length(ctypes) + napplicable = length(ctypes) + seen = 0 + for i = 1:napplicable ct = ctypes[i] arginfo = infos[i] lct = length(ct) @@ -1543,17 +1545,21 @@ function abstract_apply(interp::AbstractInterpreter, argtypes::Vector{Any}, si:: end end call = abstract_call(interp, ArgInfo(nothing, ct), si, sv, max_methods) + seen += 1 push!(retinfos, ApplyCallInfo(call.info, arginfo)) res = tmerge(res, call.rt) effects = merge_effects(effects, call.effects) - if bail_out_apply(interp, res, sv) - if i != length(ctypes) - # No point carrying forward the info, we're not gonna inline it anyway - retinfo = NoCallInfo() - end + if bail_out_apply(interp, InferenceLoopState(ct, res, effects), sv) + add_remark!(interp, sv, "_apply_iterate inference reached maximally imprecise information. Bailing on.") break end end + if seen ≠ napplicable + # there is unanalyzed candidate, widen type and effects to the top + res = Any + effects = Effects() + retinfo = NoCallInfo() # NOTE this is necessary to prevent the inlining processing + end # TODO: Add a special info type to capture all the iteration info. # For now, only propagate info if we don't also union-split the iteration return CallMeta(res, effects, retinfo) @@ -1837,6 +1843,14 @@ function abstract_call_known(interp::AbstractInterpreter, @nospecialize(f), end rt = abstract_call_builtin(interp, f, arginfo, sv, max_methods) effects = builtin_effects(typeinf_lattice(interp), f, argtypes[2:end], rt) + if f === getfield && (fargs !== nothing && isexpr(fargs[end], :boundscheck)) && !is_nothrow(effects) && isa(sv, InferenceState) + # As a special case, we delayed tainting `noinbounds` for getfield calls in case we can prove + # in-boundedness indepedently. Here we need to put that back in other cases. + # N.B.: This isn't about the effects of the call itself, but a delayed contribution of the :boundscheck + # statement, so we need to merge this directly into sv, rather than modifying thte effects. + merge_effects!(interp, sv, Effects(EFFECTS_TOTAL; noinbounds=false, + consistent = (get_curr_ssaflag(sv) & IR_FLAG_INBOUNDS) != 0 ? ALWAYS_FALSE : ALWAYS_TRUE)) + end return CallMeta(rt, effects, NoCallInfo()) elseif isa(f, Core.OpaqueClosure) # calling an OpaqueClosure about which we have no information returns no information @@ -2040,11 +2054,28 @@ function abstract_eval_value_expr(interp::AbstractInterpreter, e::Expr, vtypes:: head = e.head if head === :static_parameter n = e.args[1]::Int + nothrow = false if 1 <= n <= length(sv.sptypes) rt = sv.sptypes[n] + if is_maybeundefsp(rt) + rt = unwrap_maybeundefsp(rt) + else + nothrow = true + end end + merge_effects!(interp, sv, Effects(EFFECTS_TOTAL; nothrow)) + return rt elseif head === :boundscheck if isa(sv, InferenceState) + stmt = sv.src.code[sv.currpc] + if isexpr(stmt, :call) + f = abstract_eval_value(interp, stmt.args[1], vtypes, sv) + if f isa Const && f.val === getfield + # boundscheck of `getfield` call is analyzed by tfunc potentially without + # tainting :inbounds or :consistent when it's known to be nothrow + @goto delay_effects_analysis + end + end # If there is no particular `@inbounds` for this function, then we only taint `:noinbounds`, # which will subsequently taint `:consistent`-cy if this function is called from another # function that uses `@inbounds`. However, if this `:boundscheck` is itself within an @@ -2053,6 +2084,7 @@ function abstract_eval_value_expr(interp::AbstractInterpreter, e::Expr, vtypes:: merge_effects!(interp, sv, Effects(EFFECTS_TOTAL; noinbounds=false, consistent = (get_curr_ssaflag(sv) & IR_FLAG_INBOUNDS) != 0 ? ALWAYS_FALSE : ALWAYS_TRUE)) end + @label delay_effects_analysis rt = Bool elseif head === :inbounds @assert false && "Expected this to have been moved into flags" @@ -2277,8 +2309,7 @@ function abstract_eval_statement_expr(interp::AbstractInterpreter, e::Expr, vtyp elseif isexpr(sym, :static_parameter) n = sym.args[1]::Int if 1 <= n <= length(sv.sptypes) - spty = sv.sptypes[n] - if isa(spty, Const) + if !is_maybeundefsp(sv.sptypes, n) t = Const(true) end end @@ -2422,19 +2453,52 @@ function abstract_eval_ssavalue(s::SSAValue, ssavaluetypes::Vector{Any}) return typ end -function widenreturn(ipo_lattice::AbstractLattice, @nospecialize(rt), @nospecialize(bestguess), nargs::Int, slottypes::Vector{Any}, changes::VarTable) - ⊑ₚ = ⊑(ipo_lattice) - inner_lattice = widenlattice(ipo_lattice) - ⊑ᵢ = ⊑(inner_lattice) - if !(bestguess ⊑ₚ Bool) || bestguess === Bool +struct BestguessInfo{Interp<:AbstractInterpreter} + interp::Interp + bestguess + nargs::Int + slottypes::Vector{Any} + changes::VarTable + function BestguessInfo(interp::Interp, @nospecialize(bestguess), nargs::Int, + slottypes::Vector{Any}, changes::VarTable) where Interp<:AbstractInterpreter + new{Interp}(interp, bestguess, nargs, slottypes, changes) + end +end + +""" + widenreturn(@nospecialize(rt), info::BestguessInfo) -> new_bestguess + +Appropriately converts inferred type of a return value `rt` to such a type +that we know we can store in the cache and is valid and good inter-procedurally, +E.g. if `rt isa Conditional` then `rt` should be converted to `InterConditional` +or the other cachable lattice element. + +External lattice `𝕃ₑ::ExternalLattice` may overload: +- `widenreturn(𝕃ₑ::ExternalLattice, @nospecialize(rt), info::BestguessInfo)` +- `widenreturn_noslotwrapper(𝕃ₑ::ExternalLattice, @nospecialize(rt), info::BestguessInfo)` +""" +function widenreturn(@nospecialize(rt), info::BestguessInfo) + return widenreturn(typeinf_lattice(info.interp), rt, info) +end + +function widenreturn(𝕃ᵢ::AbstractLattice, @nospecialize(rt), info::BestguessInfo) + return widenreturn(widenlattice(𝕃ᵢ), rt, info) +end +function widenreturn_noslotwrapper(𝕃ᵢ::AbstractLattice, @nospecialize(rt), info::BestguessInfo) + return widenreturn_noslotwrapper(widenlattice(𝕃ᵢ), rt, info) +end + +function widenreturn(𝕃ᵢ::ConditionalsLattice, @nospecialize(rt), info::BestguessInfo) + ⊑ᵢ = ⊑(𝕃ᵢ) + if !(⊑(ipo_lattice(info.interp), info.bestguess, Bool)) || info.bestguess === Bool # give up inter-procedural constraint back-propagation # when tmerge would widen the result anyways (as an optimization) rt = widenconditional(rt) else if isa(rt, Conditional) id = rt.slot - if 1 ≤ id ≤ nargs - old_id_type = widenconditional(slottypes[id]) # same as `(states[1]::VarTable)[id].typ` + if 1 ≤ id ≤ info.nargs + old_id_type = widenconditional(info.slottypes[id]) # same as `(states[1]::VarTable)[id].typ` if (!(rt.thentype ⊑ᵢ old_id_type) || old_id_type ⊑ᵢ rt.thentype) && (!(rt.elsetype ⊑ᵢ old_id_type) || old_id_type ⊑ᵢ rt.elsetype) # discard this `Conditional` since it imposes @@ -2451,44 +2515,69 @@ function widenreturn(ipo_lattice::AbstractLattice, @nospecialize(rt), @nospecial end if isa(rt, Conditional) rt = InterConditional(rt.slot, rt.thentype, rt.elsetype) - elseif is_lattice_bool(ipo_lattice, rt) - if isa(bestguess, InterConditional) - # if the bestguess so far is already `Conditional`, try to convert - # this `rt` into `Conditional` on the slot to avoid overapproximation - # due to conflict of different slots - rt = bool_rt_to_conditional(rt, slottypes, changes, bestguess.slot) - else - # pick up the first "interesting" slot, convert `rt` to its `Conditional` - # TODO: ideally we want `Conditional` and `InterConditional` to convey - # constraints on multiple slots - for slot_id in 1:nargs - rt = bool_rt_to_conditional(rt, slottypes, changes, slot_id) - rt isa InterConditional && break - end - end + elseif is_lattice_bool(𝕃ᵢ, rt) + rt = bool_rt_to_conditional(rt, info) end end - - # only propagate information we know we can store - # and is valid and good inter-procedurally isa(rt, Conditional) && return InterConditional(rt) isa(rt, InterConditional) && return rt - return widenreturn_noconditional(widenlattice(ipo_lattice), rt) + return widenreturn(widenlattice(𝕃ᵢ), rt, info) +end +function bool_rt_to_conditional(@nospecialize(rt), info::BestguessInfo) + bestguess = info.bestguess + if isa(bestguess, InterConditional) + # if the bestguess so far is already `Conditional`, try to convert + # this `rt` into `Conditional` on the slot to avoid overapproximation + # due to conflict of different slots + rt = bool_rt_to_conditional(rt, bestguess.slot, info) + else + # pick up the first "interesting" slot, convert `rt` to its `Conditional` + # TODO: ideally we want `Conditional` and `InterConditional` to convey + # constraints on multiple slots + for slot_id = 1:info.nargs + rt = bool_rt_to_conditional(rt, slot_id, info) + rt isa InterConditional && break + end + end + return rt +end +function bool_rt_to_conditional(@nospecialize(rt), slot_id::Int, info::BestguessInfo) + ⊑ᵢ = ⊑(typeinf_lattice(info.interp)) + old = info.slottypes[slot_id] + new = widenconditional(info.changes[slot_id].typ) # avoid nested conditional + if new ⊑ᵢ old && !(old ⊑ᵢ new) + if isa(rt, Const) + val = rt.val + if val === true + return InterConditional(slot_id, new, Bottom) + elseif val === false + return InterConditional(slot_id, Bottom, new) + end + elseif rt === Bool + return InterConditional(slot_id, new, new) + end + end + return rt end -function widenreturn_noconditional(inner_lattice::AbstractLattice, @nospecialize(rt)) - isa(rt, Const) && return rt - isa(rt, Type) && return rt +function widenreturn(𝕃ᵢ::PartialsLattice, @nospecialize(rt), info::BestguessInfo) + return widenreturn_partials(𝕃ᵢ, rt, info) +end +function widenreturn_noslotwrapper(𝕃ᵢ::PartialsLattice, @nospecialize(rt), info::BestguessInfo) + return widenreturn_partials(𝕃ᵢ, rt, info) +end +function widenreturn_partials(𝕃ᵢ::PartialsLattice, @nospecialize(rt), info::BestguessInfo) if isa(rt, PartialStruct) fields = copy(rt.fields) local anyrefine = false + 𝕃 = typeinf_lattice(info.interp) for i in 1:length(fields) a = fields[i] - a = isvarargtype(a) ? a : widenreturn_noconditional(inner_lattice, a) + a = isvarargtype(a) ? a : widenreturn_noslotwrapper(𝕃, a, info) if !anyrefine # TODO: consider adding && const_prop_profitable(a) here? anyrefine = has_const_info(a) || - ⊏(inner_lattice, a, fieldtype(rt.typ, i)) + ⊏(𝕃, a, fieldtype(rt.typ, i)) end fields[i] = a end @@ -2497,6 +2586,24 @@ function widenreturn_noconditional(inner_lattice::AbstractLattice, @nospecialize if isa(rt, PartialOpaque) return rt # XXX: this case was missed in #39512 end + return widenreturn(widenlattice(𝕃ᵢ), rt, info) +end + +function widenreturn(::ConstsLattice, @nospecialize(rt), ::BestguessInfo) + return widenreturn_consts(rt) +end +function widenreturn_noslotwrapper(::ConstsLattice, @nospecialize(rt), ::BestguessInfo) + return widenreturn_consts(rt) +end +function widenreturn_consts(@nospecialize(rt)) + isa(rt, Const) && return rt + return widenconst(rt) +end + +function widenreturn(::JLTypeLattice, @nospecialize(rt), ::BestguessInfo) + return widenconst(rt) +end +function widenreturn_noslotwrapper(::JLTypeLattice, @nospecialize(rt), ::BestguessInfo) return widenconst(rt) end @@ -2560,7 +2667,7 @@ end end end -function update_bbstate!(lattice::AbstractLattice, frame::InferenceState, bb::Int, vartable::VarTable) +function update_bbstate!(𝕃ᵢ::AbstractLattice, frame::InferenceState, bb::Int, vartable::VarTable) bbtable = frame.bb_vartables[bb] if bbtable === nothing # if a basic block hasn't been analyzed yet, @@ -2568,7 +2675,7 @@ function update_bbstate!(lattice::AbstractLattice, frame::InferenceState, bb::In frame.bb_vartables[bb] = copy(vartable) return true else - return stupdate!(lattice, bbtable, vartable) + return stupdate!(𝕃ᵢ, bbtable, vartable) end end @@ -2585,11 +2692,12 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) @assert !frame.inferred frame.dont_work_on_me = true # mark that this function is currently on the stack W = frame.ip - nargs = narguments(frame) + nargs = narguments(frame, #=include_va=#false) slottypes = frame.slottypes ssavaluetypes = frame.ssavaluetypes bbs = frame.cfg.blocks nbbs = length(bbs) + 𝕃ₚ, 𝕃ᵢ = ipo_lattice(interp), typeinf_lattice(interp) currbb = frame.currbb if currbb != 1 @@ -2625,6 +2733,7 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) empty!(frame.pclimitations) @goto find_next_bb end + orig_condt = condt if !(isa(condt, Const) || isa(condt, Conditional)) && isa(condx, SlotNumber) # if this non-`Conditional` object is a slot, we form and propagate # the conditional constraint on it @@ -2656,22 +2765,30 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) handle_control_backedge!(interp, frame, currpc, stmt.dest) @goto branch else + if !⊑(𝕃ᵢ, orig_condt, Bool) + merge_effects!(interp, frame, EFFECTS_THROWS) + if !hasintersect(widenconst(orig_condt), Bool) + ssavaluetypes[currpc] = Bottom + @goto find_next_bb + end + end + # We continue with the true branch, but process the false # branch here. if isa(condt, Conditional) - else_change = conditional_change(currstate, condt.elsetype, condt.slot) + else_change = conditional_change(𝕃ᵢ, currstate, condt.elsetype, condt.slot) if else_change !== nothing false_vartable = stoverwrite1!(copy(currstate), else_change) else false_vartable = currstate end - changed = update_bbstate!(typeinf_lattice(interp), frame, falsebb, false_vartable) - then_change = conditional_change(currstate, condt.thentype, condt.slot) + changed = update_bbstate!(𝕃ᵢ, frame, falsebb, false_vartable) + then_change = conditional_change(𝕃ᵢ, currstate, condt.thentype, condt.slot) if then_change !== nothing stoverwrite1!(currstate, then_change) end else - changed = update_bbstate!(typeinf_lattice(interp), frame, falsebb, currstate) + changed = update_bbstate!(𝕃ᵢ, frame, falsebb, currstate) end if changed handle_control_backedge!(interp, frame, currpc, stmt.dest) @@ -2683,7 +2800,7 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) elseif isa(stmt, ReturnNode) bestguess = frame.bestguess rt = abstract_eval_value(interp, stmt.val, currstate, frame) - rt = widenreturn(ipo_lattice(interp), rt, bestguess, nargs, slottypes, currstate) + rt = widenreturn(rt, BestguessInfo(interp, bestguess, nargs, slottypes, currstate)) # narrow representation of bestguess slightly to prepare for tmerge with rt if rt isa InterConditional && bestguess isa Const let slot_id = rt.slot @@ -2703,9 +2820,9 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) if !isempty(frame.limitations) rt = LimitedAccuracy(rt, copy(frame.limitations)) end - if tchanged(ipo_lattice(interp), rt, bestguess) + if tchanged(𝕃ₚ, rt, bestguess) # new (wider) return type for frame - bestguess = tmerge(ipo_lattice(interp), bestguess, rt) + bestguess = tmerge(𝕃ₚ, bestguess, rt) # TODO: if bestguess isa InterConditional && !interesting(bestguess); bestguess = widenconditional(bestguess); end frame.bestguess = bestguess for (caller, caller_pc) in frame.cycle_backedges @@ -2721,7 +2838,7 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) # Propagate entry info to exception handler l = stmt.args[1]::Int catchbb = block_for_inst(frame.cfg, l) - if update_bbstate!(typeinf_lattice(interp), frame, catchbb, currstate) + if update_bbstate!(𝕃ᵢ, frame, catchbb, currstate) push!(W, catchbb) end ssavaluetypes[currpc] = Any @@ -2746,7 +2863,7 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) # propagate new type info to exception handler # the handling for Expr(:enter) propagates all changes from before the try/catch # so this only needs to propagate any changes - if stupdate1!(typeinf_lattice(interp), states[exceptbb]::VarTable, changes) + if stupdate1!(𝕃ᵢ, states[exceptbb]::VarTable, changes) push!(W, exceptbb) end cur_hand = frame.handler_at[cur_hand] @@ -2758,7 +2875,7 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) continue end if !isempty(frame.ssavalue_uses[currpc]) - record_ssa_assign!(currpc, type, frame) + record_ssa_assign!(𝕃ᵢ, currpc, type, frame) else ssavaluetypes[currpc] = type end @@ -2771,7 +2888,7 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) # Case 2: Directly branch to a different BB begin @label branch - if update_bbstate!(typeinf_lattice(interp), frame, nextbb, currstate) + if update_bbstate!(𝕃ᵢ, frame, nextbb, currstate) push!(W, nextbb) end end @@ -2795,13 +2912,13 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) nothing end -function conditional_change(state::VarTable, @nospecialize(typ), slot::Int) +function conditional_change(𝕃ᵢ::AbstractLattice, state::VarTable, @nospecialize(typ), slot::Int) vtype = state[slot] oldtyp = vtype.typ if iskindtype(typ) # this code path corresponds to the special handling for `isa(x, iskindtype)` check # implemented within `abstract_call_builtin` - elseif ignorelimited(typ) ⊑ ignorelimited(oldtyp) + elseif ⊑(𝕃ᵢ, ignorelimited(typ), ignorelimited(oldtyp)) # approximate test for `typ ∩ oldtyp` being better than `oldtyp` # since we probably formed these types with `typesubstract`, # the comparison is likely simple @@ -2811,29 +2928,11 @@ function conditional_change(state::VarTable, @nospecialize(typ), slot::Int) if oldtyp isa LimitedAccuracy # typ is better unlimited, but we may still need to compute the tmeet with the limit # "causes" since we ignored those in the comparison - typ = tmerge(typ, LimitedAccuracy(Bottom, oldtyp.causes)) + typ = tmerge(𝕃ᵢ, typ, LimitedAccuracy(Bottom, oldtyp.causes)) end return StateUpdate(SlotNumber(slot), VarState(typ, vtype.undef), state, true) end -function bool_rt_to_conditional(@nospecialize(rt), slottypes::Vector{Any}, state::VarTable, slot_id::Int) - old = slottypes[slot_id] - new = widenconditional(state[slot_id].typ) # avoid nested conditional - if new ⊑ old && !(old ⊑ new) - if isa(rt, Const) - val = rt.val - if val === true - return InterConditional(slot_id, new, Bottom) - elseif val === false - return InterConditional(slot_id, Bottom, new) - end - elseif rt === Bool - return InterConditional(slot_id, new, new) - end - end - return rt -end - # make as much progress on `frame` as possible (by handling cycles) function typeinf_nocycle(interp::AbstractInterpreter, frame::InferenceState) typeinf_local(interp, frame) diff --git a/base/compiler/inferencestate.jl b/base/compiler/inferencestate.jl index 9145abd769cee..ca2e1acc2ee94 100644 --- a/base/compiler/inferencestate.jl +++ b/base/compiler/inferencestate.jl @@ -221,14 +221,23 @@ is_effect_overridden(override::EffectsOverride, effect::Symbol) = getfield(overr add_remark!(::AbstractInterpreter, sv::Union{InferenceState, IRCode}, remark) = return -function bail_out_toplevel_call(::AbstractInterpreter, @nospecialize(callsig), sv::Union{InferenceState, IRCode}) - return isa(sv, InferenceState) && sv.restrict_abstract_call_sites && !isdispatchtuple(callsig) +struct InferenceLoopState + sig + rt + effects::Effects + function InferenceLoopState(@nospecialize(sig), @nospecialize(rt), effects::Effects) + new(sig, rt, effects) + end +end + +function bail_out_toplevel_call(::AbstractInterpreter, state::InferenceLoopState, sv::Union{InferenceState, IRCode}) + return isa(sv, InferenceState) && sv.restrict_abstract_call_sites && !isdispatchtuple(state.sig) end -function bail_out_call(::AbstractInterpreter, @nospecialize(rt), sv::Union{InferenceState, IRCode}) - return rt === Any +function bail_out_call(::AbstractInterpreter, state::InferenceLoopState, sv::Union{InferenceState, IRCode}) + return state.rt === Any end -function bail_out_apply(::AbstractInterpreter, @nospecialize(rt), sv::Union{InferenceState, IRCode}) - return rt === Any +function bail_out_apply(::AbstractInterpreter, state::InferenceLoopState, sv::Union{InferenceState, IRCode}) + return state.rt === Any end was_reached(sv::InferenceState, pc::Int) = sv.ssavaluetypes[pc] !== NOT_FOUND @@ -348,15 +357,100 @@ function InferenceState(result::InferenceResult, cache::Symbol, interp::Abstract return InferenceState(result, src, cache, interp) end +""" + constrains_param(var::TypeVar, sig, covariant::Bool, type_constrains::Bool) + +Check if `var` will be constrained to have a definite value +in any concrete leaftype subtype of `sig`. + +It is used as a helper to determine whether type intersection is guaranteed to be able to +find a value for a particular type parameter. +A necessary condition for type intersection to not assign a parameter is that it only +appears in a `Union[All]` and during subtyping some other union component (that does not +constrain the type parameter) is selected. + +The `type_constrains` flag determines whether Type{T} is considered to be constraining +`T`. This is not true in general, because of the existence of types with free type +parameters, however, some callers would like to ignore this corner case. +""" +function constrains_param(var::TypeVar, @nospecialize(typ), covariant::Bool, type_constrains::Bool=false) + typ === var && return true + while typ isa UnionAll + covariant && constrains_param(var, typ.var.ub, covariant, type_constrains) && return true + # typ.var.lb doesn't constrain var + typ = typ.body + end + if typ isa Union + # for unions, verify that both options would constrain var + ba = constrains_param(var, typ.a, covariant, type_constrains) + bb = constrains_param(var, typ.b, covariant, type_constrains) + (ba && bb) && return true + elseif typ isa DataType + # return true if any param constrains var + fc = length(typ.parameters) + if fc > 0 + if typ.name === Tuple.name + # vararg tuple needs special handling + for i in 1:(fc - 1) + p = typ.parameters[i] + constrains_param(var, p, covariant, type_constrains) && return true + end + lastp = typ.parameters[fc] + vararg = unwrap_unionall(lastp) + if vararg isa Core.TypeofVararg && isdefined(vararg, :N) + constrains_param(var, vararg.N, covariant, type_constrains) && return true + # T = vararg.parameters[1] doesn't constrain var + else + constrains_param(var, lastp, covariant, type_constrains) && return true + end + else + if typ.name === typename(Type) && typ.parameters[1] === var && var.ub === Any + # Types with free type parameters are <: Type cause the typevar + # to be unconstrained because Type{T} with free typevars is illegal + return type_constrains + end + for i in 1:fc + p = typ.parameters[i] + constrains_param(var, p, false, type_constrains) && return true + end + end + end + end + return false +end + +""" + MaybeUndefSP(typ) + is_maybeundefsp(typ) -> Bool + unwrap_maybeundefsp(typ) -> Any + +A special wrapper that represents a static parameter that could be undefined at runtime. +This does not participate in the native type system nor the inference lattice, +and it thus should be always unwrapped when performing any type or lattice operations on it. +""" +struct MaybeUndefSP + typ + MaybeUndefSP(@nospecialize typ) = new(typ) +end +is_maybeundefsp(@nospecialize typ) = isa(typ, MaybeUndefSP) +unwrap_maybeundefsp(@nospecialize typ) = isa(typ, MaybeUndefSP) ? typ.typ : typ +is_maybeundefsp(sptypes::Vector{Any}, idx::Int) = is_maybeundefsp(sptypes[idx]) +unwrap_maybeundefsp(sptypes::Vector{Any}, idx::Int) = unwrap_maybeundefsp(sptypes[idx]) + +const EMPTY_SPTYPES = Any[] + function sptypes_from_meth_instance(linfo::MethodInstance) - toplevel = !isa(linfo.def, Method) - if !toplevel && isempty(linfo.sparam_vals) && isa(linfo.def.sig, UnionAll) + def = linfo.def + isa(def, Method) || return EMPTY_SPTYPES # toplevel + sig = def.sig + if isempty(linfo.sparam_vals) + isa(sig, UnionAll) || return EMPTY_SPTYPES # linfo is unspecialized sp = Any[] - sig = linfo.def.sig - while isa(sig, UnionAll) - push!(sp, sig.var) - sig = sig.body + sig′ = sig + while isa(sig′, UnionAll) + push!(sp, sig′.var) + sig′ = sig′.body end else sp = collect(Any, linfo.sparam_vals) @@ -365,9 +459,7 @@ function sptypes_from_meth_instance(linfo::MethodInstance) v = sp[i] if v isa TypeVar fromArg = 0 - # if this parameter came from arg::Type{T}, then `arg` is more precise than - # Type{T} where lb<:T<:ub - sig = linfo.def.sig + maybe_undef = !constrains_param(v, linfo.specTypes, #=covariant=#true) temp = sig for j = 1:i-1 temp = temp.body @@ -408,6 +500,8 @@ function sptypes_from_meth_instance(linfo::MethodInstance) ty = UnionAll(tv, Type{tv}) end end + @label ty_computed + maybe_undef && (ty = MaybeUndefSP(ty)) elseif isvarargtype(v) ty = Int else @@ -429,14 +523,14 @@ end update_valid_age!(edge::InferenceState, sv::InferenceState) = update_valid_age!(sv, edge.valid_worlds) -function record_ssa_assign!(ssa_id::Int, @nospecialize(new), frame::InferenceState) +function record_ssa_assign!(𝕃ᵢ::AbstractLattice, ssa_id::Int, @nospecialize(new), frame::InferenceState) ssavaluetypes = frame.ssavaluetypes old = ssavaluetypes[ssa_id] - if old === NOT_FOUND || !(new ⊑ old) + if old === NOT_FOUND || !⊑(𝕃ᵢ, new, old) # typically, we expect that old ⊑ new (that output information only # gets less precise with worse input information), but to actually # guarantee convergence we need to use tmerge here to ensure that is true - ssavaluetypes[ssa_id] = old === NOT_FOUND ? new : tmerge(old, new) + ssavaluetypes[ssa_id] = old === NOT_FOUND ? new : tmerge(𝕃ᵢ, old, new) W = frame.ip for r in frame.ssavalue_uses[ssa_id] if was_reached(frame, r) @@ -519,9 +613,11 @@ end get_curr_ssaflag(sv::InferenceState) = sv.src.ssaflags[sv.currpc] -function narguments(sv::InferenceState) +function narguments(sv::InferenceState, include_va::Bool=true) def = sv.linfo.def - isva = isa(def, Method) && def.isva - nargs = length(sv.result.argtypes) - isva + nargs = length(sv.result.argtypes) + if !include_va + nargs -= isa(def, Method) && def.isva + end return nargs end diff --git a/base/compiler/optimize.jl b/base/compiler/optimize.jl index 86e35fb3bbd7a..7a5cd261b2102 100644 --- a/base/compiler/optimize.jl +++ b/base/compiler/optimize.jl @@ -235,9 +235,9 @@ function stmt_effect_flags(lattice::AbstractLattice, @nospecialize(stmt), @nospe if isa(stmt, Expr) (; head, args) = stmt if head === :static_parameter - etyp = (isa(src, IRCode) ? src.sptypes : src.ir.sptypes)[args[1]::Int] # if we aren't certain enough about the type, it might be an UndefVarError at runtime - nothrow = isa(etyp, Const) + sptypes = isa(src, IRCode) ? src.sptypes : src.ir.sptypes + nothrow = !is_maybeundefsp(sptypes, args[1]::Int) return (true, nothrow, nothrow) end if head === :call @@ -343,7 +343,7 @@ function argextype( sptypes::Vector{Any}, slottypes::Vector{Any}) if isa(x, Expr) if x.head === :static_parameter - return sptypes[x.args[1]::Int] + return unwrap_maybeundefsp(sptypes, x.args[1]::Int) elseif x.head === :boundscheck return Bool elseif x.head === :copyast diff --git a/base/compiler/ssair/irinterp.jl b/base/compiler/ssair/irinterp.jl index 6bc3dc49f557e..a6a4e52c38963 100644 --- a/base/compiler/ssair/irinterp.jl +++ b/base/compiler/ssair/irinterp.jl @@ -237,7 +237,9 @@ function reprocess_instruction!(interp::AbstractInterpreter, # Handled at the very end return false elseif isa(inst, PiNode) - rt = tmeet(typeinf_lattice(interp), argextype(inst.val, ir), inst.typ) + rt = tmeet(typeinf_lattice(interp), argextype(inst.val, ir), widenconst(inst.typ)) + elseif inst === nothing + return false else ccall(:jl_, Cvoid, (Any,), inst) error() diff --git a/base/compiler/ssair/slot2ssa.jl b/base/compiler/ssair/slot2ssa.jl index bdf87f929a31a..30bfae5706b1c 100644 --- a/base/compiler/ssair/slot2ssa.jl +++ b/base/compiler/ssair/slot2ssa.jl @@ -215,7 +215,7 @@ end function typ_for_val(@nospecialize(x), ci::CodeInfo, sptypes::Vector{Any}, idx::Int, slottypes::Vector{Any}) if isa(x, Expr) if x.head === :static_parameter - return sptypes[x.args[1]::Int] + return unwrap_maybeundefsp(sptypes, x.args[1]::Int) elseif x.head === :boundscheck return Bool elseif x.head === :copyast @@ -337,7 +337,9 @@ function iterated_dominance_frontier(cfg::CFG, liveness::BlockLiveness, domtree: end function rename_incoming_edge(old_edge::Int, old_to::Int, result_order::Vector{Int}, bb_rename::Vector{Int}) + old_edge == 0 && return 0 new_edge_from = bb_rename[old_edge] + new_edge_from < 0 && return new_edge_from if old_edge == old_to - 1 # Could have been a crit edge break if new_edge_from < length(result_order) && result_order[new_edge_from + 1] == 0 @@ -363,7 +365,7 @@ function rename_phinode_edges(node::PhiNode, bb::Int, result_order::Vector{Int}, new_edges = Int32[] for (idx, edge) in pairs(node.edges) edge = Int(edge) - (edge == 0 || bb_rename[edge] != 0) || continue + (edge == 0 || bb_rename[edge] != -1) || continue new_edge_from = edge == 0 ? 0 : rename_incoming_edge(edge, bb, result_order, bb_rename) push!(new_edges, new_edge_from) if isassigned(node.values, idx) @@ -386,7 +388,7 @@ function domsort_ssa!(ir::IRCode, domtree::DomTree) # First compute the new order of basic blocks result_order = Int[] stack = Int[] - bb_rename = zeros(Int, length(ir.cfg.blocks)) + bb_rename = fill(-1, length(ir.cfg.blocks)) node = 1 ncritbreaks = 0 nnewfallthroughs = 0 @@ -497,7 +499,7 @@ function domsort_ssa!(ir::IRCode, domtree::DomTree) bb_start_off += length(inst_range) local new_preds, new_succs let bb = bb, bb_rename = bb_rename, result_order = result_order - new_preds = Int[i == 0 ? 0 : rename_incoming_edge(i, bb, result_order, bb_rename) for i in ir.cfg.blocks[bb].preds] + new_preds = Int[bb for bb in (rename_incoming_edge(i, bb, result_order, bb_rename) for i in ir.cfg.blocks[bb].preds) if bb != -1] new_succs = Int[ rename_outgoing_edge(i, bb, result_order, bb_rename) for i in ir.cfg.blocks[bb].succs] end new_bbs[new_bb] = BasicBlock(inst_range, new_preds, new_succs) diff --git a/base/compiler/ssair/verify.jl b/base/compiler/ssair/verify.jl index 57d60ec2ce980..9c5f126e6a894 100644 --- a/base/compiler/ssair/verify.jl +++ b/base/compiler/ssair/verify.jl @@ -267,7 +267,7 @@ function verify_ir(ir::IRCode, print::Bool=true, allow_frontend_forms::Bool=fals elseif stmt.head === :foreigncall isforeigncall = true elseif stmt.head === :isdefined && length(stmt.args) == 1 && - (stmt.args[1] isa GlobalRef || (stmt.args[1] isa Expr && stmt.args[1].head === :static_parameter)) + (stmt.args[1] isa GlobalRef || isexpr(stmt.args[1], :static_parameter)) # a GlobalRef or static_parameter isdefined check does not evaluate its argument continue elseif stmt.head === :call diff --git a/base/compiler/typeinfer.jl b/base/compiler/typeinfer.jl index 6336059c79960..77e6493f8afa0 100644 --- a/base/compiler/typeinfer.jl +++ b/base/compiler/typeinfer.jl @@ -446,7 +446,7 @@ function adjust_effects(sv::InferenceState) # always throwing an error counts or never returning both count as consistent ipo_effects = Effects(ipo_effects; consistent=ALWAYS_TRUE) end - if is_inaccessiblemem_or_argmemonly(ipo_effects) && all(1:narguments(sv)) do i::Int + if is_inaccessiblemem_or_argmemonly(ipo_effects) && all(1:narguments(sv, #=include_va=#true)) do i::Int return is_mutation_free_argtype(sv.slottypes[i]) end ipo_effects = Effects(ipo_effects; inaccessiblememonly=ALWAYS_TRUE) @@ -553,8 +553,7 @@ function finish(me::InferenceState, interp::AbstractInterpreter) # annotate fulltree with type information, # either because we are the outermost code, or we might use this later doopt = (me.cached || me.parent !== nothing) - changemap = type_annotate!(interp, me, doopt) - recompute_cfg = changemap !== nothing + recompute_cfg = type_annotate!(interp, me, doopt) if doopt && may_optimize(interp) me.result.src = OptimizationState(me, OptimizationParams(interp), interp, recompute_cfg) else @@ -725,6 +724,7 @@ function type_annotate!(interp::AbstractInterpreter, sv::InferenceState, run_opt slotflags = src.slotflags nslots = length(slotflags) undefs = fill(false, nslots) + any_unreachable = false # this statement traversal does five things: # 1. introduce temporary `TypedSlot`s that are supposed to be replaced with π-nodes later @@ -752,13 +752,9 @@ function type_annotate!(interp::AbstractInterpreter, sv::InferenceState, run_opt body[i] = annotate_slot_load!(undefs, i, sv, expr) # 1&2 ssavaluetypes[i] = widenconditional(ssavaluetypes[i]) # 4 else # i.e. any runtime execution will never reach this statement + any_unreachable = true if is_meta_expr(expr) # keep any lexically scoped expressions ssavaluetypes[i] = Any # 4 - elseif run_optimizer - if changemap === nothing - changemap = fill(0, nexpr) - end - changemap[i] = -1 # 3&4: mark for the bulk deletion else ssavaluetypes[i] = Bottom # 4 body[i] = Const(expr) # annotate that this statement actually is dead @@ -773,19 +769,7 @@ function type_annotate!(interp::AbstractInterpreter, sv::InferenceState, run_opt end end - # do the bulk deletion of unreached statements - if changemap !== nothing - inds = Int[i for (i,v) in enumerate(changemap) if v == -1] - deleteat!(body, inds) - deleteat!(ssavaluetypes, inds) - deleteat!(codelocs, inds) - deleteat!(stmt_info, inds) - deleteat!(ssaflags, inds) - renumber_ir_elements!(body, changemap) - return changemap - else - return nothing - end + return any_unreachable end # at the end, all items in b's cycle diff --git a/base/linking.jl b/base/linking.jl index 288279347f1c5..38cbdcd562693 100644 --- a/base/linking.jl +++ b/base/linking.jl @@ -11,6 +11,8 @@ const PATH_list = String[] const LIBPATH_list = String[] const lld_path = Ref{String}() const lld_exe = Sys.iswindows() ? "lld.exe" : "lld" +const dsymutil_path = Ref{String}() +const dsymutil_exe = Sys.iswindows() ? "dsymutil.exe" : "dsymutil" if Sys.iswindows() const LIBPATH_env = "PATH" @@ -60,12 +62,27 @@ function __init_lld_path() return end +function __init_dsymutil_path() + #Same as with lld but for dsymutil + for bundled_dsymutil_path in (joinpath(Sys.BINDIR, Base.LIBEXECDIR, dsymutil_exe), + joinpath(Sys.BINDIR, "..", "tools", dsymutil_exe), + joinpath(Sys.BINDIR, dsymutil_exe)) + if isfile(bundled_dsymutil_path) + dsymutil_path[] = abspath(bundled_dsymutil_path) + return + end + end + dsymutil_path[] = something(Sys.which(dsymutil_exe), dsymutil_exe) + return +end + const VERBOSE = Ref{Bool}(false) function __init__() VERBOSE[] = parse(Bool, get(ENV, "JULIA_VERBOSE_LINKING", "false")) __init_lld_path() + __init_dsymutil_path() PATH[] = dirname(lld_path[]) if Sys.iswindows() # On windows, the dynamic libraries (.dll) are in Sys.BINDIR ("usr\\bin") @@ -82,6 +99,11 @@ function lld(; adjust_PATH::Bool = true, adjust_LIBPATH::Bool = true) return Cmd(Cmd([lld_path[]]); env) end +function dsymutil(; adjust_PATH::Bool = true, adjust_LIBPATH::Bool = true) + env = adjust_ENV!(copy(ENV), PATH[], LIBPATH[], adjust_PATH, adjust_LIBPATH) + return Cmd(Cmd([dsymutil_path[]]); env) +end + function ld() default_args = `` @static if Sys.iswindows() @@ -140,8 +162,8 @@ function link_image_cmd(path, out) `$(ld()) $V $SHARED -o $out $WHOLE_ARCHIVE $path $NO_WHOLE_ARCHIVE $LIBDIR $PRIVATE_LIBDIR $SHLIBDIR $LIBS` end -function link_image(path, out, internal_stderr::IO = stderr, internal_stdout::IO = stdout) - run(link_image_cmd(path, out), Base.DevNull(), stderr, stdout) +function link_image(path, out, internal_stderr::IO=stderr, internal_stdout::IO=stdout) + run(link_image_cmd(path, out), Base.DevNull(), internal_stderr, internal_stdout) end end # module Linking diff --git a/base/loading.jl b/base/loading.jl index 7ab232338a456..edbfb96211917 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -258,7 +258,7 @@ struct LoadingCache require_parsed::Set{String} identified_where::Dict{Tuple{PkgId, String}, Union{Nothing, Tuple{PkgId, Union{Nothing, String}}}} identified::Dict{String, Union{Nothing, Tuple{PkgId, Union{Nothing, String}}}} - located::Dict{Tuple{PkgId, Union{String, Nothing}}, Union{String, Nothing}} + located::Dict{Tuple{PkgId, Union{String, Nothing}}, Union{Tuple{Union{String, Nothing}, Union{String, Nothing}}, Nothing}} end const LOADING_CACHE = Ref{Union{LoadingCache, Nothing}}(nothing) LoadingCache() = LoadingCache(load_path(), Dict(), Dict(), Dict(), Set(), Dict(), Dict(), Dict()) @@ -390,30 +390,17 @@ identify_package(where::Module, name::String) = _nothing_or_first(identify_packa identify_package(where::PkgId, name::String) = _nothing_or_first(identify_package_env(where, name)) identify_package(name::String) = _nothing_or_first(identify_package_env(name)) - -""" - Base.locate_package(pkg::PkgId)::Union{String, Nothing} - -The path to the entry-point file for the package corresponding to the identifier -`pkg`, or `nothing` if not found. See also [`identify_package`](@ref). - -```julia-repl -julia> pkg = Base.identify_package("Pkg") -Pkg [44cfe95a-1eb2-52ea-b672-e2afdf69b78f] - -julia> Base.locate_package(pkg) -"/path/to/julia/stdlib/v$(VERSION.major).$(VERSION.minor)/Pkg/src/Pkg.jl" -``` -""" -function locate_package(pkg::PkgId, stopenv::Union{String, Nothing}=nothing)::Union{Nothing,String} +function locate_package_env(pkg::PkgId, stopenv::Union{String, Nothing}=nothing) cache = LOADING_CACHE[] if cache !== nothing - path = get(cache.located, (pkg, stopenv), nothing) - path === nothing || return path + pathenv = get(cache.located, (pkg, stopenv), nothing) + pathenv === nothing || return pathenv end path = nothing + env′ = nothing if pkg.uuid === nothing for env in load_path() + env′ = env # look for the toplevel pkg `pkg.name` in this entry found = project_deps_get(env, pkg.name) if found !== nothing @@ -430,6 +417,7 @@ function locate_package(pkg::PkgId, stopenv::Union{String, Nothing}=nothing)::Un end else for env in load_path() + env′ = env path = manifest_uuid_path(env, pkg) # missing is used as a sentinel to stop looking further down in envs if path === missing @@ -452,9 +440,27 @@ function locate_package(pkg::PkgId, stopenv::Union{String, Nothing}=nothing)::Un end @label done if cache !== nothing - cache.located[(pkg, stopenv)] = path + cache.located[(pkg, stopenv)] = path, env′ end - return path + return path, env′ +end + +""" + Base.locate_package(pkg::PkgId)::Union{String, Nothing} + +The path to the entry-point file for the package corresponding to the identifier +`pkg`, or `nothing` if not found. See also [`identify_package`](@ref). + +```julia-repl +julia> pkg = Base.identify_package("Pkg") +Pkg [44cfe95a-1eb2-52ea-b672-e2afdf69b78f] + +julia> Base.locate_package(pkg) +"/path/to/julia/stdlib/v$(VERSION.major).$(VERSION.minor)/Pkg/src/Pkg.jl" +``` +""" +function locate_package(pkg::PkgId, stopenv::Union{String, Nothing}=nothing)::Union{Nothing,String} + _nothing_or_first(locate_package_env(pkg, stopenv)) end """ @@ -1020,11 +1026,9 @@ function _include_from_serialized(pkg::PkgId, path::String, ocachepath::Union{No elapsed = round((time_ns() - t_before) / 1e6, digits = 1) comp_time, recomp_time = cumulative_compile_time_ns() .- t_comp_before print(lpad(elapsed, 9), " ms ") - for extid in EXT_DORMITORY - if extid.id == pkg - print(extid.parentid.name, " → ") - break - end + parentid = get(EXT_PRIMED, pkg, nothing) + if parentid !== nothing + print(parentid.name, " → ") end print(pkg.name) if comp_time > 0 @@ -1104,18 +1108,22 @@ mutable struct ExtensionId ntriggers::Int # how many more packages must be defined until this is loaded end -const EXT_DORMITORY = Dict{PkgId,Vector{ExtensionId}}() +const EXT_PRIMED = Dict{PkgId, PkgId}() # Extension -> Parent +const EXT_DORMITORY = Dict{PkgId,Vector{ExtensionId}}() # Trigger -> Extensions that can be triggered by it const EXT_DORMITORY_FAILED = ExtensionId[] function insert_extension_triggers(pkg::PkgId) pkg.uuid === nothing && return - extensions_added = Set{PkgId}() - for env in load_path() - insert_extension_triggers!(extensions_added, env, pkg) + path_env_loc = locate_package_env(pkg) + path_env_loc === nothing && return + path, env_loc = path_env_loc + if path === nothing || env_loc === nothing + return end + insert_extension_triggers(env_loc, pkg) end -function insert_extension_triggers!(extensions_added::Set{PkgId}, env::String, pkg::PkgId)::Union{Nothing,Missing} +function insert_extension_triggers(env::String, pkg::PkgId)::Union{Nothing,Missing} project_file = env_project_file(env) if project_file isa String manifest_file = project_file_manifest_path(project_file) @@ -1133,7 +1141,7 @@ function insert_extension_triggers!(extensions_added::Set{PkgId}, env::String, p extensions === nothing && return weakdeps === nothing && return if weakdeps isa Dict{String, Any} - return _insert_extension_triggers!(extensions_added, pkg, extensions, weakdeps) + return _insert_extension_triggers(pkg, extensions, weakdeps) end d_weakdeps = Dict{String, String}() @@ -1148,7 +1156,7 @@ function insert_extension_triggers!(extensions_added::Set{PkgId}, env::String, p d_weakdeps[dep_name] = uuid end @assert length(d_weakdeps) == length(weakdeps) - return _insert_extension_triggers!(extensions_added, pkg, extensions, d_weakdeps) + return _insert_extension_triggers(pkg, extensions, d_weakdeps) end end end @@ -1156,13 +1164,14 @@ function insert_extension_triggers!(extensions_added::Set{PkgId}, env::String, p return nothing end -function _insert_extension_triggers!(extensions_added::Set{PkgId}, parent::PkgId, extensions::Dict{String, <:Any}, weakdeps::Dict{String, <:Any}) +function _insert_extension_triggers(parent::PkgId, extensions::Dict{String, <:Any}, weakdeps::Dict{String, <:Any}) for (ext::String, triggers::Union{String, Vector{String}}) in extensions triggers isa String && (triggers = [triggers]) id = PkgId(uuid5(parent.uuid, ext), ext) - # Only add triggers for an extension from one env. - id in extensions_added && continue - push!(extensions_added, id) + if id in keys(EXT_PRIMED) || haskey(Base.loaded_modules, id) + continue # extension is already primed or loaded, don't add it again + end + EXT_PRIMED[id] = parent gid = ExtensionId(id, parent, 1 + length(triggers)) trigger1 = get!(Vector{ExtensionId}, EXT_DORMITORY, parent) push!(trigger1, gid) @@ -2044,7 +2053,8 @@ function create_expr_cache(pkg::PkgId, input::String, output::String, output_o:: --color=$(have_color === nothing ? "auto" : have_color ? "yes" : "no") $trace -`, - "OPENBLAS_NUM_THREADS" => 1), + "OPENBLAS_NUM_THREADS" => 1, + "JULIA_NUM_THREADS" => 1), stderr = internal_stderr, stdout = internal_stdout), "w", stdout) # write data over stdin to avoid the (unlikely) case of exceeding max command line size @@ -2193,6 +2203,9 @@ function compilecache(pkg::PkgId, path::String, internal_stderr::IO = stderr, in rm(evicted_cachefile; force=true) try rm(ocachefile_from_cachefile(evicted_cachefile); force=true) + @static if Sys.isapple() + rm(ocachefile_from_cachefile(evicted_cachefile) * ".dSYM"; force=true, recursive=true) + end catch end end @@ -2220,6 +2233,9 @@ function compilecache(pkg::PkgId, path::String, internal_stderr::IO = stderr, in cachefile = cachefile_from_ocachefile(ocachefile) rename(tmppath_so, ocachefile::String; force=true) end + @static if Sys.isapple() + run(`$(Linking.dsymutil()) $ocachefile`, Base.DevNull(), Base.DevNull(), Base.DevNull()) + end end # this is atomic according to POSIX (not Win32): rename(tmppath, cachefile; force=true) @@ -2447,7 +2463,7 @@ end # Test to see if this UUID is mentioned in this `Project.toml`; either as # the top-level UUID (e.g. that of the project itself), as a dependency, -# or as an extra for Preferences. +# or as an extra/weakdep for Preferences. function get_uuid_name(project::Dict{String, Any}, uuid::UUID) uuid_p = get(project, "uuid", nothing)::Union{Nothing, String} name = get(project, "name", nothing)::Union{Nothing, String} @@ -2462,7 +2478,7 @@ function get_uuid_name(project::Dict{String, Any}, uuid::UUID) end end end - for subkey in ("deps", "extras") + for subkey in ("deps", "extras", "weakdeps") subsection = get(project, subkey, nothing)::Union{Nothing, Dict{String, Any}} if subsection !== nothing for (k, v) in subsection diff --git a/base/logging.jl b/base/logging.jl index dd45d05a084af..c2f243bcabf46 100644 --- a/base/logging.jl +++ b/base/logging.jl @@ -445,7 +445,7 @@ function default_group_code(file) QuoteNode(default_group(file)) # precompute if we can else ref = Ref{Symbol}() # memoized run-time execution - :(isassigned($ref) ? $ref[] : $ref[] = default_group(something($file, ""))) + :(isassigned($ref) ? $ref[] : $ref[] = default_group(something($file, ""))::Symbol) end end diff --git a/base/sort.jl b/base/sort.jl index 3d57c7d59ee81..9f37807b1c7cc 100644 --- a/base/sort.jl +++ b/base/sort.jl @@ -519,6 +519,7 @@ Base.@propagate_inbounds function Base.setindex!(v::WithoutMissingVector, x, i) v end Base.size(v::WithoutMissingVector) = size(v.data) +Base.axes(v::WithoutMissingVector) = axes(v.data) """ send_to_end!(f::Function, v::AbstractVector; [lo, hi]) diff --git a/base/util.jl b/base/util.jl index 957e30d774aab..76077a919f944 100644 --- a/base/util.jl +++ b/base/util.jl @@ -137,7 +137,7 @@ See also [`print`](@ref), [`println`](@ref), [`show`](@ref). Return a julia command similar to the one of the running process. Propagates any of the `--cpu-target`, `--sysimage`, `--compile`, `--sysimage-native-code`, -`--compiled-modules`, `--inline`, `--check-bounds`, `--optimize`, `-g`, +`--compiled-modules`, `--pkgimages`, `--inline`, `--check-bounds`, `--optimize`, `-g`, `--code-coverage`, `--track-allocation`, `--color`, `--startup-file`, and `--depwarn` command line arguments that are not at their default values. @@ -151,6 +151,8 @@ Among others, `--math-mode`, `--warn-overwrite`, and `--trace-compile` are notab !!! compat "Julia 1.9" The keyword argument `cpu_target` was added. + + The flag `--pkgimages` was added in Julia 1.9. """ function julia_cmd(julia=joinpath(Sys.BINDIR, julia_exename()); cpu_target::Union{Nothing,String} = nothing) opts = JLOptions() diff --git a/contrib/cache_stdlibs.jl b/contrib/cache_stdlibs.jl index bdcc3d9535fa4..09cf2ba0dcb42 100644 --- a/contrib/cache_stdlibs.jl +++ b/contrib/cache_stdlibs.jl @@ -14,6 +14,7 @@ stdlibs = [ :Zlib_jll, :dSFMT_jll, :libLLVM_jll, + :DelimitedFiles, # 2-depth packages :LibSSH2_jll, diff --git a/deps/checksums/DelimitedFiles-db79c842f95f55b1f8d8037c0d3363ab21cd3b90.tar.gz/md5 b/deps/checksums/DelimitedFiles-db79c842f95f55b1f8d8037c0d3363ab21cd3b90.tar.gz/md5 new file mode 100644 index 0000000000000..9c6e4e44927fe --- /dev/null +++ b/deps/checksums/DelimitedFiles-db79c842f95f55b1f8d8037c0d3363ab21cd3b90.tar.gz/md5 @@ -0,0 +1 @@ +ee5afca99801e37fd3a42a9455ae986b diff --git a/deps/checksums/DelimitedFiles-db79c842f95f55b1f8d8037c0d3363ab21cd3b90.tar.gz/sha512 b/deps/checksums/DelimitedFiles-db79c842f95f55b1f8d8037c0d3363ab21cd3b90.tar.gz/sha512 new file mode 100644 index 0000000000000..69a50a7282781 --- /dev/null +++ b/deps/checksums/DelimitedFiles-db79c842f95f55b1f8d8037c0d3363ab21cd3b90.tar.gz/sha512 @@ -0,0 +1 @@ +2adec92de521df1668eb13f2903ffdb01efd6afa5f04ce6fbd1737caa4948f7b629cdda7f75a895853a0cd49dccf8b388860d5c19c29e4d4aad6c7f8fa6b7209 diff --git a/deps/checksums/Pkg-3ced87de6b48ac8b886f5b26b2a1e8dd764614ae.tar.gz/md5 b/deps/checksums/Pkg-3ced87de6b48ac8b886f5b26b2a1e8dd764614ae.tar.gz/md5 new file mode 100644 index 0000000000000..7b3a24a6a0c8b --- /dev/null +++ b/deps/checksums/Pkg-3ced87de6b48ac8b886f5b26b2a1e8dd764614ae.tar.gz/md5 @@ -0,0 +1 @@ +58075bda169e76716f06c2ad9a0885e6 diff --git a/deps/checksums/Pkg-3ced87de6b48ac8b886f5b26b2a1e8dd764614ae.tar.gz/sha512 b/deps/checksums/Pkg-3ced87de6b48ac8b886f5b26b2a1e8dd764614ae.tar.gz/sha512 new file mode 100644 index 0000000000000..0d82e16d4da30 --- /dev/null +++ b/deps/checksums/Pkg-3ced87de6b48ac8b886f5b26b2a1e8dd764614ae.tar.gz/sha512 @@ -0,0 +1 @@ +071f016efa5bf24599395eee018dc7ebde1f106ac2ef366cd739a5973126f4256a8e0c2b787207ae29467d94284821af0afe48491418c79a0e16f9bd3afe8898 diff --git a/deps/checksums/Pkg-887b06bb9b768bfca0622f112dc739d1a770932c.tar.gz/md5 b/deps/checksums/Pkg-887b06bb9b768bfca0622f112dc739d1a770932c.tar.gz/md5 deleted file mode 100644 index a49b1c1f37011..0000000000000 --- a/deps/checksums/Pkg-887b06bb9b768bfca0622f112dc739d1a770932c.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -f2a882c79d05792efa642a25444337da diff --git a/deps/checksums/Pkg-887b06bb9b768bfca0622f112dc739d1a770932c.tar.gz/sha512 b/deps/checksums/Pkg-887b06bb9b768bfca0622f112dc739d1a770932c.tar.gz/sha512 deleted file mode 100644 index ed4616089416e..0000000000000 --- a/deps/checksums/Pkg-887b06bb9b768bfca0622f112dc739d1a770932c.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -7a0c9b2f5e83e85c5b174b1daf3fbe148e262d986452bf4c6f62a29f9f5bba883515c8bdd248307bdd8ff029859d26a7c93a7599cb4440e9667e3d96d6b57059 diff --git a/deps/checksums/clang b/deps/checksums/clang index 3cb8e59b6791a..6dd3cc5c84cea 100644 --- a/deps/checksums/clang +++ b/deps/checksums/clang @@ -1,116 +1,116 @@ -Clang.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/298e05bc189e33877b76a7a6c9ed9478 -Clang.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/c460899d649982b6cc6c79ccfdebdc98257f7077e2f2f04597f86f3be98f2643400258035614ff7d434639c5861671ca1410945662d00ba1be8f3a887e2e0f59 -Clang.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.tar.gz/md5/7189c71fa493fa40253a7b0644869c55 -Clang.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.tar.gz/sha512/5bca9174562f8f1388321e501c9ae36389a7b07a112bddac3c25184b535dc5324b8c7c56f40c5b6a31772dcc87c411054d6817d9348e2d38375887c339426bdd -Clang.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/a170c242afd649b37bfe17196baa1455 -Clang.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/e77f0a8a268297d9bc7c164f7c89e351c1c839fc7ab52265552171d7d73b0c974b8a1c2ee200d7773a331293127b869d635b7cd6273e2db58bc4d60bc163296a -Clang.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/8234f867f72c39bd04cd47a4659a22a1 -Clang.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/accae8bef10e8499b86073d0d50b5dbc2accca7a5a0acccc214d55049da882d705ffa936627a339713fe1aab29e9078888fd474ee41c820316efedca1f35463e -Clang.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/42423636e6a7a726477cf86399227c88 -Clang.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/8cee8754ac597861ffd54b7a0f261efbe44ed3d3ed56711355b3c9f14a21fa0883b5665e4f55f82eabb2eea20a03ab738eaf32589322dce06f3788fbd943ee39 -Clang.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/0151cd8dcc8784154a51a333aa1dc4bd -Clang.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/b2cc6fbeb2ff4079596c09ced2b856ec7be2db64420b09f3b52b80cac1ba900967af611709834940ae3118adf82bdbcb2d5a90d8b9d5b5a1c1aded8e1b604dca -Clang.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/8ed62616ef3e1a583e9095130ebf2ce8 -Clang.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/0ffdae3ec39068e56749da47636dffc21a601df9c2bfc7421c97c6924c6107fe10d2eb641b660fde50ba5fc0a4ceb922041a0adf32cc8aa553d0ab9aa374f11f -Clang.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/a3518f44e475e1ac8b9fcd6fdf470bf3 -Clang.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/2fd3a8524f627a4d7967b6646a9ad9d973301d060883e2b488a67c2b4bb3242c44e46f78a63257cabbca000690e3659e7420173a40af6439106dc1806ce9cfa4 -Clang.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/598475afb9320f81dffd8c2af89564b8 -Clang.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/6a360ea886eca3c7a60bda7a41b305afdcef00593f7084c50a44456b1ccd079c2d6990e90c081c716eafb2c5226d880a9f1bb855e61941fa4acd0590b63dd2fd -Clang.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/22bdaa9b14a7ab40cc0de4c5fb174f20 -Clang.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/96f45265f947357cd3f79d42bc05c891570f62cfa4a84fef6c99a8db14a845a444d857d4e84985a2b741377798861e714252b61f7676269b98caa5e304e63ff6 -Clang.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/70f47a6695b81d157c87668ce3b1e453 -Clang.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/e1ef1e288aa7fad7dccc2bc4bdd0cbef0d134e97b41f85e5e85fc56e6a276beb358aecfe0d0791d745d2e3834ffba269b7bb289716d39ad3260568cc10e9b3da -Clang.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/3141a42822b55f86d0f075ded553be8a -Clang.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/cfae9ff35702119c0cc5de6cdde4640629d020512b086280c26c974b71c024f0555b910a29c95f00a9ffb602f12512f21dbaae10278dc15e6ff6546f66ad1a97 -Clang.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/8b1f2da8ec4768c9426b15cfeed00dbe -Clang.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/ca4efad2aea4339fda792e8ad3cff7ad891ff2ed4a2647d466a6aeab67d61054da79fb39c1f3bd0456226dac5eb8ef1306ff70f795e21725d3611846bdd124d3 -Clang.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/468e0f231d30f64f40866a719d281e5e -Clang.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/91e205aa53337a150d6c3c84edfb06e408aba0c39843db5c3defa18c6684055139c4c40c7714355cb6d7530d40c720a13d59e9a7f99ffbf2ee389ef090687845 -Clang.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/a4006665b5c955df38a251281429dd94 -Clang.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/f67892698dfee1861c0837b6439ad897502e3441f534b4027eb5fda6a73eda616343a8d8d8273f08b7cda0ecebf88eadeea1c2b9df96bc807767dbb455144e17 -Clang.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/6662732339b55dd2aac965b12db07969 -Clang.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/b66ca56ce67b653f903bf85a274b11077f4967946719b71a306ae249867cf22d2f22e8fe7adf67be29b4cff87ca54a8dc910aebcc8325f9188854da5907b3b2b -Clang.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/392e4b35796cd085840345d1078b6c43 -Clang.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/78aa79f0ede37280acd504ff32cad3ea862ee20118e00b65c53d6eb2c0a99d307be7961abc3e53b01a4e44a4a26541c62bc3ba6c1213f17335beee71e905f6bb -Clang.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/679b0cffef21e3e8a3ac41f9c0d1758b -Clang.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/3df8edf277753d5a27826d0614a7e359d44a48f5b086641998d9b0b1f4bf575c03cff03ff59b7dc3ca773af3b91a487755561a5964c7884896a885b40d5c40f3 -Clang.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/5a7526421f59c8626b84fbe3c7adb686 -Clang.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/ea8230025f212b081696dcdd094c7f44f86413c5b6547a31e166b05e119a82fc4afa811fb6907037c07de309f21e1b36c266a65d6f4fed49d815036ff578bcf1 -Clang.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/a385cf886ebf1036e465c54575ee45a8 -Clang.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/2c53f5c1bb19f33764c0c65d7e337fa0f96213fd98527db1680ab2f036ccdef0a51c008667892300413f7ede68b7220da9f36420c1188fb58164497aad41e22e -Clang.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/7c19b127843bfad76f981534395e9b2b -Clang.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/d5ebc8f781f1147a5e459856a2888dc0525f1f63f6f3e53599faaba20c5b6ef75ca01261c8cf8c6917178658e2f38a70720299c5bbbb316b4ef631a8129ed7d0 -Clang.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/5877d43223bb2629934394bcc803c580 -Clang.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/1ebeeb1f491463acaf12d2f1ba10220ed215df80ad79e392f99989466f34d395fdce87fa3502bfdaaca1e4feae7998d861bacd4fcfc12b5e23467d1608cc27cb -Clang.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/b277b57e63f1025bef77786400c30909 -Clang.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/fbf0eb469dd91f9d480417e86ce341215758c48adba98b4eb3b53d9321e2ed81cb551549614da722bdf62eefb8145b55d160a2563cd4523c43ff71276fd45f45 -Clang.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/d973a878a00a38fd892c9e697e4aefac -Clang.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/6557bc7ea57a09ae6dca45cf90f925983f30afabe4af597aa2a397a9a3182b61d0408bf16c4cee5ccab3907a644d6ad5542d30fa28cf3fb5b790f66f43031b91 -Clang.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/79284554223c4866f204bb7704e99bfe -Clang.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/b78b1c7234096d88f061253866300a8db94928ddb8867d9d5a03f263c32fb3ade36f77c351b04ef3ebfd07131e9dfef7afa0d81cf5cb88e87848cbea354f15ce -Clang.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/e9235c729a76570ad2a919f2c4cb2415 -Clang.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/651b512a8cae627cb30575f0907ad1488e3838fa106fe583962e8399883b5b02138e29bcfdb30456ec3e30360efce7283018005ac6352fae4e2564db3b50aac1 -Clang.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/7a7e56421b13e36ddda5119def5cf104 -Clang.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/fd45e46f44bfe2e6346e4795cd1e08bb775c243ba015394e5b9acda2fa0db704cf96191a79cd48c5bbecfc87118c6165ddc3b74f91ef1fa651e71df6f610042e -Clang.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/f59a37a860a38dbdd6f422d9eaf24642 -Clang.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/4e1eca8784e42ff1ac1fcb810579746f49bd54559ca9cb20776fb84e7e42f5fc924a975d4941c1e061b31901f3f9522fca3e8bbeac45fd8717556e5e70fb4b05 -Clang.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/e3c0338c9b592c67562afecaee5eee8e -Clang.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/0dda3627cfec247825103ce25d51457893eb699a6176151dbc0874ef1e087dcbad98790ba6400e2a8c5187b742d2e7a2671b15f3c63b9c17b9eaa8777795eb01 -Clang.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/2359790c7f6de7fbfe8208c3f3cddf34 -Clang.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/c4032bb8322f9daeb7d838ca66868bd5487242ac2e3854d47a789f17211a9255efe79e3893511099ea77f61e85550b56b8c2c3b206fb632c95527ad391584e51 -Clang.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/e8321015b108eace4abceedc289bd6fe -Clang.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/a760c2e1a6ff33225a42ee4beb566d38c78ccc333d58129635e96009ef92d8c96740e164e0305215542bdc3ae0339e698a899c7cc53c260411f1ff22b60d3dde -Clang.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.tar.gz/md5/985f7225c38a5e7f68d759b2929d3fa1 -Clang.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/f74921af797ef0d3d1ec394ce1b672b72d4b25225207f2c7f7f227f0f033647afce139f710e6d4d23d474528d9f1e223f286d0c2b1b1bdf82c38b273bacc838e -Clang.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/9ab44ae551b230e83232de13e2a63203 -Clang.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/f017dfec0f088c7e0fb714164ca4e4f73cc290e8bfc4fa1838bfb5bc8f13d2cbddc1294863febefbf83dfdabf72b6b6493cf8b816b6a7c25d6a29b658d757e80 -Clang.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.tar.gz/md5/d772e714293d4f4a49652413783ad4e4 -Clang.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/b45610cdb1907d9b1aabe6dabf2a6e7ee1e2e796caf5c62f504f17f098a61d2913b02f30570bd7ca62005276c2a2861f6eb347bc93c78e4878e433f13eb187b8 -Clang.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/a91febe6ea0dc6e45a1972084cfd9b55 -Clang.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/cbd826d9843db662e5ab74172380a7d1000822c9c5a821fcc54746909dca2fcdccc7190f723e6aca60d73fb204422c95edd01bbcbe0b355d998f84f40d899ccb -Clang.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/15dfb79ac059279303528fb9bd60417f -Clang.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/15236f71d74448a81f08e9cd9ac503e17e6e8ef679b11219f6d42b8b4a74a8fcb0093f3d3bdc36b8041ec67f1ab30754dc73bb54d498ee3ad52c519cd260cf09 -Clang.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/035734a134fd46a5fe558f264f838299 -Clang.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/2cb35b0907129d1d8d6468d8f9a981839afd829cd16fe5fb539fe50f79560e852e5f0873b577ef0827211a51b07e26bd6090c98cde24fadda58ed28735095fbc -Clang.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/262c482c5af85f15cacd7d63f645589a -Clang.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/ba70b123c105edd4ea1906f988582c8daaf0e625d645ad881976b68b98cd57717143f4b4bf35c3ca90f582ebfdc07c1ca208aa7c7aec330347f1baec74a79262 -Clang.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/935168f2b01f3fc9ab11396ed2d4a0bb -Clang.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/e602720c37e841f67ce2810908943a1bb68d59a2f17ca0ecf772de4a94880459a467fff263c15e310189c12bc573d1d3d2a0264274965d4c5f2957fd36daefee -Clang.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/76275a214835cf423b53bdb2d5d483ba -Clang.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/e231f87d73f32b9f08c1dfc5a7f6407b6a214b28c77d4604c1358ac0ffccb7391e005e4f4e88c03dc5fbe7decac6df77e5d9ec60cdfa18f47bf51c70b0ce3d32 -Clang.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/dd6eb853ba155972322f4f92cd019146 -Clang.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/c48026d655f5a8f896866299e8cbd4841bf3a1a2d00957309cbcdcf137bfd6e41bbbd8bfaae51265127e7922c3384512f6c086060e03e9bb1bcd22586969c9db -Clang.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/a8d6871f004cdca531abcd14a783f418 -Clang.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/e9e33eaa5af1485715fabf281cdf4c45f985904012db4f31a4d6ef70611a2ddecc13cc0dc4deb1ed75a6dd4da4b29b1cfae761c108f661e9df46f04ad9e011ed -Clang.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/12d3c0d8d84a41630198eb69a06651f5 -Clang.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/1ed2de110db980e6daaad2e821fba6653cf1e72ed3b69d41a423cd597eac5ac18f88cd83c2afcc000c41effd268bf8b545c292096449630ab2c091474be42261 -Clang.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.tar.gz/md5/a5b6ba0d493b4542e3c5374e982b60ab -Clang.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.tar.gz/sha512/d65a6a6adc6a47be6dbc53b1b74e8ee0065cdc5e593a99f9fe40fdb8d23741146720c89de4dad9388dab801f4797e1524a39d778400e622bb9c03f23622d0708 -Clang.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/c7f5a6766b5f9aeeeff2a10748b35627 -Clang.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/1717d54c6328fd27a87aab0f120d85c066e74cc19f6e77f57f138d75d5da02ca9fc9956e620173385b89badfad12dbb6d5b90d676d000323024060b14a4a2212 -Clang.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/3e415c55a918b9fb20e7a9159f2a302f -Clang.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/be58bacc8fcd1f0cff745d8c7e555feba3e059274925b9361005603f93348d8c2d88c7f9249bc7d422e2bce52cdb280a2f1c5dab93044235cf8959ccfb193f95 -Clang.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/65b32b4dc28112dc57a1d62f5cd8740e -Clang.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/497eb5cfc826424468b3e53af7be3c0ee9c1d7a9ee85f30660dffbc728319301373617f9f7d9d09a300132fc93df8038fe2f099846d6b55ad07263afa2334b96 -Clang.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/066451584d69234c5096edf29421a713 -Clang.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/1e3c7dd8387cc5e5e0b1bc248c6d4dd7ca67bba2c681708593f395158546a305f9f7ea9a12be35376f020c768db834a3458625abe7c7ff3edfecb3b1425506a1 -Clang.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/51d8ed30230760dc228e3f4350cf8527 -Clang.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/37b0a003eaa618782f3ecf660829a1da8ec5d06bff9bdefdc6371a99156f0ab9778cc841c03b6ed1cb6e97e66123ce9f6d91b8c260a27f55e1d5d3371869d45c -Clang.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/4cac304533ee927f818f6f2e8804c6b4 -Clang.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/7f642a1da1074683ac8023d1f2bffeb7ae06d09bbdf31d6cfaa089ba44c459f71326585fce3587f0b1c98df122f635de46b3a2dcc9cd245449e453d47dd3f0f5 -Clang.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/33daf6fbfc468f3e0b013cc43b1482ba -Clang.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/1aae2a79622e821e6a8743786a0191ccafa7fe11c71741cb8cc41029890def518d41973f74568c6d8d4a6c8e3ddb37cbb29413c79517e4cc0458c2b636f92171 -Clang.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/debb98a67dfbac8e7f57ef6ab242816e -Clang.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/ed85d0a7d880193421f132082f46facfb9750da60c7860c611c37947212b7c7bd5393899906b0e21f58d98056f8d0611dbf25e06c6d6021acb4f79a7b6956100 -Clang.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/md5/1456cf6c22c78537bd3feb556319a05a -Clang.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/sha512/0cd46d6e0e135db0f2961d614faa59b8442e56f7507f07a27675dd400078d6556060ac13ad40b55f41393ab5be6d1db027038e97d3fd32c833ca1ec64ea3dd4d -Clang.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.tar.gz/md5/8b3ae4d75b49ce372f64011af803c32d -Clang.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.tar.gz/sha512/2de4e4521887d6dc951ab29bd25cbaf5d8dbd55630b63682acfb0929ea8a378e051f61f3d1b4cad127b8f67f65848dfd5aaa2ad38dcdee39a0c3f0d0a2962dbe -Clang.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/89f575a07f9b42b659af895d66d36dc0 -Clang.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/cd3a201eedc0c685d6f11537b050bbc8aa29583391790a4d54ba8662a4ddb27574bc588bba52cac899a45733807a879d57f1caac380c0cb6401a7012602aa345 -Clang.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/5f3acbfc31fc032a18799b9738643f44 -Clang.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/ee631163849ac5b8755477c0b485b3bc9a24ca07270e68b374beb5c2ae10aab1a44586ac4f40fcab80a08a3fdccee66584688e98859bf9a07d23c1e14e4a4ca6 -Clang.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/450e2f2c49f97fbc0e18ab3e0daa183d -Clang.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/4ef4adbef50c5bb77699c8aec3f29a8faffbf5114c3b45e6530b4180e97443133d19f02358de99feed58cee37c88830c76600d2bc81fdd0318c3f41540f3190c -Clang.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/ef9b53f0fbf0a71c45277a49104a3939 -Clang.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/326db9bdc978940e36580e3478bd64473bcf157840c9d6eff67ebc1f2452e00d41acc1fa6489c7ac536b000c3c6fa2e86198077d3f95bab32d71cfde6fc1a368 +Clang.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/d7af710da0dfe4a19bd0742499226f8a +Clang.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/b69deeff9169e58986ced189f5947d7de00872ee1d5301de381fba6b71237119ff431762e2f530bc37fee5d640178e2184d0c9f9c6a9b5a5896c210a405f5cc9 +Clang.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.tar.gz/md5/b559523937532f608380ea0ef077e5ed +Clang.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.tar.gz/sha512/20f37272327b938d1fcb77538023d88fa799c8863db9a1348cb1e8ff883a8b50474e6496f9730139a1d6ce199b4e17ddbf7e1deba448a7303bae2efffd18d889 +Clang.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/f59591c24225c687863d8878068d5d4b +Clang.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/e1970c15dcad8e8a30d4f300ef597c12f4c953cfb656582dd4d75324a2d17bbf6500de288f80c53add9e6b148b3153abb9f331305ba176deb83504e59fab5c7a +Clang.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/8ee3ba6f2f5c6cbda9515fb3528a6267 +Clang.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/cae04df5b65aaf0f8413f0dcb150e29c276c2e7d60c071f41db1dd35c8c0a0c5d36441e6aaf9c8b32079442ce79a48379b72d86a6d1d2b59af6d9a2744ecc8d6 +Clang.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/f1cc3d1a27058db2427d6c1b7e762200 +Clang.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/5d63f84dd7d119fb2f5cd6e51a16e87557a8b54d2a1f733100e4ff296af496913c84c0c3a77c9f81cb27cf5d23e3ea72ea5be0d6cdb02bb4c3d65182bbc4a84a +Clang.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/6b4203de35b0ce42c7fd5990e0a7dbbc +Clang.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/261242b7ef98203e1cb0a77c3d56b87252c4647bda5229f08d586634ebf217613e434f0010fd088ac3a08e4393fc838a1c26573eb8549bb6bb6e14a0cdfaed26 +Clang.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/c1b0ab693bf840be628469afd62131d0 +Clang.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/ddea198aa6e465ef77e542b7ce4b614e9d08fde32095fc21d85125c7312944f13ce84a9d24ad8fa22caef995c1c70965342a6bb9336297ec305795e9bc457ba4 +Clang.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/dde818c965da13154b438f9a4c7bac2a +Clang.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/d11097c997851e3d4e396abd4e4e0c1cac867a50bde661ada7e4e7fac160de30bf15aeb0e3c38651d7c4e6d8f03eb649e2447a81f2ca0a6d4114bea89692e9ee +Clang.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/0437f8c3983b6762beba43c7f089199c +Clang.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/9bf004c4f21c2215505dfbd1fbca8d886d1fad87ce897cf9e982a0b8f10112cd0d080132aa2b575b5ad1ab681f1eaf8da7ddf026bb2e42d1b1a5a3d2a253f71f +Clang.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/684b5c8b283ab5a341603350cb4c815b +Clang.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/ee0f147da7dcb6bdde1a0c1929b46b442cd01e010cfdcc6f9d3c344f684ae3018faba3d88b46486b3d76ae1f456ba7e34ae15bb4a9432c0ad61eaf03045e2730 +Clang.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/72c1d2de0b4628685067787fe81fd9ae +Clang.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/c18086fa874240574d4084977831e13779e44b2690e810a662e2c9361413f6cfb74bc5aa9718c5b64370f9a797df7544c211ae7089c7323024c2973b6bb016f2 +Clang.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/bdd3524a04ca1606ceedc990c828e7c8 +Clang.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/93d2e22962993a032b9b589bd43a635eafb374b5cf3aabf28aaecb6a6617ea6684ac754f121889610b49efbc2cf18e4d25639a6fe80f5522a9b94ba6f4caaced +Clang.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/36958bf224b804c2effe335f8057b404 +Clang.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/8e7720e7d650a100152219731d92e22152bb58ed9a890c0bbf75aea089bbff80efd53f8f80cfc146457e0def0e4b58bc10997d22aa285c06c3de83b5bc9212b8 +Clang.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/f4ca31683aa1445ecf0fb2166280f8ae +Clang.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/1469ea69e864c77fa0df209d3db5c777c92baea7ed3473aff6c865e399aa3237883eda2d419bb224aac20db2cf43adf40bb0d1d3e53699968b7c5494bff40041 +Clang.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/b6f7cd04f2442dc76b198d85bd419bf4 +Clang.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/518aeb631b70ee0abec23bd79d9943b92ae3db61704533a6abfce75ebeccfe5a4b447a178afe9c331299e0c6d077eebda30ee67d93cdf98dacef62fe69587d46 +Clang.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/e1bc81bf1fe6f27c60ca8c98948d26e3 +Clang.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/8e7768abc0cc97f12580ee5f461868f55c8a4cafa274cb726c7da2fe20513f06d7d299e70b14a3aa290ca7d52d76a9a7a36271785e24379f9aaf8caf0b79cff1 +Clang.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/443d936081749e8ff98c45391caf743c +Clang.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/bfa78eeb3673c265a4c279547b015e9f3ea752d823e1b29e78315d5534b574d6aeaa2c25e5dfda0057b853546912ef56f8cce2a33c5ca400fc3f2fa278c1a9e0 +Clang.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/5424303660411ca2ef318aff90688a35 +Clang.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/06a5e3b8c3dcd28c9baf41b821b05e546b2c2c3e3351437a81c5b88bbc4098bc2cf2001fbd040c6afbcae1bc1764384204c5be787e5cc719a7247857110a0366 +Clang.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/be1f870fc8298be34187262768a35a1d +Clang.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/34069aa66c1016e14edc075ecf7ebe7e885a7aa611b809d7251c658d6c0f833f4b04898b6000a7612524959f35536744c1445b8e03e447601f6b8050ab8e0948 +Clang.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/c40fa2e3499d476f6840cad60deb5562 +Clang.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/297287ff1ef0d38a15361c8c653109caaa8baeb5964c75f033e76176ef5594b5cdf8b2c380ad8f270618d1e73f2a4c67aa6d4f9c971d837f5bb12402863d3258 +Clang.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/010417352411a80c93d9538bf7adf7b5 +Clang.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/60cc639eda70230ca41c63621b08ce00a9460d406c9dc626cdb7d24561fdd2f93cd593cd040694c4c0d4e98bcf5f2b514001a88f19d9a69943632c6f5ad0bd24 +Clang.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/6a3ccd40a6487d2e0b4ccff250dc412c +Clang.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/69443b2da14aee04f4d4772b65776c2e96b7e114f11ac055c38c01f56015e32c35940c0ee42eb216e405f9980178986551eaabe6f02fa2e27fddd7ae073f8830 +Clang.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/3a4210ad734ea531f97c94ca1e8a76ed +Clang.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/fa116c6a227c319facb466fc068df7e1802bbe21fc2267b6075f9aeb519d0306b4193381b7ae17faff2e7ab3e868e9fda80ab4dde44a47df180ef1de8df8d015 +Clang.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/e0da7e68ed8cbbb4ffd624bda6c7aa19 +Clang.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/394804f909bcdee79a1506462be80f071990e255b4b9075dc6e8048983a81794e7937236cbd13cf043679e69322b98282dff86f349ae762be04df130c9ae989b +Clang.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/bd2668a1b87f51851b1d975175431277 +Clang.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/cea19ca32b642c5d6f85b3e14b634be907af33677910c9a31e29539265bd516f8368569285f0d09b9ebe9d0175809d2a1460191dd0f3e1e2ce6bcf4ead83f857 +Clang.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/117d0b2b77e4f62a4d4dfa4f89077b33 +Clang.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/412e0f79382717bfac414db83af70fdaeeaa57b17e66c6525405f775fca922f5c02d01241be97dc493e78da10f3bad0db287ac4cf3450abdb1d7874df8f19ba7 +Clang.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/f325dfa797153a1d97e9b81ec74f2635 +Clang.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/8535ce903c71ed7b3a55d03473a2c921d1d8bf8d9c890f5bc0897af3042f62ee19d0841809daf51254d52aaa539d991d8b7222561d950b6e61894e910760cc30 +Clang.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/bde355360a60d90a9ac1f242b5c114e0 +Clang.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/176c08334a68d9a83feb0635173a3b4b292b6b03bde7c9c4c447ba629eb74685c7259268305c71b1d57d2943de5b152639b31b15347b24a07d2ec6628a37df4c +Clang.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/f50e7f89c8652930a56161d3ca703cf4 +Clang.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/b71cd857d1db0ce0e40bed58d5bbfa3807cf5e2f3c0bb102ec5d1d384aff7d6b45e1b4e895533cbc7176c8a3a2c617e96adf57e5f7f8347681bedabe5083129a +Clang.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/732e09b8c05100125c46947a01146a5a +Clang.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/ead28e4edae3d6bc77fb3c0410d87c468c474dd938551a70ff64a40df90aa1feaa90f088be683bddc688c5e298c5d988d7bba8b54d366490c9d07543b2f459af +Clang.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/10529d4bb4a5d183709c384be98b5ac7 +Clang.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/7b4bae0f72d6e2dce6f5e65f4c0baecfd4f3fe030c2cf731e4e4efb678435ea14d73bd1f3187630beefca734f10d10d9d3bbc76996c7f5cf82440de48be19195 +Clang.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.tar.gz/md5/7403f85447c8e622b01d4ed76fab8b3a +Clang.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/0127fb603efad3229e3d70e5cb857cfe91fe5cd399091e756ebd45e3f0e0159aaea6eeff2e5e8d83bb79521040093de2c6cb4ac479f60a43332581e01dbdf6bd +Clang.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/d47f8ca3f45f485705232e42ad3c1213 +Clang.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/ffe1e0756f960475b12c08b55ae3d81fef3d9fce72be73db8d2f9a6e45ab73110366e1dcb1a7814b4abdcbcf128086c09fdad86a512251ea42169f977df85f8e +Clang.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.tar.gz/md5/3dc043e50aa93e140c5ce9e38c483ee5 +Clang.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/200925daba6db1f10066f64dc5d6cd763c5f2f872ce0f69b1be620637d9eaa0c4865d8a251f385face6b4fe9423f677c83a613c0be2c80dd319ffe2c88ae5ce8 +Clang.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/a5860093b12609c8fae69fc2e280b43a +Clang.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/9d0fb968d834462b98eba5081c712dc23dac43e8f91ae8fca3600fa6aa60890409bc486eacc82cbeb646bc0cced788d0d532c2c87d4a824f5d53c0c99c0c6eb4 +Clang.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/95411432c7722b132f400f8d12d47345 +Clang.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/4191a4d6341177d73a28eef09c022a4d5f235a6106f1361c780b543d5393651aaa7c8da9d8072f5b270ac5673b2af9597eb3e9a3152918785f2c859bb1ca58da +Clang.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/9b410214e77f817d100419493403b667 +Clang.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/1b1db5fc0f201328502a57b0b62b6da740d46c665bedbdc2e1dbfdcc3559a3e833afc44057d595468099a85898ea9eddd27a19c2da1bb704942f343f8c8f92dd +Clang.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/987703541a76749eb03e1f678d0cae43 +Clang.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/7811d9e3784a48f235a63aa58e6253534b3c5b88ba15a574340b5059f4aced222318b152adad83eac0c1d637e1e61d1238c4f5315f1bdc406911e21b76e77064 +Clang.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/77f794a2630074684c3e11e5ba424ce0 +Clang.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/45c204483758b727d074f27ba630b3fef8f44bacaba1ea4a50b46d2bd6defcc30577fec6cfecfe6eb3e6b8d6fb9bf372f714cd5cff4423970ac2358f9ab62c40 +Clang.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/dab80f64898fe9a5ffdffeac60ab9726 +Clang.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/147d9860913196e2873f81098fadcd356adb7b365d12f8a4951d87ee7451ef7191d43841c909406a8ef0cd11a171bc1208bb3803035fb789d4c842b96be1b44c +Clang.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/3ba24f9af99881963370b72b8865152e +Clang.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/7f2b8fceabaa4a4c91edacd54ec7fb365567de4b51b42b34eb89faa2de481dfa75882c4066dc081d15f6aad4ea342b4226510a7d580667ef2b77d297409b9961 +Clang.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/71dac37bbefd7a780592ec81a87864d9 +Clang.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/b972be1373d5a3aec000902f7fa47ab241cdfdb0782dc4734c27310eb23cf457af11c794413482a43247cec744fd4283ed2bf81ea919eb825954bcae7cccd4f8 +Clang.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/f2b3ce2c6888649a1c50fbb54882bba6 +Clang.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/eddbd9db8fe7c7b6afc1ff81ad921f2fc00c81f06d57ce680071d2d115a813b0d8212b76a356cfe26d8495f88cbda3c0f42f32b17f676803706a81ed49749d51 +Clang.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.tar.gz/md5/ece1f4eba3ebcbcaed2a05baa427031b +Clang.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.tar.gz/sha512/cc0c694e1365c1ba1521b6e971d850f83497074e5648dbc29503939f00713bb196cadf2d9bee992f7998cbd09e7805e7d3de4fec3e97e0df877c000bfae4cf1e +Clang.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/86b29b63f068c84f0882bc43c03d1f2e +Clang.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/4d6bbcd93d61e80db12218d072b25b2d467159edf2c22c72fad67b2eff7c76ac4635a7818d201734858cf1e936db4b46c7d89ac537f02546957323249f5d23c8 +Clang.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/0090fcfa2823e945b8ff3efc1e8d1a1e +Clang.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/3e665032abcc1c85bd30adc902fad22d198c7364c91906e823523d046291bcb94c7b23a364f66d68c5d1c8158e4397ebeb87c08d8d328c8b3af003fb0460f592 +Clang.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/2a66245fcbe1e9cf63615578f61d90c2 +Clang.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/d4662c7eb908a31a6e6e2d8ff7fbe2c74b6be7e7bd6a39999aa82c489ed50d7c7a11a5ec1d7046f67e6b18d2350fb51a77aeff91e3b18ee5d50acbc50be38e72 +Clang.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/b4ce7760690fe64a96cf8e6a17e70ae7 +Clang.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/4114b2c0bd895d151ab255bda0c24a7ef4e2851c746ef163fbd25cd31587e9fe51d5a770c727b7073ad17a4fdf64e10f0357a8919705be986d86b8ae1a7c3ff1 +Clang.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/35d24663842e2a0abbdb6be5ae0bc95b +Clang.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/5391d44fedb6fe296e24437d8765ed8b819c01be8822bef3bb2e5703fce4f0ebccc7a2aac2ef1ac65dbae6e54dff81be200bde799a0200baa4c06194bcb39504 +Clang.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/2b012d456b01cf6e8c6b95a624d44d5f +Clang.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/ddd340ef459c3214bdc56da19c771d95843ffcd3b7fa8e31f71af09afe7204563e892f5cf7b0a9e83d002b1215f03ba6ad323700c6a6ef7723c1be978b22a454 +Clang.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/70f4d3f4b44a71ce08913a173ecae6a3 +Clang.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/d24ab9e63f445658a8be91f2c9a884ce2567872462357648d16f3a8b9bb7d22f9d149ee26f168e5b40a362166fca875446f543334392bafec9fc34bd6952a4d6 +Clang.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/06a8977d439610b925519206cd95a426 +Clang.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/a90c5223ed234238f7a47c8681880a7dcc93454ef9d34e011a44c89c9282e4b082ae2f45c3c6ac7f4b30d11a7938b03b8be132aaa3d769f21a5d83aa6f2fa6fe +Clang.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/md5/edaffef3a5feb62025a683296ab9f569 +Clang.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/sha512/84ceacbad23c900a1157e80534391fa127da4b3d99f280ea537a5c391196bfcbc82b9f2ebf877aa45be045afb3de8e6f43a560e2c20060340de3e4829e95fe6f +Clang.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.tar.gz/md5/9dd123ced026b03f71e156c15ca6188d +Clang.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.tar.gz/sha512/375fd746dca3f3e7fae3d1d978f19ef84d6b17005f42094c1754fc40e4ffd0b7f775c64c47ff0ee3cfa1e1cbf75e1725cc84325b05600ffe23b1a0ea8340e3e0 +Clang.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/fcff2f4448512a0bb9b2591feda80171 +Clang.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/c7e53932ee0932aa50d10364da5bef677a708fd52f70b2bb55a97ee9e2b9e75d56d9cc4b18d7bd4567259a4e2733d2a9fe33261c35e373908390fbaf49985d40 +Clang.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/f6a4ba3f52ed4576b79e6316d4e24297 +Clang.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/a06e5985731b3f5f1597076141bc4a46c0369facbf5e7bfd9e869cd2a163a76a3c6e667c7b26730b3022b77db4603429940a5e6b1c1bcf116149a88692206c84 +Clang.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/7295e8afef38b3f6c508c0175c1f5603 +Clang.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/538021b18cc8f01cfb242a8ef4d8ec869337d7f1c697ce8ec96936c8d84020b7a2b88b954589cd839098d30a2f76f1a0c34eb2fc3c1a82e58e22e72543a5f5a5 +Clang.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/d243a90350e08a486ba39160261865e1 +Clang.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/51c63f86cdbc58b8dc6ff595ff3cb5020b98fc3b937113bcba59b8faf0cc5aea68e9aee978b325a485ce0168f0a93f6ce0cee412a75afdd2b58fe88bd8a75c22 diff --git a/deps/checksums/lld b/deps/checksums/lld index 588522e1cdb62..25a89e959d297 100644 --- a/deps/checksums/lld +++ b/deps/checksums/lld @@ -1,116 +1,116 @@ -LLD.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/fc262d76d2c8b848713b39fda7d55544 -LLD.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/86d584699333feeb574e9c00116a9bcfb728ecd905e983ebf02eaeded052c03a148fcaed1b655c07edaebbfb256f376f6451e1167503b235bf557836a9ddf7f1 -LLD.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.tar.gz/md5/cdf439f1bb444adc506fb844230709b7 -LLD.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.tar.gz/sha512/9cefd451e0282d9d787fb79d70430bf811297a81c045af386a0b685f34627a31631d036d1b67dd32360dfffc51450d0498e71a03302e0cbba3e60d45cbd3112b -LLD.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/0e2d3659de3c546073a52db675b2f00d -LLD.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/6d52a3b56f3bdbb59addca2c7d4b0776f8f414191579b59938c5715b14b1d1cc1e76b873c098ce98a28bed57a0a97974805f158ec952a83551adb61dbac3891b -LLD.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/c319caffaf1ae4271e86354661eac133 -LLD.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/f908988258050f06e4022b44dc9e49fd66221abe0c205a92e0fd270705b9b78ad7892ffc9adfc69b9c2a70f955e98678ca65dbcc3ebdd748d08ec1c414e90892 -LLD.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/69fd74156fd9d4c32596f8ec8743f24f -LLD.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/04220b61f3a9a93be147a8e73f044233bda56dce7500c2225089c1fd1e64092f8af7d91b9fd41b4f347950d787194e9ecda0fa3f09e9f0dd3f1f0836d39bcc95 -LLD.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/0848225be33d9f436d6cab9fe0b1a6ca -LLD.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/d1bf4cdb1f47c28f0ceb86606cdf073141e2e5a249756bbc4fb862aa4e3476b9b6c436e994c5702019b82b773c2c3d2f0e78d22a3cdd905e159c9ff753d2619c -LLD.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/8abd66714f15f7db949da104a1ad0fa5 -LLD.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/9edb1dcb32e5133634db932dbd04d29256a4ee636e44933f63c1585113b06dfa6b38eaf87b72a4b3efd044a25f0f173083360cdd15bb964d4f8ff3b4d5125d32 -LLD.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/4c8249e6976e75c7790b8a120a57d8f8 -LLD.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/405552d7d102a393c44d3386cef9a2a85916cdcab88b52bf3918f131b860bead5f6aadefb6794a879e9ae553a6b3a6d6444bb900c33acc77c1f79d60c024e772 -LLD.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/e86955bfda5ae339a22b959d1c97b7f0 -LLD.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/0cfb78274857b1f5f34ec0407dc52a5ec6083a00d9e9b959099839d7467f5ba304dda8a974ba4f3281b66ec3aee5d7ecf0cc774f26a6d059aeca39d850cdd17e -LLD.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/b17725f5c189699eb325506325ad7cc9 -LLD.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/cf7393cb10d023c7d1a04eee85e706c383ed8fe03b66b2e6a46f5a7cd0e76ef5cf065b94e612f6b46f4e2dade6782f8f2ea2b0885fa7dad2d2c83b049b376ce4 -LLD.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/73e8e847ec3126fadec0a6ba79974ec1 -LLD.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/7daface02ef1b12bf738ecc026c33b7568b415b91c452c64125d74db24f97f640a888c313156363de30b78d2c6a2593e3b4d683783b0a63d057b58ebd2a29047 -LLD.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/d141277d0d02d820c17634331bf0a40e -LLD.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/d0e0f145852fbd971ffbab7a92c24e435c581e6945d49588701f9e930d2d16bd6bd598b638b23f473f764bc57248ee9fa5bd725c35249a298ae30063d26ab0b3 -LLD.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/bfb86c885380c9bf0430ae21c5202057 -LLD.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/f5d7fc12102e8c728adf271b2ddddc67d766d1ef7477b57f8788c218f568bf93947137c0607008e9b8e8e7ec5c4ba9cc92688b0b8a15af96b3a54574b6d9f3a3 -LLD.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/054302b380b9b91d0ddfb09426ce44d3 -LLD.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/354c10a4705fad5c32a16140eba579603c077e725c35b1085e8d99a7b766b4a732b5b26f44bf4877f7bae477543f38c2222c3e4b610e901bcf70fa54828ea4e9 -LLD.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/50f02bd884e32ec088f279f99c4536ed -LLD.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/d0094821adc5254ca279f664199c76fc4754c5b1c4d676053acbd490ce1d84808817218b5e20c0e5a07243eb62e3876ab0b5cbfd1c3e80e0b0343153f0d85bd9 -LLD.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/ceb31cf8a3315a2d1c9ec314848ae5d7 -LLD.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/c83f85f36d61076c366ced1b03009e5695b7fbf77dedafbb5efa42e8a167a7841ad6e5c946d5d614e38f259bbc564bb24edf6a041b85ac52e12a4025d9cebc0a -LLD.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/2f51541d7a59b166d5c875c14ed9b5be -LLD.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/a092db3050dbae96a8e85dc5078c13fc415bfaf68800ed8c27871a04da19ac96ed5263366bdcf3f75b42d2c329ba473f1df6a38af3d3968bd1b165f9bdb50e13 -LLD.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/f2e13021c00a2ce98de6a153a3661944 -LLD.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/b1273890b740d9a9fe194d5351b74db261b7c1077e02c02bc6be47b4e61f5b069df248c140e46f5e4a8c735503ffb84dc7ea23f673f3b0943af1667cab836381 -LLD.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/4ded55f6eae1fa6a54e5765af6b99df9 -LLD.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/772c087814ba18418357799737ebf650ea5944e9c1a8f6b4c10770cf14f3ed8ea152854532b7975f6326b81d640021a63f8e0334e64ece776e41c5741591ae52 -LLD.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/bff02de59314ad554f2fd01924a80693 -LLD.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/114519b9ee153a495bedd174b42df227e1f41375511c8a4010a06013c73a3aa5db0938d764e0e639ceb86f9f13513c6416b3291f53eadfe0e1ef5b4a93b4ca03 -LLD.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/70e16637af23ce7f6c33b061e073dafe -LLD.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/2f3afd0cf1ae8a0c0f331a9dcca0e1e69d7b49397c226f1260ed38b2b5a2d400673578be0371cbb2a028827d9e22e6a8890e34110967250ef0f0f907f63d59f2 -LLD.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/b00c58a756363edfa9bcc6e26991ec74 -LLD.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/6e5d9448272aa69ec72a201f5d4b90b0a4804f654b510c4a6d98393cad3c1b352d6bb9f47b909ecf46a8afb4fc582176f0c26c028203cfc72ed6635255a1da4a -LLD.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/955be6224e721378e90a5c78c7c0557f -LLD.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/74c4bb8419a75782721c97d4af893ae4f976ddc7b159937bd6b3a1e00aa63708a227bd02b95685d681afe2955c7bec080873b1fc1fa4507bca24a09edf7adfb1 -LLD.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/5e3394ef7debe390219a4ce95df29741 -LLD.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/17b8f0a257f857093fc70c16821797107b5b1ac62239f28998d4c355e1d0e5541628e917464ad30ffd07f4c8ec3ce262125bcbabb0d39044fad73acdf96ef1e8 -LLD.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/9de7aad1857b8fffe7bd6476b0ce881f -LLD.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/876963d34b883ddfa13e59286d08ae7a6aecdf6a35f77b0d12867435e48468b65008d8c8b1f5bd931196076fffde615971efdb3774b5c7aa68ec08b1d6f0ebf2 -LLD.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/b9ac0071ec9b36819c77529559635998 -LLD.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/c6f7112b680c80d35feb633bfba3910405b0fc0914e05fbf5cf8fad001c5868973b7269b467aa1724d6c2b15278ff54a14aa09808b26104f54eb5452e3f78c43 -LLD.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/e387441aeaecb5f587f2e1edef3717c9 -LLD.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/e9b6e42dd132eff9f539108f9329ce29821d8101879d880e7cff587d3c7982c57eecd6e33d1af18edeb18664e77e6b5bca8f62d69fad57a176f7edcd43a51adc -LLD.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/70aea168615be9cf0868e9a504b2e572 -LLD.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/1a555b1c354ee690718ce08b1f736140925b06cee1b9533962ce7eb7f6332bbdb9e25e1281423772e0fdec8d34b5b690eccb6835cf6b764ada492ab20ad5088a -LLD.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/ca1e12e88613e2fa5f70a9b932306a5a -LLD.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/e2b669f1d5f24673f85f95dc53a041c3b5a34b05f3113803f53fddc9f8637cb92867a79fc02b19ce5e6cd99f0c0a7b6d351fd68994b244c1c35a1ed7058cb0d9 -LLD.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/b6833e7ca5dbf8c46ef536ec834b8f23 -LLD.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/995915b3cf655618176a98c41b54a3345797fb5ace72771ce963644dec67060ca84ba20779b94fc4bc48e8688d1f911b20abfeb459832b279ddcfc5afc998776 -LLD.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/ca9848c652737d4119d6f2f1b83bc807 -LLD.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/465c88336259a472fa49c6ce88d7965e44aaf34d0260e38a832f27ed5b99d77d9653c2390dc12f15db549325170c59be108eb9f41f99ef88d5fae47edd538abf -LLD.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.tar.gz/md5/07c8437e8af4e120268242fe1ceee853 -LLD.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/ead33174285f85e4d8f40baf2f18c88ea51894dfac528be47db16a4885ad658ac5b92431693ef24690d9a8f7a9de7d3fdc348ea1f505e29f8e8455f1a4e57ca8 -LLD.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/13395b2c3c4077899229e5b7dec5e535 -LLD.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/a3f95af4b499f0b4426a109cafc1c9bb4fcf2a600d6aaedc8472d26aa61b04b1aaa3a801d39e165a9e7253eddca6009006e2b8030dded6e592cae7a477015d64 -LLD.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.tar.gz/md5/02f86c3d3e21b8e4de49ee5632d42c1c -LLD.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/ec796d467089ebbb0e5a6085c0f5b15e5f43247335661b22fc95d7656b860ad34bf5dcbc3d3c14898bec871347eee565c18100a872f1150d25120e25702d5613 -LLD.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/055a29a5b3e7bfc69cc4455150d2a765 -LLD.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/0a51cf1f1b1c825cf397279916a0bdda789dc9f8917a9cca70e10050bd253f286fc296725ccc17651d72c304458356c9e0c7744e85ea0961fd5a895a2300eb26 -LLD.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/357377a9b28dbe542141528ff21df505 -LLD.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/199182506961dbb552cdb7a40bd53dd613f9a15bf824d96813bfcd26e0cce1081651314211f99dbeb7145d250ee90eaad760bdfee27ce8e14cc40561ff8e3028 -LLD.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/50e1465dfdd73cb4892dbc84dc2bd407 -LLD.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/bac02215501595510bd92f59bc5d6f707a79faa360823afc82893e7eb64b42ddf035ac3083dbe37f87b3dded5c5f06269b3fdedd2ea1eca0a41738178492fa46 -LLD.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/c86e047af65383a802f9f40f0366486d -LLD.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/24dc600035ac9fc7fc94dd47e3bcb197ea64557565a962bffe683ee040a089a4f0a6618e6ff06c9225ec0961adbfc810706d016a0dab659d77d2fcc73c1e302a -LLD.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/463c8a2b34c01c1964f9090d476ee1b5 -LLD.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/a2d8da10ad2b81b9fb5563ac98e992a7500d35c4999ff51e30dabf662199b4bf47c3b8191a87c6dcbd6fd3fb7917f680ca9d9dfcab92fc66afda42d93bfe7a1c -LLD.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/02871a4b77f564a1562fd1b8766341ec -LLD.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/acf16625e34e0f686bbd02da34515ab9ad1cebbc03fc2cc4793728d153c3d30d5e684179293e0df333bec54c35c02f63b4e8b39373c4a78b4dc496cb84168953 -LLD.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/6ccd870609a949083245a0a469a256c6 -LLD.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/e79381809dfbbb457f6ab542aef7bd20e758f92c6306d8efa900f3d951cc37857170fb41d6e264d8fac903aab6b1b3c2cb6cd7b29b12db05df23a3f0136d3149 -LLD.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/a26d060376eec9f52ca65cc9117de48d -LLD.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/b7ec3789ae9afa900a332e7d545576995de14ebb31b00ef9f8d16d6f8eabdb8d35a508c283b9dc49cbd2cbf0aa99c0c081750ac9d4d80a1fbff71e044361cf72 -LLD.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/c4063d74231b368d5e4dec1f8a110187 -LLD.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/0cedd30610c042e58a91e1f4a46fc973a781a0f432292d40fd87b4907dde868574dfe7cd372d8a05f7e56e73d507b20df8c89d49b1bcb5edea161365aaed04e5 -LLD.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.tar.gz/md5/09f1070e327911a6eb38e4d7481be776 -LLD.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.tar.gz/sha512/47236e8449a479599dc03d198c28da352139cb62d08b7def13328a32b5209a29985d7f0044c74d716a3458adbeb8ce2845a760bfe3923a50a4d4eab1f832dbcf -LLD.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/214314e0359316fa00e5a770b55daacb -LLD.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/b25ef3505996442b5e4d4c20e3cd9b9fdf385b8e86a8f5598616943fc8aef8b96307206d6aa836f3f8d65818806eec6901b1d26fb339320f538e3ef7568b6859 -LLD.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/32760e37872e2353c33c175cf42fab39 -LLD.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/6b38c31a34cf4b1384f3b24cbf7e4ebb20a112465293bbb37e33bcf06d998f2ccc0393c94a95a1b39147c8e6eba84b107ae934f207aa56512f16e992a642714d -LLD.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/1e935c8f2b36fb537574c2c14baf51c6 -LLD.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/ffaeb5160830e5859b2f650d818422b80ca187f0cc43422915bdf1dc0b4ccc4b6d0cc8caaf570105ee531169fc494a6fbc9656ea4ba9f9cade8e38b7ee339fc9 -LLD.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/ceeefef634d597e201047041ac330f43 -LLD.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/f4b4ba04f2a72744f59dc26d894956f8af267e7b26a34a658fbf6ebf681b5d414775aa7137e2641ef0e9a0600269926c1a45d98d9ea2087677901c62b94cb414 -LLD.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/a9dbcac1935a74f3bb3ad3a879098ca6 -LLD.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/7975edea6954b6168de5d05f7fdd5d95bcdd3c826b5b098baff86c93928eb3d9b169b3948fd94f9194f01f859cef1f1bd3db7fb470c7296b0194c37adca1de71 -LLD.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/b9690d75d244393b4990c68ff9e4196f -LLD.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/d062cf3d89bbee1597871e2d7921cd4fef31e955434005f300a87fdb6d1245e399e417da7a1093f99ccf816f22873c517937bf7a139efce350e66a01368c0c7a -LLD.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/9c5651ed5d643dd3db02a7183453d3f6 -LLD.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/a6e99cb649cf7d6c81958ba1f2bc8460e3164e0cee4fd5a62bf62bd3040b8641b5665f0eb47933a4f13e1b1034ff6a167938088bac4b9b2eb75dc1060d53fe40 -LLD.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/6fa5219c6a38dffb193ff53d5b3a3d1d -LLD.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/f7191d625f35d8e8a147426c004b1c7bb327e3394b047478c8d003bdbcb1b2da492cfed0c71ca123fea68c500c17d10cb6f157080228ef1517d88a6a2c8103a8 -LLD.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/md5/de8e66dcda15ce77c82350a0c708358f -LLD.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/sha512/ead4dd1b926ad903c99a3ca5280397f1f866356a3c2e0c92143165593288af8e29796cc0909e72123b64c58cc522bc49703f5039f731e8805944f8bc8f318104 -LLD.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.tar.gz/md5/fb78f5da88875c423fe9c4e897db7547 -LLD.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.tar.gz/sha512/9a667f0d6d1436dcd61e6d83dbd749b5d156cea5b7286667f723d835a93db6409f5c3df3b77e8816707c8d779d9571a7ed1ad764409204a45cd4ff01df252e79 -LLD.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/ac4c0898727e017239bce35420ad80b1 -LLD.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/7e80a8b7583c28b3e92c7f0d1c8b8d5b3ffbe00d5df87e3a2c4a4877421f28e4a9b658672684d0f37164209a9e74191be687571db6c498edc902bd104bc2dc4c -LLD.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/b70020b2b3065478ae37e309cf4e9e8d -LLD.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/56b99742fc2ae442d3d3e3a80339fa016c4b6f53699798aed0351b1e6bf75c8300b18ce2e67416443f7eb8f110f98d3aefadc140d2c9f906e77b69ca349f954a -LLD.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/6ec819571dc37ca63d590bc0a3cb4e54 -LLD.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/e0acd7b407f8dd88572dab34e30d385fe23a8c98dcc4550811db5667e182f2ddbe773b992e4f83015033b0ab6c38071ffe0b6f68e0a01e8f9b9d627a233c46fe -LLD.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/0668a79e8d23e48aa5380fff43436d82 -LLD.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/bd78a518126c715861d7f27993ae26e8082452d4ad18a9d3a0fa39ef46fca8b6e98ca14ec715470161a1c9d64ee71c7ed4c815be1b3c480f1d003ed3377895d1 +LLD.v14.0.6+3.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/abbfdf9218efbe8fdd4664e07f1e6f00 +LLD.v14.0.6+3.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/cd43f50368d708c345fc7250cbdfd236f25c9bb0f0082d5309e0d194aa4c5daf808aafa9074ce85ee11474ffee16fd5015830cd4e672281404b10f403e3bd288 +LLD.v14.0.6+3.aarch64-apple-darwin-llvm_version+14.tar.gz/md5/eeb0349137a82c86ca14b6e2d27318a2 +LLD.v14.0.6+3.aarch64-apple-darwin-llvm_version+14.tar.gz/sha512/5971d1b5b4d6928261ffa2b8d4e1ed849057090a6b7d6582e5c69c0cf089fa18b3f3e8cc6de4f3733a5e4fcfaefa2fcde440a1d20df4c2f82b745dfdfbdb0644 +LLD.v14.0.6+3.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/ec6f983f4ae41f7f10155acdafba1d7d +LLD.v14.0.6+3.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/3fe71a15d14ccaca75cbde3b6bdfe914f537ef0a691bb9fbf98f3c09d0097b90dd9da9aabdeaa78aec216983975e822331c93e66e83516e02e315c74b062e408 +LLD.v14.0.6+3.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/c71d04c38d1e814cf947998485833410 +LLD.v14.0.6+3.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/5644ff89d652b2bb786cedec65238a964c744da2182107412c0d8ec71e323b1c55ee4b62999ec2382bb6e645c6de53cc3ab1ecc57f03a16b0e6b1debfb004836 +LLD.v14.0.6+3.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/9d9f8cb68b812a65220bc9d2ffea0944 +LLD.v14.0.6+3.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/8677f1a1d3960e484c888bffa9c19c52d3598fc332eb379d8a8f0ba8adbd7feb44e11625450da8993bb3b2566528b5264e90142ec5dcf58443e19ca14f3d6133 +LLD.v14.0.6+3.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/6e90c88e855a18670d62bd6241c78564 +LLD.v14.0.6+3.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/a4607a96c48295e92d324a92c5db2179a23a3e9d0181bdae26cbc7ca60db3decf3bd718af7b194f31fe9a6c0b494103b6d96d15b7c4b0f37087b37212b1497c2 +LLD.v14.0.6+3.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/a19391c4dc753a30b340ba2c9084cd82 +LLD.v14.0.6+3.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/ba06f94fe7b9a291764d9533124c4c9f36c29120c13c26f2fa0a1f8a304b3b20ee8784bd9d58ba7fd4d04c04a05bc2dbd230d9819fb9959a0f947b9eadc5011a +LLD.v14.0.6+3.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/edd05eca7bb95da8ba3ce0f6013bb2a1 +LLD.v14.0.6+3.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/ec14a7cb3be014c775a1d99564e3bf42ff3e6397435107a52958a0e3871b217d1b3e12289d794b6c15c6215998af7df366bdf6392b1d9bedcca832f881c2b07c +LLD.v14.0.6+3.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/c966609ec3fe4bb9212986bc18448c7b +LLD.v14.0.6+3.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/f0f6fe833e9a230e109d70dcaff968ad39a0e28f321c4f50fa4a022d0a9850aa8760daeb7467a9b4b27534f58e58add6f503fb1ac9e945c4e312777ea61225e9 +LLD.v14.0.6+3.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/671db578f79cea4b1a72cd1901a07f45 +LLD.v14.0.6+3.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/5bd28897d65149d19d5d7d8b096c6cd7b243a4c86dcea2648a6b7b2e846a8b757aba745f97cabc9f63b19a084204b7a7f58be2c208b18b12e9dceef9e68834dc +LLD.v14.0.6+3.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/602961c40a7194bd2afeafaef2023773 +LLD.v14.0.6+3.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/f32d73c06b4ea4444ce0e392bc272d639c53f77960247c0a8fed73f9569b6b99f4b2596b69f0333b657605198b02685ec1f3295f4ee5c6c703e7949a1a8e155e +LLD.v14.0.6+3.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/a6bdf7874e8825131077911c66d3cea2 +LLD.v14.0.6+3.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/aeb1a246b2edae8dc72b8e1f959e445ad41bb5de58fdab61f09c84d89061291ba0d16a93e6810911a4e20a7b1cef7b95fc4f0849dd298ea4586f060d594dc0ee +LLD.v14.0.6+3.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/71874632d597130e09ac021cedcafe3e +LLD.v14.0.6+3.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/811dcd2c42cceed51b0778d65bf7f0a471983f8261ccc36454acc8e819015d712ad88b9b327e8a56b7ae9cd8e2cc9df4aa0cfebe8402b9757f23d245b1140af3 +LLD.v14.0.6+3.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/83b5ca3bbc2d0cd18297dbb53fb167c8 +LLD.v14.0.6+3.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/2c669fb67712cdf34f8217a517ecc6b755ff57e7f80f239865c65962a000dcba0c8619593d4bfde966354bdd11e16ebf1f0cabc6353fe98a26c6c55188be7d4e +LLD.v14.0.6+3.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/c9e8b4975f75ceafc114fa92fc7b7ee9 +LLD.v14.0.6+3.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/f5bb1f0299eb0ef03d527fab752a5d3660182bf49155ec8811d71b8c04cbdd7da3d9aa7673f81be3ad380ac4e46c98402805a0fbd14c2fffd6109d0d5091d7eb +LLD.v14.0.6+3.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/0e4e04c4c2bcfd91c5204e68bff5204a +LLD.v14.0.6+3.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/8ba4e5765f5b6c5da33b2e38fa9a33cbd9d94d03652431ec8555f07d851b732abc1958e0ecc9f572c3575adb8f5938170a96224b1b7f62c6f14a60c19388f376 +LLD.v14.0.6+3.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/003d935795c66643b40320a4ae5db113 +LLD.v14.0.6+3.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/f74cf1548a70256dc5094c52a31e68c6e66ecac1842d59bdb195f692574dc12d1a2c8f85d0010796297b8053d391c60310afd283893d80cc8d262ba12707c2eb +LLD.v14.0.6+3.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/25316c13c11368dd17dd58684bf58ce8 +LLD.v14.0.6+3.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/d19eb96dad3f389a6a10e27cfdabbbf768c799202c0b8d463e1d6c06befd5725024b4c1debe1b6f18503fff1eff56f96f673ce8f176d560db24cf68b7555d179 +LLD.v14.0.6+3.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/1c5c481d3f47329d2b3d8d618b9ebb0e +LLD.v14.0.6+3.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/4cedf9e17bc537486c1b1f19ff5b72ebd5c831c7672aaee425e2ca69cfef0cf64bda1e1f2a9035dd0350b7a9f493c8113fd0b79f749fa6628487bfffb6a625ae +LLD.v14.0.6+3.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/1f5d02129718e929698b564c287c96b1 +LLD.v14.0.6+3.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/8a0233ea231fd3a6a3de5b2af6dace416de90527ba0b38fa3a67ccf73493254f530555597dc17d093b4893c32d4f698f724b933cba7af1be90ced62320589064 +LLD.v14.0.6+3.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/6d329f8f0c9395cef1fb49bac38f6d84 +LLD.v14.0.6+3.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/225537c9795ecb5544f8eb3332ecbe95773b6dcc98ecdae3d7c41b58ef9723ea910fa02434296b7372bb6db0f90d55f92c205890d3055c0899e707a2ec759bf0 +LLD.v14.0.6+3.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/1697711f610424891b474bde4ebe0597 +LLD.v14.0.6+3.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/99a22ad6ce172679b9df50e6b76286bcf400fac5029f363877fd1c56d04c3c9ae6494e5ec6d62cef2aff6a3bb4195e598fd6403d70d55f6f313f56aa7e49718b +LLD.v14.0.6+3.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/7c72c26830b45fee5158a0319efc8fd5 +LLD.v14.0.6+3.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/838b7b333abb297c95441deb35e132b44a9d96bb4e5aca05ee63b67b642eaea23cc7fef37ade7265cc698d74881e84c680eb6e1c3a491e0227ca1c8767e8ff17 +LLD.v14.0.6+3.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/9c7b5c02360c3311e093e9326fa29e87 +LLD.v14.0.6+3.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/d11c5e60b1a7b1e8ee1cb99dc22080f5fc618389a8fa9877cad898f92718a6e61d0a53fc05039a7a975db433cb410f72a64e3d057669755dc127d02c4a640e0d +LLD.v14.0.6+3.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/b25f1433044cbe45b9ad733bca0f6922 +LLD.v14.0.6+3.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/960e4a5c8f699cceb4d3a57b993e98c97315ab877f88f744089e657a9dc65e68cea91a2bbbf999a88ec7da9c5ea312d3c154f4c14c4d9b92b003c93a008819e7 +LLD.v14.0.6+3.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/6f18f7e9b48d84bdb8a4d557c0c286e5 +LLD.v14.0.6+3.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/fbc3124fa86776bc60fc20f15d4470c1165da4e97bc6376b2613bc4f2b283d411f191e4cfe7f8e12d189e5031d7ebd4763760afeec7968b9a3501ec090d51778 +LLD.v14.0.6+3.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/fde2b3a5fd283cb5c04c42299b25ac54 +LLD.v14.0.6+3.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/854ec57f923c920570242abc300eb4f06417b77dcb4891747fee9fe19d8d67a88ab19c70a31ad4ebee7a3ba3276ec5085f461e85654f095e8f10c72ab7488393 +LLD.v14.0.6+3.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/061820b5ca0b3524af981a0f17adcfae +LLD.v14.0.6+3.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/64e40be1fcbdd57e900d424f3d9080b228b0f3a7770a0f4f81a6ebeb1623ed97606cb4a4588fa6ac516b8dc16e128c0d1638e48d3ca20aac61e2c929d0d42793 +LLD.v14.0.6+3.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/51bbd26ec8a4466c5d188302f74574f2 +LLD.v14.0.6+3.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/c600217aa0d9d475ae5a75d3c4dde10abaf4874b24e600f1714f4f221b74e1f20776795ffe7c134e06bd23ea7a91f8c60c2e8e82822e38fd720a890f6b6ec8e4 +LLD.v14.0.6+3.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/2d79c8f3c0bf435937fb1ab631ed907e +LLD.v14.0.6+3.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/21233bad163596c4e80fdcb5faa2e8aeaa4d86f0646f50ade9a6f395cda826e1b6af004fced6dc5acd0950e83e8f39f84453c2c98c658f8f1c93165dda11ceee +LLD.v14.0.6+3.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/8e41116e2d61292fcef755476f3b02f7 +LLD.v14.0.6+3.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/36b8944a39ff35804894bf64f5c9a40b03a240c43d36c09238efd2d27056d2e69a18913ea23d4b5344347c4eeb51d993e80d2e581b54fd95eb14dae25bdbd82e +LLD.v14.0.6+3.i686-linux-musl-cxx03-llvm_version+14.tar.gz/md5/c723d619bde9504d10726b05f0cf3c5e +LLD.v14.0.6+3.i686-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/a167654c2b1d6a81d13dd32787b5cdf9fc23ffdb3bda3db597b3a795b578e17a0730b555f7ac013816f7e9e083f49e660f6f93138ba7fcd181ef69cdd378979b +LLD.v14.0.6+3.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/2bbd5a6e70cb97138a52ace47dd9d059 +LLD.v14.0.6+3.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/fbffb8ee87bf18d9a6ffe6c1fff4b67c2e6345faa2de3238bf87643d368d7a7adba3bb8c01c179783e47eff370f5e8f094bba60b6073a47023277961a4b11d91 +LLD.v14.0.6+3.i686-linux-musl-cxx11-llvm_version+14.tar.gz/md5/1bd7e097fd221a1cb209345f3b753029 +LLD.v14.0.6+3.i686-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/855bdb1c6a586f86a194cc4590b12ae9c6fb0d666966f59d16d6ae5b9c04af435a8ac95863a6f2453fdaf752769e926dc47c61a54dd398d935d15427b17dedd1 +LLD.v14.0.6+3.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/9fd3429f3eedaffab75a1f1eb5387726 +LLD.v14.0.6+3.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/52cee403e0463fe4052cca0695390baea91a4a05ec05245cc12b9970384e8d1a9b58e963526076da7f387c61e6bcd63066a17221460fa85bf56e3d10fe86465f +LLD.v14.0.6+3.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/118ddb25eb2da940e0a24464f1dd7825 +LLD.v14.0.6+3.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/9a302c9f588d4e1b80c224fe3239b6b584f2393150a6f5ee457ee88e5bce59f3c87415bee51848d5c7b742126a5404a0f1fccf812394d1d6d1c432e3bc13535e +LLD.v14.0.6+3.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/e8918ebffdb6abc39156d35b5f2f9e48 +LLD.v14.0.6+3.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/387085aa9c01163da2634186ca0b498d79d8a44c14e683e8fee540ee32f1ff9594a66fa3cb3c49cd49d06a9f327c37e3ad36cedfb8a862a43f278480a97da3e5 +LLD.v14.0.6+3.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/caad7e36b4bd734878ffa6ac630da181 +LLD.v14.0.6+3.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/67f94119d100df7c1236414b398f5bc39d9e891d32abf0b5bfc03f605841ec39a5c4a2bdb9093a8032baba6677b92378c9b5372fc7d3b0d02d7064752c24a0da +LLD.v14.0.6+3.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/ab1a611cdfdd94d862b49a8d74e4fdee +LLD.v14.0.6+3.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/ce5a3183c53f8c47c3e9f9e9a8a78653ebf475aa31bffa91e1c695fc526323835cf65a1013cdb800eac3b6e5288128846f0d7862c771c3e0f94d022ed3e98c81 +LLD.v14.0.6+3.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/b48f84396ccc0227194416432b068967 +LLD.v14.0.6+3.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/cbef6f8ab00e279980fa7de6633508bb473f292daedfc822adbc9dc1965c6887cda3eedab9444d50aeec259f92640d45c9aee099ca188be03848f524e92fd1b6 +LLD.v14.0.6+3.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/3ece870b36d697253e8f32ce7467f081 +LLD.v14.0.6+3.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/c5477fa66990b374b3cd27afc64f343042841f05f89aecde646835aee5db8e1d1e6a4c64049ed662c5bebc13ebc6730b3aa40e3cf4484d8877544ac66d651bdb +LLD.v14.0.6+3.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/07514a3db1b06f13c3965140ce7e7fda +LLD.v14.0.6+3.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/2072f7626285d2b4dda2d7d6727287bb0b2048a5f5a6c46c45f3981faeb7405618d7d2375037104f5d57756f275058c5c8c561110b6adf0d5e674f5499339551 +LLD.v14.0.6+3.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/d4ef5ec6287d636011640f6da7ad4882 +LLD.v14.0.6+3.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/2875f3ede77081dc5fbbca3df7da171df6bca3bd339a5f74fbf1acf016203293fc46263c119981b5364e7156e92aa76a89641656132c3c1e52af9d5b62d32ccb +LLD.v14.0.6+3.x86_64-apple-darwin-llvm_version+14.tar.gz/md5/58f8723778b33cb8087cd17bb384cbc3 +LLD.v14.0.6+3.x86_64-apple-darwin-llvm_version+14.tar.gz/sha512/38a3eda402f855bf8db33a84564b1dd4788b04b0048ab5070d58dd5e693c4855a97ce3052be6c775c5b8e663d57bfd30049f044e456368cc2ef69c71d463fbfb +LLD.v14.0.6+3.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/c117ee72749bc5dba3802af434860679 +LLD.v14.0.6+3.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/914521adb94db85b408665c3552de2dffa1247c7d7036c9df1716e0cc6401281d90378416b9af16efe04ff975f5e0cc05c9616d7c8da36e1566bee9e38347207 +LLD.v14.0.6+3.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/1c7eebbd69b1ef2525be0fdd26abcf59 +LLD.v14.0.6+3.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/b0cb3a271e7b4590692e37f830479d7065467bfbcaf1abf04c9148d6107def27c10a3f18ce3d6014513c8577484021d6c1f59bdf8acc87f1897e00869bb20cc7 +LLD.v14.0.6+3.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/0019ccaa2c44c163e2fe7367b15f37ac +LLD.v14.0.6+3.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/212bb2b4db2b9b557cb47e57f83e9d8835ac6a608226ff9ccddda217dd41c8b6932fd990073f51565dab6c893145fb6ce3d19317396bf9631778f04c8cc32014 +LLD.v14.0.6+3.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/e9b0c8a37889346dd9514dd218a21bb2 +LLD.v14.0.6+3.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/2ec2d3948c2a206fb46539a96b689646433f6d35142d1094a35642a55a42710121c50de0faa068dea83e124843582495c10fb7aa183573b6a9db784e8472e12f +LLD.v14.0.6+3.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/3a53529de043f7cda9af0c8edbd2fe7b +LLD.v14.0.6+3.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/36be33f081cefcaaaa632b731762e6d2d7b36046f2c8d47aa694a55be8ff14c2214efd99573c67d441268df906974329f0b0b39987d39d226765070f6bbd6b14 +LLD.v14.0.6+3.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/31514c0017e92afd8ca35c9d8baff6f0 +LLD.v14.0.6+3.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/b9d1322d6816075c18d2a2eb0c270cc66f311a45a777bd8079ab36a585942593e0b8a951282cdaae7484d6177ebf64695683814dd0a808ffc5006fa99853935c +LLD.v14.0.6+3.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/e8180f2bc4193503b4234f47bad81da6 +LLD.v14.0.6+3.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/b73aebc7f36657b2e99b6b1b12846a2a5cd2a630fef836658b96a7f71711b40897a9c56593859b45820c122f166441ebbc0139153de52535c66ebe432638c113 +LLD.v14.0.6+3.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/5cade62c0c5966c58170fc4cc5edebe7 +LLD.v14.0.6+3.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/f3aac09eb5cfda3300498eeffea5d31e413d65067394ffc1ba8b3416b8db05ef7a810d2d3f75e7a47ba8e15b0be7eb7da933f67b820150daeccb14ac78de12da +LLD.v14.0.6+3.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/md5/a31b9c5ed38ac28ad93cade4f3f3620e +LLD.v14.0.6+3.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/sha512/9bc26bed1d8bf0cf3854c06397cac893d6bdc02e7c7f9736b1fa873e6afda0c4bfab3c724508382d4304137f8f7d7a77adeaead91844380254c8a35a072b3c68 +LLD.v14.0.6+3.x86_64-unknown-freebsd-llvm_version+14.tar.gz/md5/13da89b15a554d17f279143442ed6c2a +LLD.v14.0.6+3.x86_64-unknown-freebsd-llvm_version+14.tar.gz/sha512/9e74f62580141f1cb09cfe21af016bc5b56128e03782a9727fb82f7f7bd802c0373750648ba4d43e6ded39180106ef3df190486029544c4a8f1d57518c45e118 +LLD.v14.0.6+3.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/11806c7a732d195e84fef72d659a9055 +LLD.v14.0.6+3.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/17c0c69d51b088b773d34016f66723a913d6db5ae82f5c3ae1f2b3429dd916b565a8b119d0c032f09f77105393052ab6206312789428cd52f1c397956d0a6d11 +LLD.v14.0.6+3.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/1e8a08e4837a889cfca48bd7504f20e6 +LLD.v14.0.6+3.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/30bdcb49693f23c439cecad3b7a66b6a6f7533d85cfb43344894c67de11809f4065784db95b968b013ab73dba0ded761e1925299e2606282c9fa1c9799e00978 +LLD.v14.0.6+3.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/cc35b93f1dd6917e4975a743ec103c1b +LLD.v14.0.6+3.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/9abbe63e95b358384a5188ce945a69671484ac68f07a6327ac1610555114b699f2c1b9844f31bdc83c297fb565c8270ffa030588bcdeb52576314ab1686cf07a +LLD.v14.0.6+3.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/3f2c4935fc699fe54cbc1ce6071dea46 +LLD.v14.0.6+3.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/f47ef724f2cecfc1c64b588d8bc6367427e3c59cfc34af6fe4a02e6d9b267814227938386313368702d69bd0e5d973d8ed517dee5b76f484087592b7fde57bea diff --git a/deps/checksums/llvm b/deps/checksums/llvm index 905a88f80a2e3..d96d2da078b1f 100644 --- a/deps/checksums/llvm +++ b/deps/checksums/llvm @@ -1,119 +1,119 @@ -LLVM.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/533cdc265cf2625457f3655b8589b43f -LLVM.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/3a0c96b2fc7c16fc33741933654a564574a5059d806a3999f0c0c0af31f99acc5948ef09edb21eae9f6d4362a7968af55781048029a875ea92a981669c6e8cda -LLVM.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.tar.gz/md5/4fbb96de11f9f64d5bc3f467a36b5584 -LLVM.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.tar.gz/sha512/bf08ae144e7fdc7f5055f98ff2a4e8d5b46670db00ed498cd3323e10df86506172ff41aa6f0815259018168bdee40a73775b962c5f0ba8639c28b18d65cbf927 -LLVM.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/73e92eaf551cc50ba8b1072ea5a177d8 -LLVM.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/691090c34cb5fe5217c44f1f7f0a411b733bd8197baab7c5cf2eadedb4a6838bd39935795a7715521c8edcf0e611c6555068b49e17c4b2465201aa1772010bab -LLVM.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/3f0783b752b25d2d47b557c3504f35fb -LLVM.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/ffce30b3286ddf0c09328b66876bf3c2f2330ec0adf5bccb4039be3f09cd55acead7c34feb6f9473892338768da4fbc3ee8589197f420d89fcfb2039ff15d889 -LLVM.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/3ec4084b5dcad58981a701fbeaab02e3 -LLVM.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/cf95a368f5a6b9ddcc368ca91631546a92ab374d9da74aa6e2036d61ac788f8348b50465c241853c37f64608bc2d067b96d17990c03ad71ce69032cc012ec433 -LLVM.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/cb4072b14022490456636e0fda20e569 -LLVM.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/1750a2be132a0db76db43b91592c5144ede76c5b205693d5eccc2fd340534fd5d90ab358a8c1af08deab8138e6c82d382e3e95c13ba027b1b92b6f955da1ced5 -LLVM.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/f2f7f1b86007e297c8827d5ab58f5c7d -LLVM.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/49a9efe8cb1352ae38169a3545ce1cb719d0f7fefc29a24b40fd3d59f99c98483ff33e869e283463f17fb63b883cca792f618296a840eeae82a5855a9dc67e86 -LLVM.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/24c659a871de64c3f8d54e7bea029e84 -LLVM.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/3e4487be7762672a4dfd5f7675945d2b640e81660153036ec2b5cf44fd278266233a94a0cfa337ec11c5b4ad6fd46f80406806bdd3a1f1eb9e3da43184af83d6 -LLVM.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/39412690e1c3da7fcf4416184feea3be -LLVM.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/142eaaf10bc19b5e786bd2f8edbab31cd5dfd6045e86c6244239fd7288b7556347adbede12cb40fff02da52295edd85c172fe17ea27126246ff4c8fec05b29d2 -LLVM.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/0fa28f8c44961f43899886a6b6b0c0dc -LLVM.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/9dae70462e8fab0fdb0cd589470bb058569c5640e60bf74e600821344561afbcbf1191e47df9d2117ff5934bf707e57e67fcb9d889e470531505bc18d996b2fa -LLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/1de340a831cbfcb7d026a77d6f91070e -LLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/a36758040ca5d84a514b4764dc60c97e4cb8ff7737d1ffeace3b9f0b0c73716ee7202672291d7bf24da03e193b52292b0c2cb74e200b2eb15b3b982c8f67c3ee -LLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/03042210289cd06ead94a0d84234d99e -LLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/7b16eff41381880a42c6c13f6241aae4184ebd9a5fd696afad4c030f815a210ef54eb877a4e375d9eaa31e53ba71594174edb4c17e60854034e190a6a6ad084f -LLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/c2de107822fb76243378e9de06278775 -LLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/e04a608ba0c7ea6bf827aef2f060241c0891908dd495dbdc675db81114f07c7ecaa27c0df630aa1118f56c71b59ec3f81e96e84336cfcf4cfc16464da0871675 -LLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/58766a44a4f74bba6204c20a6a00a10d -LLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/5776b898b4b988d1fc44a7961fd759646aad17d0f4b5a3544857183ae5e863a1f42e632cbbb7712b95fd418a2c680497ba2c23dc8fc5d6080e25ff94ae289646 -LLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/4a78da7a5b639353e61e47559072e190 -LLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/82dde74099a64b35e94f53765f2748eb65e815a7ccd51a8d288c37ecc306eded95cc4b424812e9e59f247f3f9183c3a1bc7f244ea51f2d1912445db4611c030f -LLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/c49efd85a0273ad684d13101f4dcfff3 -LLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/af25f90527744970458792697027250f543d8ab1ea068767cd1c240a251492ce33b2211e6850a7cf36f16f6b65ba11ccb799f6bbaa777fc92c51785d0188e101 -LLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/167f874b6eae226e02f32c7ac5859b2d -LLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/1a3b0b128b5b8fa26509d3b814f03ed1f1a6cfbc0017e5751761d0aa3b3821dfd4165e7687b09ba03d11c29ea533d866bc435e7187c1816405df37f897ae6d2d -LLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/29f396d657b0e5340443c71d59faf366 -LLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/d43fcdded977428b5938aaa6b6443326cee9b522ceaf5d871c0ef783773e20cd955baf95d0639db7273a8fcccaf17259b05d77a347aa6ac481c446969b436f24 -LLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/c17e06330348f30d3f74f26db2499612 -LLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/ce308261d0be8f4cdf3c639085a38779a214abfe6bfa38626810f9e99c696b133af20a592ccf9a301edd2a05a99195154a76910d8a120178764c8692ec9dc4fa -LLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/203772b8f6063cf6d8d4a7c249fba457 -LLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/ed7574ab6915db25c0b9675be8ab8db04f71cfd775626cf67142d82a2b32f73ba5e3689108bc10872863bcb6672b2cce3502e1bd941ef602559d7fe2c9d8d4e1 -LLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/6a08b5cec8c3147ba678db787fc4d2e1 -LLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/9e8c77bddb64c0bac8326750e81cecc38d54168e1d7760f69d17a1bab4b4b69305c2a75e03f5f10e40a2b2bdc0f07eb2cd5e48e3f8630722e7a30940091c7a69 -LLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/b018658105b8ff058a1c8aa04654e895 -LLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/a182645261fba4d41e89473fa18510778c236c27ac8bc5db1cebdfc1da2617e9b4b940f08045b057c271d44b9a61caee24f4204e1a98cac2c2f40284f14c3e05 -LLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/7100005784dc8202c966c4d9b0f8b4ff -LLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/f38e939bb1cdbb4d895cd8300022094e16b1940eaa450b4098c6822126e83389f52235dbbb22fa776930ef508770db074f5f378848057c693ad1690337ae43ca -LLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/4c8003cb2fac076627ec325340792f5e -LLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/cdb25936c38077b0b486821158a06a0d182e756cb7567cc9e0b0e696fcb10bc2597c41e7ae6316f4945771ddb18a03864ea2ee6ca93cd1eb737eb365933e3a4a -LLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/f6e0156ce3a0dd264668aeea0b6acfef -LLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/01c31900e79786b719d535bb1f57a36e54d56f0690361771ede98f2806fa30f825dcf6d4c176b33d73940c838d8e69440dd49180d3d29954ae02e1525ad05708 -LLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/5ed27717d90e862b22226a11bad4696c -LLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/47a8e6aadc5e736f4b78ff059c628488a685ad3d97a0ac2b8c5d048b116dd0116514399d66983f3f519e8701ea4a851986b94b17405ab31480f09acbd0edf9c0 -LLVM.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/7d154fd2adb1cba4312fa2ee20d2147c -LLVM.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/4a26b459baf5ba801ced522b4575c81328c9212cce9dbd1af233931c95c9b6d869e81964778dffb5d376dc4a258adb8f2986c868d9c90f480d6fdc021f252187 -LLVM.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/0deb9f1cb47d683fc4250071bd9490fe -LLVM.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/2717b2c15b715de323d4a7d914f191e017aaf38224e41554f60c68885b1aad625fa8fa8b3e305e8703e8772407284d03d229cb2d2f9ff219d7dbe5f91366ee9b -LLVM.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/4d9a0d826ea67ab20769999783641abc -LLVM.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/7cf33e40f6672703d88e8a0ce656e955c4a7d010b857cef89f7dc56291b1af1003c0dbb5ab32e0285260216b58e30a38cb78da28d1bf08ee66cd7a8218a835c9 -LLVM.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/54736c04b06b3e1f27673c5b552fd8de -LLVM.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/942f8f4c4191b9ab75e2a03174c0c1241c4c6af06b6f5833fd0c56d57ad195b45374af80089fdb1e2e431f9cbf256a7856ede7e8f76712e0d3189009cae5995b -LLVM.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/9738446d7d909cfaed0658cb104526b8 -LLVM.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/8c8db654a9d2da00195ec1e1beb89f10447a0a73e8d3e055b456f0f7d8e1dd90d7873ef9da2e2b27528b316b334166f2286755abb33acfc0a9eca06b23a26b0e -LLVM.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.tar.gz/md5/16134c865661a0f29d9cc693ed3d5510 -LLVM.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/173407929822c567e7841f24040b82d9981c6bf176717df6942d14ad00757871c1d2a81ccc4467abcad59a1d874d611b7cb5f0cff83898a74fed637781ae0a5e -LLVM.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/d9a7eda0ebfd108c6a1cf435674be3ba -LLVM.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/381bae57c71c387c4608de3cc8a3477b826461a8df1b98fe06259c4a595066a816e96c6731565ea1c3166377a0d9aff722a483e47c76ba01293d408f2eb3b577 -LLVM.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.tar.gz/md5/0d312cbea5545a03a49dabcf7519191b -LLVM.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/39c86e52d6298408fee6ab3de6416b710b782ec0810602ec76eb76a87facab57abdc9d8a60be9522c0665766a24ef0af8c83437493b778f028012577188572a5 -LLVM.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/bf5eb915b604825b04ca84b1ec3e9f1d -LLVM.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/0907a5bfb790c34a8acdd28aeb28ac36a6bec25210b85e2f617f7145ebd80a3d6d4718c633d45411218a5d49545c0adf69c922c19c4674b2db527ce7e7a0d084 -LLVM.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/0972a1aa6efa0accbdb1be9b799aaa6c -LLVM.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/4bcfd7cabdd5ce119cd848d8838644c8f4ff189e2998b4d3ae69193cc9c64ccffb31d08d66b2f81f86876b19266c6d2c362314f539f0612efb69b6b6df981469 -LLVM.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/df4f0d07cdf26759104686d4f36e2818 -LLVM.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/5983d1e9c1a072045c773dc438da13715faad6e0999fa9a3405821a4922ed8fab666186bf1a8dcc45743e27e5065825df8bc92a06cf3321354aaf022191f35c8 -LLVM.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/216857bad881f6a50678e2079d93f9bc -LLVM.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/17cec3034d17551eca798b6e6fc355f746ef71ce2337439b55c2f55b63f0f89168cdadfea578d7971bb1f6eb096bee47e94e34f85ae99d88e39d2052d2a51a6a -LLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/a2b9db6135bafc8f80d275d676859d13 -LLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/bb98b51aa3a3e2f4f58ab6ff0ad36536e4455a602045f811cf30e04e87efc4be4be27b905fc1716b4ed3e2971a5d9b4bd41c438541288ed4240e608adbbbddec -LLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/a3a189210c2b6e2bd32ad7ee6d353a82 -LLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/3304170ea4c369f24a99e6249401a2ed078693c9e6444a03c65dd033bd539326f0444e0ea71e4d8e84dda9cecefb46b7fba87a302365497115e4359370b5fd76 -LLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/dc0be3ad6e188d471bc1b0f7a07aba35 -LLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/0d9eef5b33ce0bd2bd6d7467d198e2f00f6c31ea0cf116491e368c78882f8437442cc18663d96f72e99fe201041d08e79d61c13b3998fdecffb1a7d6f2843a35 -LLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/2563d77bfb2317192f5cd0a00148b6cc -LLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/d0572501e91cce51d662a1a6c780adf148f34e0f4a151c1fb7bb55bc064f7f6f29a6423715f9e2332205e50f076a561ca4b0992e834b234a77f7709ab4c92786 -LLVM.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/a096186819d3f06c70d40498aafc5879 -LLVM.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/67c83539c0272d090e1a2221748eacb4fad15350bfc84f7839227d623ed234878752c38f412f0396b1dacae1543dfa9323e184b98cdec3fb9b436aa8a907bce3 -LLVM.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.tar.gz/md5/c5402ce51e61f4aa46dc56942c374746 -LLVM.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.tar.gz/sha512/f9072dab2ee52b5d8116cefbc32b023745860af644de867eef658d0fb9308d5868a5a871489c399cd95efcef9075c7a20b877933e9a243454f0819b4b0cf5213 -LLVM.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/ec70c50570a56b50df05b140f320c475 -LLVM.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/df598d58bb083634b298edc0e4e9006ebfe76029206fda10a58481be1872ea42ee441ebd3c36dd59490c66e89d9db0f610799be4b5d4c96dc315099e2f19728c -LLVM.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/4688e7cb1c73e5957e0ecd0cc14ed53e -LLVM.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/b825067f87d3bebf6e50a472ca6629cce7272579d473e36231bb2b765e509d4fd23cb899ad14489ace12f5ba8531089392d5fb9f3541351b162664eb63ab1390 -LLVM.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/d9762bedfee132f62012b31c3cc4719b -LLVM.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/29a2f8b5e4084d1c10aa15ab7d25812508233cc53c1dedac89d5951bf6488641461507fd769be6e4449fe435c17e933c6a295b00093f158dac97b92b448cb149 -LLVM.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/c68eaa7c015201a8292e1f1d8cc65fd6 -LLVM.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/ccda3083ec0246969824d8c5cfdcb965585fcd1d38306ea160024259e54a433e421d058b6ac2a924f091e0042010ee0512e51af928a6b0762bda0cdb7f99f120 -LLVM.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/853391923e6372c3ec18ff5a44c338aa -LLVM.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/166189bc0b81ca270bb017e68cdb05d4c9d1d1664bd9fd24b9bc49e14dc1d811fc6565958628a062b509f8784d42632603de31df1d4bf1b1e9ef9ab9c5656122 -LLVM.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/2907097b73dcc8d8999b1df921c4b75b -LLVM.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/6574d330914a1535b6e1be83f889c6a2cdb474e83ddf00315662a146f1e29657bddcbbf261315446f749c9859d8fc496be084f3dc56572367b0ad8d25f09f06c -LLVM.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/33e00eb48fba5be418d76f1c1d0ace78 -LLVM.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/10908824a5dda3e69aedd03d0c7695379f465b284b78681d6f8419e7304702ede9c721ae0b54169716abbed429db199450e3fba5b0e5d56e21867defd9573cc1 -LLVM.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/6f8bc1a92fe8f3e85991739fdefaf1a8 -LLVM.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/4ff992b094a6d03256b4eaeebbcbd023a22b54b49976471c16ded0542e1a79e46da43cf0346d54760cd5d18e9b3f108f42f3caa37593a6c1037bcdb4d4461923 -LLVM.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/md5/a3b82c7e8e9af0e7431d7b3a6b3e62a2 -LLVM.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/sha512/8fc9c0d2ae985d4da89734aa4b49fb368d245819c1fd4a345baf354d58a4a0b85d6390e1d6979b5ae757e29fdff58579cb7ab6388c596d9923e80d34fac4766d -LLVM.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.tar.gz/md5/9bc7eb74f530e71a3d2dca02a200363d -LLVM.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.tar.gz/sha512/3beb680621d3862f18441471cb9318d38da108bb7114423475ca67d3e8998652e4046bf7ffa40692dbb63f377c506e41d3f6c621bc3b1f88366ff0fc6cefe59a -LLVM.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/ba22b4e204e585ff18c3cb57b8e2c87d -LLVM.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/037bcf1c9e0fe5faf40c4c5f8a06b9f90fd8ea36d3649f4faa6927df8615819a2231b4393963a8f29070b0dcef6e755106b12f9cdb2a9a61610dab35fa5aa4bb -LLVM.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/e33235975b1a6ec8f69d40ae91d0e4ef -LLVM.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/1ccbddc51c6d9df883ddb75257fc42ed95c8b3d3fc99d6bbe9aba508e142865bf96678272719f60cb28a3b6f49adf68d390ec50abce47b139e6f7db653537ef0 -LLVM.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/a620552217c5b3b5318be75a3ebe31fe -LLVM.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/5703664ffe0587035cc12de3bace722e7c93cb920810a36beab49d456ddc6d285abab70172f95a83e952f5c5254dbe4825e465d2efc905c6798d7c4cb258ebea -LLVM.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/4d90ccd98213c482f202034d16442be3 -LLVM.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/ba41bc5f229e61a87f517f552fce604ef4fce17523b6b1b856ae7aeba4827f114a0eea73bf05262fd58604fad3e746c8aa54e9fb87cd97aafa50cd9d3396126b +LLVM.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/8eac4da97313ba075330c1df33b7a85f +LLVM.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/7e49321c13c854ee43e7b5ec66951a2417debc79e2874bf35bf2a15238cac622bba5967d8e833152a2967b259b4075573f28b4b3e43817d599376c2ccdcb23bd +LLVM.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.tar.gz/md5/2677a6865f3e9b53069c231594468730 +LLVM.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.tar.gz/sha512/dfc917b5f38fdc96492b0c80d82931a1a625452498aa0f9ad50f106673514e922c109a1ea7a44e69473abecd527a2ba47d8aec42ab22ef5ee6cc739813ba043e +LLVM.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/6e89784f5981feea414f9d44e4443a92 +LLVM.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/a37ad85acf99bad4aa435ca5ada57f75117211ebe68a9eb130702d256710ee3fc7c4de6f3dd058a06dc3e2f4474b9fabeefaa8eb0f8b9317aee0459d2d686610 +LLVM.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/3b63e849255b7d5bc6b159b8a6612c44 +LLVM.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/bc5d58c4be42fecd9e9a093eaa56160ff552f17caee2560705efe0532ebaf9f580f01fb44fed46860e6d3811f0386326f14e71b1d267a055484ed6620c2553ba +LLVM.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/1ee1593da5b0a86425cf742335b055b4 +LLVM.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/31bf4ae6b3d0eb836be946f3fd4e98d9ea4596a55311a9e37896a639dbfa4f2ef2ff3d2ee716c5f915c68d271646193995d4312975194264e4103a22b6c013b4 +LLVM.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/bd1c69390d4ff6bc47ac7f20fb2fd596 +LLVM.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/5409aca3de4c18f97367bc6d1f7b9761de80e1e7193f981b5870f6a4315ae6a7e0f7dd37482f237996759f4d04269aaaa7ea89b912b83fe2016dcf78f94b809d +LLVM.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/8ab3ed766d7620b7ffb0995be9126dc0 +LLVM.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/41fc3a758fe586aa16051ef7b88212ba68746ead8446d5af247f1a337b44a60a7f8eb14891aefe2195d4ac6eb4c0b97f047c5b16a3703053986ae50fde4e4854 +LLVM.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/481cff2fac3420b66a73f8541cecf8ff +LLVM.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/c0255dd7d30eda1183aaebdf0ef5d54f5b99c9529a9a36a29ebbdfe801dc6ca4be6ea491584d5b608be1e999c5504211e89880ad729177a47b195de37ef439d5 +LLVM.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/6f664b22078386c19354371eff14cd7a +LLVM.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/9bb3a3ec6f9b6a2a8daca946de94a0d7297880cecc695d39d049347b97a7c3bbe4e126c41c34c7ca26a2ab93b13d38c8054e0fcd373e7e73975c1a94988d43a5 +LLVM.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/51d963d135d08f43897870a300428166 +LLVM.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/7cadccf6838b87273e6afaeebfb71cc3c90bab9d0d3211371de9a86364a3543d97247608f36d48b598c25eb605c9ffb5eacbd1f55a6af55429caec3b099b6b53 +LLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/6560ffb0cb4dd783fb658f0990b963f7 +LLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/2c4e3775471d5d385b34471e700c2c2d607248f10112e3b95723181521b6ad6a560843bf047aede8b3c16dab7d1a1dfc7611b55b0b610d5dd42af2099bff70fa +LLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/6cb2402baf7f4039b541e42644e5ae6f +LLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/4ce2285b81650b75385a476125dae6c14548f4e70989aa171609fac2d633a0d0318762cb66331824d05faef381ebef4913ba70c97d12043cc96fdb32bdfce1f9 +LLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/1c3ff1c0213d092e1977dc8903604d20 +LLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/0abede35823168e4d1a6af03d5cb160a731f7e3e1ee022b915f9516958171a78d2cc536786c7f2d15f5a4684bcf0e4e33a22147999b53df77040f7d3b2fff8e9 +LLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/18ae412527f6550ce7ff803ecfa367dc +LLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/327b794da935648cec99acf4dc5aa729c1495ad102bd6a3bea9f579497cb10aad79d912640cb4064119cd2535b9dba20701a99a2ffd8cd6c8e48ab38613d62ea +LLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/14f35dfafd979c4da4eeaebcdec3248c +LLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/d33593b8aa8ce51343767c0de6e7be5ccc793089bb9fa86e13ba7a732368767b96bd5219fc890fd7c6c151a79419b0e8af5c7de1f29b79c36420c02dc988e636 +LLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/432bdbb6bce6a0b0a00958b528eee64c +LLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/727e8c254be12f8a8bd583100d72fe8792c9e5aab99e5e5d7fe07a5fba683792b8ac377c9929dfb9ff24da3044a8f4bf467d7d317ce85e8ec982aa53895bbe03 +LLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/21b4883a4d2bbd287b85187cc93a8bd1 +LLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/39b5b5668057afd60f9cb48aabf09d9fb404a4e14db5eb13ae6524802795cd5b23a2aadf7ab0f3b74c73a782ed72ed9a82c3ebd98a7c6785a4cb478fe128cc8b +LLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/7c969cd27ebfd0ac55fd9965ec064999 +LLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/5bf1aab8b3f48494ae0968434ae5b1670620a7df113f9b85a781e7ed9025e4a91b8f3bcac900657c8d72254d1d98c7399998b7b14fd164d303749e6816aedf67 +LLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/4c0b0d214a471e2a1f1c95368c939da7 +LLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/66e840c7117f6c4561050a8719ddf91e454f5209377357fcee15bb97e69735dfc1def3571adef292a52bdb0f6c9c36b99644b86770435a453273a7ceedadbac3 +LLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/208e0fc55996d91e60a9b44ee5b3de04 +LLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/21d75958120a8e279b8c7f05f06338c3904cfee2d6dca4ee2f98a7b391694f147577388dd4662e5b0b5bb54707d7bd9fd5e9b8011519e6c275017d856c640053 +LLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/1b4d74a43a5f592f63fba7247caf2d38 +LLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/5317ded3758e3568ad957892ef051460729d35d4da716d272b88de4789696d06b4598417beb9e076730e6e02a0d20f3dcf4222638986b8869ca9fb400a3d6808 +LLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/aec5398120865028826330cf2d38f590 +LLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/8e0acbe7561692f272858c6d9f918a374438f5cdef94c2522012dfe671594c83e6d63f91475c502c413df90b9cb04e5e8ef199111f179f6f1d2f840aedc51ca1 +LLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/5d8977d45615cbb8fe0bd103364bb100 +LLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/986952f4a445869b607ab634f9e871356f51992ac95a167b45a6d946cf7092df1babf45d409bfb86f4433167b9deec6b9e394a75c445a37740180730b14770d3 +LLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/9ba14a5eac8c25a29553cf5c07a9c61e +LLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/3f68b6348f05bb7bb3deac81678233b7804060a5dd9ba875e68fa4dd59a55ea8447326243c1dda24de5bbe551af31b7c94b66cbc047de55b7a21a85230fa642b +LLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/02a3bf9ad33c815495be4d426281445b +LLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/2197a60255b3cda2e7e0a00b81afddb552c5a65385d28013f33dc93067598d4246097a130fb18568fcfa5c70c8f7df04ebd1271bca40fbbd9c57907152d50f0f +LLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/c02344cab90c0a78fe3e949c9ed6e9fd +LLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/ece70d7ca2c5027deab4ec26e376a0d193d1a9c703c26a7d9c29e03a853741c3296560511a5b561535f04ee61fe571a07638c935211e1d34068c0bc108106455 +LLVM.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/454166455da7bcd5472961645e44b517 +LLVM.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/64ee815667e935f088ba7d215b825390da4d58843cc878b9474479f86829f8db92c14e7058d18cbf419b140208123a2bc3e5952bbf07dd03997fb2b2044b1111 +LLVM.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/9930627a964dba67f8245159fa97c6c7 +LLVM.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/8bdb26d9d2d5ef3fbf64782c318846a1d2a119ab0b8a068428937c71b04cb2ec18b6a7ca367848a3e9afb7b649dfef11954dab0e27757f41a515b188f4504941 +LLVM.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/bf54dad4ab1c66fa0494eecc55689440 +LLVM.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/9f1839e23b86266fea0a11863cfd874c256ceec062fac843bf49d780e3431439527421b747869e1aefd6038563a93815c62a935ae323e19aa61b33f6cf4a5b64 +LLVM.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/1a711b82a5318c5b425df78280ed274a +LLVM.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/df956f922bd1a9e2ec11c84154dc613dc424f3dadca20e908d39b5883e2668f8dae24cc828245b420a5fb88f8553f4393229b4dbd5b0b7f468885bef365609da +LLVM.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/50f42d954ce79ae055b1d99e5e074f17 +LLVM.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/9c338a86f77329b456b49b6b87a25f04fb39c7e818b65fee12cc83d7d9ef6199022899745920b5a0b9450537e1a5392463295472f63dbf317fa6f35cceb8a6f6 +LLVM.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.tar.gz/md5/af0adb5edc6f5573d911b285b90a3972 +LLVM.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/fdafad0afdc123b0adacfa3dd546004659a30a4c28ed118056ee8e69820fe1f33e6f052bfcd39ef9fe7677ac23ab87e52c98c2a248e7bfdb58a3da651ed5fc16 +LLVM.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/78373933d33910dd268eb66d77d7b9ff +LLVM.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/bb9933b984fd494a44662a3b545700c99d166bf7995654c8347fdbd19226c1ea699a53c6d4dd9db17458ce6d34623475c8cae97ad12d21c48aaea8652d3029f9 +LLVM.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.tar.gz/md5/aa21cb389ccf5d49514e4742e34c3a8c +LLVM.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/29e6b732a77f1bb2871d185bd9b8c79f721124a659257085b36a19a520ea9146d4b3d9749d01cbaf06eaf259f240ee634586b9abf53b580a8c0c9aa51575e7b1 +LLVM.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/b4ee794dd157f1f2115a169176700eb2 +LLVM.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/e33fb35cf3107255769d8a788d59d39a7c4fc5e50ae489887b767bdb53f5e2a212eba485af8c937e847dcc96fd987176ac5a97cbd7f72aa84707404f2d8b832f +LLVM.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/272dc8e5a14ac5ccb513327fe2fffca1 +LLVM.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/2b05f64ec0a6aac2210cdf569a32eec727270cf667f8e83167f7e45f62dae5f4e7b9d8c6c24fee970f168e5fa82fe7d8dd5f4a277feed410fbcb754257869c26 +LLVM.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/aa4aa3280955c48432f5e44ede0cbab4 +LLVM.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/4f47ee3a6c0d225108993bdf5586cc5071646513c9991765efff42b35c191e207e977673a688ac33b7d6bbe6b30b394b892cab8631e7c272f01ae24a86ae1f8e +LLVM.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/f1d3a23804ee7383bb545bce4f1d2443 +LLVM.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/5a7fd24e8406400431a2244e4c19dfd128b050f6e6968dd3df686969c3458d6446ebe09393e64989369e38fd4dd099e98ac5f359a7401b4cf56f1d5b777dc9a9 +LLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/8971e352ad29a536d48938406b019eb9 +LLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/f3a32879f34731c275bbe5d157f5776db176be2424ff11443bd9325d5b3f1d6d478cc9d8f5a8399756c38da6d253d1de13089f20113c24d2dbfb0e8b80e618ae +LLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/5780b46302e5388d68f7f5dc0dcd5ab5 +LLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/4a02b55aaaada0946c3f6dbae8bfe0eafb1abbf5d8b231bc426925ac28e9b5353f7bd5e12e723a54b72cf1a48193c5cf22cc68bdf4e9843bb4301b9ac1effdcc +LLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/08fbaf91ff5c730977f15e869f73f582 +LLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/6492619b05cb4857d17a07494b4d8bed87dc2fde4f54492f7ebac734a81bb6a6d854e8f0e3c9d44b5618e7aa446eb179c05d7e5e4388d8ce3d1e3a70bf5e2260 +LLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/01982b5a59b24b1e06afce35a3657ab5 +LLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/a78cb2d023b12379963a902df9eaaa6caed3832420862852731a830334177d7af38364c75ee216171ac3978474981a50153ce2f62e6e137cd8c1e403590002ec +LLVM.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/45e76481a0816607a619cb74014ba50e +LLVM.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/d92235a2f9f271f6b2f4d0c70b143cbb7a57fceafdef168f5c109e03aa060ca77374989f80958efe8f6750dfd38be64008c8401103d2240b6139d4ad55595610 +LLVM.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.tar.gz/md5/0b6ed0e46bfb8d11663600e755bb43f8 +LLVM.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.tar.gz/sha512/5837590ee9955e670bfefc6746d896593233a4b46033a933369df70f9af86af2470986a9d0903e60e14966b3c65c4969d1e599fd08f7db3b42b985710c43a883 +LLVM.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/82c3b519fe20a72f6a7a1540910acf1c +LLVM.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/870978451a61ecd9d3fa294d6904e0dea1773032830b2a4e6489fc60a0a4d34e57224249f41e0292cb04647df2363dab0ab2a4f620503518c690b233c85a4d5a +LLVM.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/86747234744c7de5d6216f852d175333 +LLVM.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/c661e9f5a47fc8783365a3718b2e21dca72cf8bd7580885a2a7ac007eaa8921de3880da9112ec73f2f386a7af3ab9e71f183ce52840db0d0559d4e6b218cf93f +LLVM.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/45c61ca66a89d592236803c896d1c4d3 +LLVM.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/aebe144ec08cc61475f751e4ca869139df85960de6b8117abd0d4376de66f8383b1212d9a3c0591442feab83ac86e8ca6e4d3988be93efe69d605f3282e5fd1c +LLVM.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/416bbafbf3c3b89f13bbf695786df058 +LLVM.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/61fe4b7e027e2fab51d2309e4dc853beda1be305c521423376e30652c123779c8a8be927a32e857f15f74c23e8e1361dca7c28257526dc2cc5276624e4b3140e +LLVM.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/cbb5ffd80e05099cc0897fe7e06833e3 +LLVM.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/190394027a27b7ec49821dcb8bc9709505ac46c6d6231ab83d6229f93ada6029b81f0c7937c4a057c6d8e7e92a4485e32ee8d76b001b97d5408828a4a056240f +LLVM.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/e9f97576575e03b500d593c06e983c1c +LLVM.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/2598129b836060ef32680197cef40608b7e48ce87aaada571e457914628e0c7960c56cb2db8eb7e0468a865f9fe7fe74ea4099d7af3741d8314d37991dd172b2 +LLVM.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/48e47f997aa9fa9ee29b67cecb54afb9 +LLVM.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/1974d9fd350d2ea451eca64a3a4a51b1b84e9e4a9b6a86e41c2941addca787229ed464da25d55bebab903793af096272aa327391eabd14b1c780798fef72f440 +LLVM.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/e1158414a12755d1edaf5f736408b851 +LLVM.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/099c2eb3bf9e4aafbc8f5e206ec1aea48856549a7c48ba7a0cf9bcfcbedc64c8edf235906cd6a8917f673be4e7f01c6c6bc10fa1bf6eee8e3ce219f164134784 +LLVM.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/md5/4a34df9b4a0febb1211c0f245c0e8a2e +LLVM.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/sha512/5f0adda9e9f7fb34f1d6451246fc2e815edc68f489b21efa6cfdb8ad5fea1ebfe147ee55dc1b7376aa23f30ea65a221af1350a2815c2ec54023cfe13e463aaab +LLVM.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.tar.gz/md5/4dbd878b1c71c502cfee553ca0817d69 +LLVM.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.tar.gz/sha512/21246244ae7109f26de885965a39c88bf268476e7d2dd6139d793cefffbf84bb9a91e9bcde2656af7cff3c77c4b1e64a3dc53bc835e80e16d997103655c8fde4 +LLVM.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/1080ce8588dbed9f2035c919db69cb7c +LLVM.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/d5326a7d82f3fbc4451de483496197b7ac726bffa76c0ba19bf136752e75d150a0c4e7578dc51934eeb47371ae85e176971545525ff9af293e433f11ec12cc77 +LLVM.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/78147126c1cba62e1617b51ba5068618 +LLVM.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/6a295619bc6e314e9563f5d04a3e617a1e1e861724e9142e9df9063e57637ce881b38b4fded31356dde7f25d0e8192dc50be6aedb6c08d4b3f26aade5c020d4a +LLVM.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/3231888c0e1448c0da3c33c651ce7346 +LLVM.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/ebdd2a19e0f3a572a5546fa9adcc4353d1184ef8eb89f75ed92608b2e797211ecae59feec69ceafd79724785e4ed7b0893a8a21a1e5645404f9009684f48435f +LLVM.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/d55f62f9c35ca2132f319e6620fbb04e +LLVM.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/4f4848759df3feb37abaebb64abf56f43e8940df281f5816cbfb16e443edff16b6ea52e10dcb780d2e4c279cb45b9f50bc05f024ee96b4751276543095d00490 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 @@ -146,123 +146,123 @@ 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.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/6c5ee2a38d4ea9eedb10ddb182f99e1b -libLLVM.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/471559396c160f7c69e39aa027955eeaa585382feccec79efe63e89d63ca2af0008d20fcd73b67444fca8ae17d48f9324f0d5d207eb1b3661f9562f7aeb4534a -libLLVM.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.tar.gz/md5/12d98767b737c33206b8f06923932f7f -libLLVM.v14.0.6+0.aarch64-apple-darwin-llvm_version+14.tar.gz/sha512/08babffaa18e40c0df47d852bc063f6a1bd77ba0a3a73e77e4717c71ddd255ca6ed29924fb78fd61bfed64f29b343818d27da44f43400eb83da391d863473533 -libLLVM.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/c879bdb130e8a068a8474969ca7f23d7 -libLLVM.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/2fa94870a8e72222a72491efa584014d06185ee5c9ff7aef75ae02be246cc438f124020cbe6820023ba5cc823fa60188e054c171cfb80d240db7e0414c63c3f5 -libLLVM.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/bd13bcfb024f72a2df65afc61a305862 -libLLVM.v14.0.6+0.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/999f6199577362a9e607265cab518d8b0b0a9455e6bd7ef4fc80d77f57d81e6cca8ff3f6651eb3b8541d451297c9d85e38a09cb1bfb2960f1d2ffdeda4f657f7 -libLLVM.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/717afe277d8447cc8c9c354d31541ea0 -libLLVM.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/5ce37884f45f128fcf814b54b5b7d8cfc0ef2f4ab5dd38cf6bb8acad3d9accd568cdbcfe32f445890a11ddad4614c57e88a9d6c39787f4ee0738c781637811d8 -libLLVM.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/dbbd454cc983cfee2fbfd7861117ed4f -libLLVM.v14.0.6+0.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/81ea01a7f4d4da96e10abf027e8a2baa2ff8086bf923a9bac82af02416deb543c3528692bd8f470e137669ca58ad05c2224243afca8213cdcf794bb65ed0b452 -libLLVM.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/0b9e93cfc2e6a72aa3e7f1dee03c831e -libLLVM.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/f796a029452a6af689b06d0a7b2b746d49d4a95a0edb6b064baa41614c2f16f843cd613f29ced45f1e42d4c600b5ebc435f564adb2ac52632abb397b97517189 -libLLVM.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/2b259c04529102c161910fcc38ac79ea -libLLVM.v14.0.6+0.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/26f97b72b63bd93f71fc1b4dc56cbd66e05f6633bb35f4f033b10a150773e6550127a13bf49a67cc0492b6140ebf01c02254678eb4af9e2832f2c757ba89b7c2 -libLLVM.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/89e0c9030216fc05b932326ca1d065ec -libLLVM.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/b35b869afff05ecad66e102b1374b9e51a05284684d01a80259a08496bcd1b0d208b4015e64bb55c24f105bcbae0eaeadf188d76daac9bf0800e446782230ff4 -libLLVM.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/f61852a29c7f30562b6b9cb660fbb968 -libLLVM.v14.0.6+0.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/dd7adb9b8b7a7c8a667a3e021032ef601b459f6afff198853dead00879008d24cc67f6785d6ce1ff284ad9c7279e77e817613af40aef86fa1bb4a57c20006a36 -libLLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/91c9fc7bfec64c0309c1f3b7126bba76 -libLLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/d3b03c50a3d6b56b333efca03f7ba0f4633d2a12acf4685fc30cfcedf3d0483e34784aa1715973ace6ed12e0c2bf1a35645b931afa34adfd75f04959509d9218 -libLLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/8a4893e1a088c02f1af8171dbf1e8be9 -libLLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/606861d316759450060eaf81e924b8805494e0303cc8ce8e5b03e09e5c09294ceec274edaacb628eec1ac614ed68f64983b574841f56878b9e308d231ef363c5 -libLLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/1ed600f5af67def3fadac97fb008ad83 -libLLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/12b17d567f426260b6d9dc5c352a609d93a2c81c94287163d67628b3b227410920836a01292718052929f22028cc737cbe7885e430164e5b9bad7aa5fe048d46 -libLLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/7ef417149337a8ef1819dbbaf9ce0d67 -libLLVM.v14.0.6+0.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/031ceb1b9928429674f9c28899c6a0b66eb6f517af0760227587101ba0645e31a772619d8145301a10402784763c07a20046a7e455c4b912e3788e192017cf3b -libLLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/abc563cdf8e7cd16000b0ee872b8aaab -libLLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/45159941d6c9c7fd4e392e500f96dd7ee74fbda9dd29026463bae7d542bb3eb71ea8c4fca49c1738effc1439e54c166fb72962f3d96e351e811efa7aa1770a7f -libLLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/24f6b603f9a4ceb4939a662d212249fd -libLLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/3ebb6c078939191acd90560d1cdc3ba35d7c1d5b77ea699acb9a739b99fe8a2b832af3f9c98337ce435fca31dc7f267cb287a48ef12ca793fec4ffd1ff98e5f2 -libLLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/2cbdd592ab2d5a9ee5ccc68f730ef783 -libLLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/f976047b12cc6f0c09d6996f1986dd03014ae2848ef8287a9889bbc69fbb1e16118af682f83d1f33548ffbaddb6edf557f8b49639d4e63b8d0782dcfebde4420 -libLLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/f627500b3b0340b3510c105e5c26bdd1 -libLLVM.v14.0.6+0.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/3e60bd5d43996ddba4a8bab4e03f3a29370e3bfe147edd61bc26f82b5019e464e8131c20d336be104dfd067e80955f7fbf610e79550394011803b4a941628edb -libLLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/0eed22f302a580a21105b6111ece2760 -libLLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/e14ac2bf1b5087b904e453ab18bc5750f6a8b17a0e247b4e791bea967b288cd5890af748608ef4dfe74a6fbc588841c4c8c7b58587ba6088cff737f19b15af0b -libLLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/4f6f3bded0d4fde726cd2e8e90efcb31 -libLLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/a112057ae5b44373101a744ac6d65b4561f76435d7990961f0df692f4b44b792811a96df6d6307dd0abc3c35856ae456ca8f1fabfcc564d8f3c0e812f2793940 -libLLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/e922fe5db388a4493ea2c19bfb468931 -libLLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/9fa3b3956ac18d1735fc6b78c874415405d808754e96da3bd1a4e43cee7c0f7e6a65fc982f4868c47caf155d4f0f9df5dfee46bdddc6769b641c046d9fdd88af -libLLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/3f1d64de6acd05aaa93efb2c36fa0d6e -libLLVM.v14.0.6+0.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/fbf7e4d53bd052eee794de903cf17bd3abd570a0a4a98d14a5fcbe4fd2bc121a7ebcf04110a9c1c7907c61ef13b0d972ef085b7c5a294cd9613c23ac14079b1f -libLLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/9ef224e893cfef52494dc43787963aaa -libLLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/8b8678c14cafe937f3cd4619486c96fee651503571f552d77da9be49f77530d9df98db1863b3970ab3f400b5ca76df538887c2488ba4f6876b0f9853f3edb5ff -libLLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/307a2e7c5689ed7fa05aac413e932aaa -libLLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/8ef7ff87f11c3e6f0daabeab8e4b15e47bbfe3296b7d99aa15a4f2debca7527c5f8dec193bde4d96e0b979bf7438a75c4a6e8faed23acf08debac0ede679f493 -libLLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/881fd88344cf429e78519c48794e2118 -libLLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/2dae579a7c90d3528aaa30892c0f6f0d7c82c16eaf011bb460602cd80f7b806d114c3417664635919b28ee9c15ef4035cdefed047348472fe8d2190db4af41a1 -libLLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/ab01cffaabf4c788355e7cb25b51af45 -libLLVM.v14.0.6+0.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/c2cd6a426728a5b0dbdcdf7f67e4621aab0f89da1187bc9447d4e5a7cc6c716b649fc1dc957ab3fcc82d2287712ce9d1c1116dea85e0a9324909a68c12484e0c -libLLVM.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/ded7afb1e8c5be1189adcbf84a169475 -libLLVM.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/7013d0d414917cd38144afd7ea90d1718a9084d1b8702bb911060a24a106e3fb9e584094f541aff71dea4961b25698d15c1f9515cb44b137ce855defa5e47197 -libLLVM.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/abb91475af33c6a97948d4af2693d2e7 -libLLVM.v14.0.6+0.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/64b8ae8f399bac84ac092e20597767c79e3427e09b8a8ed8d3292c4d1a233bdef00d2b27b578d1192850b72480e8e9e9fe025cca8aae54208122b492cce1cf48 -libLLVM.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/df2c50462c36e9e3647cd6ac98f4f395 -libLLVM.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/bbd20df4071e221417724091527a54dede73490af03357b79db7a63c2d925a7b2126dd967eff4bec14b27ebe263f9d88d212eed82d7260f693c67ddf0839cfb2 -libLLVM.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/3844c7dd6f9d2e033bb5b98744a23213 -libLLVM.v14.0.6+0.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/380d56a1b872070a79c37c4d02948a008312a6ce262a38a94206d5b4209d9ee07cddc2536adb8c6dd109e4554ba16c490c96dae8307a1f7699d562b0d686d333 -libLLVM.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/294cae70e45a6a28d31dd524ca950976 -libLLVM.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/79cadf16603e388d9d0f9f925403ff7c34a04acdbd02f33dd4e823249f3dd02b6e37edfc247088220b8b333e3a8fd64c4ee267cff9d073c231109ea51514407e -libLLVM.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.tar.gz/md5/fff69236c97a34f0fe9d50ed93b82fc3 -libLLVM.v14.0.6+0.i686-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/4f7b03836bae2767ff910c5c7c79dccaae1c8478de597fb81e2b686f6e7dd195acf2140e3be72cae77509be9f25092fe8c19bd64af041469e45cf948a0baeff7 -libLLVM.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/527c35f304ab42a39df7e1fcecec26f3 -libLLVM.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/7ed37d57cf4f61bc29d7eec25579b17f449c734e658ce779fea923ccf997732b4d07c9d8bc68962fa42c0f66d739b8a9abafe0c5efb940e36c4bcf2bf6a1f0da -libLLVM.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.tar.gz/md5/504a55204bb0f8b57debd377788aab7d -libLLVM.v14.0.6+0.i686-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/03c3bd280c77356d168fcf5837dbe984f1be225a3576032de76dde1d9bb151e3b63efbd35542dff315999b1113c74ae466cc8d7e52ce12cb5d195b4bd24fca2a -libLLVM.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/3a6e6fa8ad2ea6665b184ecfb8e3f8d9 -libLLVM.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/21131866e0c4355e9de01c32415b337babf113386c293e55191070bf5b08d64c7cf00d15407e78a01f3a25d557c208774df99d46c9a858e35ce27c5609bf30c8 -libLLVM.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/ab3b323eee3d22829a74d966ec464196 -libLLVM.v14.0.6+0.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/cc297c791c7367756da76b2f0aa4b272a48d4bbd563f50b6e9d9f6c741b1a060bd3d1637838233a67dd12976d27b1d2e9a041cbdbcc42a23f7ca5da73e38db3d -libLLVM.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/0e8c5a7d07c21fa9070e3c9fdeade6ad -libLLVM.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/3306216a8edb2c91f7bec2fa65737e264fecbb5fa9b6431b493e5e42c9637f52d43018c3126e53d9963c88fc095de26b258e50e3f0a9ca5dd68d1530368e3776 -libLLVM.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/81922f4a88c94409b117e6fe1f8e9832 -libLLVM.v14.0.6+0.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/265aa30a53a68432bc254164598fba8fcd4909b07cfb2a8e80a6d3a71434d1851728329354c8c6b1a5da91559ca0da9718d49b711fb94ec9b974ea5efd97cc3d -libLLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/cd1ce9719cbcaca2ddf6bec9cb34c2eb -libLLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/849bce21013282edd2e32e4b6ab98f8586c2d986656498d6efd0092d4db9358a05f2a33c2200c17b1fb6cff2714318f7f322a5cf1ecf9a16c6bac5cac3517627 -libLLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/0d44242a7516c2808eca52cb54b5d01b -libLLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/3cea355f8d754cc712f16ad87f24f637381313f18963c8382cc79b3cf0237c4829f9c7d498d57d28c7aef5106ae7dafdfafabe90351ffb307adeb01e43bcf722 -libLLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/7b93f9f33beee190dbaa71508ef4d562 -libLLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/55eeba37a5b0724cbe813d5d9ec8e3b61f988c953896cc767866059c8d01e77163526935f16a8e30c6dde17999b2d6ea4088980ac118f6720f4bad8183debfcc -libLLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/24b8b6e559ea15a6bf90c39e2040f852 -libLLVM.v14.0.6+0.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/180307a7e17edd2ce4758595afa784cccdfc2b09d9a1c601a69ca3a0ac1be420bc1990b8773209410e8da5c5fc81bc3a2e54687898a6d3ef0d496a27a8b27222 -libLLVM.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/a74e1d380cde9950179a4b6a8e28ca61 -libLLVM.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/8f8ff44ed42b5315949d076b73abe91fdf958fd82a337dd15dd71182038e1643337159652e5fd911323af21a4668e46d3a401d85774f6d33fac982945d77022f -libLLVM.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.tar.gz/md5/85b65eef488ec075920048bfa6d9a7a1 -libLLVM.v14.0.6+0.x86_64-apple-darwin-llvm_version+14.tar.gz/sha512/cf865396678dc95b9d514c286fdbe85ea2a74715f5888e4392250770eb9556e354ecd9e52fc28864df88f87e06b8b39c6b403eda2bf9efd46d205f4c982e1551 -libLLVM.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/411a28efef112b63a7e2cc5a7fa79432 -libLLVM.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/7d5eb694dd50f9f02d2cf0b2787c66f6b824c3928616759509326c7d85578f984d29ca888d3366cec9584466fcee063f236dcf0a353df280f7abb79352930f96 -libLLVM.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/1fa0b4eefa8a57c858dbd9788d222741 -libLLVM.v14.0.6+0.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/8c1b075ea01b661da518e309d521636c8e0dbeeaad688e9220db8b22965172050b9a0edb3b1098c3191873a516d03ab86b495550933ac680300ec0b42d3f31b3 -libLLVM.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/b4f68d0b04db7c8021a180fe1df14768 -libLLVM.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/5c43368be28fc7cfa14ba03cb76b3a30f854e2c34d6b2ba3b9d7887dd2f0e4944f16b6380617bf080fc7bd760629b87f1292b49c07c684bfaf33ff9a48ba22ce -libLLVM.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/e3b764196550adc33db2c15a74402dc4 -libLLVM.v14.0.6+0.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/1822f35862887d00c162a8fc39e70d9fbf73ff6f2fd5bed44b678a1f983bf20f7a11d524e7bdbd3774d919392b061d1f980dcc12b306fc95cd456e984e81d2ca -libLLVM.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/2d7837e11d7e65ca30878c25b38ff171 -libLLVM.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/62be4f20d35aa6efa2d52858d66150205f2b5fc1fc5faa2a49a48b27e78fd1587ed4b62123cdb25486d6a6f87951e628a45356df4263b7bdee820c850b727fe2 -libLLVM.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/65d72c92bbbedb202c5e26fb4bfab6be -libLLVM.v14.0.6+0.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/2ec91bc32d89d390d104ff248440435df9cc73d7df79892f93b800feede8bb8d43f2a3e6d4682d72850b038ca75a256d24c7e9e34a751288f89cf5a8d69dcba9 -libLLVM.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/f2eb226ef29f4ab2fa303f65253dac66 -libLLVM.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/61e2a4d02d113ea9df863a268268d3bdea5a9c9f481b9d4ae6c96a553e7516fdfb23896d4c17bbcfef931689d67daca61ef53f307713f3a583988420dc839af5 -libLLVM.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/d8cd2760cb5a2a332488a6d8170ce82b -libLLVM.v14.0.6+0.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/a11764fb22d64831ce97315877d10c760697b0aa8fd667c6f3763038037fbe220285db20c981aa63f028b4dd13a8b0b57b32be6c792c1afa93dc531aff297621 -libLLVM.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/md5/33343f2e7fa1169eef570305a4d8837f -libLLVM.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/sha512/49b8189e8cac264f0d7cae54d78e65913f4dc047cc51f074a557073662203a96d15ef64452afb8069018f523bafd724951531d6b03c9034cdf16d359eeb9a850 -libLLVM.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.tar.gz/md5/3d211319807cdbfb6e405f47ec2a1d42 -libLLVM.v14.0.6+0.x86_64-unknown-freebsd-llvm_version+14.tar.gz/sha512/0173f80d5d6912543b2c3932a47d667449a579aed7f2b291f49bba6dcd0b680705a8f10be6175517fa4e8aecf2cfd027ef15d526bae76c99893f7203b7cf620a -libLLVM.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/9018ceb966b33afecd3f9440e75393f9 -libLLVM.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/4bdc0e93f7d6be18c3522acbb016dc2e770d96be60a665f118866263366f1d6bc7702046d65e962d063b41b0d24f5a4fd0d4cfa5c4a9758052538e1404801708 -libLLVM.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/f15cfe02c92f22187b71d5f8508a1bca -libLLVM.v14.0.6+0.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/b73f4932df6c36b0e943d6c6048f7a238aa1d28347ee97b2a7daab622d173c23fbf452a026bdbb26eda102f99cd96a3d09a751a462f201d207dcffdafc4be429 -libLLVM.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/dfb780878726fc582a56ff433c27818e -libLLVM.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/59b7a0ecb36288149d19d72e79ab4cb27eba5e873617ca4ae020f281a764345aa9a9226c51ad6dbf8e5de3735ef73cbdd6a0447f7d7c58850fafba3c675695af -libLLVM.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/49fb02433cb908da55ab0413eb91b0ab -libLLVM.v14.0.6+0.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/f411737f06e3927b199a855802bb840d33471f7d9a011d49fb299916e313ddba10f635ce58080787345f387a9dddd18b368e9f45a233e5ff84426d101434e298 -llvm-julia-14.0.6-0.tar.gz/md5/b262d8da6940024a9f0f717d26023f31 -llvm-julia-14.0.6-0.tar.gz/sha512/19af997a93dee55fd7d53c73d85c29f479ec81343266a81a81fef5321c88455eb3a315c03664f1d9763f2cb3f286f202d77629cf528b3f7ae77d369dc3d2c8a4 +libLLVM.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/ab5a9ae6d4f42d18fa71f95b4bc86513 +libLLVM.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/977d4f159fda3d4c18ed920c1935f32cdca743b3fc8527b90b68ed3a6375903f9b614f0bd83b9dc35b40c96ec6e6ca4e4aba6aacb3e3cd051cae5a040fa6ffb4 +libLLVM.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.tar.gz/md5/c90bdd3e26729482f29164d72efefb3a +libLLVM.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.tar.gz/sha512/c86257eaa3a9975cb0d61f526ae4852c66cdfde24f43e2aa7d75787dd84a620d2dccd623a540493f688a908db96d4f4ec36699927482b2612cc49dc694ae9656 +libLLVM.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/4177bb0f67f4351b3e92383011e3d5e1 +libLLVM.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/6f8a7795f9097e6108777fb999396a44360edbf50c889cb181512594b4ef717f0e3e4e03a92f1481b49077562685d13128ee4542a06a1b655113042c60af834b +libLLVM.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/43e6b5e9edda8754abfe44a85958f4da +libLLVM.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/f0fc52ec77f2f7570c00219784c2aa2e9642339c9a00fb8c3ccf0d0545068f8d55c126897ecc1244a22efde4840d2408f6377c8a1c6ad1d9c6ba3e6a5ac63e32 +libLLVM.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/7545e9392b0f10ad60f36e7db7196a80 +libLLVM.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/a56058b0d3b2415c1912364bc3f725f44d517d10e0d93462e0f7887f023da20b5f99c1262b176da46cc3acce9d79869775037b2594cff86697463ceacd48e26f +libLLVM.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/39d57b2e6419fe728cf091580babe118 +libLLVM.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/b149e3d239511fac07b55c9cdd5793529fdd5275b4680d4b3c80a187e4e97991e5285956ef2299332a36a66c8e2d4be67f21927f834e8046a462e0b54002c67a +libLLVM.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/399fc68e348d561d95c986160294cbef +libLLVM.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/7c03de6445393a2881367b9d346ec8e8c6216c0c1b94a3f07594abd68f6a1e4ae40edec8aba984363bbf48fe29679c67174b71b4ae15feb7cfb6cdd8f0e126e9 +libLLVM.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/c3fd98354a09dec28f2c95b98b053c99 +libLLVM.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/9f5571f87bf5ed390d37d6212899e8d2c51fa89a5f1cbb039d2dacbd6f1c7f2789787c5197dc82ede18a1ea868f3649a24449d563ff85333a43720a508af8d07 +libLLVM.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/20198f989a900a79c8d590d9c6938ef2 +libLLVM.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/f14f771acbaa04986e835062172675e5afa3a76d9b1e5c977aa8a1f7cf37d0b51cfed13a0f19a618fd14f540649d42c7d9a06a3bdfa32a7308498963cbf0a5dc +libLLVM.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/ec8469b1ecd45be0f4ec11a51c332c64 +libLLVM.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/52ca038d86a86b91e812b755901276ef5bc9b04cac7537216bb631f6394a46066240c76edef7e3db90d75b24e528634491f523bcd6a3686013fe3406506e8740 +libLLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/7fc93074bd66c0f8311318a031aeaa6b +libLLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/9db07db632c227d109f56fdbe503d07cdbc163a3f6b225498f700145782c4c846c2aca47a82cf174ebcef5b230f58419d1084d030932c85e671d3b5f43a5c0bf +libLLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/a3b134c87c5a8eb24d02caf9a0d11ede +libLLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/fa4eb2f09f58cd3248018efce795d64f7b8e31a65fb90cb5e53fba5cc175c69e082adbaf7ba87f645508b7a7b7223d49602c8013c1d5beceaf614d66565dabd9 +libLLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/de80f238ab1969b16b26998d5d7b3f43 +libLLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/e6a626ea5731abaddf56d28e0be7080b82662471878b6e0c67dff9d10c461ab24ffbdfa1a45e91dd24277ed85d5f55126ab59139b54fcc291deeef2c5dcd72ad +libLLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/75be85afadc2d42833993521ee415b58 +libLLVM.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/fd0176144abdac37c02d3e1f2c4f27297033fa331f99d26e103b87957107afcf2e6a8db6b8beeae037f528fa5c1eec29c1079c0d62d082e8a613e63223b0f888 +libLLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/4e20e425d15b5a8be8c1f700471b0b99 +libLLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/7aa390adfe0cf046173ccf2eb4e077585fec64cb82cae1569543183be276306191b2c4bf42e7eeab536ee7886f94716936568ccac82a5f37a2633d58bcdfb539 +libLLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/7c81a3e495428aa7ea58e247471f642b +libLLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/15c13bec336ec071f14640baa2ca4723212ef5a97fdae9a5b90b7a07aa1380eedfa72af27ea13fa694921be45cc799eb06622345e87eedfece2780f8b5677293 +libLLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/c365fa356c069d232c0fb58dd82ae2e0 +libLLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/afb435457c0220d3e06c6aa9361060d8fa04e1a3b0e406e1ab9b1f18c60f2e2464d08b5afd2e2251c1e38a0e4ea0470c6af05201708a51ebd55a0a37da3662fd +libLLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/6d2f02e0fb213a6683e6fd229cb39458 +libLLVM.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/6dd9f7ad806f17182d1e43c1b59fb00a3f230d9747924351c199028db6beb7c1e66fba41d58fd2c24f0aaa8a94ff2e95b8d35486a6e0b5c0f2abb37eedf593fe +libLLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/c68f787fae3c30b11b0adbc38572b4f3 +libLLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/0a094431baec6f84b8fef56446ea95c1d7e1be309d6bd71c80e7ff069573d83c1595e88f8a44c9982c87b6ce5d3d97a4def8b17c79e2fa4a1c556c64695e4be7 +libLLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/4930ed9f72d3aa896a7c22bede0abfa7 +libLLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/68166a7941bd9c4121b3263ca881123958c9f589b826c0eaea2d06982566898e213aa586af44901d04bdab3c99c2bdc9e6d6d9534ac1ffe9a00eeb9ef311e056 +libLLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/493d597530b6352f52e06267b96faad2 +libLLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/bdc3ca526a84b273df908ed7deec3ecea73c66f3991e8b5d0fbf8e29b6376f6f8bc7e789615467ab2d3828d8fb76e61a22cf87fd589fa04c4910ae18944b705b +libLLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/256d30ff71f384240704b543fce2471c +libLLVM.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/353c553a5991e893a329e565919da707d3dc9ab61297c27f5fae7c74bdd1cadeedeaf3601b27357cab11a6b113bfe66f2d39f31ad328b205662e1a5d07c9c5bd +libLLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/47bbde3f4962518804468a5d7bbe79b3 +libLLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/a9e4b806cfd1d45d2e43d899a9e89e74b5c30fa82e9b83274241d919a635a5f30863573b1d509b3c61a67bc53486e5c85068e2d6221aad992ecd673e51dd53b7 +libLLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/ac0a061b0b0502ecbdcba24727b05c26 +libLLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/888e440c19296f79470a46859c551e283f1cee953dc197494189e2fd7ce03f5eff07b2dd504fe8d7e0b1d522bac14f518c7803795e84dbfa33966fae965b6f90 +libLLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/6c163cf961ee1f95b365f1e8462841e4 +libLLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/e15909f72f481c242b06c7bd9fdf7d6acede33661cd383e4b33a29bbe4c1727f86255ae0c9519967e90d2606cc2446544c00eb6bc072f705fca122910cf63e16 +libLLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/358d52a901a9d2ec6e97b6cf3ec324a4 +libLLVM.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/35cd3064a55ec7bf7824146bdba1905ac065e1d9e014a836b15af6ad17b23a426bb3274971ae9ce7efd8cec7845af2897feae3db8f586772e1abe9e8bcf5143f +libLLVM.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/8ee57951124a8370b86d6c4af30300ba +libLLVM.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/9af5f771b94092e28bf36f7f8f1d5f7c510815f5af12b16215f39e2f377f206f82f9d37de35a142f89b2092125647073f1d0ede9345122b696752063c881c82a +libLLVM.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/95383b63e38ada6a4c36230a4ca9496c +libLLVM.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/7b7047fa5292a6ceb7d540006cd1f07b00d6e0f5f00c7090178e867f6f62ee0c15d6029c31a3f328f99fe3aaa8a1581f1791a212f79ce42e737f9feeaf58616b +libLLVM.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/4248ff578e33399c33c2a39c2f3d0b05 +libLLVM.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/f856964e9ab29f4b73414041eba95637506d8c01dfd6e97a982d8e5f8845e30487b3492da776a9d35696c14a9e027beb3752e2946de6e9db11070b683ca7e6c0 +libLLVM.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/d77c1501a19329d95545178f63697015 +libLLVM.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/d46d163e5bb7720b2cafab0dc664c882729307d446610753e1d9269a4f524bcec1643fce603415b8c61e11589bbc0cdf4664cb58b433eec646eea6564f78b3f9 +libLLVM.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/f89572a9c10f8913b7c009ed39f41d68 +libLLVM.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/8924341540b7d57389c2b4274a51a1a7c7543783442a3b98add990a87f3c0a97a785a5106df68a5495b322b6eb3af3025526d77fbe04f6f2af57186588bedac0 +libLLVM.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.tar.gz/md5/da07aba109f41f6fa7e8c8d9da6b3e1d +libLLVM.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/82aa09aa9e2f26cd84d962d02cf239e3845a151ea1a85f770b35e25c2706f269aceaee582fb98f4cc143847ae19eb75853182cc3f30e96a064c07ae126de0666 +libLLVM.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/5579bf880fcd0b8c48dab90b839e5b04 +libLLVM.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/3bbf718caf0e734a266b7930e7a23f65c6ee3ef164c9304c93c6b67066e78f5eef7b1cb7181b2043ed2cf58f1008c4d948330372304260b1f488b3c3a0538eb3 +libLLVM.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.tar.gz/md5/dc25070c072e28204fc8eb8d14086301 +libLLVM.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/8eeb20ab8a173bd0e72bed1578270b4b69d1e179aa0a1b980b7ffd9a683e9a52a611828647cccaa817a7aefbcc794ea0c586613ec7f91774a7433e8bf93fe1a2 +libLLVM.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/152a803e4a3da4b9a9f178a08ff3bf32 +libLLVM.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/7088b49f0662e6f8cdaeb241d1ee3ef9779f7e9ae612f396121d9a7c1dcea7a0aef1c7313621055f255f17b16a50624d5ff288c8f8ce33d87bdf432d9263b246 +libLLVM.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/482c643fbd9865a2c8f494a3888579b7 +libLLVM.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/2e07d0169ec7d3f2cce10f3aad7936ee12e74cd8574700d561cd935751948e8a79bdaa40bc631ace2a485190bc450dae27835f6e9bb7c11a642e562c8f34439d +libLLVM.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/a42b7bf02170b1c69767e4081e43b70d +libLLVM.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/3e23ad9db83b341d04b869f67ed9f9ea3c090d3759175a2f76c614580100d1e08e66609324510696146e776c54dd3bb0f0b1a3cb175631cfd94c90e395da59db +libLLVM.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/5463c05d5da79b3f2fe0b176152e97c6 +libLLVM.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/7d0e4ac637e04c6cd13af590c7dc4a2725541c226d7acc18d0d649c5f5689eb587a4235d6b09cf884837fd8a4d1aa71d23c33fdb1c4e61abae2bed931f8afc97 +libLLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/f92359aa26292bda057b12cc08c78420 +libLLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/cff0bef9edcf77511b8a16acb40def5e8667cb36c6e6d2f554ebc38389c93f3ed2746e2cbe6e5cd70596daa9bfcd0729392484c7f6056860fdbe1045521fcc67 +libLLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/e49088c9b21583546e9985e5fdf66905 +libLLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/6a5d449519e054ae30068417840dccda2fe03f82d95ec822ee6e22bd691c57ecd7950e4483964c5baed520a911b3c68c80f1240679eeec0b2b6f396d72d71466 +libLLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/ef83ddeb912459a190cccd257622f28f +libLLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/6aa4eee7b201b954b21c88de7ee85dfb940c8c07c44cf080dcac5269ab68e39276c42064d574cd5a3f6205494406be906883da1d75d8a1d84a8379387d309986 +libLLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/2cd11ed664ecd61ba35a59941af4d5c7 +libLLVM.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/7364be94ec5dcc312fd1a356f05823715af2346435e1638117d9fd33f725508402a77c93eb820be41d85155dd8ba0e81cc803c74c48ace1ae92dbb826cfaa6df +libLLVM.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/0202223794e21f778f99dcaeece42613 +libLLVM.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/ae5cac8c68c68d7a3acd480341e8d6678ad1ddaea40864e252c46f865d64cdd3f2032f7a765fa7cdd498f1b8a5fa8881a10500d497de50b2703a695814ff5604 +libLLVM.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.tar.gz/md5/5eefefcb73961052d706981f62f4257a +libLLVM.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.tar.gz/sha512/129da5989609018a7c6960c1fb86268e35809b062efb25d52276b21e99494272bbc55ceb584c7a761e5557d6fc21788340bd50bebef60d2e4007111e6aaae237 +libLLVM.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/ccc65aa88718939d370f7a2843c0a7ca +libLLVM.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/6c7dc9da261ae6d0a1a12ce03bb893492a9677f289df6b1b9e40fa35cfbebb5bc31169fe5d7291f893ee74ed7d86899488ea121b0d8b1403e615f104ab7f569d +libLLVM.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/f0576c099c77c09c5f27e7d3f2723d47 +libLLVM.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/3a5a6e39e0f8f253de61c9fa0dee1d01cc10d3a17ed583cc2c263e743be3f83f29c5e5d59a11d64da5768159c990c61996358d26576925a7f9fedc460303b511 +libLLVM.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/73a29eb63f6d834d59776c4d9138475e +libLLVM.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/0545ac95a2ac4d2f23a200778a13c64c2a80eacde553f5cc38dc90c5de84b3f9d0dbfcd9e3b16cf38c047e9e154c044e0c798850affdf5f917a28d08d3fc5827 +libLLVM.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/28eea26109c23a3059cd6e4250cb532b +libLLVM.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/1f42b9a15cdb2e0e0faf33ca134a90e73b61573e951a1efb284623c42111df6b8db9871cb13765cb04290caa05f3c69e80752dbe3df5f94b917d1b424d88f923 +libLLVM.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/188d846f846556d33b6adf48408a41c9 +libLLVM.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/93dfe6af424dd2a2f7ea9e5894c88050d55c6e0b7d8b20ca44793dca36d584a49b3fc4ddb5183881b69e86285b8baa93a6f0cf1e3de54fcb283f6f18a421277c +libLLVM.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/bec621675c0d62e1e5884289e3e84b69 +libLLVM.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/f7b20e8cc0534c59f3b7cb422df545ee963736c9fcc2941ae14294bc5bbf4adbb13ca72622518ada4fb5871b67fb2c313c4532eb17046bce9b9fe8458cac4ce8 +libLLVM.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/f204eb9d4f696cb5e7e85e539d1a2d1a +libLLVM.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/df9697817a96e1b6bb7d69413969990cd2203aead52eaad3f576f57702d3a657e10ffd531a68b0995642f9cb3fa6961c297659351501e3a163e6cf228d4234d2 +libLLVM.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/cba1e24a29a5e490ded6eab85383c6b1 +libLLVM.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/63319d17c6ef3313219eca4f46dc7d879c955a7e4ce5b56896f7f4b230b657718829e3f892433818493457850a2a3573fdde2298b290932bf1d0c34923f99339 +libLLVM.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/md5/6355fcef3bfddb656c5ec91f755ddb0f +libLLVM.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/sha512/4a1ddb2230cd62fcff69e17e223f5c8b0a191ebacae1bbf262c159381749522a1efafde0a57663ed659b0e53b6c1a9032a14342b239f95e8ae007a619dfade62 +libLLVM.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.tar.gz/md5/070a6bb4575b60e5a14d959ce34556d1 +libLLVM.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.tar.gz/sha512/0a47fd12c936b7cf3a9a97f2127627a44c2f577e2fb5d8bcb2b96e3d2d78a602770966a37c733b1a1bf663e37a15fe1743e0d683111d7b1fdb7dfc4510027827 +libLLVM.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/605116c3315105515acb70c9b3ecf9f7 +libLLVM.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/3fb6762a8215f230a63d100feb882efd08e668dc47b5b4cca1c9565b0926b4920f5f671fc5db903d6fc3b6c445b00d2822d179ee999c614ae22ebff7a2d73659 +libLLVM.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/8921804e0461aeeaf1e6a484c5b392a7 +libLLVM.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/af9510843a9083e363e67bc1b1fed6eca4d594c34d6a9fb8f920dff5b726dbee376f33dafaf040989e83aaced066d35f3fd90b89f4c3e0e6a1f3a11a471ad8a7 +libLLVM.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/2bbad5e9373fc2354b9e0878663169a9 +libLLVM.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/adfa1edc0a4138d977fde832aaa6549b5ee38a1c0bb3b59dd9c05740569bd108c2b2b2de4e81ac06d367c9f834662fa5238972affee8bc638309e4470cd980f1 +libLLVM.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/605ba226b4d0d82802590eadf31d50ce +libLLVM.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/992dd8cf723b986d506743f2ea345391752893b07fc0be35129afbeb4cd01d41f32c56a99b0f6a25b51787bee9a56c60ce66fce60123e8fd3fe0fa11ba051b3d +llvm-julia-14.0.6-2.tar.gz/md5/1401091c768e6c4aef468bb3fb1fac83 +llvm-julia-14.0.6-2.tar.gz/sha512/42feedbfc5866ed1fde7e15810ba5224d46e61122d5fcbb4e4c4dfe72cb898e429bdfcdf6b0712fceefd8cc5b910857d7babfd73ce65e7f8a43cec42424a7c3d llvmunwind-12.0.1.tar.xz/md5/4ec327cee517fdb1f6a20e83748e2c7b llvmunwind-12.0.1.tar.xz/sha512/847b6ba03010a43f4fdbfdc49bf16d18fd18474d01584712e651b11191814bf7c1cf53475021d9ee447ed78413202b4ed97973d7bdd851d3e49f8d06f55a7af4 diff --git a/deps/checksums/mbedtls b/deps/checksums/mbedtls index 723b9012bfe00..d0b43ad80ea70 100644 --- a/deps/checksums/mbedtls +++ b/deps/checksums/mbedtls @@ -1,34 +1,34 @@ -MbedTLS.v2.28.0+0.aarch64-apple-darwin.tar.gz/md5/ba33f960c7bcc3fda818c84f5e716df7 -MbedTLS.v2.28.0+0.aarch64-apple-darwin.tar.gz/sha512/3878531424317954417d09090b0a7618c6c0a6907bb04db34aef37d55a033972371455fcffca548ac03be41c0b0d1f8e51a9fe6e8f8fb4d8ef4fcbf91f15b3ea -MbedTLS.v2.28.0+0.aarch64-linux-gnu.tar.gz/md5/9e7c78fc7c39fd19dcb170d57c8c0ec6 -MbedTLS.v2.28.0+0.aarch64-linux-gnu.tar.gz/sha512/59eaeec1a772265e62fa4049e0bc8c96cd7403d954213ac6098921acf6e128b624d6bc1ba5c6062c88ecb92aa8bf9d0a06e365eee241b6516ef0bfe2b4c47188 -MbedTLS.v2.28.0+0.aarch64-linux-musl.tar.gz/md5/44f939956834d5d8130ccb3bd5962b0c -MbedTLS.v2.28.0+0.aarch64-linux-musl.tar.gz/sha512/f9797a44851222c005fd4068df6e0bcee68133c9a48e19e16d188b8a6927be56c620fec83264398d682eb5c89b7f01683e5898d3cbcb7aecf53e5ce678464db6 -MbedTLS.v2.28.0+0.armv6l-linux-gnueabihf.tar.gz/md5/fc07035dddd51e9c57e62edfc3fc5691 -MbedTLS.v2.28.0+0.armv6l-linux-gnueabihf.tar.gz/sha512/ffb707ba7439050862654316b4388f52e8bd09bbeb7076cf6cdc924cb60c61f871c01ccfe14e1ae1e62a5733490487324ba60e8545d60902f3317039264db83b -MbedTLS.v2.28.0+0.armv6l-linux-musleabihf.tar.gz/md5/fc54575519130bd468ee4dbe23da0ea9 -MbedTLS.v2.28.0+0.armv6l-linux-musleabihf.tar.gz/sha512/d4b9e1bd8877f7d93d1b4e0d1c4c3d4e5d2af6920e39222667e689ec84cf9817988c91a826755a734a60ce05fed913e5421b8aa9980f257450da7f51c5e9342a -MbedTLS.v2.28.0+0.armv7l-linux-gnueabihf.tar.gz/md5/0753a99f4645ba7e1ceb27a03c65a107 -MbedTLS.v2.28.0+0.armv7l-linux-gnueabihf.tar.gz/sha512/a7a65338ee6f93117d44975651d77c351f0c919a3ae2eea6e220719dd084f71617946adf04a08a82d55c22af0275d21fce3c692becf87ccf2d932c8aa32af7af -MbedTLS.v2.28.0+0.armv7l-linux-musleabihf.tar.gz/md5/ff335caa1cec22366cfa2c2bf87f61f7 -MbedTLS.v2.28.0+0.armv7l-linux-musleabihf.tar.gz/sha512/a3ff7d53b45134165347dec209bc27f48be984b4fb58ddd54286a146b837d038ab21e22033f1e0713d359c72adc0b97e979532ebaa734495eb88bfceaf3c2155 -MbedTLS.v2.28.0+0.i686-linux-gnu.tar.gz/md5/c4c9728ee9d875685765eb4c9c3bf731 -MbedTLS.v2.28.0+0.i686-linux-gnu.tar.gz/sha512/214142ee7ca3a5b447a97928ffcbe0389fbb8c1fa68de387656e5c0e4406f02411e4183fb051b2107600b222bd5279b9fd3a5aec43a9d97a9556b08c5338cb7b -MbedTLS.v2.28.0+0.i686-linux-musl.tar.gz/md5/2684f2bc8a04234ae67603150e6d0917 -MbedTLS.v2.28.0+0.i686-linux-musl.tar.gz/sha512/a533afd26893464bee62dbfa9babf6e4e1119a4be31ecb242e2ff28f5f6e3a3969057e2ce653c98c1b8d2a19e340df7a17dac8693fce270399df92cfbf3a32ca -MbedTLS.v2.28.0+0.i686-w64-mingw32.tar.gz/md5/f205fd351e94f42cd38d34d3eff6e69a -MbedTLS.v2.28.0+0.i686-w64-mingw32.tar.gz/sha512/cfdb819d3e6fa9ce3985e29ac733c2af6c988230ae49bbdc13f0fc234e82444d17ce5da4d3b6d8cc6ac45ea4a999f0ce03ac42533223c87bea066a371487ef1e -MbedTLS.v2.28.0+0.powerpc64le-linux-gnu.tar.gz/md5/41b1f61ebda30a8e8f02dcd955ae0d40 -MbedTLS.v2.28.0+0.powerpc64le-linux-gnu.tar.gz/sha512/25b62106404cb3b9be3e0f778ed953bdcf9d18cb289be823f97f7a1759012c84cfe7240fc936f2e6e858273ce2022d75ecc2554d5696cea110eda6d059362416 -MbedTLS.v2.28.0+0.x86_64-apple-darwin.tar.gz/md5/e7b286dac94bef06915930180b2d3bac -MbedTLS.v2.28.0+0.x86_64-apple-darwin.tar.gz/sha512/a2acaacb77ca6e2704144d8d99e51df49b1fc69c8751e43973e0c41219d023676d35ae05bd4ff7a3680dc0edf5438e51b67baa76f5b78947560dcc420623a3da -MbedTLS.v2.28.0+0.x86_64-linux-gnu.tar.gz/md5/39662265088efadb142fdc7255a0b7a3 -MbedTLS.v2.28.0+0.x86_64-linux-gnu.tar.gz/sha512/a3648c78bebf4c024ddf491965cb7707df887ce10dec6f9e42eb6493bc7d1220e5b23c53f5e4e73dfe94e8d8dcf35ffc6860d1992deb9b63a0c4691d4167e59f -MbedTLS.v2.28.0+0.x86_64-linux-musl.tar.gz/md5/1fbe9f2593bc11af031075b58a108bc8 -MbedTLS.v2.28.0+0.x86_64-linux-musl.tar.gz/sha512/d185ced64d471fba9ae1aa495b2eba0e60738e8e5ef918670b1c40cc8981389ecd48e4f17506229bafab4a11f7a257d3d544cfe87ad198482778931c2a7a8aa9 -MbedTLS.v2.28.0+0.x86_64-unknown-freebsd.tar.gz/md5/26beed62ee2abe8c6e52c1dbddbe0b1a -MbedTLS.v2.28.0+0.x86_64-unknown-freebsd.tar.gz/sha512/f04a417d99e3b908383d3c14cf8512b2f13e4b226d07235e2334090aadb6aecce40a23ae8f8df9c0ed9618707e839aaac6de64d5fee6d7e3955b290bc564d3a2 -MbedTLS.v2.28.0+0.x86_64-w64-mingw32.tar.gz/md5/cc55fe5537719aa8bf3bbee981c01413 -MbedTLS.v2.28.0+0.x86_64-w64-mingw32.tar.gz/sha512/3436647e81fdb9db138063229f20f47e2c8405e6379ca3e7cf38fb9fde84d2b6618a5f29b8df19cbffe75af7f99e00e9583d67be7b53dcce27bff453b96dcf13 -mbedtls-2.28.0.tar.gz/md5/d64054513df877458493dbb28e2935fa -mbedtls-2.28.0.tar.gz/sha512/907867edf532ba3b099f4fb7ce31f5773ceceb072a8d067b1d830e879d541f92f401d64f13bbe6b4eb0845e58bb765d7d28896be414bb0fc7ac5b3876066be5f +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-2.28.2.tar.gz/md5/421c47c18ef46095e3ad38ffc0543e11 +mbedtls-2.28.2.tar.gz/sha512/93cdb44f764b200131b8dbefb9363e5fa38760eaf01473a512f93673cc55db3515830e16b813e03b39cb819323ad78cee4cb7f3fa85861ec5e72e0f89541c7fc diff --git a/deps/checksums/openblas b/deps/checksums/openblas index 5c9194f5dd404..96098b9fccf2c 100644 --- a/deps/checksums/openblas +++ b/deps/checksums/openblas @@ -1,94 +1,94 @@ -OpenBLAS.v0.3.21+0.aarch64-apple-darwin-libgfortran5.tar.gz/md5/a89e1eeae1d9539c21598c98da5ac91c -OpenBLAS.v0.3.21+0.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/181334363669482ac78b17ed9797ecc62ead35c07348eddd674c06252a7b36a356db48c62da77e73072df4cc21d0c25e0fb568c4dc7fe98e5db8e0f76eed7183 -OpenBLAS.v0.3.21+0.aarch64-linux-gnu-libgfortran3.tar.gz/md5/7ed3100359f9ed7da4959ecee3b4fd1e -OpenBLAS.v0.3.21+0.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/329e26dae7f2e5ba81ba2271257c03426a349b89831147458a71d91da062bd11fab1b846f77922f3bc65a9f7d3b1914f15aaa0c14f696ba7bf43b55628a5464d -OpenBLAS.v0.3.21+0.aarch64-linux-gnu-libgfortran4.tar.gz/md5/ae71b44c62d42c246a21385d0691dcfa -OpenBLAS.v0.3.21+0.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/0598da4b6410f59a69690e6908c80724df4a8c4761194993c1b127f84418f046d8fa0d367fda8a7faed5cec2d6c57bd8872ba216e38b5418bc9ff20af27528c6 -OpenBLAS.v0.3.21+0.aarch64-linux-gnu-libgfortran5.tar.gz/md5/fff9e118d250bebd55723e77c492280c -OpenBLAS.v0.3.21+0.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/29d831f773cb6a75119c7cc2363fd72d38e32eaef6124505f8b5a1b64fa3ae7a6ffe199aae851de0893259d3bdc480aa377294688ee55d20f0da7dfc49fce747 -OpenBLAS.v0.3.21+0.aarch64-linux-musl-libgfortran3.tar.gz/md5/e93af05f98be926b3000dac3accf5f56 -OpenBLAS.v0.3.21+0.aarch64-linux-musl-libgfortran3.tar.gz/sha512/de3e9cee786d1a37dd5807aca81728d67d60fdace68aa17c69efcc7ebfe36dd3a240dea16f7cd3c5021f0f967f15f1154a3d32350f91165a9fcdd08285917196 -OpenBLAS.v0.3.21+0.aarch64-linux-musl-libgfortran4.tar.gz/md5/5a0226c6781c748a8f4d144b0ae4609b -OpenBLAS.v0.3.21+0.aarch64-linux-musl-libgfortran4.tar.gz/sha512/83d9ff97a5651b682ee1839cf0e1aa8dcd7c2e2d32b6cadb184b8d71123649a31519516b1c7d98c329ab9902538a01ffc14ec28f95ada35ba8da77241d74c2d2 -OpenBLAS.v0.3.21+0.aarch64-linux-musl-libgfortran5.tar.gz/md5/f09c8409b0f4e5e3ee9d471538289e45 -OpenBLAS.v0.3.21+0.aarch64-linux-musl-libgfortran5.tar.gz/sha512/b41234be953779db6601d5bffe43ab9ea23bb542583b16af48fe3a3400b1e50b45d3c91152895c92f6a1f4844ac018c8003f0fd10e9473c503e70e9fc4ad11b0 -OpenBLAS.v0.3.21+0.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/78ea013e0ba52d289c919df3d5b79946 -OpenBLAS.v0.3.21+0.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/50ffb9d99d283db2880e767a3ebedbdc7ca67b18782717f5085e0cfc9f6cc55bdeb112e8dca0011e31954a22272936043ca538204fc9be81cb7a0f22d6726f12 -OpenBLAS.v0.3.21+0.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/47d016b3a50c0c9b2ed1eb5e49904169 -OpenBLAS.v0.3.21+0.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/d38fe6df24d658a0f54ab007ac6f9b30c0a02fbf86c0592f2e5cf5a8375b654a7428b75f74c20d97d6c953ae9998664c82800813dfa806a5f16dfc20c798c419 -OpenBLAS.v0.3.21+0.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/17f22b32a0715f82fd48cc5d82f6512c -OpenBLAS.v0.3.21+0.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/d9318a4cd232abc58907522c20ac666e6db2a92e6a25c9ddd1db0f0169be6f94aadc808014545e92e6168eaa7fa20de4235072186c48ade2e7fc672a700485ad -OpenBLAS.v0.3.21+0.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/d5a83c8835ad8553d304bf5260b53985 -OpenBLAS.v0.3.21+0.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/3b506824730c7269eb49e90dc11bfde2b17338ef1504da63e84562433c68586a71b022ad37de3096e06ac24e98828b48638c672789320f76cb33eda4c8e8c9eb -OpenBLAS.v0.3.21+0.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/59cc4a5aeb63dd84c0dc12cbef7d37af -OpenBLAS.v0.3.21+0.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/1e9cadcf65232d4a4fba9cda0226e5a5450227e16bf2c27a3268452d5c4e4d5d1321601fd6e1a5c5d92fbc3fc4de21c92e231b5ad3b25dd71eb49d5940fcf243 -OpenBLAS.v0.3.21+0.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/c04f400d9aca82aac956e94d9fc6fc51 -OpenBLAS.v0.3.21+0.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/8751300546ccb059fb7755e3f745e7e195cfaf90daf28b151ea2a3d540edf8910c97351d428dda196707599361a200f1a647098fdf5d7163380b4ad2b4a4f733 -OpenBLAS.v0.3.21+0.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/f251abd323b6bc463ae4a1989670aefb -OpenBLAS.v0.3.21+0.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/4f179ed09a5f5b71033d09db3894ad78d58a4429d65203225ab7a2a8c887222924910756a5fc4e3974a7cc6f9d994af287490f53cd05fe90f86c4bd4c4023b6d -OpenBLAS.v0.3.21+0.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/f8ffa30a958448028d1294da9d15f3b2 -OpenBLAS.v0.3.21+0.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/0a2d9a73be439d78b4af7c70345bdffd531d5687adeea28049adba3c8c9ab7b6ed221703f2a8aff9e7391305355a596dc9a846c84d36d1b4cdfda521f7c05e8c -OpenBLAS.v0.3.21+0.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/56a4aa4f3eafff290d38dc251a5966cb -OpenBLAS.v0.3.21+0.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/fce03b1c1becdac66208de20e66949aba113ce2695217d34703a9ba4fd79d364cdf05424282b9d1f25ad9c315baffca3a8bd0af239f6284bd37cbdb2ec3463c6 -OpenBLAS.v0.3.21+0.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/aca7ef7f854cfe45bedbf1f6b5a97aaf -OpenBLAS.v0.3.21+0.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/16821728c7a0e56589b60176a06543240f2a061b437dc1cf38723dc56910c6add114a4a5e65eda051e5e88ff7b82b8613ffaf5dad7864f1208eb381159bacc8c -OpenBLAS.v0.3.21+0.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/9f2c39eef42e5c80f56d36aee156e2b0 -OpenBLAS.v0.3.21+0.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/441a7833e4e2d1334aeda58d87560e613244138005bc54c74af00d81c26e1e508ce874fccdcd3b3114a74f5e2a102eb520a2e4165b461861ba79fbaff81e4ae3 -OpenBLAS.v0.3.21+0.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/bf1a9f3e553d6855133b4de3ffc841ee -OpenBLAS.v0.3.21+0.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/2002b305ef3f3721287ed839d6d08f34127058e6295233f8280cc3ebd06d91cb326ea83f13c0158820c381fa8a2cc74ec1360a65c99bc525f492be561b15cc09 -OpenBLAS.v0.3.21+0.i686-linux-gnu-libgfortran3.tar.gz/md5/6051a0545d272bf19988e2a889531acd -OpenBLAS.v0.3.21+0.i686-linux-gnu-libgfortran3.tar.gz/sha512/21706d2fd8dde6e1e938b0c7a53c6073d52d830d7672702d828d5606582e2c98bdb39fc7ff1fa67188942713e9d718fdf5f014812115d0d0853066c2df21f297 -OpenBLAS.v0.3.21+0.i686-linux-gnu-libgfortran4.tar.gz/md5/4fc17cff9c7a4512245ffead4d75c678 -OpenBLAS.v0.3.21+0.i686-linux-gnu-libgfortran4.tar.gz/sha512/5a28c5a587be439cd2bdf4880caf967cdec14945d26c978fa5c59ce251d5811d460bebc038808e0e8dd2eb4b6a0fdfcaacca4718e2aeb7855f466bd13d1974a7 -OpenBLAS.v0.3.21+0.i686-linux-gnu-libgfortran5.tar.gz/md5/06fa8dff91cff8ba91e2b4bc896e776c -OpenBLAS.v0.3.21+0.i686-linux-gnu-libgfortran5.tar.gz/sha512/493110d06c4361df13ba8e0839b9410551b0bba4fe6e3cdcb53c0dff41a03b3e34ec1c2e73cd4671516631492a16b8dd140a59fa3ac71c348e670858654f2d8a -OpenBLAS.v0.3.21+0.i686-linux-musl-libgfortran3.tar.gz/md5/1b16814a10900c96537b5bfed19e71c2 -OpenBLAS.v0.3.21+0.i686-linux-musl-libgfortran3.tar.gz/sha512/603b2a2fd92286143cb0cb573e3c085db485cf3c4f54987d255efedaea2a8a3d84b83e28f6b2db9dbf05cd31f061845a749b8402d145cc5e8cc2eb369b38e3f5 -OpenBLAS.v0.3.21+0.i686-linux-musl-libgfortran4.tar.gz/md5/20ec87e486f1154d253bc251c1ec0bce -OpenBLAS.v0.3.21+0.i686-linux-musl-libgfortran4.tar.gz/sha512/a2d1736e0f632bddc5140ea88840113b80fedcad51bf5ea93445053eb07c1ae304a1510a85cf964d3a0e087390b8526a0df2bcd24e356b4693a41e5dfc8a671c -OpenBLAS.v0.3.21+0.i686-linux-musl-libgfortran5.tar.gz/md5/df9f4898d550130b0c0c5cede6dd4db3 -OpenBLAS.v0.3.21+0.i686-linux-musl-libgfortran5.tar.gz/sha512/c4c3133904e7b401c5d3013d0ef38b13d7a9804fb4ba38a2c0a062f1badb4d9150214bfc2a1bf55df1299e4151d71a6dbfce7063d9d80a19fe321878c0e59309 -OpenBLAS.v0.3.21+0.i686-w64-mingw32-libgfortran3.tar.gz/md5/3d83d839f80abbd17f84631fbb8f6624 -OpenBLAS.v0.3.21+0.i686-w64-mingw32-libgfortran3.tar.gz/sha512/e51680b4b97f404f244b4d943148f506f84a21f0f59f4d41a3a0cf81d545658d9cc59592a2538c4c077606fc1e6f87eda23063e49828f066e743205c5e6aee8e -OpenBLAS.v0.3.21+0.i686-w64-mingw32-libgfortran4.tar.gz/md5/2ca3ebd61038a5e422a946ede3d17535 -OpenBLAS.v0.3.21+0.i686-w64-mingw32-libgfortran4.tar.gz/sha512/c692b7c00aa0eda4a3fa989f84c797126b1596e13514117ad898166f941f040df67826ba33d0af93673c7a0b478fe4392f9a53d7859b7371878b6608dcb0556b -OpenBLAS.v0.3.21+0.i686-w64-mingw32-libgfortran5.tar.gz/md5/55995848e4bc9ef739e8ba17962787d3 -OpenBLAS.v0.3.21+0.i686-w64-mingw32-libgfortran5.tar.gz/sha512/e274dcfc6593786ac4c32c3f49ec69ab3a0c7278c67bbd04373d4845bff2dfaf17300d4a71e48ebd508e299fa629190ffe70ce074a68e83bac0eafa51f4db2a0 -OpenBLAS.v0.3.21+0.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/2a3d5f0240a27cf1617d9d4abba6df78 -OpenBLAS.v0.3.21+0.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/489128c884a0c2b9eb5145b18c68f9c7de9a9cc4131f4635689dc67765f87bec852b0547ebea4ecfdad4eec38063aabe8f6c3e96e5856e08c0c26130c2f11897 -OpenBLAS.v0.3.21+0.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/bb3501965c26519ecf30830465b12672 -OpenBLAS.v0.3.21+0.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/bcc78c10f7aba973f1159443e8d408465833ef43530c1c2514715db5a1bb84c0f48510c12b2ac1211b2777328ec682e01ab668818025651f00db7ca747f5674e -OpenBLAS.v0.3.21+0.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/dc6192b5130e114b3cb1183690c7e398 -OpenBLAS.v0.3.21+0.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/95d69ace7b145c02acbe13c52d1e7835fdb1e8788c0b03f0f967d88575b322988e4f4acef3b6ad3e505c895f8d19566b8eb9add02f0250cf2d4a14c9f1428f3f -OpenBLAS.v0.3.21+0.x86_64-apple-darwin-libgfortran3.tar.gz/md5/27a9117002f96c41c7907be0475a8d86 -OpenBLAS.v0.3.21+0.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/2247f3691cc552f65a353412c46a76c1ac4b4d994a5725044ba300f0944f15b37144ceff438d77022b441c25eaf530709a4d3ed4523b97d292991b6407a72970 -OpenBLAS.v0.3.21+0.x86_64-apple-darwin-libgfortran4.tar.gz/md5/30dea9ca8b658ff6a9db9245d8ad7500 -OpenBLAS.v0.3.21+0.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/3289e766bfad456b35efae6d341a77698d4d36908ac8d802f47777feed5eef224fde1cb4799b5bd4e8e216c28c78ab4407b92906ddac0bdd1cfb674136c69aaa -OpenBLAS.v0.3.21+0.x86_64-apple-darwin-libgfortran5.tar.gz/md5/ed820c420a67b32df0a9f34760ce605c -OpenBLAS.v0.3.21+0.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/63f43eb0b1c037849fd5addda66d818c0b8188f9758391cd9929e78593c69ec61729be0efce6a9f943ebac178c634cdddffe172ad681ad1c4717949b075a1de7 -OpenBLAS.v0.3.21+0.x86_64-linux-gnu-libgfortran3.tar.gz/md5/a5393eb8e1799b6c089a82d8dde39fb0 -OpenBLAS.v0.3.21+0.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/8ce9ad2f55f131592a87789ec6a824cbe1d23c3be32fb2ba59e107045f75c34684b85d3bab2913923f5a19414a072b5e855c86fddd44a4319a9b5e7b28d5c169 -OpenBLAS.v0.3.21+0.x86_64-linux-gnu-libgfortran4.tar.gz/md5/652aa333440219a4ec17d94dd4e6d358 -OpenBLAS.v0.3.21+0.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/89d7740b462d4216e920dcd5c7867520b2f49c3cb74bd8424efd287927c92a08492c9fa413506248207f9532c7bb9ea2af587a4f70d7db8ea42ac1bc144e8a12 -OpenBLAS.v0.3.21+0.x86_64-linux-gnu-libgfortran5.tar.gz/md5/9e0831544d02a39565a2d0714b1e121a -OpenBLAS.v0.3.21+0.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/9e57a08a09d5fc47d881f9f7ed2e52fbdc7301908cf1be384fe767e6b7771a5980827417049dd37df4d71a861b2cf2a05f25df892b15ed03458910b0bc53101a -OpenBLAS.v0.3.21+0.x86_64-linux-musl-libgfortran3.tar.gz/md5/dde15d3a2f26601cd7ac0a803efbe503 -OpenBLAS.v0.3.21+0.x86_64-linux-musl-libgfortran3.tar.gz/sha512/fa48e51a59b6fb213f88ce8b2778ca5eef73f0721a5c71e27cd8952a34a5003d69710571deb5c0c06526fa8016cfdacabdc2b343342ad0d1e523903fa94a8d42 -OpenBLAS.v0.3.21+0.x86_64-linux-musl-libgfortran4.tar.gz/md5/55b80d13104f4ddc9eefa0424d71330b -OpenBLAS.v0.3.21+0.x86_64-linux-musl-libgfortran4.tar.gz/sha512/fcd816e4dcd767963ae555846cee846c19f0b7d666042d59757eb2eebe115d30af60072c134c3025049712520705dbe9d2862a1f07c955780f9a0de69e6e00b5 -OpenBLAS.v0.3.21+0.x86_64-linux-musl-libgfortran5.tar.gz/md5/e22e46b304962a1edb550e19914cc5e6 -OpenBLAS.v0.3.21+0.x86_64-linux-musl-libgfortran5.tar.gz/sha512/38f8ce1baee4082fd2432dbc1905fd03d8efbcc378aefc9312e90b6054341717ea46bc4d33f9f517e67af0fca2da55b5c5b112850e6071ba18753a4936d78da2 -OpenBLAS.v0.3.21+0.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/b8b7a9f9aff94b154e8479a84d7abe4b -OpenBLAS.v0.3.21+0.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/afe4c45d4bf4e38fdbbf00b9e86a65244aadaa2b74e59f9a43f1860c130f721bba2f36186519b2573ff0819bd2b30414cc23800634847db2ecd2107f985495ad -OpenBLAS.v0.3.21+0.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/8fceea42a8524fef29a54b88ea0a721b -OpenBLAS.v0.3.21+0.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/e8195597057ab6de0aa5978b4d13b3248ac6acde3f86fc55d9e1c76ec39d464fc2eefea1096cfb5dffbd623f47b06be163c4c74981d2eb13387bc8499b9053fe -OpenBLAS.v0.3.21+0.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/6f88d96c05663b4aeb81ba8a63882066 -OpenBLAS.v0.3.21+0.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/f1f516d8d16a2f86bfb26129e0530146de3a4bcb62abcd2c7b9bf64cc09c069e5eeb66658b1cc0cdcc665de98246ad8ed20a7d8b132fe0f0e4d0651d3b4516d4 -OpenBLAS.v0.3.21+0.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/4fb99984ec612a090b294c6b349a7cdb -OpenBLAS.v0.3.21+0.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/81bf55c6398a6cf4a61add084332e7cb79e6d550737641f6c0bc77aa61bd8187603a6100b78c2ef80109c3c5b21f7ba618a4780a5b68e5168a461af521f26c52 -OpenBLAS.v0.3.21+0.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/a1a2c3623d583ab995ac86df07ab73bb -OpenBLAS.v0.3.21+0.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/ec5fab349607862c9e0badaa1fd433e057ac7d056008af683bbb37bf43fef5322e598cd71a6d9c3dd55ef857b39ca634e64572e9ae6e263022dc7f89083f9bca -OpenBLAS.v0.3.21+0.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/05ef0ede7d565247a936c3110c25c83c -OpenBLAS.v0.3.21+0.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/34d2812bc0c6605558cbd6244c41d0805fc9a943cd91a74994bcacdd5ff19612eac8751832e3ee761089a853cf16069e67e13507ca75bbe4b7dc4517e41515e0 +OpenBLAS.v0.3.21+4.aarch64-apple-darwin-libgfortran5.tar.gz/md5/86311621de9f353cdc4495718544c4cc +OpenBLAS.v0.3.21+4.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/7b4b0159d120f3f822d59432091a64c8556fcc2d1c99c8d366400768bf31a463393027f8caeec2bacbb221d3c09142814bd7ffd1f8f479a8942aa177256642ae +OpenBLAS.v0.3.21+4.aarch64-linux-gnu-libgfortran3.tar.gz/md5/eff07fb30c3e35d26fa3a7d0fc837c20 +OpenBLAS.v0.3.21+4.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/70000c634af84974e96ac13481ba729c4668342cd06cb98032c1ad4d23890bafc7f9c2692e8ebae7127d88fc27553e382b80edb078f1a1ba6c13535f56535685 +OpenBLAS.v0.3.21+4.aarch64-linux-gnu-libgfortran4.tar.gz/md5/0015556833727545b248985acf9a79dd +OpenBLAS.v0.3.21+4.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/5b0007054c67629b86520298b462b07908c57a0c42871db99ce834673f7f2164e0cea0b952c4dcf2678cbf75354bcf0a8feee37266ddd41ef2c33a848666b00f +OpenBLAS.v0.3.21+4.aarch64-linux-gnu-libgfortran5.tar.gz/md5/1888c11bfc930840fe57d29ac4fb1dbd +OpenBLAS.v0.3.21+4.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/571f985d34ee403f9af09a143c695c4c626f32b363ae2439d8ca4057041fc966217c6d912089ad0c675e573253cd9327099e71f293cbe5f06be4e077da9f48ea +OpenBLAS.v0.3.21+4.aarch64-linux-musl-libgfortran3.tar.gz/md5/ec3bb6b7d998e37b52ae61439f4e4c58 +OpenBLAS.v0.3.21+4.aarch64-linux-musl-libgfortran3.tar.gz/sha512/7ad0bbfa194f7c8c30533d81a15c4229d300ed1c108af975f381a7b644c1da377b11cff60b60ee193152b91e0d29967f79d9b32d44b54d9b2230a768427ab28a +OpenBLAS.v0.3.21+4.aarch64-linux-musl-libgfortran4.tar.gz/md5/45bffcba3c88e111d903b95d503bead6 +OpenBLAS.v0.3.21+4.aarch64-linux-musl-libgfortran4.tar.gz/sha512/be76750ff245ad91d5e6fad268619ec8732ad1fc1236e02c8e4ff65ecbf5502fa1cae89b026e0414dfe8ec38d002acf79d18f4ae8a320da6dedb3760db969c04 +OpenBLAS.v0.3.21+4.aarch64-linux-musl-libgfortran5.tar.gz/md5/6932c7351aed13bfc25ba56a283595d5 +OpenBLAS.v0.3.21+4.aarch64-linux-musl-libgfortran5.tar.gz/sha512/2df1fd87da29d1ee85bc3208e3435756bfe615df49385072a2a18e15ba54fba754e94be0fdce9f7c370af5ff746b5841beda9a3f5f011b8472b2b579ca2eded5 +OpenBLAS.v0.3.21+4.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/367657c9e84b6016d3b835d98af3dd2a +OpenBLAS.v0.3.21+4.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/3a660c0096f086742e2bac219db732244f35bf527537302e8590ea6e6a369438268ebc479a67096e0ac872f5792f149c6097c64a8afb2624e09687fa4f3bf023 +OpenBLAS.v0.3.21+4.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/86309e18c22fc5fa5e437bc5b8814f28 +OpenBLAS.v0.3.21+4.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/ca51805940efadb27fcdd845551f57a936fbdfbc3caf71fb04eb70360686b75ec5eaf8957e860622d5cbfa4305edacdcfd49bbb48134cd05b96b499faa8e2fd4 +OpenBLAS.v0.3.21+4.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/993d99064baa38498d0c40829bc0899a +OpenBLAS.v0.3.21+4.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/267ebe796afa475a41bb57d6eed1397a5b434945446cd2e612024218fa93f9342bcc4fb8cee0957422aa31ee89c77fe4b07f3f573eb01b6fad0d52d859c7df6c +OpenBLAS.v0.3.21+4.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/243ee32320336ada3524545164ba1fd3 +OpenBLAS.v0.3.21+4.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/2e6b95d82004b8e411441d13e90dd39e39b57288f3502d077daf811709ca1f2eab10fed66648de7cbd0ee37bebb9eef46bd5f476e9ff942f1110b4cde337cea6 +OpenBLAS.v0.3.21+4.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/586032d64e693a46dfe7ae5f56cc6bb3 +OpenBLAS.v0.3.21+4.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/1bc53988dcb22dc82d434a151eb74eadca00ffe3822575497a10229fda967c333828137e76a4afbcc8576ac9261f492ccb4e1e70eb22da977a189b39a72bde63 +OpenBLAS.v0.3.21+4.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/a6b2acfa27a2cf042f228e3f79288161 +OpenBLAS.v0.3.21+4.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/e4b04da8a2002946ca674e191851c506723a91837232025c9e23115348df3187b041725d2406a592e48a595aa3fbe8ff9da9ae70ad8d366e4c118fdba52c9411 +OpenBLAS.v0.3.21+4.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/367657c9e84b6016d3b835d98af3dd2a +OpenBLAS.v0.3.21+4.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/3a660c0096f086742e2bac219db732244f35bf527537302e8590ea6e6a369438268ebc479a67096e0ac872f5792f149c6097c64a8afb2624e09687fa4f3bf023 +OpenBLAS.v0.3.21+4.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/86309e18c22fc5fa5e437bc5b8814f28 +OpenBLAS.v0.3.21+4.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/ca51805940efadb27fcdd845551f57a936fbdfbc3caf71fb04eb70360686b75ec5eaf8957e860622d5cbfa4305edacdcfd49bbb48134cd05b96b499faa8e2fd4 +OpenBLAS.v0.3.21+4.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/993d99064baa38498d0c40829bc0899a +OpenBLAS.v0.3.21+4.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/267ebe796afa475a41bb57d6eed1397a5b434945446cd2e612024218fa93f9342bcc4fb8cee0957422aa31ee89c77fe4b07f3f573eb01b6fad0d52d859c7df6c +OpenBLAS.v0.3.21+4.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/243ee32320336ada3524545164ba1fd3 +OpenBLAS.v0.3.21+4.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/2e6b95d82004b8e411441d13e90dd39e39b57288f3502d077daf811709ca1f2eab10fed66648de7cbd0ee37bebb9eef46bd5f476e9ff942f1110b4cde337cea6 +OpenBLAS.v0.3.21+4.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/586032d64e693a46dfe7ae5f56cc6bb3 +OpenBLAS.v0.3.21+4.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/1bc53988dcb22dc82d434a151eb74eadca00ffe3822575497a10229fda967c333828137e76a4afbcc8576ac9261f492ccb4e1e70eb22da977a189b39a72bde63 +OpenBLAS.v0.3.21+4.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/a6b2acfa27a2cf042f228e3f79288161 +OpenBLAS.v0.3.21+4.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/e4b04da8a2002946ca674e191851c506723a91837232025c9e23115348df3187b041725d2406a592e48a595aa3fbe8ff9da9ae70ad8d366e4c118fdba52c9411 +OpenBLAS.v0.3.21+4.i686-linux-gnu-libgfortran3.tar.gz/md5/e752b2e67a151ea7cfb76c9b15b687e1 +OpenBLAS.v0.3.21+4.i686-linux-gnu-libgfortran3.tar.gz/sha512/230a5fade6d4a205d932362ce40b5455229247ed279e6a0d7105d6207c28d699094c227216aad267aa053878b914043284c7dd9d1c2e4d26d0978efc9071bb48 +OpenBLAS.v0.3.21+4.i686-linux-gnu-libgfortran4.tar.gz/md5/478d429202eb287a840df5bbf191b878 +OpenBLAS.v0.3.21+4.i686-linux-gnu-libgfortran4.tar.gz/sha512/31f98104f1355c01aa86f2fb01165fdf93035319285987d93045518fc4ecc84b59a911369169fc534a4ab3b18c27fe49dc80125263d73ad7d265e6e3913d25a4 +OpenBLAS.v0.3.21+4.i686-linux-gnu-libgfortran5.tar.gz/md5/c8821f59bc938244b2bdc46278c041a5 +OpenBLAS.v0.3.21+4.i686-linux-gnu-libgfortran5.tar.gz/sha512/475413dda79b2263a19eeb657f2c31e36f2f915a702327b3331d294c8783a4f6f4f31b672edfed14cdbdbd2b4f5bf36273f70fa2dd1ec5611925f7a55971780f +OpenBLAS.v0.3.21+4.i686-linux-musl-libgfortran3.tar.gz/md5/9ba93d57e2cf8695699b881715f32f2c +OpenBLAS.v0.3.21+4.i686-linux-musl-libgfortran3.tar.gz/sha512/eb0ea7be9853ab1c220545f628cea4047deacf1fd704c889950f7aeafb58dc75e6cccd1b0c85c30ca12007cce05773382bf4a944f61aa9a0ed0f51621b45fc64 +OpenBLAS.v0.3.21+4.i686-linux-musl-libgfortran4.tar.gz/md5/a4f7aa370d7023f0b062a255a48ff81f +OpenBLAS.v0.3.21+4.i686-linux-musl-libgfortran4.tar.gz/sha512/cc8fd2dd011d4007ea5bd99d909776ca2a3700f6457a92cb43f77684b0dfa5a13f808e03db142647766c385e2bbd4db97f90701f286f5cb04276153d8f6a94fa +OpenBLAS.v0.3.21+4.i686-linux-musl-libgfortran5.tar.gz/md5/5b33f48568c3347a98a72d44786f14c7 +OpenBLAS.v0.3.21+4.i686-linux-musl-libgfortran5.tar.gz/sha512/684ac712c035b14ec1b9b1f0ebad1b813b19155852b7b2af75e5956533d8b90e09bc9652a2beb908d2a1c7e2d22fccbf5479aab10d95528aa173d603f60f6135 +OpenBLAS.v0.3.21+4.i686-w64-mingw32-libgfortran3.tar.gz/md5/7f49b3f4847564539398d50abd8c8f47 +OpenBLAS.v0.3.21+4.i686-w64-mingw32-libgfortran3.tar.gz/sha512/8d57f41a3c092f2373e5ecb91ef7e30176d72686d9b7906cf2a84ebb4d0ed0e4a9303b0814d1bcca13d9345ae424ea4bc40ede656b2084050ca76ce2e0bf1fa9 +OpenBLAS.v0.3.21+4.i686-w64-mingw32-libgfortran4.tar.gz/md5/f75f688f483d0a782365f95e8463f804 +OpenBLAS.v0.3.21+4.i686-w64-mingw32-libgfortran4.tar.gz/sha512/cbb4e0a82f3f003f390241af787ff5579e75a0b37c8174976b19760410718cacbacf40f352e6ec56ab7a88ef56357523606400ded23e0931d8d6c791196e30c5 +OpenBLAS.v0.3.21+4.i686-w64-mingw32-libgfortran5.tar.gz/md5/16e0538b1492142f35e3aefa19d95a8c +OpenBLAS.v0.3.21+4.i686-w64-mingw32-libgfortran5.tar.gz/sha512/21190512ce1c6d5267e01ccf92c111be7bc8807a6114d57b2a5ac74d9be749a82143ad269a293164bf040dc5f5e5353702d49ed48a72dbe9e996e59ac226b407 +OpenBLAS.v0.3.21+4.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/a6d6d1f7bf381edcdc01b47a08ef31f7 +OpenBLAS.v0.3.21+4.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/99bb2a5736eb6c04be445f3bde5e4e3d1010053d615c02d1de69ec65a69f08c5a1a77e146489b69112bb830702d56fa2a3111f44b30f1369e71fbd69afa1e9d2 +OpenBLAS.v0.3.21+4.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/71b32f5fa2b38cc49e08f10c6d28610a +OpenBLAS.v0.3.21+4.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/0cc9c46b299ecf81d7174f962f75562b78ab9c2df794f3dc2dc7c3c15ccafe4baf3f5d23fa3e9ae754b3a0d40f493433829efa15228bf046548d32ee5a90f020 +OpenBLAS.v0.3.21+4.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/2ede77add3d501c98d2b38aebf7f82b5 +OpenBLAS.v0.3.21+4.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/97e4588004ad8b74f72c64fafef150ef0f774b50d48a8b83e269217fccea6b63e8fd9ec9a4907b14d96fee2bd24cd1a347f2744367b2de22d5b7f5a753140892 +OpenBLAS.v0.3.21+4.x86_64-apple-darwin-libgfortran3.tar.gz/md5/c51184816f4b576e0b79b776a631b064 +OpenBLAS.v0.3.21+4.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/cc67ee691f93cf15057ee513a30ff31e440a6438d8ab9eb9a3a6bd10b44cc8ba6428c18dd454f70cf2066f2bbab99374e373b5bda9a3201b0c97239efad135e8 +OpenBLAS.v0.3.21+4.x86_64-apple-darwin-libgfortran4.tar.gz/md5/e5ff0d607488f582317554f856c825f5 +OpenBLAS.v0.3.21+4.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/466801af19cf67bf2755adbc2c895eda7adf67af94e58a21b1415175b3ff0e4913b6b4c14f0d57aa589cdea1972dc597cdd7c345a6fa881b64aa999dc55b22e9 +OpenBLAS.v0.3.21+4.x86_64-apple-darwin-libgfortran5.tar.gz/md5/f35f0f769d71f1bb603f7213a2898d2b +OpenBLAS.v0.3.21+4.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/72e80a685c21d7570d4127ee88baa1900ea64af1c91d307bfe3049a02ad5672c1330549625f10db91ca8dfa45c664cd35bf1e702b110b8317e7c4392cbcfc323 +OpenBLAS.v0.3.21+4.x86_64-linux-gnu-libgfortran3.tar.gz/md5/9c7563a8df3c1d27e4db9f8e5288fc45 +OpenBLAS.v0.3.21+4.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/c6f81ec1da096f6e27e6179235042f0558bc5e3ade27a230bafb2f121b48bc96d7d9e0c45b0e4dc8fee10257913eccabcfcaf67d515e0ba4f373f1ca4869773c +OpenBLAS.v0.3.21+4.x86_64-linux-gnu-libgfortran4.tar.gz/md5/206f6302a757a1a30ab6716b6e508741 +OpenBLAS.v0.3.21+4.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/35adbec09c4a636131a757f4b51d7b458f23e7b7118194be63a116746b2e1e7a15990bd76e8ecbbe2a6010cb6e54bca3a296f02d83b27c6394b42bdffa041653 +OpenBLAS.v0.3.21+4.x86_64-linux-gnu-libgfortran5.tar.gz/md5/9aa48579f0c50500796de228f00909d8 +OpenBLAS.v0.3.21+4.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/ef1b1578259b055a23df4e57bb4bf2c1ef94e4d0d1e63eda622db291256ef8cde8694befcdc83b507cf6c3f47db142b51e6bac614ec32bae92ae576ddd6e2f15 +OpenBLAS.v0.3.21+4.x86_64-linux-musl-libgfortran3.tar.gz/md5/ba5ac7e48691965b3d5045785d37618e +OpenBLAS.v0.3.21+4.x86_64-linux-musl-libgfortran3.tar.gz/sha512/0e37f806faa5bc5cd8e5096efbbbef458720c267ed69028e66ced3269baac53c9e0a92ab728ceab499f6aed3edbcbca6c2b1caaa6e145c386bafb57657a6c353 +OpenBLAS.v0.3.21+4.x86_64-linux-musl-libgfortran4.tar.gz/md5/e9b1ab8fcd6b62b92db6e064054a02ea +OpenBLAS.v0.3.21+4.x86_64-linux-musl-libgfortran4.tar.gz/sha512/75706214b660df35daa3865cc267087ca9aecd04b658d5b9d867d15bad901f00677766c04d7701b45d5238aaf4ed09fafff0ca07e9f501dded9479eea26a5112 +OpenBLAS.v0.3.21+4.x86_64-linux-musl-libgfortran5.tar.gz/md5/d86ecacd9904ef70fe17b762e70986e7 +OpenBLAS.v0.3.21+4.x86_64-linux-musl-libgfortran5.tar.gz/sha512/12edb53c88d7deb4585092ca9d9e3c0578d0ca0e91b388c2eddf84dc080c971dba122195b750e2aa4c3a532a7df2c9da7b56b565f3c2002282621cc63425954e +OpenBLAS.v0.3.21+4.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/494fccd04e83345dc20bd753319b8ed3 +OpenBLAS.v0.3.21+4.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/3000b9ec7b66e09597759570eb77645dec1e82a0b4f56ab9439f2fa3e55bbc2863cc61cbbe77752415fd5926010b1647fffedb8dacaa77b87f815d98bb47d86b +OpenBLAS.v0.3.21+4.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/df1133b14f2561b02f4f2e52106635ed +OpenBLAS.v0.3.21+4.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/ed2c18a9f0768412128dd2e370d85868e536cf3ca4d0d03bc626e4690ba81965c540f08d00b46208a7969bd07b9848e6ff8a14e91a4e927d2b44e9ba5b374e8c +OpenBLAS.v0.3.21+4.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/0ed230111e50d49609d631a2f205dff5 +OpenBLAS.v0.3.21+4.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/1940a500b25f1c2613d2f2ab6533309991808622082a7910985fc0573d41358c5c9311c9bb65a00d5508e7d9e4612773e97adb860cba2c2f4f3957782d695f21 +OpenBLAS.v0.3.21+4.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/f156c495d81f4c70690f7e5be02d8816 +OpenBLAS.v0.3.21+4.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/30b575c6f17b3b59a1d21feba9922a230021a99cd19126bb1c955025906ff7539ac8427b9ec82a950988fa251409b045007a1a2223f6e710b0a6f734f8c00ad5 +OpenBLAS.v0.3.21+4.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/57c919083397ddb90621148635b11bb7 +OpenBLAS.v0.3.21+4.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/7fc6dc8aaea7ed725018e0aabcf3185559ce196f75ec2f18405eaac641d3decb1aae577ace684ffd2539346dcd1444f8f17414291085878c5f80a56550e338cb +OpenBLAS.v0.3.21+4.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/1cdb4c9a5ae04c7c9127acb06a7acbc2 +OpenBLAS.v0.3.21+4.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/a479cef47e8aff321ee9835dfcd69f89db2921afd1e253103d43e0a5b9d831259b07ca99adffd76d412a296e447b58c6585ea29a5905a6266d1d853b50067203 openblas-b89fb708caa5a5a32de8f4306c4ff132e0228e9a.tar.gz/md5/716ebe95d4b491253cdde8308b8adb83 openblas-b89fb708caa5a5a32de8f4306c4ff132e0228e9a.tar.gz/sha512/00e7bde49525c2c28bf07b47290e00b53bff446be63f09e90c51724c6350e5ddc90f5a071ae6de057b3fbb107060e70bf16683fcefcf48ae37ba1d0758be553b diff --git a/deps/clang.version b/deps/clang.version index 2fa84f679cb19..d10ae4340ce6c 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 := 14.0.6+0 +CLANG_JLL_VER := 14.0.6+2 diff --git a/deps/libsuitesparse.mk b/deps/libsuitesparse.mk index 8900390d24c24..7d79e03ee8d0e 100644 --- a/deps/libsuitesparse.mk +++ b/deps/libsuitesparse.mk @@ -26,7 +26,7 @@ LIBSUITESPARSE_MFLAGS := CC="$(CC) $(SANITIZE_OPTS)" CXX="$(CXX) $(SANITIZE_OPTS AR="$(AR)" RANLIB="$(RANLIB)" \ BLAS="-L$(build_shlibdir) -lblastrampoline" \ LAPACK="-L$(build_shlibdir) -lblastrampoline" \ - LDFLAGS="$(SUITESPARSE_LIB) $(SANITIZE_LDFLAGS) -Wl,--warn-unresolved-symbols" CFOPENMP="" CUDA=no CUDA_PATH="" \ + LDFLAGS="$(SUITESPARSE_LIB) $(SANITIZE_LDFLAGS)" CFOPENMP="" CUDA=no CUDA_PATH="" \ UMFPACK_CONFIG="$(UMFPACK_CONFIG)" \ CHOLMOD_CONFIG="$(CHOLMOD_CONFIG)" \ SPQR_CONFIG="$(SPQR_CONFIG)" diff --git a/deps/lld.version b/deps/lld.version index 2b34a5d3012ad..dbb446d9e99be 100644 --- a/deps/lld.version +++ b/deps/lld.version @@ -1,3 +1,3 @@ ## jll artifact LLD_JLL_NAME := LLD -LLD_JLL_VER := 14.0.6+0 +LLD_JLL_VER := 14.0.6+3 diff --git a/deps/llvm-tools.version b/deps/llvm-tools.version index 5da312d32f0af..236c76ca407ab 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 := 14.0.6+0 -LLVM_TOOLS_ASSERT_JLL_VER := 14.0.6+0 +LLVM_TOOLS_JLL_VER := 14.0.6+2 +LLVM_TOOLS_ASSERT_JLL_VER := 14.0.6+2 diff --git a/deps/llvm.version b/deps/llvm.version index 2dbcd0f510f81..64ed012bc9989 100644 --- a/deps/llvm.version +++ b/deps/llvm.version @@ -4,5 +4,5 @@ LLVM_ASSERT_JLL_VER := 14.0.5+3 ## source build LLVM_VER := 14.0.5 -LLVM_BRANCH=julia-14.0.6-0 -LLVM_SHA1=julia-14.0.6-0 +LLVM_BRANCH=julia-14.0.6-2 +LLVM_SHA1=julia-14.0.6-2 diff --git a/deps/mbedtls.mk b/deps/mbedtls.mk index 0f654dfd04c58..b4147c2c2684e 100644 --- a/deps/mbedtls.mk +++ b/deps/mbedtls.mk @@ -3,7 +3,7 @@ include $(SRCDIR)/mbedtls.version ifneq ($(USE_BINARYBUILDER_MBEDTLS), 1) MBEDTLS_SRC = mbedtls-$(MBEDTLS_VER) -MBEDTLS_URL = https://github.com/ARMmbed/mbedtls/archive/v$(MBEDTLS_VER).tar.gz +MBEDTLS_URL = https://github.com/Mbed-TLS/mbedtls/archive/v$(MBEDTLS_VER).tar.gz MBEDTLS_OPTS := $(CMAKE_COMMON) -DUSE_SHARED_MBEDTLS_LIBRARY=ON \ -DUSE_STATIC_MBEDTLS_LIBRARY=OFF -DENABLE_PROGRAMS=OFF -DCMAKE_BUILD_TYPE=Release diff --git a/deps/mbedtls.version b/deps/mbedtls.version index eaf3bca011e1f..f262476af1684 100644 --- a/deps/mbedtls.version +++ b/deps/mbedtls.version @@ -2,4 +2,4 @@ MBEDTLS_JLL_NAME := MbedTLS ## source build -MBEDTLS_VER := 2.28.0 +MBEDTLS_VER := 2.28.2 diff --git a/deps/openblas.mk b/deps/openblas.mk index f949143f393b1..ae98a9e678f0b 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-power-test.patch-applied: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/neoverse-generic-kernels.patch-applied + cd $(BUILDDIR)/$(OPENBLAS_SRC_DIR) && \ + patch -p1 -f < $(SRCDIR)/patches/openblas-power-test.patch + echo 1 > $@ + +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-power-test.patch-applied echo 1 > $@ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-compiled: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured diff --git a/deps/patches/openblas-power-test.patch b/deps/patches/openblas-power-test.patch new file mode 100644 index 0000000000000..aaf5c0ba32639 --- /dev/null +++ b/deps/patches/openblas-power-test.patch @@ -0,0 +1,55 @@ +From d9dc015cfc78fc32f555995a89d6957ef0184ea2 Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Mon, 8 Aug 2022 14:52:10 +0200 +Subject: [PATCH 1/2] Use blasint for INTERFACE64 compatibility + +--- + test/compare_sgemm_sbgemm.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/test/compare_sgemm_sbgemm.c b/test/compare_sgemm_sbgemm.c +index a2c358cfa7..d4b5914506 100644 +--- a/test/compare_sgemm_sbgemm.c ++++ b/test/compare_sgemm_sbgemm.c +@@ -76,9 +76,9 @@ float16to32 (bfloat16_bits f16) + int + main (int argc, char *argv[]) + { +- int m, n, k; ++ blasint m, n, k; + int i, j, l; +- int x; ++ blasint x; + int ret = 0; + int loop = 100; + char transA = 'N', transB = 'N'; + +From 3d338b57de1837f1e2264a1262a9ee9203f31c6c Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Mon, 8 Aug 2022 17:09:45 +0200 +Subject: [PATCH 2/2] remove spurious loops + +--- + test/compare_sgemm_sbgemm.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/test/compare_sgemm_sbgemm.c b/test/compare_sgemm_sbgemm.c +index d4b5914506..276fecae9d 100644 +--- a/test/compare_sgemm_sbgemm.c ++++ b/test/compare_sgemm_sbgemm.c +@@ -112,7 +112,6 @@ main (int argc, char *argv[]) + &m, BB, &k, &beta, CC, &m); + for (i = 0; i < n; i++) + for (j = 0; j < m; j++) +- for (l = 0; l < k; l++) + if (fabs (CC[i * m + j] - C[i * m + j]) > 1.0) + ret++; + if (transA == 'N' && transB == 'N') +@@ -126,7 +125,6 @@ main (int argc, char *argv[]) + } + for (i = 0; i < n; i++) + for (j = 0; j < m; j++) +- for (l = 0; l < k; l++) + if (CC[i * m + j] != DD[i * m + j]) + ret++; + } diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index 6eca670652e04..785398fa3ec33 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -271,7 +271,7 @@ void replaceUsesWithLoad(Function &F, function_refjl_external_to_llvm.resize(params.external_fns.size()); - auto tbaa_const = tbaa_make_child_with_context(*ctxt.getContext(), "jtbaa_const", nullptr, true).first; for (auto &extern_fn : params.external_fns) { jl_code_instance_t *this_code = std::get<0>(extern_fn.first); bool specsig = std::get<1>(extern_fn.first); assert(specsig && "Error external_fns doesn't handle non-specsig yet"); - (void)specsig; - Function *F = extern_fn.second; - Module *M = F->getParent(); - - Type *T_funcp = F->getFunctionType()->getPointerTo(); - // Can't create a GC with type FunctionType. Alias also doesn't work - GlobalVariable *GV = new GlobalVariable(*M, T_funcp, false, - GlobalVariable::ExternalLinkage, - Constant::getNullValue(T_funcp), - F->getName()); - - - // Need to insert load instruction, thus we can't use replace all uses with - replaceUsesWithLoad(*F, [GV](Instruction &) { return GV; }, tbaa_const); - - assert(F->getNumUses() == 0); // declaration counts as use - GV->takeName(F); - F->eraseFromParent(); - + (void) specsig; + GlobalVariable *F = extern_fn.second; size_t idx = gvars.size() - offset; assert(idx >= 0); data->jl_external_to_llvm.at(idx) = this_code; - gvars.push_back(std::string(GV->getName())); + gvars.push_back(std::string(F->getName())); } // clones the contents of the module `m` to the shadow_output collector diff --git a/src/codegen-stubs.c b/src/codegen-stubs.c index e7b7d1fb791a5..84516c33f4919 100644 --- a/src/codegen-stubs.c +++ b/src/codegen-stubs.c @@ -67,7 +67,7 @@ JL_DLLEXPORT size_t jl_jit_total_bytes_fallback(void) return 0; } -JL_DLLEXPORT void *jl_create_native_fallback(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvmmod, const jl_cgparams_t *cgparams, int _policy, int _imaging_mode, int _external_linkage) UNAVAILABLE +JL_DLLEXPORT void *jl_create_native_fallback(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvmmod, const jl_cgparams_t *cgparams, int _policy, int _imaging_mode, int _external_linkage, size_t _world) UNAVAILABLE JL_DLLEXPORT void jl_dump_compiles_fallback(void *s) { diff --git a/src/codegen.cpp b/src/codegen.cpp index 4fb5c7bc0cdee..f7adf9c3f6efd 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -6,7 +6,7 @@ #if defined(_CPU_X86_) #define JL_NEED_FLOATTEMP_VAR 1 #endif -#if defined(_OS_WINDOWS_) || defined(_OS_FREEBSD_) || defined(_COMPILER_MSAN_ENABLED_) +#if defined(_OS_LINUX_) || defined(_OS_WINDOWS_) || defined(_OS_FREEBSD_) || defined(_COMPILER_MSAN_ENABLED_) #define JL_DISABLE_FPO #endif @@ -1532,7 +1532,7 @@ class jl_codectx_t { jl_codegen_params_t &emission_context; llvm::MapVector call_targets; std::map &global_targets; - std::map, Function*> &external_calls; + std::map, GlobalVariable*> &external_calls; Function *f = NULL; // local var info. globals are not in here. std::vector slots; @@ -1694,7 +1694,7 @@ static Value *get_current_task(jl_codectx_t &ctx); static Value *get_current_ptls(jl_codectx_t &ctx); static Value *get_last_age_field(jl_codectx_t &ctx); static void CreateTrap(IRBuilder<> &irbuilder, bool create_new_block = true); -static CallInst *emit_jlcall(jl_codectx_t &ctx, Function *theFptr, Value *theF, +static CallInst *emit_jlcall(jl_codectx_t &ctx, FunctionCallee theFptr, Value *theF, const jl_cgval_t *args, size_t nargs, JuliaFunction *trampoline); static CallInst *emit_jlcall(jl_codectx_t &ctx, JuliaFunction *theFptr, Value *theF, const jl_cgval_t *args, size_t nargs, JuliaFunction *trampoline); @@ -4018,14 +4018,14 @@ static bool emit_builtin_call(jl_codectx_t &ctx, jl_cgval_t *ret, jl_value_t *f, } // Returns ctx.types().T_prjlvalue -static CallInst *emit_jlcall(jl_codectx_t &ctx, Function *theFptr, Value *theF, +static CallInst *emit_jlcall(jl_codectx_t &ctx, FunctionCallee theFptr, Value *theF, const jl_cgval_t *argv, size_t nargs, JuliaFunction *trampoline) { ++EmittedJLCalls; Function *TheTrampoline = prepare_call(trampoline); // emit arguments SmallVector theArgs; - theArgs.push_back(theFptr); + theArgs.push_back(theFptr.getCallee()); if (theF) theArgs.push_back(theF); for (size_t i = 0; i < nargs; i++) { @@ -4046,7 +4046,7 @@ static CallInst *emit_jlcall(jl_codectx_t &ctx, JuliaFunction *theFptr, Value *t } -static jl_cgval_t emit_call_specfun_other(jl_codectx_t &ctx, jl_method_instance_t *mi, jl_value_t *jlretty, StringRef specFunctionObject, +static jl_cgval_t emit_call_specfun_other(jl_codectx_t &ctx, jl_method_instance_t *mi, jl_value_t *jlretty, StringRef specFunctionObject, jl_code_instance_t *fromexternal, const jl_cgval_t *argv, size_t nargs, jl_returninfo_t::CallingConv *cc, unsigned *return_roots, jl_value_t *inferred_retty) { ++EmittedSpecfunCalls; @@ -4122,7 +4122,22 @@ static jl_cgval_t emit_call_specfun_other(jl_codectx_t &ctx, jl_method_instance_ idx++; } assert(idx == nfargs); - CallInst *call = ctx.builder.CreateCall(returninfo.decl, ArrayRef(&argvals[0], nfargs)); + Value *callee = returninfo.decl; + if (fromexternal) { + std::string namep("p"); + namep += returninfo.decl->getName(); + GlobalVariable *GV = cast_or_null(jl_Module->getNamedValue(namep)); + if (GV == nullptr) { + GV = new GlobalVariable(*jl_Module, callee->getType(), false, + GlobalVariable::ExternalLinkage, + Constant::getNullValue(callee->getType()), + namep); + ctx.external_calls[std::make_tuple(fromexternal, true)] = GV; + } + jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA(ctx, ctx.tbaa().tbaa_const); + callee = ai.decorateInst(ctx.builder.CreateAlignedLoad(callee->getType(), GV, Align(sizeof(void*)))); + } + CallInst *call = ctx.builder.CreateCall(cft, callee, ArrayRef(&argvals[0], nfargs)); call->setAttributes(returninfo.decl->getAttributes()); jl_cgval_t retval; @@ -4161,13 +4176,30 @@ static jl_cgval_t emit_call_specfun_other(jl_codectx_t &ctx, jl_method_instance_ return update_julia_type(ctx, retval, inferred_retty); } -static jl_cgval_t emit_call_specfun_boxed(jl_codectx_t &ctx, jl_value_t *jlretty, StringRef specFunctionObject, +static jl_cgval_t emit_call_specfun_boxed(jl_codectx_t &ctx, jl_value_t *jlretty, StringRef specFunctionObject, jl_code_instance_t *fromexternal, const jl_cgval_t *argv, size_t nargs, jl_value_t *inferred_retty) { - auto theFptr = cast( - jl_Module->getOrInsertFunction(specFunctionObject, ctx.types().T_jlfunc).getCallee()); - addRetAttr(theFptr, Attribute::NonNull); - Value *ret = emit_jlcall(ctx, theFptr, nullptr, argv, nargs, julia_call); + Value *theFptr; + if (fromexternal) { + std::string namep("p"); + namep += specFunctionObject; + GlobalVariable *GV = cast_or_null(jl_Module->getNamedValue(namep)); + Type *pfunc = ctx.types().T_jlfunc->getPointerTo(); + if (GV == nullptr) { + GV = new GlobalVariable(*jl_Module, pfunc, false, + GlobalVariable::ExternalLinkage, + Constant::getNullValue(pfunc), + namep); + ctx.external_calls[std::make_tuple(fromexternal, false)] = GV; + } + jl_aliasinfo_t ai = jl_aliasinfo_t::fromTBAA(ctx, ctx.tbaa().tbaa_const); + theFptr = ai.decorateInst(ctx.builder.CreateAlignedLoad(pfunc, GV, Align(sizeof(void*)))); + } + else { + theFptr = jl_Module->getOrInsertFunction(specFunctionObject, ctx.types().T_jlfunc).getCallee(); + addRetAttr(cast(theFptr), Attribute::NonNull); + } + Value *ret = emit_jlcall(ctx, FunctionCallee(ctx.types().T_jlfunc, theFptr), nullptr, argv, nargs, julia_call); return update_julia_type(ctx, mark_julia_type(ctx, ret, true, jlretty), inferred_retty); } @@ -4202,12 +4234,12 @@ static jl_cgval_t emit_invoke(jl_codectx_t &ctx, const jl_cgval_t &lival, const FunctionType *ft = ctx.f->getFunctionType(); StringRef protoname = ctx.f->getName(); if (ft == ctx.types().T_jlfunc) { - result = emit_call_specfun_boxed(ctx, ctx.rettype, protoname, argv, nargs, rt); + result = emit_call_specfun_boxed(ctx, ctx.rettype, protoname, nullptr, argv, nargs, rt); handled = true; } else if (ft != ctx.types().T_jlfuncparams) { unsigned return_roots = 0; - result = emit_call_specfun_other(ctx, mi, ctx.rettype, protoname, argv, nargs, &cc, &return_roots, rt); + result = emit_call_specfun_other(ctx, mi, ctx.rettype, protoname, nullptr, argv, nargs, &cc, &return_roots, rt); handled = true; } } @@ -4215,7 +4247,7 @@ static jl_cgval_t emit_invoke(jl_codectx_t &ctx, const jl_cgval_t &lival, const jl_value_t *ci = ctx.params->lookup(mi, ctx.world, ctx.world); // TODO: need to use the right pair world here jl_code_instance_t *codeinst = (jl_code_instance_t*)ci; if (ci != jl_nothing) { - auto invoke = jl_atomic_load_relaxed(&codeinst->invoke); + auto invoke = jl_atomic_load_acquire(&codeinst->invoke); // check if we know how to handle this specptr if (invoke == jl_fptr_const_return_addr) { result = mark_julia_const(ctx, codeinst->rettype_const); @@ -4227,33 +4259,43 @@ static jl_cgval_t emit_invoke(jl_codectx_t &ctx, const jl_cgval_t &lival, const std::string name; StringRef protoname; bool need_to_emit = true; - bool cache_valid = ctx.use_cache; + bool cache_valid = ctx.use_cache || ctx.external_linkage; bool external = false; - if (ctx.external_linkage) { - if (jl_object_in_image((jl_value_t*)codeinst)) { - // Target is present in another pkgimage - cache_valid = true; - external = true; - } + + // 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(); + need_to_emit = cache_valid = false; } + // Check if it is already compiled (either JIT or externally) if (cache_valid) { // optimization: emit the correct name immediately, if we know it // TODO: use `emitted` map here too to try to consolidate names? - auto invoke = jl_atomic_load_relaxed(&codeinst->invoke); + // WARNING: isspecsig is protected by the codegen-lock. If that lock is removed, then the isspecsig load needs to be properly atomically sequenced with this. auto fptr = jl_atomic_load_relaxed(&codeinst->specptr.fptr); if (fptr) { - if (specsig ? codeinst->isspecsig : invoke == jl_fptr_args_addr) { + while (!(jl_atomic_load_acquire(&codeinst->specsigflags) & 0b10)) { + jl_cpu_pause(); + } + invoke = jl_atomic_load_relaxed(&codeinst->invoke); + if (specsig ? jl_atomic_load_relaxed(&codeinst->specsigflags) & 0b1 : invoke == jl_fptr_args_addr) { protoname = jl_ExecutionEngine->getFunctionAtAddress((uintptr_t)fptr, codeinst); - need_to_emit = false; + if (ctx.external_linkage) { + // TODO: Add !specsig support to aotcompile.cpp + // Check that the codeinst is containing native code + if (specsig && jl_atomic_load_relaxed(&codeinst->specsigflags) & 0b100) { + external = true; + need_to_emit = false; + } + } + else { // ctx.use_cache + need_to_emit = false; + } } } } - auto it = ctx.call_targets.find(codeinst); - if (need_to_emit && it != ctx.call_targets.end()) { - protoname = std::get<2>(it->second)->getName(); - need_to_emit = false; - } if (need_to_emit) { raw_string_ostream(name) << (specsig ? "j_" : "j1_") << name_from_method_instance(mi) << "_" << globalUniqueGeneratedNames++; protoname = StringRef(name); @@ -4261,16 +4303,9 @@ static jl_cgval_t emit_invoke(jl_codectx_t &ctx, const jl_cgval_t &lival, const jl_returninfo_t::CallingConv cc = jl_returninfo_t::CallingConv::Boxed; unsigned return_roots = 0; if (specsig) - result = emit_call_specfun_other(ctx, mi, codeinst->rettype, protoname, argv, nargs, &cc, &return_roots, rt); + result = emit_call_specfun_other(ctx, mi, codeinst->rettype, protoname, external ? codeinst : nullptr, argv, nargs, &cc, &return_roots, rt); else - result = emit_call_specfun_boxed(ctx, codeinst->rettype, protoname, argv, nargs, rt); - if (external) { - assert(!need_to_emit); - auto calledF = jl_Module->getFunction(protoname); - assert(calledF); - // TODO: Check if already present? - ctx.external_calls[std::make_tuple(codeinst, specsig)] = calledF; - } + result = emit_call_specfun_boxed(ctx, codeinst->rettype, protoname, external ? codeinst : nullptr, argv, nargs, rt); handled = true; if (need_to_emit) { Function *trampoline_decl = cast(jl_Module->getNamedValue(protoname)); @@ -5594,14 +5629,7 @@ static Function *emit_tojlinvoke(jl_code_instance_t *codeinst, Module *M, jl_cod Function *theFunc; Value *theFarg; auto invoke = jl_atomic_load_relaxed(&codeinst->invoke); - bool cache_valid = params.cache; - if (params.external_linkage) { - if (jl_object_in_image((jl_value_t*)codeinst)) { - // Target is present in another pkgimage - cache_valid = true; - } - } if (cache_valid && invoke != NULL) { StringRef theFptrName = jl_ExecutionEngine->getFunctionAtAddress((uintptr_t)invoke, codeinst); @@ -5763,9 +5791,18 @@ static Function* gen_cfun_wrapper( if (lam && params.cache) { // TODO: this isn't ideal to be unconditionally calling type inference (and compile) from here codeinst = jl_compile_method_internal(lam, world); - assert(codeinst->invoke); - if (codeinst->invoke == jl_fptr_args_addr) { - callptr = codeinst->specptr.fptr; + auto invoke = jl_atomic_load_acquire(&codeinst->invoke); + auto fptr = jl_atomic_load_relaxed(&codeinst->specptr.fptr); + assert(invoke); + if (fptr) { + while (!(jl_atomic_load_acquire(&codeinst->specsigflags) & 0b10)) { + jl_cpu_pause(); + } + invoke = jl_atomic_load_relaxed(&codeinst->invoke); + } + // WARNING: this invoke load is protected by the codegen-lock. If that lock is removed, then the isspecsig load needs to be properly atomically sequenced with this. + if (invoke == jl_fptr_args_addr) { + callptr = fptr; calltype = 1; } else if (codeinst->invoke == jl_fptr_const_return_addr) { @@ -5773,8 +5810,8 @@ static Function* gen_cfun_wrapper( callptr = (void*)codeinst->rettype_const; calltype = 2; } - else if (codeinst->isspecsig) { - callptr = codeinst->specptr.fptr; + else if (jl_atomic_load_relaxed(&codeinst->specsigflags) & 0b1) { + callptr = fptr; calltype = 3; } astrt = codeinst->rettype; @@ -8500,18 +8537,22 @@ void jl_compile_workqueue( "invalid world for code-instance"); StringRef preal_decl = ""; bool preal_specsig = false; - auto invoke = jl_atomic_load_relaxed(&codeinst->invoke); + auto invoke = jl_atomic_load_acquire(&codeinst->invoke); bool cache_valid = params.cache; - if (params.external_linkage) { - cache_valid = jl_object_in_image((jl_value_t*)codeinst); - } // WARNING: isspecsig is protected by the codegen-lock. If that lock is removed, then the isspecsig load needs to be properly atomically sequenced with this. if (cache_valid && invoke != NULL) { auto fptr = jl_atomic_load_relaxed(&codeinst->specptr.fptr); + if (fptr) { + while (!(jl_atomic_load_acquire(&codeinst->specsigflags) & 0b10)) { + jl_cpu_pause(); + } + // in case we are racing with another thread that is emitting this function + invoke = jl_atomic_load_relaxed(&codeinst->invoke); + } if (invoke == jl_fptr_args_addr) { preal_decl = jl_ExecutionEngine->getFunctionAtAddress((uintptr_t)fptr, codeinst); } - else if (codeinst->isspecsig) { + else if (jl_atomic_load_relaxed(&codeinst->specsigflags) & 0b1) { preal_decl = jl_ExecutionEngine->getFunctionAtAddress((uintptr_t)fptr, codeinst); preal_specsig = true; } @@ -8927,11 +8968,15 @@ extern "C" JL_DLLEXPORT jl_value_t *jl_get_libllvm_impl(void) JL_NOTSAFEPOINT HMODULE mod; if (!GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCSTR)&llvm::DebugFlag, &mod)) return jl_nothing; - - char path[MAX_PATH]; - if (!GetModuleFileNameA(mod, path, sizeof(path))) + wchar_t path16[MAX_PATH]; + DWORD n16 = GetModuleFileNameW(mod, path16, MAX_PATH); + if (n16 <= 0) + return jl_nothing; + path16[n16++] = 0; + char path8[MAX_PATH * 3]; + if (!WideCharToMultiByte(CP_UTF8, 0, path16, n16, path8, MAX_PATH * 3, NULL, NULL)) return jl_nothing; - return (jl_value_t*) jl_symbol(path); + return (jl_value_t*) jl_symbol(path8); #else Dl_info dli; if (!dladdr((void*)LLVMContextCreate, &dli)) diff --git a/src/gc.c b/src/gc.c index 17ad622900a43..c6f338725dd1b 100644 --- a/src/gc.c +++ b/src/gc.c @@ -3022,8 +3022,6 @@ static void mark_roots(jl_gc_mark_cache_t *gc_cache, jl_gc_mark_sp_t *sp) } if (_jl_debug_method_invalidation != NULL) gc_mark_queue_obj(gc_cache, sp, _jl_debug_method_invalidation); - if (jl_build_ids != NULL) - gc_mark_queue_obj(gc_cache, sp, jl_build_ids); // constants gc_mark_queue_obj(gc_cache, sp, jl_emptytuple_type); @@ -3682,14 +3680,15 @@ 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 - - // We allocate with abandon until we get close to the free memory on the machine. - uint64_t free_mem = uv_get_available_memory(); - uint64_t high_water_mark = free_mem / 10 * 7; // 70% high water mark - - if (high_water_mark < max_total_memory) - max_total_memory = high_water_mark; + if (jl_options.heap_size_hint) + jl_gc_set_max_memory(jl_options.heap_size_hint); jl_gc_mark_sp_t sp = {NULL, NULL, NULL, NULL}; gc_mark_loop(NULL, sp); @@ -3703,6 +3702,11 @@ void jl_gc_set_max_memory(uint64_t max_mem) { } } +JL_DLLEXPORT uint64_t jl_gc_get_max_memory(void) +{ + return max_total_memory; +} + // callback for passing OOM errors from gmp JL_DLLEXPORT void jl_throw_out_of_memory_error(void) { diff --git a/src/gf.c b/src/gf.c index 024faa145c6f7..443cebcf58e71 100644 --- a/src/gf.c +++ b/src/gf.c @@ -414,13 +414,13 @@ JL_DLLEXPORT jl_code_instance_t *jl_new_codeinst( if ((const_flags & 2) == 0) inferred_const = NULL; codeinst->rettype_const = inferred_const; - jl_atomic_store_relaxed(&codeinst->invoke, NULL); jl_atomic_store_relaxed(&codeinst->specptr.fptr, NULL); + jl_atomic_store_relaxed(&codeinst->invoke, NULL); if ((const_flags & 1) != 0) { assert(const_flags & 2); jl_atomic_store_relaxed(&codeinst->invoke, jl_fptr_const_return); } - codeinst->isspecsig = 0; + jl_atomic_store_relaxed(&codeinst->specsigflags, 0); jl_atomic_store_relaxed(&codeinst->precompile, 0); jl_atomic_store_relaxed(&codeinst->next, NULL); codeinst->ipo_purity_bits = ipo_effects; @@ -1195,6 +1195,8 @@ static jl_method_instance_t *cache_method( } // TODO: maybe assert(jl_isa_compileable_sig(compilationsig, sparams, definition)); newmeth = jl_specializations_get_linfo(definition, (jl_value_t*)compilationsig, sparams); + if (newmeth->cache_with_orig) + cache_with_orig = 1; jl_tupletype_t *cachett = tt; jl_svec_t* guardsigs = jl_emptysvec; @@ -1261,6 +1263,10 @@ static jl_method_instance_t *cache_method( max_valid = max_valid2; cachett = compilationsig; } + else { + // do not revisit this decision + newmeth->cache_with_orig = 1; + } } // now scan `cachett` and ensure that `Type{T}` in the cache will be matched exactly by `typeof(T)` @@ -2217,12 +2223,33 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t mi, codeinst2->rettype, codeinst2->min_world, codeinst2->max_world); if (jl_atomic_load_relaxed(&codeinst->invoke) == NULL) { - // once set, don't change invoke-ptr, as that leads to race conditions - // with the (not) simultaneous updates to invoke and specptr - codeinst->isspecsig = codeinst2->isspecsig; codeinst->rettype_const = codeinst2->rettype_const; - jl_atomic_store_release(&codeinst->specptr.fptr, jl_atomic_load_relaxed(&codeinst2->specptr.fptr)); - jl_atomic_store_release(&codeinst->invoke, jl_atomic_load_relaxed(&codeinst2->invoke)); + uint8_t specsigflags = jl_atomic_load_acquire(&codeinst2->specsigflags); + jl_callptr_t invoke = jl_atomic_load_acquire(&codeinst2->invoke); + void *fptr = jl_atomic_load_relaxed(&codeinst2->specptr.fptr); + if (fptr != NULL) { + while (!(specsigflags & 0b10)) { + jl_cpu_pause(); + specsigflags = jl_atomic_load_acquire(&codeinst2->specsigflags); + } + invoke = jl_atomic_load_relaxed(&codeinst2->invoke); + void *prev_fptr = NULL; + // see jitlayers.cpp for the ordering restrictions here + if (jl_atomic_cmpswap_acqrel(&codeinst->specptr.fptr, &prev_fptr, fptr)) { + jl_atomic_store_relaxed(&codeinst->specsigflags, specsigflags & 0b1); + jl_atomic_store_release(&codeinst->invoke, invoke); + jl_atomic_store_release(&codeinst->specsigflags, specsigflags); + } else { + // someone else already compiled it + while (!(jl_atomic_load_acquire(&codeinst->specsigflags) & 0b10)) { + jl_cpu_pause(); + } + // codeinst is now set up fully, safe to return + } + } else { + jl_callptr_t prev = NULL; + jl_atomic_cmpswap_acqrel(&codeinst->invoke, &prev, invoke); + } } // don't call record_precompile_statement here, since we already compiled it as mi2 which is better return codeinst; @@ -2247,14 +2274,22 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t jl_method_instance_t *unspecmi = jl_atomic_load_relaxed(&def->unspecialized); if (unspecmi) { jl_code_instance_t *unspec = jl_atomic_load_relaxed(&unspecmi->cache); - if (unspec && jl_atomic_load_acquire(&unspec->invoke)) { + jl_callptr_t unspec_invoke = NULL; + if (unspec && (unspec_invoke = jl_atomic_load_acquire(&unspec->invoke))) { jl_code_instance_t *codeinst = jl_new_codeinst(mi, (jl_value_t*)jl_any_type, NULL, NULL, 0, 1, ~(size_t)0, 0, 0, jl_nothing, 0); - codeinst->isspecsig = 0; - codeinst->specptr = unspec->specptr; + void *unspec_fptr = jl_atomic_load_relaxed(&unspec->specptr.fptr); + if (unspec_fptr) { + // wait until invoke and specsigflags are properly set + while (!(jl_atomic_load_acquire(&unspec->specsigflags) & 0b10)) { + jl_cpu_pause(); + } + unspec_invoke = jl_atomic_load_relaxed(&unspec->invoke); + } + jl_atomic_store_release(&codeinst->specptr.fptr, unspec_fptr); codeinst->rettype_const = unspec->rettype_const; - jl_atomic_store_relaxed(&codeinst->invoke, jl_atomic_load_relaxed(&unspec->invoke)); + jl_atomic_store_release(&codeinst->invoke, unspec_invoke); jl_mi_cache_insert(mi, codeinst); record_precompile_statement(mi); return codeinst; @@ -2271,7 +2306,7 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t jl_code_instance_t *codeinst = jl_new_codeinst(mi, (jl_value_t*)jl_any_type, NULL, NULL, 0, 1, ~(size_t)0, 0, 0, jl_nothing, 0); - jl_atomic_store_relaxed(&codeinst->invoke, jl_fptr_interpret_call); + jl_atomic_store_release(&codeinst->invoke, jl_fptr_interpret_call); jl_mi_cache_insert(mi, codeinst); record_precompile_statement(mi); return codeinst; @@ -2288,7 +2323,8 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t 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); // ask codegen to make the fptr for unspec - if (jl_atomic_load_acquire(&ucache->invoke) == NULL) { + jl_callptr_t ucache_invoke = jl_atomic_load_acquire(&ucache->invoke); + if (ucache_invoke == NULL) { if (def->source == jl_nothing && (ucache->def->uninferred == jl_nothing || ucache->def->uninferred == NULL)) { jl_printf(JL_STDERR, "source not available for "); @@ -2297,19 +2333,29 @@ jl_code_instance_t *jl_compile_method_internal(jl_method_instance_t *mi, size_t jl_error("source missing for method that needs to be compiled"); } jl_generate_fptr_for_unspecialized(ucache); + ucache_invoke = jl_atomic_load_acquire(&ucache->invoke); } - assert(jl_atomic_load_relaxed(&ucache->invoke) != NULL); - if (jl_atomic_load_relaxed(&ucache->invoke) != jl_fptr_sparam && - jl_atomic_load_relaxed(&ucache->invoke) != jl_fptr_interpret_call) { + assert(ucache_invoke != NULL); + if (ucache_invoke != jl_fptr_sparam && + ucache_invoke != jl_fptr_interpret_call) { // only these care about the exact specTypes, otherwise we can use it directly return ucache; } codeinst = jl_new_codeinst(mi, (jl_value_t*)jl_any_type, NULL, NULL, 0, 1, ~(size_t)0, 0, 0, jl_nothing, 0); - codeinst->isspecsig = 0; - codeinst->specptr = ucache->specptr; + void *unspec_fptr = jl_atomic_load_relaxed(&ucache->specptr.fptr); + if (unspec_fptr) { + // wait until invoke and specsigflags are properly set + while (!(jl_atomic_load_acquire(&ucache->specsigflags) & 0b10)) { + jl_cpu_pause(); + } + ucache_invoke = jl_atomic_load_relaxed(&ucache->invoke); + } + // unspec is always not specsig, but might use specptr + jl_atomic_store_relaxed(&codeinst->specsigflags, jl_atomic_load_relaxed(&ucache->specsigflags) & 0b10); + jl_atomic_store_relaxed(&codeinst->specptr.fptr, unspec_fptr); codeinst->rettype_const = ucache->rettype_const; - jl_atomic_store_relaxed(&codeinst->invoke, jl_atomic_load_relaxed(&ucache->invoke)); + jl_atomic_store_release(&codeinst->invoke, ucache_invoke); jl_mi_cache_insert(mi, codeinst); } else { @@ -2327,22 +2373,18 @@ jl_value_t *jl_fptr_const_return(jl_value_t *f, jl_value_t **args, uint32_t narg jl_value_t *jl_fptr_args(jl_value_t *f, jl_value_t **args, uint32_t nargs, jl_code_instance_t *m) { - while (1) { - jl_fptr_args_t invoke = jl_atomic_load_relaxed(&m->specptr.fptr1); - if (invoke) - return invoke(f, args, nargs); - } + jl_fptr_args_t invoke = jl_atomic_load_relaxed(&m->specptr.fptr1); + assert(invoke && "Forgot to set specptr for jl_fptr_args!"); + return invoke(f, args, nargs); } jl_value_t *jl_fptr_sparam(jl_value_t *f, jl_value_t **args, uint32_t nargs, jl_code_instance_t *m) { jl_svec_t *sparams = m->def->sparam_vals; assert(sparams != jl_emptysvec); - while (1) { - jl_fptr_sparam_t invoke = jl_atomic_load_relaxed(&m->specptr.fptr3); - if (invoke) - return invoke(f, args, nargs, sparams); - } + jl_fptr_sparam_t invoke = jl_atomic_load_relaxed(&m->specptr.fptr3); + assert(invoke && "Forgot to set specptr for jl_fptr_sparam!"); + return invoke(f, args, nargs, sparams); } JL_DLLEXPORT jl_callptr_t jl_fptr_args_addr = &jl_fptr_args; @@ -2665,7 +2707,7 @@ STATIC_INLINE jl_value_t *_jl_invoke(jl_value_t *F, jl_value_t **args, uint32_t jl_code_instance_t *codeinst = jl_atomic_load_relaxed(&mfunc->cache); while (codeinst) { if (codeinst->min_world <= world && world <= codeinst->max_world) { - jl_callptr_t invoke = jl_atomic_load_relaxed(&codeinst->invoke); + jl_callptr_t invoke = jl_atomic_load_acquire(&codeinst->invoke); if (invoke != NULL) { jl_value_t *res = invoke(F, args, nargs, codeinst); return verify_type(res); @@ -2685,7 +2727,7 @@ STATIC_INLINE jl_value_t *_jl_invoke(jl_value_t *F, jl_value_t **args, uint32_t errno = last_errno; if (jl_options.malloc_log) jl_gc_sync_total_bytes(last_alloc); // discard allocation count from compilation - jl_callptr_t invoke = jl_atomic_load_relaxed(&codeinst->invoke); + jl_callptr_t invoke = jl_atomic_load_acquire(&codeinst->invoke); jl_value_t *res = invoke(F, args, nargs, codeinst); return verify_type(res); } diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index db99cee8b724d..0040d6d52a449 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -262,18 +262,31 @@ static jl_callptr_t _jl_compile_codeinst( addr = (jl_callptr_t)getAddressForFunction(decls.functionObject); isspecsig = true; } - if (jl_atomic_load_relaxed(&this_code->invoke) == NULL) { - // once set, don't change invoke-ptr, as that leads to race conditions - // with the (not) simultaneous updates to invoke and specptr - if (!decls.specFunctionObject.empty()) { - jl_atomic_store_release(&this_code->specptr.fptr, (void*)getAddressForFunction(decls.specFunctionObject)); - this_code->isspecsig = isspecsig; + if (!decls.specFunctionObject.empty()) { + void *prev_specptr = NULL; + auto spec = (void*)getAddressForFunction(decls.specFunctionObject); + if (jl_atomic_cmpswap_acqrel(&this_code->specptr.fptr, &prev_specptr, spec)) { + // only set specsig and invoke if we were the first to set specptr + jl_atomic_store_relaxed(&this_code->specsigflags, (uint8_t) isspecsig); + // we might overwrite invokeptr here; that's ok, anybody who relied on the identity of invokeptr + // either assumes that specptr was null, doesn't care about specptr, + // or will wait until specsigflags has 0b10 set before reloading invoke + jl_atomic_store_release(&this_code->invoke, addr); + jl_atomic_store_release(&this_code->specsigflags, (uint8_t) (0b10 | isspecsig)); + } else { + //someone else beat us, don't commit any results + while (!(jl_atomic_load_acquire(&this_code->specsigflags) & 0b10)) { + jl_cpu_pause(); + } + addr = jl_atomic_load_relaxed(&this_code->invoke); + } + } else { + jl_callptr_t prev_invoke = NULL; + if (!jl_atomic_cmpswap_acqrel(&this_code->invoke, &prev_invoke, addr)) { + addr = prev_invoke; + //TODO do we want to potentially promote invoke anyways? (e.g. invoke is jl_interpret_call or some other + //known lesser function) } - jl_atomic_store_release(&this_code->invoke, addr); - } - else if (jl_atomic_load_relaxed(&this_code->invoke) == jl_fptr_const_return_addr && !decls.specFunctionObject.empty()) { - // hack to export this pointer value to jl_dump_method_disasm - jl_atomic_store_release(&this_code->specptr.fptr, (void*)getAddressForFunction(decls.specFunctionObject)); } if (this_code == codeinst) fptr = addr; @@ -497,10 +510,9 @@ void jl_generate_fptr_for_unspecialized_impl(jl_code_instance_t *unspec) assert(src && jl_is_code_info(src)); ++UnspecFPtrCount; _jl_compile_codeinst(unspec, src, unspec->min_world, *jl_ExecutionEngine->getContext()); - if (jl_atomic_load_relaxed(&unspec->invoke) == NULL) { - // if we hit a codegen bug (or ran into a broken generated function or llvmcall), fall back to the interpreter as a last resort - jl_atomic_store_release(&unspec->invoke, jl_fptr_interpret_call_addr); - } + jl_callptr_t null = nullptr; + // if we hit a codegen bug (or ran into a broken generated function or llvmcall), fall back to the interpreter as a last resort + jl_atomic_cmpswap(&unspec->invoke, &null, jl_fptr_interpret_call_addr); JL_GC_POP(); } JL_UNLOCK(&jl_codegen_lock); // Might GC @@ -519,7 +531,7 @@ jl_value_t *jl_dump_method_asm_impl(jl_method_instance_t *mi, size_t world, // printing via disassembly jl_code_instance_t *codeinst = jl_generate_fptr(mi, world); if (codeinst) { - uintptr_t fptr = (uintptr_t)jl_atomic_load_relaxed(&codeinst->invoke); + uintptr_t fptr = (uintptr_t)jl_atomic_load_acquire(&codeinst->invoke); if (getwrapper) return jl_dump_fptr_asm(fptr, raw_mc, asm_variant, debuginfo, binary); uintptr_t specfptr = (uintptr_t)jl_atomic_load_relaxed(&codeinst->specptr.fptr); @@ -547,7 +559,7 @@ jl_value_t *jl_dump_method_asm_impl(jl_method_instance_t *mi, size_t world, if (src && (jl_value_t*)src != jl_nothing) src = jl_uncompress_ir(mi->def.method, codeinst, (jl_array_t*)src); } - fptr = (uintptr_t)jl_atomic_load_relaxed(&codeinst->invoke); + fptr = (uintptr_t)jl_atomic_load_acquire(&codeinst->invoke); specfptr = (uintptr_t)jl_atomic_load_relaxed(&codeinst->specptr.fptr); if (src && jl_is_code_info(src)) { if (fptr == (uintptr_t)jl_fptr_const_return_addr && specfptr == 0) { @@ -1270,13 +1282,29 @@ JuliaOJIT::JuliaOJIT() }); #endif + std::string ErrorStr; + + // Make sure that libjulia-internal is loaded and placed first in the + // DynamicLibrary order so that calls to runtime intrinsics are resolved + // to the correct library when multiple libjulia-*'s have been loaded + // (e.g. when we `ccall` into a PackageCompiler.jl-created shared library) + sys::DynamicLibrary libjulia_internal_dylib = sys::DynamicLibrary::addPermanentLibrary( + jl_libjulia_internal_handle, &ErrorStr); + if(!ErrorStr.empty()) + report_fatal_error(llvm::Twine("FATAL: unable to dlopen libjulia-internal\n") + ErrorStr); + // Make sure SectionMemoryManager::getSymbolAddressInProcess can resolve // symbols in the program as well. The nullptr argument to the function // tells DynamicLibrary to load the program, not a library. - std::string ErrorStr; if (sys::DynamicLibrary::LoadLibraryPermanently(nullptr, &ErrorStr)) report_fatal_error(llvm::Twine("FATAL: unable to dlopen self\n") + ErrorStr); + GlobalJD.addGenerator( + std::make_unique( + libjulia_internal_dylib, + DL.getGlobalPrefix(), + orc::DynamicLibrarySearchGenerator::SymbolPredicate())); + GlobalJD.addGenerator( cantFail(orc::DynamicLibrarySearchGenerator::GetForCurrentProcess( DL.getGlobalPrefix()))); diff --git a/src/jitlayers.h b/src/jitlayers.h index fed5092789008..810a992317359 100644 --- a/src/jitlayers.h +++ b/src/jitlayers.h @@ -176,7 +176,7 @@ typedef struct _jl_codegen_params_t { // outputs std::vector> workqueue; std::map globals; - std::map, Function*> external_fns; + std::map, GlobalVariable*> external_fns; std::map ditypes; std::map llvmtypes; DenseMap mergedConstants; @@ -493,7 +493,7 @@ class JuliaOJIT { #ifndef JL_USE_JITLINK const std::shared_ptr MemMgr; #else - std::atomic total_size; + std::atomic total_size{0}; const std::unique_ptr MemMgr; #endif ObjLayerT ObjectLayer; diff --git a/src/jl_exported_data.inc b/src/jl_exported_data.inc index c81ee410c9cd7..6f0671ef0d6f7 100644 --- a/src/jl_exported_data.inc +++ b/src/jl_exported_data.inc @@ -127,8 +127,6 @@ XX(jl_voidpointer_type) \ XX(jl_void_type) \ XX(jl_weakref_type) \ - XX(jl_build_ids) \ - XX(jl_linkage_blobs) \ // Data symbols that are defined inside the public libjulia #define JL_EXPORTED_DATA_SYMBOLS(XX) \ diff --git a/src/jl_exported_funcs.inc b/src/jl_exported_funcs.inc index f3a6b950a1dd5..0801fb7f8b2ef 100644 --- a/src/jl_exported_funcs.inc +++ b/src/jl_exported_funcs.inc @@ -173,6 +173,7 @@ XX(jl_gc_external_obj_hdr_size) \ XX(jl_gc_find_taggedvalue_pool) \ XX(jl_gc_get_total_bytes) \ + XX(jl_gc_get_max_memory) \ XX(jl_gc_internal_obj_base_ptr) \ XX(jl_gc_is_enabled) \ XX(jl_gc_live_bytes) \ diff --git a/src/jltypes.c b/src/jltypes.c index 4ede9467be043..116efa705558f 100644 --- a/src/jltypes.c +++ b/src/jltypes.c @@ -2531,7 +2531,7 @@ void jl_init_types(void) JL_GC_DISABLED jl_method_instance_type = jl_new_datatype(jl_symbol("MethodInstance"), core, jl_any_type, jl_emptysvec, - jl_perm_symsvec(9, + jl_perm_symsvec(10, "def", "specTypes", "sparam_vals", @@ -2540,8 +2540,9 @@ void jl_init_types(void) JL_GC_DISABLED "callbacks", "cache", "inInference", + "cache_with_orig", "precompiled"), - jl_svec(9, + jl_svec(10, jl_new_struct(jl_uniontype_type, jl_method_type, jl_module_type), jl_any_type, jl_simplevector_type, @@ -2550,6 +2551,7 @@ void jl_init_types(void) JL_GC_DISABLED jl_any_type, jl_any_type, jl_bool_type, + jl_bool_type, jl_bool_type), jl_emptysvec, 0, 1, 3); diff --git a/src/julia.h b/src/julia.h index f62d9af58234e..2fe299c6edffb 100644 --- a/src/julia.h +++ b/src/julia.h @@ -369,6 +369,7 @@ struct _jl_method_instance_t { jl_array_t *callbacks; // list of callback functions to inform external caches about invalidations _Atomic(struct _jl_code_instance_t*) cache; uint8_t inInference; // flags to tell if inference is running on this object + uint8_t cache_with_orig; // !cache_with_specTypes uint8_t precompiled; // true if this instance was generated by an explicit `precompile(...)` call }; @@ -433,7 +434,9 @@ typedef struct _jl_code_instance_t { jl_value_t *argescapes; // escape information of call arguments // compilation state cache - uint8_t isspecsig; // if specptr is a specialized function signature for specTypes->rettype + _Atomic(uint8_t) specsigflags; // & 0b001 == specptr is a specialized function signature for specTypes->rettype + // & 0b010 == invokeptr matches specptr + // & 0b100 == From image _Atomic(uint8_t) precompile; // if set, this will be added to the output system image uint8_t relocatability; // nonzero if all roots are built into sysimg or tagged by module key _Atomic(jl_callptr_t) invoke; // jlcall entry point @@ -922,6 +925,7 @@ JL_DLLEXPORT jl_value_t *jl_gc_allocobj(size_t sz); JL_DLLEXPORT void *jl_malloc_stack(size_t *bufsz, struct _jl_task_t *owner) JL_NOTSAFEPOINT; JL_DLLEXPORT void jl_free_stack(void *stkbuf, size_t bufsz); JL_DLLEXPORT void jl_gc_use(jl_value_t *a); +JL_DLLEXPORT uint64_t jl_gc_get_max_memory(void); JL_DLLEXPORT void jl_clear_malloc_data(void); diff --git a/src/julia_atomics.h b/src/julia_atomics.h index cb14e535cd010..fea1cd2ee5b38 100644 --- a/src/julia_atomics.h +++ b/src/julia_atomics.h @@ -149,6 +149,11 @@ bool jl_atomic_cmpswap_explicit(std::atomic *ptr, T *expected, S val, std::me { return std::atomic_compare_exchange_strong_explicit(ptr, expected, val, order, order); } +template +bool jl_atomic_cmpswap_acqrel(std::atomic *ptr, T *expected, S val) +{ + return std::atomic_compare_exchange_strong_explicit(ptr, expected, val, memory_order_acq_rel, memory_order_acquire); +} #define jl_atomic_cmpswap_relaxed(ptr, expected, val) jl_atomic_cmpswap_explicit(ptr, expected, val, memory_order_relaxed) template T jl_atomic_exchange(std::atomic *ptr, S desired) @@ -180,6 +185,8 @@ extern "C" { atomic_compare_exchange_strong(obj, expected, desired) # define jl_atomic_cmpswap_relaxed(obj, expected, desired) \ atomic_compare_exchange_strong_explicit(obj, expected, desired, memory_order_relaxed, memory_order_relaxed) +#define jl_atomic_cmpswap_acqrel(obj, expected, desired) \ + atomic_compare_exchange_strong_explicit(obj, expected, desired, memory_order_acq_rel, memory_order_acquire) // TODO: Maybe add jl_atomic_cmpswap_weak for spin lock # define jl_atomic_exchange(obj, desired) \ atomic_exchange(obj, desired) @@ -240,6 +247,7 @@ extern "C" { #define jl_atomic_exchange_relaxed jl_atomic_exchange #undef jl_atomic_cmpswap +#undef jl_atomic_cmpswap_acqrel #undef jl_atomic_cmpswap_relaxed #define jl_atomic_cmpswap(obj, expected, desired) \ (__extension__({ \ @@ -253,6 +261,7 @@ extern "C" { *x__analyzer__ = temp__analyzer__; \ eq__analyzer__; \ })) +#define jl_atomic_cmpswap_acqrel jl_atomic_cmpswap #define jl_atomic_cmpswap_relaxed jl_atomic_cmpswap #undef jl_atomic_store diff --git a/src/julia_internal.h b/src/julia_internal.h index 995a320787ede..6cf491df71dde 100644 --- a/src/julia_internal.h +++ b/src/julia_internal.h @@ -313,9 +313,8 @@ extern tracer_cb jl_newmeth_tracer; void jl_call_tracer(tracer_cb callback, jl_value_t *tracee); void print_func_loc(JL_STREAM *s, jl_method_t *m); extern jl_array_t *_jl_debug_method_invalidation JL_GLOBALLY_ROOTED; -extern arraylist_t jl_linkage_blobs; // external linkage: sysimg/pkgimages -extern jl_array_t *jl_build_ids JL_GLOBALLY_ROOTED; // external linkage: corresponding build_ids -extern arraylist_t jl_image_relocs; // external linkage: sysimg/pkgimages +JL_DLLEXPORT extern arraylist_t jl_linkage_blobs; // external linkage: sysimg/pkgimages +JL_DLLEXPORT extern arraylist_t jl_image_relocs; // external linkage: sysimg/pkgimages extern JL_DLLEXPORT size_t jl_page_size; extern jl_function_t *jl_typeinf_func JL_GLOBALLY_ROOTED; @@ -956,10 +955,7 @@ static inline void jl_set_gc_and_wait(void) // Query if a Julia object is if a permalloc region (due to part of a sys- pkg-image) STATIC_INLINE size_t n_linkage_blobs(void) JL_NOTSAFEPOINT { - if (!jl_build_ids) - return 0; - assert(jl_is_array(jl_build_ids)); - return jl_array_len(jl_build_ids); + return jl_image_relocs.len; } // TODO: Makes this a binary search @@ -997,7 +993,7 @@ JL_DLLEXPORT jl_value_t *jl_dump_fptr_asm(uint64_t fptr, char raw_mc, const char JL_DLLEXPORT jl_value_t *jl_dump_function_ir(jl_llvmf_dump_t *dump, char strip_ir_metadata, char dump_module, const char *debuginfo); JL_DLLEXPORT jl_value_t *jl_dump_function_asm(jl_llvmf_dump_t *dump, char raw_mc, const char* asm_variant, const char *debuginfo, char binary); -void *jl_create_native(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvmmod, const jl_cgparams_t *cgparams, int policy, int imaging_mode, int cache); +void *jl_create_native(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvmmod, const jl_cgparams_t *cgparams, int policy, int imaging_mode, int cache, size_t world); void jl_dump_native(void *native_code, const char *bc_fname, const char *unopt_bc_fname, const char *obj_fname, const char *asm_fname, const char *sysimg_data, size_t sysimg_len, ios_t *s); diff --git a/src/llvm-final-gc-lowering.cpp b/src/llvm-final-gc-lowering.cpp index 2eb89a15692d9..1da37a249fbd2 100644 --- a/src/llvm-final-gc-lowering.cpp +++ b/src/llvm-final-gc-lowering.cpp @@ -49,6 +49,7 @@ struct FinalLowerGC: private JuliaPassContext { Function *queueBindingFunc; Function *poolAllocFunc; Function *bigAllocFunc; + Function *allocTypedFunc; Instruction *pgcstack; // Lowers a `julia.new_gc_frame` intrinsic. @@ -205,23 +206,35 @@ Value *FinalLowerGC::lowerGCAllocBytes(CallInst *target, Function &F) { ++GCAllocBytesCount; assert(target->arg_size() == 2); - auto sz = (size_t)cast(target->getArgOperand(1))->getZExtValue(); - // This is strongly architecture and OS dependent - int osize; - int offset = jl_gc_classify_pools(sz, &osize); + CallInst *newI; + IRBuilder<> builder(target); builder.SetCurrentDebugLocation(target->getDebugLoc()); auto ptls = target->getArgOperand(0); - CallInst *newI; - if (offset < 0) { - newI = builder.CreateCall( - bigAllocFunc, - { ptls, ConstantInt::get(getSizeTy(F.getContext()), sz + sizeof(void*)) }); - } - else { - auto pool_offs = ConstantInt::get(Type::getInt32Ty(F.getContext()), offset); - auto pool_osize = ConstantInt::get(Type::getInt32Ty(F.getContext()), osize); - newI = builder.CreateCall(poolAllocFunc, { ptls, pool_offs, pool_osize }); + Attribute derefAttr; + + if (auto CI = dyn_cast(target->getArgOperand(1))) { + size_t sz = (size_t)CI->getZExtValue(); + // This is strongly architecture and OS dependent + int osize; + int offset = jl_gc_classify_pools(sz, &osize); + if (offset < 0) { + newI = builder.CreateCall( + bigAllocFunc, + { ptls, ConstantInt::get(getSizeTy(F.getContext()), sz + sizeof(void*)) }); + derefAttr = Attribute::getWithDereferenceableBytes(F.getContext(), sz + sizeof(void*)); + } + else { + auto pool_offs = ConstantInt::get(Type::getInt32Ty(F.getContext()), offset); + auto pool_osize = ConstantInt::get(Type::getInt32Ty(F.getContext()), osize); + newI = builder.CreateCall(poolAllocFunc, { ptls, pool_offs, pool_osize }); + derefAttr = Attribute::getWithDereferenceableBytes(F.getContext(), osize); + } + } else { + auto size = builder.CreateZExtOrTrunc(target->getArgOperand(1), getSizeTy(F.getContext())); + size = builder.CreateAdd(size, ConstantInt::get(getSizeTy(F.getContext()), sizeof(void*))); + newI = builder.CreateCall(allocTypedFunc, { ptls, size, ConstantPointerNull::get(Type::getInt8PtrTy(F.getContext())) }); + derefAttr = Attribute::getWithDereferenceableBytes(F.getContext(), sizeof(void*)); } newI->setAttributes(newI->getCalledFunction()->getAttributes()); newI->takeName(target); @@ -237,8 +250,9 @@ bool FinalLowerGC::doInitialization(Module &M) { queueBindingFunc = getOrDeclare(jl_well_known::GCQueueBinding); poolAllocFunc = getOrDeclare(jl_well_known::GCPoolAlloc); bigAllocFunc = getOrDeclare(jl_well_known::GCBigAlloc); + allocTypedFunc = getOrDeclare(jl_well_known::GCAllocTyped); - GlobalValue *functionList[] = {queueRootFunc, queueBindingFunc, poolAllocFunc, bigAllocFunc}; + GlobalValue *functionList[] = {queueRootFunc, queueBindingFunc, poolAllocFunc, bigAllocFunc, allocTypedFunc}; unsigned j = 0; for (unsigned i = 0; i < sizeof(functionList) / sizeof(void*); i++) { if (!functionList[i]) @@ -254,8 +268,8 @@ bool FinalLowerGC::doInitialization(Module &M) { bool FinalLowerGC::doFinalization(Module &M) { - GlobalValue *functionList[] = {queueRootFunc, queueBindingFunc, poolAllocFunc, bigAllocFunc}; - queueRootFunc = queueBindingFunc = poolAllocFunc = bigAllocFunc = nullptr; + GlobalValue *functionList[] = {queueRootFunc, queueBindingFunc, poolAllocFunc, bigAllocFunc, allocTypedFunc}; + queueRootFunc = queueBindingFunc = poolAllocFunc = bigAllocFunc = allocTypedFunc = nullptr; auto used = M.getGlobalVariable("llvm.compiler.used"); if (!used) return false; diff --git a/src/llvm-pass-helpers.cpp b/src/llvm-pass-helpers.cpp index 3b55339984516..fa3437ffdce48 100644 --- a/src/llvm-pass-helpers.cpp +++ b/src/llvm-pass-helpers.cpp @@ -231,6 +231,7 @@ namespace jl_well_known { static const char *GC_POOL_ALLOC_NAME = XSTR(jl_gc_pool_alloc); static const char *GC_QUEUE_ROOT_NAME = XSTR(jl_gc_queue_root); static const char *GC_QUEUE_BINDING_NAME = XSTR(jl_gc_queue_binding); + static const char *GC_ALLOC_TYPED_NAME = XSTR(jl_gc_alloc_typed); using jl_intrinsics::addGCAllocAttributes; @@ -292,4 +293,22 @@ namespace jl_well_known { func->addFnAttr(Attribute::InaccessibleMemOrArgMemOnly); return func; }); + + const WellKnownFunctionDescription GCAllocTyped( + GC_ALLOC_TYPED_NAME, + [](const JuliaPassContext &context) { + auto allocTypedFunc = Function::Create( + FunctionType::get( + context.T_prjlvalue, + { Type::getInt8PtrTy(context.getLLVMContext()), + sizeof(size_t) == sizeof(uint32_t) ? + Type::getInt32Ty(context.getLLVMContext()) : + Type::getInt64Ty(context.getLLVMContext()), + Type::getInt8PtrTy(context.getLLVMContext()) }, + false), + Function::ExternalLinkage, + GC_ALLOC_TYPED_NAME); + allocTypedFunc->addFnAttr(Attribute::getWithAllocSizeArgs(context.getLLVMContext(), 1, None)); + return addGCAllocAttributes(allocTypedFunc, context.getLLVMContext()); + }); } diff --git a/src/llvm-pass-helpers.h b/src/llvm-pass-helpers.h index 68f6efe42be6d..f25f9181ddb18 100644 --- a/src/llvm-pass-helpers.h +++ b/src/llvm-pass-helpers.h @@ -152,6 +152,9 @@ namespace jl_well_known { // `jl_gc_queue_binding`: queues a binding for GC. extern const WellKnownFunctionDescription GCQueueBinding; + + // `jl_gc_alloc_typed`: allocates bytes. + extern const WellKnownFunctionDescription GCAllocTyped; } #endif diff --git a/src/method.c b/src/method.c index 852c5bf25659a..4e48ef9122d79 100644 --- a/src/method.c +++ b/src/method.c @@ -447,6 +447,7 @@ JL_DLLEXPORT jl_method_instance_t *jl_new_method_instance_uninit(void) li->callbacks = NULL; jl_atomic_store_relaxed(&li->cache, NULL); li->inInference = 0; + li->cache_with_orig = 0; li->precompiled = 0; return li; } @@ -602,6 +603,8 @@ JL_DLLEXPORT jl_code_info_t *jl_code_for_staged(jl_method_instance_t *linfo) for (int i = 0; i < jl_array_len(func->code); ++i) { jl_value_t *stmt = jl_array_ptr_ref(func->code, i); if (jl_is_expr(stmt) && ((jl_expr_t*)stmt)->head == jl_new_opaque_closure_sym) { + if (jl_options.incremental && jl_generating_output()) + jl_error("Impossible to correctly handle OpaqueClosure inside @generated returned during precompile process."); linfo->uninferred = jl_copy_ast((jl_value_t*)func); jl_gc_wb(linfo, linfo->uninferred); break; diff --git a/src/opaque_closure.c b/src/opaque_closure.c index 7a01d254ce71a..4725a17b1634d 100644 --- a/src/opaque_closure.c +++ b/src/opaque_closure.c @@ -73,18 +73,23 @@ static jl_opaque_closure_t *new_opaque_closure(jl_tupletype_t *argt, jl_value_t oc->source = source; oc->captures = captures; oc->specptr = NULL; - if (jl_atomic_load_relaxed(&ci->invoke) == jl_fptr_interpret_call) { + if (!ci) { oc->invoke = (jl_fptr_args_t)jl_interpret_opaque_closure; - } - else if (jl_atomic_load_relaxed(&ci->invoke) == jl_fptr_args) { - oc->invoke = jl_atomic_load_relaxed(&ci->specptr.fptr1); - } - else if (jl_atomic_load_relaxed(&ci->invoke) == jl_fptr_const_return) { - oc->invoke = (jl_fptr_args_t)jl_fptr_const_opaque_closure; - oc->captures = ci->rettype_const; - } - else { - oc->invoke = (jl_fptr_args_t)jl_atomic_load_relaxed(&ci->invoke); + } else { + jl_callptr_t invoke = jl_atomic_load_acquire(&ci->invoke); + if (invoke == jl_fptr_interpret_call) { + oc->invoke = (jl_fptr_args_t)jl_interpret_opaque_closure; + } + else if (invoke == jl_fptr_args) { + oc->invoke = jl_atomic_load_relaxed(&ci->specptr.fptr1); + } + else if (invoke == jl_fptr_const_return) { + oc->invoke = (jl_fptr_args_t)jl_fptr_const_opaque_closure; + oc->captures = ci->rettype_const; + } + else { + oc->invoke = (jl_fptr_args_t) invoke; + } } oc->world = world; return oc; diff --git a/src/precompile_utils.c b/src/precompile_utils.c index 9f52ce911a92f..b8b48ca839f01 100644 --- a/src/precompile_utils.c +++ b/src/precompile_utils.c @@ -255,7 +255,8 @@ static void *jl_precompile_(jl_array_t *m, int external_linkage) jl_array_ptr_1d_push(m2, item); } } - void *native_code = jl_create_native(m2, NULL, NULL, 0, 1, external_linkage); + void *native_code = jl_create_native(m2, NULL, NULL, 0, 1, external_linkage, + jl_atomic_load_acquire(&jl_world_counter)); JL_GC_POP(); return native_code; } diff --git a/src/staticdata.c b/src/staticdata.c index 07e971a10d33b..926ee4e2b3186 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -98,7 +98,7 @@ extern "C" { // TODO: put WeakRefs on the weak_refs list during deserialization // TODO: handle finalizers -#define NUM_TAGS 157 +#define NUM_TAGS 158 // 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. @@ -240,6 +240,7 @@ jl_value_t **const*const get_tags(void) { INSERT_TAG(jl_typeinf_func); INSERT_TAG(jl_type_type_mt); INSERT_TAG(jl_nonfunction_mt); + INSERT_TAG(jl_kwcall_mt); INSERT_TAG(jl_kwcall_func); // some Core.Builtin Functions that we want to be able to reference: @@ -303,12 +304,11 @@ static arraylist_t layout_table; // cache of `position(s)` for each `id` in static arraylist_t object_worklist; // used to mimic recursion by jl_serialize_reachable // Permanent list of void* (begin, end+1) pairs of system/package images we've loaded previously -// togther with their module build_ids (used for external linkage) -// jl_linkage_blobs.items[2i:2i+1] correspond to jl_build_ids[i] (0-offset indexing) +// together with their module build_ids (used for external linkage) +// jl_linkage_blobs.items[2i:2i+1] correspond to build_ids[i] (0-offset indexing) // TODO: Keep this sorted so that we can use binary-search arraylist_t jl_linkage_blobs; arraylist_t jl_image_relocs; -jl_array_t *jl_build_ids JL_GLOBALLY_ROOTED = NULL; // hash of definitions for predefined function pointers static htable_t fptr_to_id; @@ -356,9 +356,11 @@ typedef struct { 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 arraylist_t ccallable_list; // @ccallable entry points to install + // mapping from a buildid_idx to a depmods_idx + jl_array_t *buildid_depmods_idxs; // record of build_ids for all external linkages, in order of serialization for the current sysimg/pkgimg // conceptually, the base pointer for the jth externally-linked item is determined from - // i = findfirst(==(link_ids[j]), jl_build_ids) + // i = findfirst(==(link_ids[j]), build_ids) // blob_base = jl_linkage_blobs.items[2i] # 0-offset indexing // We need separate lists since they are intermingled at creation but split when written. jl_array_t *link_ids_relocs; @@ -377,6 +379,16 @@ static jl_value_t *jl_bigint_type = NULL; static int gmp_limb_size = 0; static jl_sym_t *jl_docmeta_sym = NULL; +#ifdef _P64 +#define RELOC_TAG_OFFSET 61 +#define DEPS_IDX_OFFSET 40 // only on 64-bit can we encode the dependency-index as part of the tagged reloc +#else +// this supports up to 8 RefTags, 512MB of pointer data, and 4/2 (64/32-bit) GB of constant data. +#define RELOC_TAG_OFFSET 29 +#define DEPS_IDX_OFFSET RELOC_TAG_OFFSET +#endif + + // Tags of category `t` are located at offsets `t << RELOC_TAG_OFFSET` // Consequently there is room for 2^RELOC_TAG_OFFSET pointers, etc enum RefTags { @@ -385,9 +397,9 @@ enum RefTags { TagRef, // items serialized via their tags SymbolRef, // symbols BindingRef, // module bindings - FunctionRef, // generic functions - BuiltinFunctionRef, // builtin functions - ExternalLinkage // items defined externally (used when serializing packages) + FunctionRef, // functions + SysimageLinkage, // reference to the sysimage (from pkgimage) + ExternalLinkage // reference to some other pkgimage }; // calling conventions for internal entry points. @@ -402,13 +414,9 @@ typedef enum { JL_API_MAX } jl_callingconv_t; +// Sub-divisions of some RefTags +const uintptr_t BuiltinFunctionTag = ((uintptr_t)1 << (RELOC_TAG_OFFSET - 1)); -#ifdef _P64 -#define RELOC_TAG_OFFSET 61 -#else -// this supports up to 8 RefTags, 512MB of pointer data, and 4/2 (64/32-bit) GB of constant data. -#define RELOC_TAG_OFFSET 29 -#endif #if RELOC_TAG_OFFSET <= 32 typedef uint32_t reloc_t; @@ -600,10 +608,10 @@ static uintptr_t jl_fptr_id(void *fptr) // `jl_queue_for_serialization` adds items to `serialization_order` #define jl_queue_for_serialization(s, v) jl_queue_for_serialization_((s), (jl_value_t*)(v), 1, 0) -static void jl_queue_for_serialization_(jl_serializer_state *s, jl_value_t *v, int recursive, int immediate); +static void jl_queue_for_serialization_(jl_serializer_state *s, jl_value_t *v, int recursive, int immediate) JL_GC_DISABLED; -static void jl_queue_module_for_serialization(jl_serializer_state *s, jl_module_t *m) +static void jl_queue_module_for_serialization(jl_serializer_state *s, jl_module_t *m) JL_GC_DISABLED { jl_queue_for_serialization(s, m->name); jl_queue_for_serialization(s, m->parent); @@ -640,7 +648,7 @@ static void jl_queue_module_for_serialization(jl_serializer_state *s, jl_module_ // you want to handle uniquing of `Dict{String,Float64}` before you tackle `Vector{Dict{String,Float64}}`. // Uniquing is done in `serialization_order`, so the very first mention of such an object must // be the "source" rather than merely a cross-reference. -static void jl_insert_into_serialization_queue(jl_serializer_state *s, jl_value_t *v, int recursive, int immediate) +static void jl_insert_into_serialization_queue(jl_serializer_state *s, jl_value_t *v, int recursive, int immediate) JL_GC_DISABLED { jl_datatype_t *t = (jl_datatype_t*)jl_typeof(v); jl_queue_for_serialization_(s, (jl_value_t*)t, 1, immediate); @@ -664,23 +672,34 @@ static void jl_insert_into_serialization_queue(jl_serializer_state *s, jl_value_ immediate = 0; // do not handle remaining fields immediately (just field types remains) } if (s->incremental && jl_is_method_instance(v)) { + jl_method_instance_t *mi = (jl_method_instance_t*)v; + jl_value_t *def = mi->def.value; if (needs_uniquing(v)) { // we only need 3 specific fields of this (the rest are not used) - jl_method_instance_t *mi = (jl_method_instance_t*)v; jl_queue_for_serialization(s, mi->def.value); jl_queue_for_serialization(s, mi->specTypes); jl_queue_for_serialization(s, (jl_value_t*)mi->sparam_vals); recursive = 0; goto done_fields; } - else if (needs_recaching(v)) { + else if (jl_is_method(def) && jl_object_in_image(def)) { // we only need 3 specific fields of this (the rest are restored afterward, if valid) - jl_method_instance_t *mi = (jl_method_instance_t*)v; + // in particular, cache is repopulated by jl_mi_cache_insert for all foreign function, + // so must not be present here record_field_change((jl_value_t**)&mi->uninferred, NULL); record_field_change((jl_value_t**)&mi->backedges, NULL); record_field_change((jl_value_t**)&mi->callbacks, NULL); record_field_change((jl_value_t**)&mi->cache, NULL); } + else { + assert(!needs_recaching(v)); + } + // n.b. opaque closures cannot be inspected and relied upon like a + // normal method since they can get improperly introduced by generated + // functions, so if they appeared at all, we will probably serialize + // them wrong and segfault. The jl_code_for_staged function should + // prevent this from happening, so we do not need to detect that user + // error now. } if (jl_is_typename(v)) { jl_typename_t *tn = (jl_typename_t*)v; @@ -692,6 +711,15 @@ static void jl_insert_into_serialization_queue(jl_serializer_state *s, jl_value_ assert(!jl_object_in_image((jl_value_t*)tn->wrapper)); } } + if (s->incremental && jl_is_code_instance(v)) { + jl_code_instance_t *ci = (jl_code_instance_t*)v; + // make sure we don't serialize other reachable cache entries of foreign methods + if (jl_object_in_image((jl_value_t*)ci->def->def.value)) { + // TODO: if (ci in ci->defs->cache) + record_field_change((jl_value_t**)&ci->next, NULL); + } + } + 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)); @@ -767,7 +795,7 @@ done_fields: ; *bp = (void*)((char*)HT_NOTFOUND + 1 + idx); } -static void jl_queue_for_serialization_(jl_serializer_state *s, jl_value_t *v, int recursive, int immediate) +static void jl_queue_for_serialization_(jl_serializer_state *s, jl_value_t *v, int recursive, int immediate) JL_GC_DISABLED { if (!jl_needs_serialization(s, v)) return; @@ -810,7 +838,7 @@ static void jl_queue_for_serialization_(jl_serializer_state *s, jl_value_t *v, i // Do a pre-order traversal of the to-serialize worklist, in the identical order // to the calls to jl_queue_for_serialization would occur in a purely recursive // implementation, but without potentially running out of stack. -static void jl_serialize_reachable(jl_serializer_state *s) +static void jl_serialize_reachable(jl_serializer_state *s) JL_GC_DISABLED { size_t i, prevlen = 0; while (object_worklist.len) { @@ -867,20 +895,22 @@ static void write_pointer(ios_t *s) JL_NOTSAFEPOINT static uintptr_t add_external_linkage(jl_serializer_state *s, jl_value_t *v, jl_array_t *link_ids) { size_t i = external_blob_index(v); if (i < n_linkage_blobs()) { - assert(link_ids && jl_is_array(link_ids)); - assert(jl_build_ids && jl_is_array(jl_build_ids)); - uint64_t *build_id_data = (uint64_t*)jl_array_data(jl_build_ids); // We found the sysimg/pkg that this item links against - // Store the image key in `link_ids` - jl_array_grow_end(link_ids, 1); - uint64_t *link_id_data = (uint64_t*)jl_array_data(link_ids); - link_id_data[jl_array_len(link_ids)-1] = build_id_data[i]; // Compute the relocation code size_t offset = (uintptr_t)v - (uintptr_t)jl_linkage_blobs.items[2*i]; offset /= sizeof(void*); - assert(offset < ((uintptr_t)1 << RELOC_TAG_OFFSET) && "offset to external image too large"); - // jl_printf(JL_STDOUT, "External link %ld against blob %d with key %ld at position 0x%lx with offset 0x%lx to \n", jl_array_len(link_ids), i, build_id_data[i>>1], ios_pos(s->s), offset); - // jl_(v); + assert(offset < ((uintptr_t)1 << DEPS_IDX_OFFSET) && "offset to external image too large"); + assert(n_linkage_blobs() == jl_array_len(s->buildid_depmods_idxs)); + size_t depsidx = ((uint32_t*)jl_array_data(s->buildid_depmods_idxs))[i]; // map from build_id_idx -> deps_idx + assert(depsidx < INT32_MAX); + if (depsidx < ((uintptr_t)1 << (RELOC_TAG_OFFSET - DEPS_IDX_OFFSET)) && offset < ((uintptr_t)1 << DEPS_IDX_OFFSET)) + // if it fits in a SysimageLinkage type, use that representation + return ((uintptr_t)SysimageLinkage << RELOC_TAG_OFFSET) + ((uintptr_t)depsidx << DEPS_IDX_OFFSET) + offset; + // otherwise, we store the image key in `link_ids` + assert(link_ids && jl_is_array(link_ids)); + jl_array_grow_end(link_ids, 1); + uint32_t *link_id_data = (uint32_t*)jl_array_data(link_ids); // wait until after the `grow` + link_id_data[jl_array_len(link_ids) - 1] = depsidx; return ((uintptr_t)ExternalLinkage << RELOC_TAG_OFFSET) + offset; } return 0; @@ -1095,7 +1125,7 @@ static void record_external_fns(jl_serializer_state *s, arraylist_t *external_fn #ifndef JL_NDEBUG for (size_t i = 0; i < external_fns->len; i++) { jl_code_instance_t *ci = (jl_code_instance_t*)external_fns->items[i]; - assert(jl_object_in_image((jl_value_t*)ci)); + assert(jl_atomic_load_relaxed(&ci->specsigflags) & 0b100); } #endif } @@ -1356,6 +1386,8 @@ static void jl_write_values(jl_serializer_state *s) JL_GC_DISABLED else arraylist_push(&s->fixup_objs, (void*)reloc_offset); newm->primary_world = ~(size_t)0; + } else { + newm->nroots_sysimg = m->roots ? jl_array_len(m->roots) : 0; } if (m->ccallable) arraylist_push(&s->ccallable_list, (void*)reloc_offset); @@ -1386,7 +1418,7 @@ static void jl_write_values(jl_serializer_state *s) JL_GC_DISABLED } newm->invoke = NULL; - newm->isspecsig = 0; + newm->specsigflags = 0; newm->specptr.fptr = NULL; int8_t fptr_id = JL_API_NULL; int8_t builtin_id = 0; @@ -1437,12 +1469,13 @@ static void jl_write_values(jl_serializer_state *s) JL_GC_DISABLED } newm->invoke = NULL; // relocation offset if (fptr_id != JL_API_NULL) { + assert(fptr_id < BuiltinFunctionTag && "too many functions to serialize"); arraylist_push(&s->relocs_list, (void*)(reloc_offset + offsetof(jl_code_instance_t, invoke))); // relocation location arraylist_push(&s->relocs_list, (void*)(((uintptr_t)FunctionRef << RELOC_TAG_OFFSET) + fptr_id)); // relocation target } if (builtin_id >= 2) { arraylist_push(&s->relocs_list, (void*)(reloc_offset + offsetof(jl_code_instance_t, specptr.fptr))); // relocation location - arraylist_push(&s->relocs_list, (void*)(((uintptr_t)BuiltinFunctionRef << RELOC_TAG_OFFSET) + builtin_id - 2)); // relocation target + arraylist_push(&s->relocs_list, (void*)(((uintptr_t)FunctionRef << RELOC_TAG_OFFSET) + BuiltinFunctionTag + builtin_id - 2)); // relocation target } } else if (jl_is_globalref(v)) { @@ -1570,11 +1603,16 @@ static uintptr_t get_reloc_for_item(uintptr_t reloc_item, size_t reloc_offset) case BindingRef: assert(offset == 0 && "corrupt relocation offset"); break; - case BuiltinFunctionRef: - assert(offset < sizeof(id_to_fptrs) / sizeof(*id_to_fptrs) && "unknown function pointer id"); - break; case FunctionRef: - assert(offset < JL_API_MAX && "unknown function pointer id"); + if (offset & BuiltinFunctionTag) { + offset &= ~BuiltinFunctionTag; + assert(offset < sizeof(id_to_fptrs) / sizeof(*id_to_fptrs) && "unknown function pointer id"); + } + else { + assert(offset < JL_API_MAX && "unknown function pointer id"); + } + break; + case SysimageLinkage: break; case ExternalLinkage: break; @@ -1621,10 +1659,12 @@ static inline uintptr_t get_item_for_reloc(jl_serializer_state *s, uintptr_t bas // offset -= 256; assert(0 && "corrupt relocation item id"); jl_unreachable(); // terminate control flow if assertion is disabled. - case BuiltinFunctionRef: - assert(offset < sizeof(id_to_fptrs) / sizeof(*id_to_fptrs) && "unknown function pointer ID"); - return (uintptr_t)id_to_fptrs[offset]; case FunctionRef: + if (offset & BuiltinFunctionTag) { + offset &= ~BuiltinFunctionTag; + assert(offset < sizeof(id_to_fptrs) / sizeof(*id_to_fptrs) && "unknown function pointer ID"); + return (uintptr_t)id_to_fptrs[offset]; + } switch ((jl_callingconv_t)offset) { case JL_API_BOXED: if (s->image->fptrs.base) @@ -1645,25 +1685,30 @@ static inline uintptr_t get_item_for_reloc(jl_serializer_state *s, uintptr_t bas //default: assert("corrupt relocation item id"); } - case ExternalLinkage: + case SysimageLinkage: { +#ifdef _P64 + size_t depsidx = offset >> DEPS_IDX_OFFSET; + offset &= ((size_t)1 << DEPS_IDX_OFFSET) - 1; +#else + size_t depsidx = 0; +#endif + assert(depsidx < jl_array_len(s->buildid_depmods_idxs)); + size_t i = ((uint32_t*)jl_array_data(s->buildid_depmods_idxs))[depsidx]; + assert(2*i < jl_linkage_blobs.len); + return (uintptr_t)jl_linkage_blobs.items[2*i] + offset*sizeof(void*); + } + case ExternalLinkage: { assert(link_ids); assert(link_index); - assert(jl_build_ids); - uint64_t *link_id_data = (uint64_t*)jl_array_data(link_ids); - uint64_t *build_id_data = (uint64_t*)jl_array_data(jl_build_ids); assert(0 <= *link_index && *link_index < jl_array_len(link_ids)); - uint64_t build_id = link_id_data[*link_index]; + uint32_t depsidx = ((uint32_t*)jl_array_data(link_ids))[*link_index]; *link_index += 1; - size_t i = 0, nids = jl_array_len(jl_build_ids); - while (i < nids) { - if (build_id == build_id_data[i]) - break; - i++; - } - assert(i < nids); + assert(depsidx < jl_array_len(s->buildid_depmods_idxs)); + size_t i = ((uint32_t*)jl_array_data(s->buildid_depmods_idxs))[depsidx]; assert(2*i < jl_linkage_blobs.len); return (uintptr_t)jl_linkage_blobs.items[2*i] + offset*sizeof(void*); } + } abort(); } @@ -1846,7 +1891,7 @@ static jl_value_t *jl_delayed_reloc(jl_serializer_state *s, uintptr_t offset) JL size_t size = s->s->size; int link_index = 0; jl_value_t *ret = (jl_value_t*)get_item_for_reloc(s, base, size, offset, s->link_ids_relocs, &link_index); - assert(link_index < jl_array_len(s->link_ids_relocs)); + assert(!s->link_ids_relocs || link_index < jl_array_len(s->link_ids_relocs)); return ret; } @@ -1893,7 +1938,7 @@ static void jl_update_all_fptrs(jl_serializer_state *s, jl_image_t *image) void *fptr = (void*)(base + offset); if (specfunc) { codeinst->specptr.fptr = fptr; - codeinst->isspecsig = 1; // TODO: set only if confirmed to be true + codeinst->specsigflags = 0b111; // TODO: set only if confirmed to be true } else { codeinst->invoke = (jl_callptr_t)fptr; @@ -1930,11 +1975,12 @@ static uint32_t write_gvars(jl_serializer_state *s, arraylist_t *globals, arrayl } for (size_t i = 0; i < external_fns->len; i++) { jl_code_instance_t *ci = (jl_code_instance_t*)external_fns->items[i]; + assert(ci && (jl_atomic_load_relaxed(&ci->specsigflags) & 0b001)); uintptr_t item = backref_id(s, (void*)ci, s->link_ids_external_fnvars); uintptr_t reloc = get_reloc_for_item(item, 0); write_reloc_t(s->gvar_record, reloc); } - return globals->len + 1; + return globals->len; } // Pointer relocation for native-code referenced global variables @@ -1954,7 +2000,8 @@ static void jl_update_all_gvars(jl_serializer_state *s, jl_image_t *image, uint3 uintptr_t v = 0; if (i < external_fns_begin) { v = get_item_for_reloc(s, base, size, offset, s->link_ids_gvars, &gvar_link_index); - } else { + } + else { v = get_item_for_reloc(s, base, size, offset, s->link_ids_external_fnvars, &external_fns_link_index); } uintptr_t *gv = sysimg_gvars(image->gvars_base, image->gvars_offsets, i); @@ -1978,7 +2025,7 @@ static void jl_root_new_gvars(jl_serializer_state *s, jl_image_t *image, uint32_ v = (uintptr_t)jl_as_global_root((jl_value_t*)v); } else { jl_code_instance_t *codeinst = (jl_code_instance_t*) v; - assert(codeinst && codeinst->isspecsig); + assert(codeinst && (codeinst->specsigflags & 0b01) && codeinst->specptr.fptr); v = (uintptr_t)codeinst->specptr.fptr; } *gv = v; @@ -2161,28 +2208,6 @@ static void jl_strip_all_codeinfos(void) jl_foreach_reachable_mtable(strip_all_codeinfos_, NULL); } -// Method roots created during sysimg construction are exempted from -// triggering non-relocatability of compressed CodeInfos. -// Set the number of such roots in each method when the sysimg is -// serialized. -// TODO: move this to `jl_write_values` -static int set_nroots_sysimg__(jl_typemap_entry_t *def, void *_env) -{ - jl_method_t *m = def->func.method; - m->nroots_sysimg = m->roots ? jl_array_len(m->roots) : 0; - return 1; -} - -static int set_nroots_sysimg_(jl_methtable_t *mt, void *_env) -{ - return jl_typemap_visitor(mt->defs, set_nroots_sysimg__, NULL); -} - -static void jl_set_nroots_sysimg(void) -{ - jl_foreach_reachable_mtable(set_nroots_sysimg_, NULL); -} - // --- entry points --- jl_array_t *jl_global_roots_table; @@ -2276,7 +2301,7 @@ static void jl_prepare_serialization_data(jl_array_t *mod_array, jl_array_t *new } // In addition to the system image (where `worklist = NULL`), this can also save incremental images with external linkage -static void jl_save_system_image_to_stream(ios_t *f, +static void jl_save_system_image_to_stream(ios_t *f, jl_array_t *mod_array, jl_array_t *worklist, jl_array_t *extext_methods, jl_array_t *new_specializations, jl_array_t *method_roots_list, jl_array_t *ext_targets, jl_array_t *edges) JL_GC_DISABLED @@ -2285,8 +2310,6 @@ static void jl_save_system_image_to_stream(ios_t *f, // strip metadata and IR when requested if (jl_options.strip_metadata || jl_options.strip_ir) jl_strip_all_codeinfos(); - if (worklist == NULL) - jl_set_nroots_sysimg(); int en = jl_gc_enable(0); nsym_tag = 0; @@ -2325,10 +2348,11 @@ static void jl_save_system_image_to_stream(ios_t *f, arraylist_new(&s.fixup_types, 0); arraylist_new(&s.fixup_objs, 0); arraylist_new(&s.ccallable_list, 0); - s.link_ids_relocs = jl_alloc_array_1d(jl_array_uint64_type, 0); - s.link_ids_gctags = jl_alloc_array_1d(jl_array_uint64_type, 0); - s.link_ids_gvars = jl_alloc_array_1d(jl_array_uint64_type, 0); - s.link_ids_external_fnvars = jl_alloc_array_1d(jl_array_uint64_type, 0); + s.buildid_depmods_idxs = image_to_depmodidx(mod_array); + s.link_ids_relocs = jl_alloc_array_1d(jl_array_int32_type, 0); + s.link_ids_gctags = jl_alloc_array_1d(jl_array_int32_type, 0); + s.link_ids_gvars = jl_alloc_array_1d(jl_array_int32_type, 0); + s.link_ids_external_fnvars = jl_alloc_array_1d(jl_array_int32_type, 0); htable_new(&s.callers_with_edges, 0); jl_value_t **const*const tags = get_tags(); // worklist == NULL ? get_tags() : NULL; @@ -2518,22 +2542,16 @@ static void jl_save_system_image_to_stream(ios_t *f, jl_write_value(&s, edges); } write_uint32(f, jl_array_len(s.link_ids_gctags)); - ios_write(f, (char*)jl_array_data(s.link_ids_gctags), jl_array_len(s.link_ids_gctags)*sizeof(uint64_t)); + ios_write(f, (char*)jl_array_data(s.link_ids_gctags), jl_array_len(s.link_ids_gctags) * sizeof(uint32_t)); write_uint32(f, jl_array_len(s.link_ids_relocs)); - ios_write(f, (char*)jl_array_data(s.link_ids_relocs), jl_array_len(s.link_ids_relocs)*sizeof(uint64_t)); + ios_write(f, (char*)jl_array_data(s.link_ids_relocs), jl_array_len(s.link_ids_relocs) * sizeof(uint32_t)); write_uint32(f, jl_array_len(s.link_ids_gvars)); - ios_write(f, (char*)jl_array_data(s.link_ids_gvars), jl_array_len(s.link_ids_gvars)*sizeof(uint64_t)); + ios_write(f, (char*)jl_array_data(s.link_ids_gvars), jl_array_len(s.link_ids_gvars) * sizeof(uint32_t)); write_uint32(f, jl_array_len(s.link_ids_external_fnvars)); - ios_write(f, (char*)jl_array_data(s.link_ids_external_fnvars), jl_array_len(s.link_ids_external_fnvars)*sizeof(uint64_t)); + ios_write(f, (char*)jl_array_data(s.link_ids_external_fnvars), jl_array_len(s.link_ids_external_fnvars) * sizeof(uint32_t)); write_uint32(f, external_fns_begin); jl_write_arraylist(s.s, &s.ccallable_list); } - // Write the build_id key - uint64_t buildid = 0; - if (worklist) - buildid = jl_worklist_key(worklist); - write_uint32(f, buildid >> 32); - write_uint32(f, buildid & (((uint64_t)1 << 32) - 1)); assert(object_worklist.len == 0); arraylist_free(&object_worklist); @@ -2652,7 +2670,7 @@ JL_DLLEXPORT void jl_create_system_image(void **_native_data, jl_array_t *workli } if (_native_data != NULL) native_functions = *_native_data; - jl_save_system_image_to_stream(ff, worklist, extext_methods, new_specializations, method_roots_list, ext_targets, edges); + jl_save_system_image_to_stream(ff, mod_array, worklist, extext_methods, new_specializations, method_roots_list, ext_targets, edges); if (_native_data != NULL) native_functions = NULL; // make sure we don't run any Julia code concurrently before this point @@ -2825,25 +2843,26 @@ static void jl_restore_system_image_from_stream_(ios_t *f, jl_image_t *image, jl offset_ext_targets = jl_read_offset(&s); offset_edges = jl_read_offset(&s); } + s.buildid_depmods_idxs = depmod_to_imageidx(depmods); size_t nlinks_gctags = read_uint32(f); if (nlinks_gctags > 0) { - s.link_ids_gctags = jl_alloc_array_1d(jl_array_uint64_type, nlinks_gctags); - ios_read(f, (char*)jl_array_data(s.link_ids_gctags), nlinks_gctags * sizeof(uint64_t)); + s.link_ids_gctags = jl_alloc_array_1d(jl_array_int32_type, nlinks_gctags); + ios_read(f, (char*)jl_array_data(s.link_ids_gctags), nlinks_gctags * sizeof(uint32_t)); } size_t nlinks_relocs = read_uint32(f); if (nlinks_relocs > 0) { - s.link_ids_relocs = jl_alloc_array_1d(jl_array_uint64_type, nlinks_relocs); - ios_read(f, (char*)jl_array_data(s.link_ids_relocs), nlinks_relocs * sizeof(uint64_t)); + s.link_ids_relocs = jl_alloc_array_1d(jl_array_int32_type, nlinks_relocs); + ios_read(f, (char*)jl_array_data(s.link_ids_relocs), nlinks_relocs * sizeof(uint32_t)); } size_t nlinks_gvars = read_uint32(f); if (nlinks_gvars > 0) { - s.link_ids_gvars = jl_alloc_array_1d(jl_array_uint64_type, nlinks_gvars); - ios_read(f, (char*)jl_array_data(s.link_ids_gvars), nlinks_gvars * sizeof(uint64_t)); + s.link_ids_gvars = jl_alloc_array_1d(jl_array_int32_type, nlinks_gvars); + ios_read(f, (char*)jl_array_data(s.link_ids_gvars), nlinks_gvars * sizeof(uint32_t)); } size_t nlinks_external_fnvars = read_uint32(f); if (nlinks_external_fnvars > 0) { - s.link_ids_external_fnvars = jl_alloc_array_1d(jl_array_uint64_type, nlinks_external_fnvars); - ios_read(f, (char*)jl_array_data(s.link_ids_external_fnvars), nlinks_external_fnvars * sizeof(uint64_t)); + s.link_ids_external_fnvars = jl_alloc_array_1d(jl_array_int32_type, nlinks_external_fnvars); + ios_read(f, (char*)jl_array_data(s.link_ids_external_fnvars), nlinks_external_fnvars * sizeof(uint32_t)); } uint32_t external_fns_begin = read_uint32(f); jl_read_arraylist(s.s, ccallable_list ? ccallable_list : &s.ccallable_list); @@ -2856,10 +2875,11 @@ static void jl_restore_system_image_from_stream_(ios_t *f, jl_image_t *image, jl *method_roots_list = (jl_array_t*)jl_delayed_reloc(&s, offset_method_roots_list); *ext_targets = (jl_array_t*)jl_delayed_reloc(&s, offset_ext_targets); *edges = (jl_array_t*)jl_delayed_reloc(&s, offset_edges); + if (!*new_specializations) + *new_specializations = jl_alloc_vec_any(0); } s.s = NULL; - // step 3: apply relocations assert(!ios_eof(f)); jl_read_symbols(&s); @@ -3121,19 +3141,8 @@ static void jl_restore_system_image_from_stream_(ios_t *f, jl_image_t *image, jl jl_code_instance_t *ci = (jl_code_instance_t*)obj; assert(s.incremental); ci->min_world = world; - if (ci->max_world == 1) { // sentinel value: has edges to external callables - ptrhash_put(&new_code_instance_validate, ci, (void*)(~(uintptr_t)HT_NOTFOUND)); // "HT_FOUND" - } - else if (ci->max_world) { - // It's valid, but it may not be connected - if (!ci->def->cache) - ci->def->cache = ci; - } - else { - // Ensure this code instance is not connected - if (ci->def->cache == ci) - ci->def->cache = NULL; - } + if (ci->max_world != 0) + jl_array_ptr_1d_push(*new_specializations, (jl_value_t*)ci); } else if (jl_is_globalref(obj)) { continue; // wait until all the module binding tables have been initialized @@ -3247,12 +3256,6 @@ static void jl_restore_system_image_from_stream_(ios_t *f, jl_image_t *image, jl arraylist_push(&jl_image_relocs, (void*)relocs_base); // jl_printf(JL_STDOUT, "%ld blobs to link against\n", jl_linkage_blobs.len >> 1); - uint64_t buildid = (((uint64_t)read_uint32(f)) << 32) | read_uint32(f); - if (!jl_build_ids) - jl_build_ids = jl_alloc_array_1d(jl_array_uint64_type, 0); - jl_array_grow_end(jl_build_ids, 1); - uint64_t *build_id_data = (uint64_t*)jl_array_data(jl_build_ids); - build_id_data[jl_array_len(jl_build_ids)-1] = buildid; jl_gc_enable(en); } @@ -3283,7 +3286,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 complete) +static jl_value_t *jl_restore_package_image_from_stream(ios_t *f, jl_image_t *image, jl_array_t *depmods, int completeinfo) { uint64_t checksum = 0; int64_t dataendpos = 0; @@ -3315,7 +3318,6 @@ static jl_value_t *jl_restore_package_image_from_stream(ios_t *f, jl_image_t *im else { ios_close(f); ios_static_buffer(f, sysimg, len); - htable_new(&new_code_instance_validate, 0); pkgcachesizes cachesizes; jl_restore_system_image_from_stream_(f, image, depmods, checksum, (jl_array_t**)&restored, &init_order, &extext_methods, &new_specializations, &method_roots_list, &ext_targets, &edges, &base, &ccallable_list, &cachesizes); JL_SIGATOMIC_END(); @@ -3327,25 +3329,25 @@ static jl_value_t *jl_restore_package_image_from_stream(ios_t *f, jl_image_t *im jl_copy_roots(method_roots_list, jl_worklist_key((jl_array_t*)restored)); // Handle edges jl_insert_backedges((jl_array_t*)edges, (jl_array_t*)ext_targets, (jl_array_t*)new_specializations); // restore external backedges (needs to be last) - // check new CodeInstances and validate any that lack external backedges - validate_new_code_instances(); // reinit ccallables jl_reinit_ccallable(&ccallable_list, base, NULL); arraylist_free(&ccallable_list); - htable_free(&new_code_instance_validate); - if (complete) { - cachesizes_sv = jl_alloc_svec_uninit(7); - jl_svec_data(cachesizes_sv)[0] = jl_box_long(cachesizes.sysdata); - jl_svec_data(cachesizes_sv)[1] = jl_box_long(cachesizes.isbitsdata); - jl_svec_data(cachesizes_sv)[2] = jl_box_long(cachesizes.symboldata); - jl_svec_data(cachesizes_sv)[3] = jl_box_long(cachesizes.tagslist); - jl_svec_data(cachesizes_sv)[4] = jl_box_long(cachesizes.reloclist); - jl_svec_data(cachesizes_sv)[5] = jl_box_long(cachesizes.gvarlist); - jl_svec_data(cachesizes_sv)[6] = jl_box_long(cachesizes.fptrlist); + + if (completeinfo) { + cachesizes_sv = jl_alloc_svec(7); + jl_svecset(cachesizes_sv, 0, jl_box_long(cachesizes.sysdata)); + jl_svecset(cachesizes_sv, 1, jl_box_long(cachesizes.isbitsdata)); + jl_svecset(cachesizes_sv, 2, jl_box_long(cachesizes.symboldata)); + jl_svecset(cachesizes_sv, 3, jl_box_long(cachesizes.tagslist)); + jl_svecset(cachesizes_sv, 4, jl_box_long(cachesizes.reloclist)); + jl_svecset(cachesizes_sv, 5, jl_box_long(cachesizes.gvarlist)); + jl_svecset(cachesizes_sv, 6, jl_box_long(cachesizes.fptrlist)); restored = (jl_value_t*)jl_svec(8, restored, init_order, extext_methods, new_specializations, method_roots_list, ext_targets, edges, cachesizes_sv); - } else + } + else { restored = (jl_value_t*)jl_svec(2, restored, init_order); + } } } @@ -3353,22 +3355,21 @@ static jl_value_t *jl_restore_package_image_from_stream(ios_t *f, jl_image_t *im return restored; } -static void jl_restore_system_image_from_stream(ios_t *f, jl_image_t *image) +static void jl_restore_system_image_from_stream(ios_t *f, jl_image_t *image, uint32_t checksum) { - uint64_t checksum = 0; // TODO: make this real - jl_restore_system_image_from_stream_(f, image, NULL, checksum, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + 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 complete) +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) { ios_t f; ios_static_buffer(&f, (char*)buf, sz); - jl_value_t *ret = jl_restore_package_image_from_stream(&f, image, depmods, complete); + jl_value_t *ret = jl_restore_package_image_from_stream(&f, image, depmods, completeinfo); ios_close(&f); return ret; } -JL_DLLEXPORT jl_value_t *jl_restore_incremental(const char *fname, jl_array_t *depmods, int complete) +JL_DLLEXPORT jl_value_t *jl_restore_incremental(const char *fname, jl_array_t *depmods, int completeinfo) { ios_t f; if (ios_file(&f, fname, 1, 0, 0, 0) == NULL) { @@ -3376,7 +3377,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, complete); + jl_value_t *ret = jl_restore_package_image_from_stream(&f, &pkgimage, depmods, completeinfo); ios_close(&f); return ret; } @@ -3407,8 +3408,9 @@ JL_DLLEXPORT void jl_restore_system_image(const char *fname) if (ios_readall(&f, sysimg, len) != len) jl_errorf("Error reading system image file."); ios_close(&f); + uint32_t checksum = jl_crc32c(0, sysimg, len); ios_static_buffer(&f, sysimg, len); - jl_restore_system_image_from_stream(&f, &sysimage); + jl_restore_system_image_from_stream(&f, &sysimage, checksum); ios_close(&f); JL_SIGATOMIC_END(); } @@ -3419,12 +3421,13 @@ JL_DLLEXPORT void jl_restore_system_image_data(const char *buf, size_t len) ios_t f; JL_SIGATOMIC_BEGIN(); ios_static_buffer(&f, (char*)buf, len); - jl_restore_system_image_from_stream(&f, &sysimage); + uint32_t checksum = jl_crc32c(0, buf, len); + jl_restore_system_image_from_stream(&f, &sysimage, checksum); ios_close(&f); JL_SIGATOMIC_END(); } -JL_DLLEXPORT jl_value_t *jl_restore_package_image_from_file(const char *fname, jl_array_t *depmods, int complete) +JL_DLLEXPORT jl_value_t *jl_restore_package_image_from_file(const char *fname, jl_array_t *depmods, int completeinfo) { void *pkgimg_handle = jl_dlopen(fname, JL_RTLD_LAZY); if (!pkgimg_handle) { @@ -3476,7 +3479,7 @@ JL_DLLEXPORT jl_value_t *jl_restore_package_image_from_file(const char *fname, j } #endif - jl_value_t* mod = jl_restore_incremental_from_buf(pkgimg_data, &pkgimage, *plen, depmods, complete); + jl_value_t* mod = jl_restore_incremental_from_buf(pkgimg_data, &pkgimage, *plen, depmods, completeinfo); return mod; } diff --git a/src/staticdata_utils.c b/src/staticdata_utils.c index f636485541aed..60cea5b99c4b5 100644 --- a/src/staticdata_utils.c +++ b/src/staticdata_utils.c @@ -1,6 +1,3 @@ -static htable_t new_code_instance_validate; - - // inverse of backedges graph (caller=>callees hash) jl_array_t *edges_map JL_GLOBALLY_ROOTED = NULL; // rooted for the duration of our uses of this @@ -172,32 +169,33 @@ static int has_backedge_to_worklist(jl_method_instance_t *mi, htable_t *visited, // HT_NOTFOUND: not yet analyzed // HT_NOTFOUND + 1: no link back // HT_NOTFOUND + 2: does link back - // HT_NOTFOUND + 3 + depth: in-progress + // HT_NOTFOUND + 3: does link back, and included in new_specializations already + // HT_NOTFOUND + 4 + depth: in-progress int found = (char*)*bp - (char*)HT_NOTFOUND; if (found) return found - 1; arraylist_push(stack, (void*)mi); int depth = stack->len; - *bp = (void*)((char*)HT_NOTFOUND + 3 + depth); // preliminarily mark as in-progress + *bp = (void*)((char*)HT_NOTFOUND + 4 + depth); // preliminarily mark as in-progress size_t i = 0, n = jl_array_len(mi->backedges); int cycle = 0; while (i < n) { jl_method_instance_t *be; i = get_next_edge(mi->backedges, i, NULL, &be); int child_found = has_backedge_to_worklist(be, visited, stack); - if (child_found == 1) { + if (child_found == 1 || child_found == 2) { // found what we were looking for, so terminate early found = 1; break; } - else if (child_found >= 2 && child_found - 2 < cycle) { + else if (child_found >= 3 && child_found - 3 < cycle) { // record the cycle will resolve at depth "cycle" - cycle = child_found - 2; + cycle = child_found - 3; assert(cycle); } } if (!found && cycle && cycle != depth) - return cycle + 2; + return cycle + 3; // If we are the top of the current cycle, now mark all other parts of // our cycle with what we found. // Or if we found a backedge, also mark all of the other parts of the @@ -205,15 +203,16 @@ static int has_backedge_to_worklist(jl_method_instance_t *mi, htable_t *visited, while (stack->len >= depth) { void *mi = arraylist_pop(stack); bp = ptrhash_bp(visited, mi); - assert((char*)*bp - (char*)HT_NOTFOUND == 4 + stack->len); + assert((char*)*bp - (char*)HT_NOTFOUND == 5 + stack->len); *bp = (void*)((char*)HT_NOTFOUND + 1 + found); } return found; } // Given the list of CodeInstances that were inferred during the build, select -// those that are (1) external, (2) still valid, and (3) are inferred to be -// called from the worklist or explicitly added by a `precompile` statement. +// those that are (1) external, (2) still valid, (3) are inferred to be called +// from the worklist or explicitly added by a `precompile` statement, and +// (4) are the most recently computed result for that method. // These will be preserved in the image. static jl_array_t *queue_external_cis(jl_array_t *list) { @@ -228,23 +227,37 @@ static jl_array_t *queue_external_cis(jl_array_t *list) arraylist_new(&stack, 0); jl_array_t *new_specializations = jl_alloc_vec_any(0); JL_GC_PUSH1(&new_specializations); - for (i = 0; i < n0; i++) { + for (i = n0; i-- > 0; ) { jl_code_instance_t *ci = (jl_code_instance_t*)jl_array_ptr_ref(list, i); assert(jl_is_code_instance(ci)); + if (!ci->relocatability) + continue; jl_method_instance_t *mi = ci->def; jl_method_t *m = mi->def.method; - if (jl_is_method(m) && jl_object_in_image((jl_value_t*)m->module)) { + if (ci->inferred && jl_is_method(m) && jl_object_in_image((jl_value_t*)m->module)) { int found = has_backedge_to_worklist(mi, &visited, &stack); - assert(found == 0 || found == 1); + assert(found == 0 || found == 1 || found == 2); assert(stack.len == 0); if (found == 1 && ci->max_world == ~(size_t)0) { - jl_array_ptr_1d_push(new_specializations, (jl_value_t*)ci); + void **bp = ptrhash_bp(&visited, mi); + if (*bp != (void*)((char*)HT_NOTFOUND + 3)) { + *bp = (void*)((char*)HT_NOTFOUND + 3); + jl_array_ptr_1d_push(new_specializations, (jl_value_t*)ci); + } } } } htable_free(&visited); arraylist_free(&stack); JL_GC_POP(); + // reverse new_specializations + n0 = jl_array_len(new_specializations); + jl_value_t **news = (jl_value_t**)jl_array_data(new_specializations); + for (i = 0; i < n0; i++) { + jl_value_t *temp = news[i]; + news[i] = news[n0 - i - 1]; + news[n0 - i - 1] = temp; + } return new_specializations; } @@ -809,11 +822,6 @@ static void jl_copy_roots(jl_array_t *method_roots_list, uint64_t key) } } -static int remove_code_instance_from_validation(jl_code_instance_t *codeinst) -{ - return ptrhash_remove(&new_code_instance_validate, codeinst); -} - // verify that these edges intersect with the same methods as before static jl_array_t *jl_verify_edges(jl_array_t *targets) { @@ -1044,45 +1052,30 @@ static void jl_insert_backedges(jl_array_t *edges, jl_array_t *ext_targets, jl_a htable_new(&visited, 0); jl_verify_methods(edges, valids, &visited); // consumes valids, creates visited valids = jl_verify_graph(edges, &visited); // consumes visited, creates valids - size_t i, l = jl_array_len(edges) / 2; + size_t i, l; // next build a map from external MethodInstances to their CodeInstance for insertion - if (ci_list == NULL) { - htable_reset(&visited, 0); - } - else { - size_t i, l = jl_array_len(ci_list); - htable_reset(&visited, l); - for (i = 0; i < l; i++) { - jl_code_instance_t *ci = (jl_code_instance_t*)jl_array_ptr_ref(ci_list, i); - assert(ci->max_world == 1 || ci->max_world == ~(size_t)0); - assert(ptrhash_get(&visited, (void*)ci->def) == HT_NOTFOUND); // check that we don't have multiple cis for same mi - ptrhash_put(&visited, (void*)ci->def, (void*)ci); - } - } - - // next disable any invalid codes, so we do not try to enable them + l = jl_array_len(ci_list); + htable_reset(&visited, l); for (i = 0; i < l; i++) { - jl_method_instance_t *caller = (jl_method_instance_t*)jl_array_ptr_ref(edges, 2 * i); - assert(jl_is_method_instance(caller) && jl_is_method(caller->def.method)); - int valid = jl_array_uint8_ref(valids, i); - if (valid) - continue; - void *ci = ptrhash_get(&visited, (void*)caller); - if (ci != HT_NOTFOUND) { - assert(jl_is_code_instance(ci)); - remove_code_instance_from_validation((jl_code_instance_t*)ci); // mark it as handled + jl_code_instance_t *ci = (jl_code_instance_t*)jl_array_ptr_ref(ci_list, i); + assert(ci->min_world == world); + if (ci->max_world == 1) { // sentinel value: has edges to external callables + ptrhash_put(&visited, (void*)ci->def, (void*)ci); } else { - jl_code_instance_t *codeinst = caller->cache; - while (codeinst) { - remove_code_instance_from_validation(codeinst); // should be left invalid - codeinst = jl_atomic_load_relaxed(&codeinst->next); + assert(ci->max_world == ~(size_t)0); + jl_method_instance_t *caller = ci->def; + if (ci->inferred && jl_rettype_inferred(caller, world, ~(size_t)0) == jl_nothing) { + jl_mi_cache_insert(caller, ci); } + //jl_static_show((jl_stream*)ios_stderr, (jl_value_t*)caller); + //ios_puts("free\n", ios_stderr); } } - // finally enable any applicable new codes + // next enable any applicable new codes + l = jl_array_len(edges) / 2; for (i = 0; i < l; i++) { jl_method_instance_t *caller = (jl_method_instance_t*)jl_array_ptr_ref(edges, 2 * i); int valid = jl_array_uint8_ref(valids, i); @@ -1109,29 +1102,19 @@ static void jl_insert_backedges(jl_array_t *edges, jl_array_t *ext_targets, jl_a jl_method_table_add_backedge(mt, sig, (jl_value_t*)caller); } } - // then enable it + // then enable any methods associated with it void *ci = ptrhash_get(&visited, (void*)caller); + //assert(ci != HT_NOTFOUND); if (ci != HT_NOTFOUND) { // have some new external code to use assert(jl_is_code_instance(ci)); jl_code_instance_t *codeinst = (jl_code_instance_t*)ci; - remove_code_instance_from_validation(codeinst); // mark it as handled assert(codeinst->min_world == world && codeinst->inferred); codeinst->max_world = ~(size_t)0; if (jl_rettype_inferred(caller, world, ~(size_t)0) == jl_nothing) { jl_mi_cache_insert(caller, codeinst); } } - else { - jl_code_instance_t *codeinst = caller->cache; - while (codeinst) { - if (remove_code_instance_from_validation(codeinst)) { // mark it as handled - assert(codeinst->min_world >= world && codeinst->inferred); - codeinst->max_world = ~(size_t)0; - } - codeinst = jl_atomic_load_relaxed(&codeinst->next); - } - } } htable_free(&visited); @@ -1147,27 +1130,6 @@ static void classify_callers(htable_t *callers_with_edges, jl_array_t *edges) } } -static void validate_new_code_instances(void) -{ - size_t world = jl_atomic_load_acquire(&jl_world_counter); - size_t i; - for (i = 0; i < new_code_instance_validate.size; i += 2) { - if (new_code_instance_validate.table[i+1] != HT_NOTFOUND) { - //assert(0 && "unexpected unprocessed CodeInstance found"); - jl_code_instance_t *ci = (jl_code_instance_t*)new_code_instance_validate.table[i]; - JL_GC_PROMISE_ROOTED(ci); // TODO: this needs a root (or restructuring to avoid it) - assert(ci->min_world == world && ci->inferred); - assert(ci->max_world == ~(size_t)0); - jl_method_instance_t *caller = ci->def; - if (jl_rettype_inferred(caller, world, ~(size_t)0) == jl_nothing) { - jl_mi_cache_insert(caller, ci); - } - //jl_static_show((JL_STREAM*)ios_stderr, (jl_value_t*)caller); - //ios_puts("FREE\n", ios_stderr); - } - } -} - static jl_value_t *read_verify_mod_list(ios_t *s, jl_array_t *depmods) { if (!jl_main_module->build_id.lo) { @@ -1230,3 +1192,45 @@ JL_DLLEXPORT uint64_t jl_read_verify_header(ios_t *s, uint8_t *pkgimage, int64_t } return checksum; } + +// Returns `depmodidxs` where `j = depmodidxs[i]` corresponds to the blob `depmods[j]` in `write_mod_list` +static jl_array_t *image_to_depmodidx(jl_array_t *depmods) +{ + if (!depmods) + return NULL; + assert(jl_array_len(depmods) < INT32_MAX && "too many dependencies to serialize"); + size_t lbids = n_linkage_blobs(); + size_t ldeps = jl_array_len(depmods); + jl_array_t *depmodidxs = jl_alloc_array_1d(jl_array_int32_type, lbids); + int32_t *dmidxs = (int32_t*)jl_array_data(depmodidxs); + memset(dmidxs, -1, lbids * sizeof(int32_t)); + dmidxs[0] = 0; // the sysimg can also be found at idx 0, by construction + for (size_t i = 0, j = 0; i < ldeps; i++) { + jl_value_t *depmod = jl_array_ptr_ref(depmods, i); + size_t idx = external_blob_index(depmod); + if (idx < lbids) { // jl_object_in_image + j++; + if (dmidxs[idx] == -1) + dmidxs[idx] = j; + } + } + return depmodidxs; +} + +// Returns `imageidxs` where `j = imageidxs[i]` is the blob corresponding to `depmods[j]` +static jl_array_t *depmod_to_imageidx(jl_array_t *depmods) +{ + if (!depmods) + return NULL; + size_t ldeps = jl_array_len(depmods); + jl_array_t *imageidxs = jl_alloc_array_1d(jl_array_int32_type, ldeps + 1); + int32_t *imgidxs = (int32_t*)jl_array_data(imageidxs); + imgidxs[0] = 0; + for (size_t i = 0; i < ldeps; i++) { + jl_value_t *depmod = jl_array_ptr_ref(depmods, i); + size_t j = external_blob_index(depmod); + assert(j < INT32_MAX); + imgidxs[i + 1] = (int32_t)j; + } + return imageidxs; +} diff --git a/src/subtype.c b/src/subtype.c index df980dd26cc47..41dcaff6d475c 100644 --- a/src/subtype.c +++ b/src/subtype.c @@ -1174,6 +1174,19 @@ static int subtype_tuple(jl_datatype_t *xd, jl_datatype_t *yd, jl_stenv_t *e, in return ans; } +static int equal_unions(jl_uniontype_t *x, jl_uniontype_t *y, jl_stenv_t *e) +{ + jl_value_t *saved=NULL; jl_savedenv_t se; + JL_GC_PUSH1(&saved); + save_env(e, &saved, &se); + int eq = forall_exists_equal(x->a, y->a, e) && forall_exists_equal(x->b, y->b, e); + if (!eq) + restore_env(e, saved, &se); + free_env(&se); + JL_GC_POP(); + return eq; +} + // `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 @@ -1363,6 +1376,27 @@ static int forall_exists_equal(jl_value_t *x, jl_value_t *y, jl_stenv_t *e) (is_definite_length_tuple_type(x) && is_indefinite_length_tuple_type(y))) return 0; + if (jl_is_uniontype(x) && jl_is_uniontype(y)) { + // For 2 unions, try a more efficient greedy algorithm that compares the unions + // componentwise. If it returns `false`, we forget it and proceed with the usual + // algorithm. If it returns `true` we try returning `true`, but need to come back + // here to try the usual algorithm if subtyping later fails. + jl_unionstate_t *state = &e->Runions; + jl_saved_unionstate_t oldRunions; push_unionstate(&oldRunions, state); + if (state->depth >= state->used) { + statestack_set(state, state->used, 0); + state->used++; + } + int ui = statestack_get(state, state->depth); + state->depth++; + if (ui == 0) { + state->more = state->depth; // memorize that this was the deepest available choice + if (equal_unions((jl_uniontype_t*)x, (jl_uniontype_t*)y, e)) + return 1; + pop_unionstate(state, &oldRunions); + } + } + jl_saved_unionstate_t oldLunions; push_unionstate(&oldLunions, &e->Lunions); e->Lunions.used = 0; int sub; diff --git a/stdlib/.gitignore b/stdlib/.gitignore index ffbc2f12f52da..d159427c40d7c 100644 --- a/stdlib/.gitignore +++ b/stdlib/.gitignore @@ -1,4 +1,6 @@ /srccache +/DelimitedFiles-* +/DelimitedFiles /Pkg-* /Pkg /Statistics-* diff --git a/stdlib/DelimitedFiles.version b/stdlib/DelimitedFiles.version new file mode 100644 index 0000000000000..d741690a96838 --- /dev/null +++ b/stdlib/DelimitedFiles.version @@ -0,0 +1,4 @@ +DELIMITEDFILES_BRANCH = main +DELIMITEDFILES_SHA1 = db79c842f95f55b1f8d8037c0d3363ab21cd3b90 +DELIMITEDFILES_GIT_URL := https://github.com/JuliaData/DelimitedFiles.jl.git +DELIMITEDFILES_TAR_URL = https://api.github.com/repos/JuliaData/DelimitedFiles.jl/tarball/$1 diff --git a/stdlib/LLD_jll/Project.toml b/stdlib/LLD_jll/Project.toml index 7fbb85963f798..923f2e578e0d7 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 = "14.0.5+3" +version = "14.0.6+3" [deps] Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" @@ -12,7 +12,7 @@ Artifacts = "56f22d72-fd6d-98f1-02f0-08ddc0907c33" [compat] julia = "1.9" -libLLVM_jll = "14.0.5" +libLLVM_jll = "14.0.6" [extras] Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/stdlib/LinearAlgebra/src/lbt.jl b/stdlib/LinearAlgebra/src/lbt.jl index f8fbd7f526ccb..515de0b5a7a94 100644 --- a/stdlib/LinearAlgebra/src/lbt.jl +++ b/stdlib/LinearAlgebra/src/lbt.jl @@ -207,9 +207,10 @@ function lbt_set_num_threads(nthreads) return ccall((:lbt_set_num_threads, libblastrampoline), Cvoid, (Int32,), nthreads) end -function lbt_forward(path; clear::Bool = false, verbose::Bool = false, suffix_hint::Union{String,Nothing} = nothing) +function lbt_forward(path::AbstractString; clear::Bool = false, verbose::Bool = false, suffix_hint::Union{String,Nothing} = nothing) _clear_config_with() do - return ccall((:lbt_forward, libblastrampoline), Int32, (Cstring, Int32, Int32, Cstring), path, clear ? 1 : 0, verbose ? 1 : 0, something(suffix_hint, C_NULL)) + return ccall((:lbt_forward, libblastrampoline), Int32, (Cstring, Int32, Int32, Cstring), + path, clear ? 1 : 0, verbose ? 1 : 0, something(suffix_hint, C_NULL)) end end diff --git a/stdlib/Makefile b/stdlib/Makefile index 7957520c31ea3..3eb9761f62568 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -47,7 +47,7 @@ STDLIBS = Artifacts Base64 CRC32c Dates Distributed FileWatching \ SharedArrays Sockets SparseArrays SuiteSparse Test TOML Unicode UUIDs \ $(JLL_NAMES) -STDLIBS_EXT = Pkg Statistics LibCURL Downloads ArgTools Tar NetworkOptions SuiteSparse SparseArrays SHA +STDLIBS_EXT = Pkg Statistics LibCURL DelimitedFiles Downloads ArgTools Tar NetworkOptions SuiteSparse SparseArrays SHA $(foreach module, $(STDLIBS_EXT), $(eval $(call stdlib-external,$(module),$(shell echo $(module) | tr a-z A-Z)))) diff --git a/stdlib/MbedTLS_jll/Project.toml b/stdlib/MbedTLS_jll/Project.toml index 00a6b29426d91..2e8d0d384f88a 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.0+0" +version = "2.28.2+0" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/MbedTLS_jll/test/runtests.jl b/stdlib/MbedTLS_jll/test/runtests.jl index b731d7f833043..2d82fa564cd18 100644 --- a/stdlib/MbedTLS_jll/test/runtests.jl +++ b/stdlib/MbedTLS_jll/test/runtests.jl @@ -6,5 +6,5 @@ using Test, Libdl, MbedTLS_jll vstr = zeros(UInt8, 32) ccall((:mbedtls_version_get_string, libmbedcrypto), Cvoid, (Ref{UInt8},), vstr) vn = VersionNumber(unsafe_string(pointer(vstr))) - @test vn == v"2.28.0" + @test vn == v"2.28.2" end diff --git a/stdlib/OpenBLAS_jll/Project.toml b/stdlib/OpenBLAS_jll/Project.toml index f04e3491ad22b..c117bf553bb73 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.21+0" +version = "0.3.21+4" [deps] CompilerSupportLibraries_jll = "e66e0078-7015-5450-92f7-15fbd957f2ae" diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index db247a2342127..05d8a6f9260d3 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,4 +1,4 @@ PKG_BRANCH = release-1.9 -PKG_SHA1 = 887b06bb9b768bfca0622f112dc739d1a770932c +PKG_SHA1 = 3ced87de6b48ac8b886f5b26b2a1e8dd764614ae PKG_GIT_URL := https://github.com/JuliaLang/Pkg.jl.git PKG_TAR_URL = https://api.github.com/repos/JuliaLang/Pkg.jl/tarball/$1 diff --git a/stdlib/REPL/src/LineEdit.jl b/stdlib/REPL/src/LineEdit.jl index 0dffcc6c1e276..8deb51de048a7 100644 --- a/stdlib/REPL/src/LineEdit.jl +++ b/stdlib/REPL/src/LineEdit.jl @@ -1357,19 +1357,22 @@ function edit_input(s, f = (filename, line, column) -> InteractiveUtils.edit(fil col += 1 end + # Write current input to temp file, edit, read back write(filename, str) f(filename, line, col) str_mod = readchomp(filename) rm(filename) - if str != str_mod # something was changed, run the input - write(buf, str_mod) - commit_line(s) - :done - else # no change, the edit session probably unsuccessful - write(buf, str) - seek(buf, pos) # restore state from before edit - refresh_line(s) + + # Write updated content + write(buf, str_mod) + if str == str_mod + # If input was not modified: reset cursor + seek(buf, pos) + else + # If input was modified: move cursor to end + move_input_end(s) end + refresh_line(s) end # return the identifier under the cursor, possibly with other words concatenated diff --git a/stdlib/Test/docs/src/index.md b/stdlib/Test/docs/src/index.md index 1db2f1ab967f1..e5c1010aef035 100644 --- a/stdlib/Test/docs/src/index.md +++ b/stdlib/Test/docs/src/index.md @@ -55,6 +55,7 @@ julia> @test foo("f") == 20 Test Failed at none:1 Expression: foo("f") == 20 Evaluated: 1 == 20 + ERROR: There was an error during testing ``` @@ -224,6 +225,7 @@ julia> @test 1 ≈ 0.999999 Test Failed at none:1 Expression: 1 ≈ 0.999999 Evaluated: 1 ≈ 0.999999 + ERROR: There was an error during testing ``` You can specify relative and absolute tolerances by setting the `rtol` and `atol` keyword arguments of `isapprox`, respectively, diff --git a/stdlib/Test/src/Test.jl b/stdlib/Test/src/Test.jl index 7a4dc3ec184d9..90614e77558c4 100644 --- a/stdlib/Test/src/Test.jl +++ b/stdlib/Test/src/Test.jl @@ -165,6 +165,7 @@ function Base.show(io::IO, t::Fail) print(io, "\n Context: ", t.context) end end + println(io) # add some visual space to separate sequential failures end """ @@ -1399,6 +1400,7 @@ julia> @testset let logi = log(im) Test Failed at none:3 Expression: !(iszero(real(logi))) Context: logi = 0.0 + 1.5707963267948966im + ERROR: There was an error during testing ``` """ @@ -1964,54 +1966,11 @@ function detect_unbound_args(mods...; return collect(ambs) end -# find if var will be constrained to have a definite value -# in any concrete leaftype subtype of typ -function constrains_param(var::TypeVar, @nospecialize(typ), covariant::Bool) - typ === var && return true - while typ isa UnionAll - covariant && constrains_param(var, typ.var.ub, covariant) && return true - # typ.var.lb doesn't constrain var - typ = typ.body - end - if typ isa Union - # for unions, verify that both options would constrain var - ba = constrains_param(var, typ.a, covariant) - bb = constrains_param(var, typ.b, covariant) - (ba && bb) && return true - elseif typ isa DataType - # return true if any param constrains var - fc = length(typ.parameters) - if fc > 0 - if typ.name === Tuple.name - # vararg tuple needs special handling - for i in 1:(fc - 1) - p = typ.parameters[i] - constrains_param(var, p, covariant) && return true - end - lastp = typ.parameters[fc] - vararg = Base.unwrap_unionall(lastp) - if vararg isa Core.TypeofVararg && isdefined(vararg, :N) - constrains_param(var, vararg.N, covariant) && return true - # T = vararg.parameters[1] doesn't constrain var - else - constrains_param(var, lastp, covariant) && return true - end - else - for i in 1:fc - p = typ.parameters[i] - constrains_param(var, p, false) && return true - end - end - end - end - return false -end - function has_unbound_vars(@nospecialize sig) while sig isa UnionAll var = sig.var sig = sig.body - if !constrains_param(var, sig, true) + if !Core.Compiler.constrains_param(var, sig, #=covariant=#true, #=type_constrains=#true) return true end end diff --git a/stdlib/libLLVM_jll/Project.toml b/stdlib/libLLVM_jll/Project.toml index 8332d68102f8e..119eb8755424d 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 = "14.0.6+0" +version = "14.0.6+2" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/test/cmdlineargs.jl b/test/cmdlineargs.jl index 81478cd63836b..e5e5135f674bf 100644 --- a/test/cmdlineargs.jl +++ b/test/cmdlineargs.jl @@ -827,4 +827,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" end diff --git a/test/compiler/AbstractInterpreter.jl b/test/compiler/AbstractInterpreter.jl index cfb26d714db9f..dfdf84d9c2fbe 100644 --- a/test/compiler/AbstractInterpreter.jl +++ b/test/compiler/AbstractInterpreter.jl @@ -19,10 +19,12 @@ macro newinterp(name) struct $name <: CC.AbstractInterpreter interp::CC.NativeInterpreter cache::$cachename + meta # additional information $name(world = Base.get_world_counter(); interp = CC.NativeInterpreter(world), - cache = $cachename(IdDict{MethodInstance,CodeInstance}()) - ) = new(interp, cache) + cache = $cachename(IdDict{MethodInstance,CodeInstance}()), + meta = nothing + ) = new(interp, cache, meta) end CC.InferenceParams(interp::$name) = CC.InferenceParams(interp.interp) CC.OptimizationParams(interp::$name) = CC.OptimizationParams(interp.interp) @@ -45,6 +47,14 @@ import Base.Experimental: @MethodTable, @overlay @MethodTable(OverlayedMT) CC.method_table(interp::MTOverlayInterp) = CC.OverlayMethodTable(CC.get_world_counter(interp), OverlayedMT) +function CC.add_remark!(interp::MTOverlayInterp, ::CC.InferenceState, remark) + if interp.meta !== nothing + # Core.println(remark) + push!(interp.meta, remark) + end + return nothing +end + strangesin(x) = sin(x) @overlay OverlayedMT strangesin(x::Float64) = iszero(x) ? nothing : cos(x) @@ -64,6 +74,21 @@ end |> !Core.Compiler.is_nonoverlayed @invoke strangesin(x::Float64) end |> !Core.Compiler.is_nonoverlayed +# account for overlay possibility in unanalyzed matching method +callstrange(::Nothing) = Core.compilerbarrier(:type, nothing) # trigger inference bail out +callstrange(::Float64) = strangesin(x) +callstrange_entry(x) = callstrange(x) # needs to be defined here because of world age +let interp = MTOverlayInterp(; meta=Set{Any}()) + matches = Core.Compiler.findall(Tuple{typeof(callstrange),Any}, Core.Compiler.method_table(interp)).matches + @test Core.Compiler.length(matches) == 2 + if Core.Compiler.getindex(matches, 1).method == which(callstrange, (Nothing,)) + @test Base.infer_effects(callstrange_entry, (Any,); interp) |> !Core.Compiler.is_nonoverlayed + @test "Call inference reached maximally imprecise information. Bailing on." in interp.meta + else + @warn "`nonoverlayed` test for inference bailing out is skipped since the method match sort order is changed." + end +end + # but it should never apply for the native compilation @test Base.infer_effects((Float64,)) do x strangesin(x) diff --git a/test/compiler/effects.jl b/test/compiler/effects.jl index 3aad5d1bdd8ab..a74b86351adf9 100644 --- a/test/compiler/effects.jl +++ b/test/compiler/effects.jl @@ -569,6 +569,21 @@ global inconsistent_condition_ref = Ref{Bool}(false) end end |> !Core.Compiler.is_consistent +# should handle va-method properly +callgetfield1(xs...) = getfield(getfield(xs, 1), 1) +@test !Core.Compiler.is_inaccessiblememonly(Base.infer_effects(callgetfield1, (Base.RefValue{Symbol},))) +const GLOBAL_XS = Ref(:julia) +global_getfield() = callgetfield1(GLOBAL_XS) +@test let + Base.Experimental.@force_compile + global_getfield() +end === :julia +GLOBAL_XS[] = :julia2 +@test let + Base.Experimental.@force_compile + global_getfield() +end === :julia2 + # the `:inaccessiblememonly` helper effect allows us to prove `:effect_free`-ness of frames # including `setfield!` modifying local mutable object @@ -683,11 +698,22 @@ end # Test that dead `@inbounds` does not taint consistency # https://github.com/JuliaLang/julia/issues/48243 -@test Base.infer_effects() do - false && @inbounds (1,2,3)[1] +@test Base.infer_effects(Tuple{Int64}) do i + false && @inbounds (1,2,3)[i] return 1 end |> Core.Compiler.is_total @test Base.infer_effects(Tuple{Int64}) do i @inbounds (1,2,3)[i] end |> !Core.Compiler.is_consistent + +@test Base.infer_effects(Tuple{Tuple{Int64}}) do x + @inbounds x[1] +end |> Core.Compiler.is_total + +# GotoIfNot should properly mark itself as throwing when given a non-Bool +# https://github.com/JuliaLang/julia/pull/48583 +gotoifnot_throw_check_48583(x) = x ? x : 0 +@test !Core.Compiler.is_nothrow(Base.infer_effects(gotoifnot_throw_check_48583, (Missing,))) +@test !Core.Compiler.is_nothrow(Base.infer_effects(gotoifnot_throw_check_48583, (Any,))) +@test Core.Compiler.is_nothrow(Base.infer_effects(gotoifnot_throw_check_48583, (Bool,))) diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index 715ecb3173c06..a1ca7505fe80a 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -4280,3 +4280,16 @@ end # issue #48374 @test (() -> Union{<:Nothing})() == Nothing + +# :static_parameter accuracy +unknown_sparam_throw(::Union{Nothing, Type{T}}) where T = @isdefined(T) ? T::Type : nothing +unknown_sparam_nothrow1(x::Ref{T}) where T = @isdefined(T) ? T::Type : nothing +unknown_sparam_nothrow2(x::Ref{Ref{T}}) where T = @isdefined(T) ? T::Type : nothing +@test only(Base.return_types(unknown_sparam_throw, (Type{Int},))) == Type{Int} +@test only(Base.return_types(unknown_sparam_throw, (Type{<:Integer},))) == Type{<:Integer} +@test only(Base.return_types(unknown_sparam_throw, (Type,))) == Union{Nothing, Type} +@test_broken only(Base.return_types(unknown_sparam_throw, (Nothing,))) === Nothing +@test_broken only(Base.return_types(unknown_sparam_throw, (Union{Type{Int},Nothing},))) === Union{Nothing,Type{Int}} +@test only(Base.return_types(unknown_sparam_throw, (Any,))) === Union{Nothing,Type} +@test only(Base.return_types(unknown_sparam_nothrow1, (Ref,))) === Type +@test only(Base.return_types(unknown_sparam_nothrow2, (Ref{Ref{T}} where T,))) === Type diff --git a/test/keywordargs.jl b/test/keywordargs.jl index 366f14393a94f..6d7c396955627 100644 --- a/test/keywordargs.jl +++ b/test/keywordargs.jl @@ -387,3 +387,10 @@ f41416(a...="a"; b=true) = (b, a) @test f41416(;b=false) === (false, ("a",)) @test f41416(33) === (true, (33,)) @test f41416(3; b=false) === (false, (3,)) + +Core.kwcall(i::Int) = "hi $i" +let m = first(methods(Core.kwcall, (Any,typeof(kwf1),Vararg))) + @test m.name === :kwf1 + @test Core.kwcall(1) == "hi 1" + @test which(Core.kwcall, (Int,)).name === :kwcall +end diff --git a/test/llvmpasses/final-lower-gc.ll b/test/llvmpasses/final-lower-gc.ll index 176b695ba918b..4af43f748020b 100644 --- a/test/llvmpasses/final-lower-gc.ll +++ b/test/llvmpasses/final-lower-gc.ll @@ -67,6 +67,21 @@ top: ret {} addrspace(10)* %v } +define {} addrspace(10)* @gc_alloc_lowering_var(i64 %size) { +top: +; CHECK-LABEL: @gc_alloc_lowering_var + %pgcstack = call {}*** @julia.get_pgcstack() + %ptls = call {}*** @julia.ptls_states() + %ptls_i8 = bitcast {}*** %ptls to i8* +; CHECK: %0 = add i64 %size, 8 +; CHECK: %v = call noalias nonnull {} addrspace(10)* @ijl_gc_alloc_typed(i8* %ptls_i8, i64 %0, i8* 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 + store {} addrspace(10)* @tag, {} addrspace(10)* addrspace(10)* %1, align 8, !tbaa !0 + ret {} addrspace(10)* %v +} + !0 = !{!1, !1, i64 0} !1 = !{!"jtbaa_gcframe", !2, i64 0} !2 = !{!"jtbaa"} diff --git a/test/loading.jl b/test/loading.jl index f98f08103c9d7..24cca245ae4cb 100644 --- a/test/loading.jl +++ b/test/loading.jl @@ -673,10 +673,10 @@ end cd("foo") @test Base.active_project() == old """ - @test success(`$(Base.julia_cmd()) --startup-file=no --project=foo -e $(script)`) - withenv("JULIA_PROJECT" => "foo") do - @test success(`$(Base.julia_cmd()) --startup-file=no -e $(script)`) - end + cmd = `$(Base.julia_cmd()) --startup-file=no -e $(script)` + cmd = addenv(cmd, "JULIA_PROJECT" => "foo") + cmd = pipeline(cmd; stdout, stderr) + @test success(cmd) end; end end @@ -689,15 +689,16 @@ mktempdir() do dir vdir = vdir[2:end] # remove @ vpath = joinpath(dir, "environments", vdir) mkpath(vpath) - withenv("JULIA_DEPOT_PATH" => dir) do - script = "@assert startswith(Base.active_project(), $(repr(vpath)))" - @test success(`$(Base.julia_cmd()) --startup-file=no -e $(script)`) - end + script = "@assert startswith(Base.active_project(), $(repr(vpath)))" + cmd = `$(Base.julia_cmd()) --startup-file=no -e $(script)` + cmd = addenv(cmd, "JULIA_DEPOT_PATH" => dir) + cmd = pipeline(cmd; stdout, stderr) + @test success(cmd) end @testset "expansion of JULIA_LOAD_PATH" begin s = Sys.iswindows() ? ';' : ':' - tmp = "/foo/bar" + tmp = "/this/does/not/exist" cases = Dict{Any,Vector{String}}( nothing => Base.DEFAULT_LOAD_PATH, "" => [], @@ -706,16 +707,17 @@ end "$s$tmp" => [Base.DEFAULT_LOAD_PATH; tmp], ) for (env, result) in pairs(cases) - withenv("JULIA_LOAD_PATH" => env) do - script = "LOAD_PATH == $(repr(result)) || error()" - @test success(`$(Base.julia_cmd()) --startup-file=no -e $script`) - end + script = "LOAD_PATH == $(repr(result)) || error()" + cmd = `$(Base.julia_cmd()) --startup-file=no -e $script` + cmd = addenv(cmd, "JULIA_LOAD_PATH" => env) + cmd = pipeline(cmd; stdout, stderr) + @test success(cmd) end end @testset "expansion of JULIA_DEPOT_PATH" begin s = Sys.iswindows() ? ';' : ':' - tmp = "/foo/bar" + tmp = "/this/does/not/exist" DEFAULT = Base.append_default_depot_path!(String[]) cases = Dict{Any,Vector{String}}( nothing => DEFAULT, @@ -725,10 +727,11 @@ end "$s$tmp" => [DEFAULT; tmp], ) for (env, result) in pairs(cases) - withenv("JULIA_DEPOT_PATH" => env) do - script = "DEPOT_PATH == $(repr(result)) || error()" - @test success(`$(Base.julia_cmd()) --startup-file=no -e $script`) - end + script = "DEPOT_PATH == $(repr(result)) || error()" + cmd = `$(Base.julia_cmd()) --startup-file=no -e $script` + cmd = addenv(cmd, "JULIA_DEPOT_PATH" => env) + cmd = pipeline(cmd; stdout, stderr) + @test success(cmd) end end @@ -996,20 +999,19 @@ end end @testset "Extensions" begin - old_depot_path = copy(DEPOT_PATH) + depot_path = mktempdir() try - tmp = mktempdir() - push!(empty!(DEPOT_PATH), joinpath(tmp, "depot")) proj = joinpath(@__DIR__, "project", "Extensions", "HasDepWithExtensions.jl") function gen_extension_cmd(compile) ```$(Base.julia_cmd()) $compile --startup-file=no -e ' begin + push!(empty!(DEPOT_PATH), '$(repr(depot_path))') using HasExtensions - # Base.get_extension(HasExtensions, :Extension) === nothing || error("unexpectedly got an extension") + Base.get_extension(HasExtensions, :Extension) === nothing || error("unexpectedly got an extension") HasExtensions.ext_loaded && error("ext_loaded set") using HasDepWithExtensions - # Base.get_extension(HasExtensions, :Extension).extvar == 1 || error("extvar in Extension not set") + Base.get_extension(HasExtensions, :Extension).extvar == 1 || error("extvar in Extension not set") HasExtensions.ext_loaded || error("ext_loaded not set") HasExtensions.ext_folder_loaded && error("ext_folder_loaded set") HasDepWithExtensions.do_something() || error("do_something errored") @@ -1020,21 +1022,42 @@ end ``` end - for compile in (`--compiled-modules=no`, ``, ``) # Once when requiring precomilation, once where it is already precompiled + for compile in (`--compiled-modules=no`, ``, ``) # Once when requiring precompilation, once where it is already precompiled cmd = gen_extension_cmd(compile) - withenv("JULIA_LOAD_PATH" => proj) do - @test success(cmd) - end + cmd = addenv(cmd, "JULIA_LOAD_PATH" => proj) + cmd = pipeline(cmd; stdout, stderr) + @test success(cmd) end - # 48351 sep = Sys.iswindows() ? ';' : ':' - withenv("JULIA_LOAD_PATH" => join([mktempdir(), proj], sep)) do - cmd = gen_extension_cmd(``) - @test success(cmd) + + # 48351 + cmd = gen_extension_cmd(``) + cmd = addenv(cmd, "JULIA_LOAD_PATH" => join([mktempdir(), proj], sep)) + cmd = pipeline(cmd; stdout, stderr) + @test success(cmd) + + # Only load env from where package is loaded + envs = [joinpath(@__DIR__, "project", "Extensions", "EnvWithHasExtensionsv2"), joinpath(@__DIR__, "project", "Extensions", "EnvWithHasExtensions")] + cmd = addenv(```$(Base.julia_cmd()) --startup-file=no -e ' + begin + + + push!(empty!(DEPOT_PATH), '$(repr(depot_path))') + using HasExtensions + using ExtDep + Base.get_extension(HasExtensions, :Extension) === nothing || error("unexpectedly loaded ext from other env") + Base.get_extension(HasExtensions, :Extension2) === nothing && error("did not load ext from active env") end + ' + ```, "JULIA_LOAD_PATH" => join(envs, sep)) + @test success(cmd) finally - copy!(DEPOT_PATH, old_depot_path) + try + rm(depot_path, force=true, recursive=true) + catch err + @show err + end end end @@ -1075,9 +1098,13 @@ end end """ cmd = `$julia $(pkgimage(P)) $(opt_level(O)) $(debug_level(D)) $(check_bounds(C)) $(inline(I)) -e $script` - @test success(pipeline(cmd; stderr)) + @test success(pipeline(cmd; stdout, stderr)) end end empty!(Base.DEPOT_PATH) append!(Base.DEPOT_PATH, original_depot_path) + +@testset "Upgradable stdlibs" begin + @test success(`$(Base.julia_cmd()) --startup-file=no -e 'using DelimitedFiles'`) +end diff --git a/test/project/Extensions/EnvWithHasExtensions/Manifest.toml b/test/project/Extensions/EnvWithHasExtensions/Manifest.toml new file mode 100644 index 0000000000000..8ac961fa1a9a9 --- /dev/null +++ b/test/project/Extensions/EnvWithHasExtensions/Manifest.toml @@ -0,0 +1,29 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.9.0-beta4" +manifest_format = "2.0" +project_hash = "caa716752e6dff3d77c3de929ebbb5d2024d04ef" + +[[deps.ExtDep]] +deps = ["SomePackage"] +path = "../ExtDep.jl" +uuid = "fa069be4-f60b-4d4c-8b95-f8008775090c" +version = "0.1.0" + +[[deps.HasExtensions]] +path = "../HasExtensions.jl" +uuid = "4d3288b3-3afc-4bb6-85f3-489fffe514c8" +version = "0.1.0" + + [deps.HasExtensions.extensions] + Extension = "ExtDep" + ExtensionFolder = ["ExtDep", "ExtDep2"] + + [deps.HasExtensions.weakdeps] + ExtDep = "fa069be4-f60b-4d4c-8b95-f8008775090c" + ExtDep2 = "55982ee5-2ad5-4c40-8cfe-5e9e1b01500d" + +[[deps.SomePackage]] +path = "../SomePackage" +uuid = "678608ae-7bb3-42c7-98b1-82102067a3d8" +version = "0.1.0" diff --git a/test/project/Extensions/EnvWithHasExtensions/Project.toml b/test/project/Extensions/EnvWithHasExtensions/Project.toml new file mode 100644 index 0000000000000..8639881ae95c0 --- /dev/null +++ b/test/project/Extensions/EnvWithHasExtensions/Project.toml @@ -0,0 +1,4 @@ +[deps] +ExtDep = "fa069be4-f60b-4d4c-8b95-f8008775090c" +HasExtensions = "4d3288b3-3afc-4bb6-85f3-489fffe514c8" +SomePackage = "678608ae-7bb3-42c7-98b1-82102067a3d8" diff --git a/test/project/Extensions/EnvWithHasExtensionsv2/Manifest.toml b/test/project/Extensions/EnvWithHasExtensionsv2/Manifest.toml new file mode 100644 index 0000000000000..66781a5701363 --- /dev/null +++ b/test/project/Extensions/EnvWithHasExtensionsv2/Manifest.toml @@ -0,0 +1,25 @@ +# This file is machine-generated - editing it directly is not advised + +julia_version = "1.10.0-DEV" +manifest_format = "2.0" +project_hash = "caa716752e6dff3d77c3de929ebbb5d2024d04ef" + +[[deps.ExtDep]] +deps = ["SomePackage"] +path = "../ExtDep.jl" +uuid = "fa069be4-f60b-4d4c-8b95-f8008775090c" +version = "0.1.0" + +[[deps.HasExtensions]] +path = "../HasExtensions_v2.jl" +uuid = "4d3288b3-3afc-4bb6-85f3-489fffe514c8" +version = "0.2.0" +weakdeps = ["ExtDep"] + + [deps.HasExtensions.extensions] + Extension2 = "ExtDep" + +[[deps.SomePackage]] +path = "../SomePackage" +uuid = "678608ae-7bb3-42c7-98b1-82102067a3d8" +version = "0.1.0" diff --git a/test/project/Extensions/EnvWithHasExtensionsv2/Project.toml b/test/project/Extensions/EnvWithHasExtensionsv2/Project.toml new file mode 100644 index 0000000000000..8639881ae95c0 --- /dev/null +++ b/test/project/Extensions/EnvWithHasExtensionsv2/Project.toml @@ -0,0 +1,4 @@ +[deps] +ExtDep = "fa069be4-f60b-4d4c-8b95-f8008775090c" +HasExtensions = "4d3288b3-3afc-4bb6-85f3-489fffe514c8" +SomePackage = "678608ae-7bb3-42c7-98b1-82102067a3d8" diff --git a/test/project/Extensions/HasExtensions_v2.jl/Project.toml b/test/project/Extensions/HasExtensions_v2.jl/Project.toml new file mode 100644 index 0000000000000..5d92a4b138058 --- /dev/null +++ b/test/project/Extensions/HasExtensions_v2.jl/Project.toml @@ -0,0 +1,9 @@ +name = "HasExtensions" +uuid = "4d3288b3-3afc-4bb6-85f3-489fffe514c8" +version = "0.2.0" + +[weakdeps] +ExtDep = "fa069be4-f60b-4d4c-8b95-f8008775090c" + +[extensions] +Extension2 = "ExtDep" diff --git a/test/project/Extensions/HasExtensions_v2.jl/ext/Extension2.jl b/test/project/Extensions/HasExtensions_v2.jl/ext/Extension2.jl new file mode 100644 index 0000000000000..d027adec9c223 --- /dev/null +++ b/test/project/Extensions/HasExtensions_v2.jl/ext/Extension2.jl @@ -0,0 +1,3 @@ +module Extension2 + +end diff --git a/test/project/Extensions/HasExtensions_v2.jl/src/HasExtensions.jl b/test/project/Extensions/HasExtensions_v2.jl/src/HasExtensions.jl new file mode 100644 index 0000000000000..dbfaeec4f8812 --- /dev/null +++ b/test/project/Extensions/HasExtensions_v2.jl/src/HasExtensions.jl @@ -0,0 +1,10 @@ +module HasExtensions + +struct HasExtensionsStruct end + +foo(::HasExtensionsStruct) = 1 + +ext_loaded = false +ext_folder_loaded = false + +end # module diff --git a/test/sorting.jl b/test/sorting.jl index 20c2f4889e40b..92853b2812e47 100644 --- a/test/sorting.jl +++ b/test/sorting.jl @@ -560,6 +560,13 @@ end end end +@testset "Offset with missing (#48862)" begin + v = [-1.0, missing, 1.0, 0.0, missing, -0.5, 0.5, 1.0, -0.5, missing, 0.5, -0.8, 1.5, NaN] + vo = OffsetArray(v, (firstindex(v):lastindex(v)).+100) + @test issorted(sort!(vo)) + @test issorted(v) +end + @testset "searchsortedfirst/last with generalized indexing" begin o = OffsetVector(1:3, -2) @test searchsortedfirst(o, 4) == lastindex(o) + 1 diff --git a/test/subtype.jl b/test/subtype.jl index cb8a65930ddf1..d9bafa8138da2 100644 --- a/test/subtype.jl +++ b/test/subtype.jl @@ -2241,6 +2241,16 @@ let S = Tuple{T2, V2} where {T2, N2, V2<:(Array{S2, N2} where {S2 <: T2})}, @testintersect(S, T, !Union{}) end +@test only(intersection_env(Val{Union{Val{Val{T}} where {T},Int}}, Val{Union{T,Int}} where T)[2]) === Val{Val{T}} where {T} + +# issue 47654 +Vec47654{T} = Union{AbstractVector{T}, AbstractVector{Union{T,Nothing}}} +struct Wrapper47654{T, V<:Vec47654{T}} + v::V +end +abstract type P47654{A} end +@test Wrapper47654{P47654, Vector{Union{P47654,Nothing}}} <: Wrapper47654 + @testset "known subtype/intersect issue" begin #issue 45874 # Causes a hang due to jl_critical_error calling back into malloc... @@ -2278,7 +2288,7 @@ end @test_broken typeintersect(Tuple{Type{Tuple{T,Val{T}}}, Val{T}} where T, Tuple{Type{Tuple{Val{T},T}}, Val{T}} where T) <: Any # issue 24333 - @test_broken (Type{Union{Ref,Cvoid}} <: Type{Union{T,Cvoid}} where T) + @test (Type{Union{Ref,Cvoid}} <: Type{Union{T,Cvoid}} where T) # issue 22123 t1 = Ref{Ref{Ref{Union{Int64, T}}} where T} @@ -2289,4 +2299,16 @@ end @test_broken (Tuple{T1,T1} where T1<:(Val{T2} where T2)) <: (Tuple{Val{S},Val{S}} where S) end +# issue #47658 +let T = Ref{NTuple{8, Ref{Union{Int, P}}}} where P, + S = Ref{NTuple{8, Ref{Union{Int, P}}}} where P + # note T and S are identical but we need 2 copies to avoid being fooled by pointer equality + @test T <: Union{Int, S} +end + +# try to fool a greedy algorithm that picks X=Int, Y=String here +@test Tuple{Ref{Union{Int,String}}, Ref{Union{Int,String}}} <: Tuple{Ref{Union{X,Y}}, Ref{X}} where {X,Y} +# this slightly more complex case has been broken since 1.0 (worked in 0.6) +@test_broken Tuple{Ref{Union{Int,String,Missing}}, Ref{Union{Int,String}}} <: Tuple{Ref{Union{X,Y}}, Ref{X}} where {X,Y} + @test !(Tuple{Any, Any, Any} <: Tuple{Any, Vararg{T}} where T)