diff --git a/.buildkite-external-version b/.buildkite-external-version index ba2906d0666cf..37f6b6626894f 100644 --- a/.buildkite-external-version +++ b/.buildkite-external-version @@ -1 +1 @@ -main +release-julia-1.10 diff --git a/base/client.jl b/base/client.jl index d2f337a1d0062..388e34d5b19f7 100644 --- a/base/client.jl +++ b/base/client.jl @@ -31,9 +31,6 @@ stackframe_lineinfo_color() = repl_color("JULIA_STACKFRAME_LINEINFO_COLOR", :bol stackframe_function_color() = repl_color("JULIA_STACKFRAME_FUNCTION_COLOR", :bold) function repl_cmd(cmd, out) - shell = shell_split(get(ENV, "JULIA_SHELL", get(ENV, "SHELL", "/bin/sh"))) - shell_name = Base.basename(shell[1]) - # Immediately expand all arguments, so that typing e.g. ~/bin/foo works. cmd.exec .= expanduser.(cmd.exec) @@ -63,19 +60,15 @@ function repl_cmd(cmd, out) cd(dir) println(out, pwd()) else - @static if !Sys.iswindows() - if shell_name == "fish" - shell_escape_cmd = "begin; $(shell_escape_posixly(cmd)); and true; end" - else - shell_escape_cmd = "($(shell_escape_posixly(cmd))) && true" - end + if !Sys.iswindows() + shell = shell_split(get(ENV, "JULIA_SHELL", get(ENV, "SHELL", "/bin/sh"))) + shell_escape_cmd = shell_escape_posixly(cmd) cmd = `$shell -c $shell_escape_cmd` end try run(ignorestatus(cmd)) catch - # Windows doesn't shell out right now (complex issue), so Julia tries to run the program itself - # Julia throws an exception if it can't find the program, but the stack trace isn't useful + # Julia throws an exception if it can't find the cmd (which may be the shell itself), but the stack trace isn't useful lasterr = current_exceptions() lasterr = ExceptionStack([(exception = e[1], backtrace = [] ) for e in lasterr]) invokelatest(display_error, lasterr) diff --git a/base/options.jl b/base/options.jl index a94936391fa8d..b7967f4e7fdf9 100644 --- a/base/options.jl +++ b/base/options.jl @@ -9,7 +9,7 @@ struct JLOptions commands::Ptr{Ptr{UInt8}} # (e)eval, (E)print, (L)load image_file::Ptr{UInt8} cpu_target::Ptr{UInt8} - nthreadpools::Int16 + nthreadpools::Int8 nthreads::Int16 nmarkthreads::Int16 nsweepthreads::Int8 diff --git a/base/strings/basic.jl b/base/strings/basic.jl index 72088e0e06153..a12523934c449 100644 --- a/base/strings/basic.jl +++ b/base/strings/basic.jl @@ -795,6 +795,8 @@ write(io::IO, s::CodeUnits) = write(io, s.s) unsafe_convert(::Type{Ptr{T}}, s::CodeUnits{T}) where {T} = unsafe_convert(Ptr{T}, s.s) unsafe_convert(::Type{Ptr{Int8}}, s::CodeUnits{UInt8}) = unsafe_convert(Ptr{Int8}, s.s) +similar(::Type{<:CodeUnits{T}}, dims::Dims) where {T} = similar(Array{T}, dims) + """ codeunits(s::AbstractString) diff --git a/base/strings/string.jl b/base/strings/string.jl index a26791958cd50..ce1268269f421 100644 --- a/base/strings/string.jl +++ b/base/strings/string.jl @@ -7,9 +7,9 @@ An error occurred when trying to access `str` at index `i` that is not valid. """ struct StringIndexError <: Exception string::AbstractString - index::Integer + index::Int end -@noinline string_index_err(s::AbstractString, i::Integer) = +@noinline string_index_err((@nospecialize s::AbstractString), i::Integer) = throw(StringIndexError(s, Int(i))) function Base.showerror(io::IO, exc::StringIndexError) s = exc.string diff --git a/base/strings/unicode.jl b/base/strings/unicode.jl index 2e04633b87487..990be016a18f8 100644 --- a/base/strings/unicode.jl +++ b/base/strings/unicode.jl @@ -725,7 +725,7 @@ isgraphemebreak(c1::AbstractChar, c2::AbstractChar) = # Stateful grapheme break required by Unicode-9 rules: the string # must be processed in sequence, with state initialized to Ref{Int32}(0). # Requires utf8proc v2.0 or later. -function isgraphemebreak!(state::Ref{Int32}, c1::AbstractChar, c2::AbstractChar) +@inline function isgraphemebreak!(state::Ref{Int32}, c1::AbstractChar, c2::AbstractChar) if ismalformed(c1) || ismalformed(c2) state[] = 0 return true diff --git a/deps/checksums/openblas b/deps/checksums/openblas index 0d176cafe7aca..66199ba007c17 100644 --- a/deps/checksums/openblas +++ b/deps/checksums/openblas @@ -1,94 +1,94 @@ -OpenBLAS.v0.3.23+4.aarch64-apple-darwin-libgfortran5.tar.gz/md5/4396075a0a35187b500ed7f55254a6bd -OpenBLAS.v0.3.23+4.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/2df0bb2eeb6c2945cd53b0182d00ab09e2cdf1731fe626af501a7632e8995bea21d8453d8e5671d4be9fd77a9ad12facdedf9e803c1fca35c36994dde26a6ac5 -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran3.tar.gz/md5/48023d189673623c1cf79cfc73df696b -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/ecaaa3f6df848f4c247f4ef5ec9bb6e344c4ccf73b413b43ddaced9ce75a378b8ac59c6a9735a7030c61c7d74ba068329d4f9f60d1200a86df50644b604a15fd -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran4.tar.gz/md5/af961e90dc125b29b17868efb4a3ae61 -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/30ca662a9ac89b907d9f49743e247a53d60d48be74c7ad4e19973fb7a5de908f4ad4566f08a1b576fe4aac146565c29fbcdc29c2b3f5226a3ede897f441477fd -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran5.tar.gz/md5/3b3534a64ca7363f206e4c8fabd69fd8 -OpenBLAS.v0.3.23+4.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/cf2f7b5b0b634f8826ae1ce76fe018b9d2c5d5c1b1bd511ea45c9a9004363adac3339ffd28c62ce7bf9424678c350221c3ed8919a2afbb61d2b3ccbe3283009e -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran3.tar.gz/md5/e07bfcf56f7765adf431b834f36a1f09 -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran3.tar.gz/sha512/6953043361c07583ff52074ad0cddb5b7f01b5f35d46435d442b907fc6c213df548fa6c010179355bbfa0a44a97761fec437c64384971821316f1063e909ac4e -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran4.tar.gz/md5/3c949da2727e857cfa67f21b092d544c -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran4.tar.gz/sha512/ffc6d956d5a2414324bf8e5db6b5a9c5ada72e2fd4c6f798a3f328ce21ddf5e86d664e2bcefd6e163684e7d5eb4cefeec9a597f3d9c6ab58d555a6d279b06c12 -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran5.tar.gz/md5/458e31ac7b23846da374cb1593764166 -OpenBLAS.v0.3.23+4.aarch64-linux-musl-libgfortran5.tar.gz/sha512/fe1026095f3734e0540f482989ad62a7bd6f0521049f4f44eee944938b7dc8a8fc7fce744548c947a36b46944b8a7651c4b76ed82499038fc8bc8c5efcdb978e -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/386a87787e313db0b5044c36b33dac07 -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/f36c2d127adc3f596632e55fa98c1189b29f7efbabf352e96f865f3e6d958ead90707981acf77b10b7fa8efbc3f6d574da984021da6c6c25ef7d427972a484fa -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/0e799ed6a5799c02e578ce8e5d179412 -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/2036602634120677e86a1bf4aa833f6e5ed75d73751449c0d67fa336647d2f9af4301d5cfe4b1c77582565df95861c34edb83fb1b651b3664647528397e526ce -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/f7140fc2824d53b16aeb441e8007e04d -OpenBLAS.v0.3.23+4.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/77f210113aa43b93844cc3e9f545deee27f8ef63379a8b7cab682957e698ab3f97b83741cbcacc0e518503eb6ee822e1578900be9546b63629c9cb3ecee17fd0 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/9d6f99e55e70b5e12aedd0513717f680 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/bddf250e25afc235130e381fe2ded98fbacb0f996bf522a89698776208c206de2c5cbc6f8f3cb60aad91b07a9389ea6b0dc8b8e3e04d9b78ba34282b142e8b77 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/d253d760a8071bff95152718142ddd86 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/62250517ef74b1d5df8e9b0507365f5194a458431819d9d7077a5aa4a922d22b7de72f9704cbd87768cfc8ef1fa9e6007c17529ee22a23bbbf83fada10aee8db -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/4f6257915c6567d6fc523ab910667789 -OpenBLAS.v0.3.23+4.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/5a8770e6d60fc6ae10a2763316f5f0e8e08df7d07d3a9db36d0d1e4cf593a4c7aa848699b392d43acffd4d7af5be0ae373476df9bfdd82b82ce08759e05b2843 -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/386a87787e313db0b5044c36b33dac07 -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/f36c2d127adc3f596632e55fa98c1189b29f7efbabf352e96f865f3e6d958ead90707981acf77b10b7fa8efbc3f6d574da984021da6c6c25ef7d427972a484fa -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/0e799ed6a5799c02e578ce8e5d179412 -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/2036602634120677e86a1bf4aa833f6e5ed75d73751449c0d67fa336647d2f9af4301d5cfe4b1c77582565df95861c34edb83fb1b651b3664647528397e526ce -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/f7140fc2824d53b16aeb441e8007e04d -OpenBLAS.v0.3.23+4.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/77f210113aa43b93844cc3e9f545deee27f8ef63379a8b7cab682957e698ab3f97b83741cbcacc0e518503eb6ee822e1578900be9546b63629c9cb3ecee17fd0 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/9d6f99e55e70b5e12aedd0513717f680 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/bddf250e25afc235130e381fe2ded98fbacb0f996bf522a89698776208c206de2c5cbc6f8f3cb60aad91b07a9389ea6b0dc8b8e3e04d9b78ba34282b142e8b77 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/d253d760a8071bff95152718142ddd86 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/62250517ef74b1d5df8e9b0507365f5194a458431819d9d7077a5aa4a922d22b7de72f9704cbd87768cfc8ef1fa9e6007c17529ee22a23bbbf83fada10aee8db -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/4f6257915c6567d6fc523ab910667789 -OpenBLAS.v0.3.23+4.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/5a8770e6d60fc6ae10a2763316f5f0e8e08df7d07d3a9db36d0d1e4cf593a4c7aa848699b392d43acffd4d7af5be0ae373476df9bfdd82b82ce08759e05b2843 -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran3.tar.gz/md5/e7ea6dd9b95e5c527faa4fab39ac8f86 -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran3.tar.gz/sha512/b6ada30e5b80e2460ae3a7396aee066315d01fe918efbc39fda958fe1755ff3549b94a6c774e53f72920f1bb5123181810fcc8c637af847ff3b4ca8ae07a8c10 -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran4.tar.gz/md5/3fab9e79dd80c80bcfc84929db41f13f -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran4.tar.gz/sha512/7e8815ca0fce0e6943e54ccee98acf8ce90c514794394a7975ee3e1e51c02367688991042c34d3dc498d1d9487025c35296640bd2d5676d13fdbaecf9fa8bf19 -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran5.tar.gz/md5/59b82e8d7b93ce3d2b2e5c471d10e12e -OpenBLAS.v0.3.23+4.i686-linux-gnu-libgfortran5.tar.gz/sha512/6266f32518ad9e4322d44ba7536a5d8cf734c4ecd0674f16adba73cc64da944b29cd80b83e6304be408d237e06013881deffdbe89aecd459b52242cf2be6ba7b -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran3.tar.gz/md5/f4daa1792329c98b7098119670c81d15 -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran3.tar.gz/sha512/d6b5780af9a64df8fb510e158c0fb5da7bca67fc34e55e53891dd704203a4305e9efca865149e5719ecec9d3c202ce3ec0e1071ad2bb1a6f46e19e6a853d9f67 -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran4.tar.gz/md5/8c799c1b1e1c8bb343beabb63b86a2d5 -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran4.tar.gz/sha512/2ade84eba8f79a3312ca869fb8876b65ce010cbf2b43532bc88da75590ca2b392d7d1e2a2ce5c565d4a9490cf124b10686c0c429793e5ccb1c01640052f6ac4b -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran5.tar.gz/md5/a9be243128a45d2243c8bd42289a36f5 -OpenBLAS.v0.3.23+4.i686-linux-musl-libgfortran5.tar.gz/sha512/941b1f63549d725c477ef98282906c706ceca9daf19b7d856ffd6bd83095fb8b45bc2d099576938f4e984c6e737c94b0a79e686eda11474ddfbecdefc3ec637a -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran3.tar.gz/md5/2aa088a9a41ec94b63aca317ce0a0fdc -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran3.tar.gz/sha512/7e291fcb11edb95d4e10b725a3acef4cec9d16ffd1e596687c0112ae8f0a298e128e12c0b96c54df98dd1bcb5917b53aad7c55e6325c09abee1153267103a432 -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran4.tar.gz/md5/9d82aa30a6a08ea6294f935d2f0b05d3 -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran4.tar.gz/sha512/2ea777015ddbdcac128b3313d091b63ce24504e368089cbd14d966c768e7109c4b94d17e190d9a0be222458f4d01e8542625b69057a30fae8f6cdc985ae70751 -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran5.tar.gz/md5/409b6ce4af7e85bb6ea2c05d4075db81 -OpenBLAS.v0.3.23+4.i686-w64-mingw32-libgfortran5.tar.gz/sha512/a814c9fb705c4d779fc18a598ee67d68206d93010cc919a0b39b4514ab415c044fa385f1c50fa06fee45d894fa72715ba84d51ef3a11a08fe7a3fc1747348e4f -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/3a7c1cc48100da0941e5ce8d85cb3a4f -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/296574c54b2dbe3b7995a9661f8e79edbac091174260e44d7e791e225a5488676a9b29b1315c8e38c7d7db4927fb235dbf6b45d06a843fb653b5746a8f3adb7d -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/136cd6727be4b3c5d8576faf4ed09b03 -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/85f2ce79ca038fb85da85667b0aa79c26d43003543796240a1e5c2f6fc00f24af29d78bb587e66b94015cb973aed33fe0b7a16d5a2d39ad8c2fcf480c63797ab -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/f8a6961fd047c73da271f1e4b441fc3f -OpenBLAS.v0.3.23+4.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/d4350fd12b1351060b977658c4483d18fddf18dc59b690b367f32bfa0b6d699ca49651392c49fd7addeef357239c60e17d0978c19acd661fa13ff78a7144e1dd -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran3.tar.gz/md5/80e5628c507d2bf82e7098a0666c6c4b -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/5582854c2182e5bac5de86d318ba833b4454ce1c2f7d8f7d7f0b3c1effa341f97cb3e43a541cf4197eca0cb93c4da46337f73b153d55fa5283e7d134c2b2660e -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran4.tar.gz/md5/f130da7a989b870a930b6dc659112a7b -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/0292a32d01b13fa69ed2d7620480611cc9e0a8aa325b4366dca3932971fa3ef989eff02ca14c06adfa7718840803b49fe7bf56982ad6f340569d9c7c1750dac2 -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran5.tar.gz/md5/b7d214ade95b63cbd950aa3cb976f679 -OpenBLAS.v0.3.23+4.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/d21f17a713a25983f415de063b3911cf39fc7f15493d41104b9e0b26b3a467f4b37a9dd5c5d0a3883de38e0a16c2a4a6a3bd7634b7f6868fbebdb473a15992d4 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran3.tar.gz/md5/78f95af8bdd31302311fc5a05ec6f895 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/540e02f90f7d844ea3b93bb00de1097b092d46ad710026cfd4a659695f6e1b6ff359c2273c0abe14bb53a20ec1c6343c27bc718f84e8720790906451590d0258 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran4.tar.gz/md5/f4261f43d8ae1fdb38280072dbcaf1ba -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/40f69bbbf5e929346a9dcf2f30af00d91874f889137a9664800cb986c9354d0825b4a6a8746e27ef6b14af9611766ee9538daa1c5cbde24736924c8588071941 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran5.tar.gz/md5/474eaed6749628e58bff5893492ad902 -OpenBLAS.v0.3.23+4.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/1fde4b09a4035a5177c60cc05bde8add73a06b3edfd59563ed5e6383e04d2b055bcfcbc989a8b6f7200efc1f862ea1b49ea2cfc7db4b30bf1aeb7dd641a622aa -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran3.tar.gz/md5/3388a7a9cd0c7bc64ff3dd5bbd6221c1 -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran3.tar.gz/sha512/5e84afb5cef4d050ae7a0b290556d726fd8e9c59f0a7e9bc778ea1352c1985c7fa942849781dfc3bc14f0a1c51138d858c9bbca9124b434e331fa3a0343e8fd8 -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran4.tar.gz/md5/bfac12f41bb0d3be8123deb6a032a5aa -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran4.tar.gz/sha512/30226271a4fa1ec44a01c68cf9d779142563786c19716e74c7a19029ccece71400cc6c9489794cb8f5b28815d8138c98dc3cb2d4011d5c5f7a009aa811b8088f -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran5.tar.gz/md5/b105fea98718ff0e7fc7cced91e5fa33 -OpenBLAS.v0.3.23+4.x86_64-linux-musl-libgfortran5.tar.gz/sha512/d8a09e174f49a0542a3e87a746338198e3f6e37ed6989f89ae3fe8f95eeef9d6625814cd30abd3927d059b3076f91d3793e1e3292e417edfdbea3171729af68c -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/809864b6b4ea73554202f47691e5487d -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/42fb2b1a331a9ca86f004e63188153b82a6e4f85ea36b361725fca4b476ccc64f85b35f287bae067f21ea43f6f85642e54915f33b134e7a68dfe64fe33b05200 -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/0caba2da8ea3be51848e3e57de5fdc4e -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/39c9a9b6c893699491373efad401224eb499e636420545aaeca8c3475955601623abc0f3e10793ab72054b65a68651b663873c073cb9c0bbd89344f4b9496071 -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/1735272b015753d79e7539e2c750c291 -OpenBLAS.v0.3.23+4.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/89dd7a92e5f9182abddc9a90f443568818a84a960959599b35d6c6d3fcb4f60d340f6f319510771f7c45123e591460a7a019067d550ac71d9af9a37d824eb123 -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/238c184ab1cb65a6e48137859a8a52bb -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/a73c4b42b798770e5f08ff83704c5d83bbd1f1101bf7c07effad1cabaf2b665d6e05ee2a73a552933d4bf48085bd4f80f5fd72c709b2012c5cf25c71aace1124 -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/127aca06dc9461387cd5d2a91784242e -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/03099f50dc81427762c404a27ce4d8eb20c37c9664789cac5640ecf360c4dadf7a759680cd81d00301781d68e5df780ab981cb89fd20c448d72e7f0d1a909bf9 -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/92f18261534ceb1e3181c4b6071b0063 -OpenBLAS.v0.3.23+4.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/38894868b7d7638e61a503a30c88ddf910af4e0ff8b9480b97f4ee7598088ba5c4735d1d85575deb1e593d8b6baf8fc549c85c8ba8d1b9683eb58cffb3f9e670 -openblas-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/md5/7ccaaaafc8176b87dc59d4e527ca4d9f +OpenBLAS.v0.3.23+5.aarch64-apple-darwin-libgfortran5.tar.gz/md5/2dc152e2799b095e38b1e0eaa0a91eb5 +OpenBLAS.v0.3.23+5.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/f2d666634e572130af44749acdec5885867e528173242b0a4054ed95de20659142031488e26b9963d19413b9ae25b3ca49a1eab533b0a93a2631dc87df8d12aa +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran3.tar.gz/md5/83037a3237f101a6b41edecff23f3b6e +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/a07ea0aa0caf9467bbf4ab90f509d822df00037ee0b88b9b5920c2eceac0e6148fd4943504a8fae44e57f5d062bd7431b95fa3d96a01096ae068480421e8a6df +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran4.tar.gz/md5/efa78f7c581a1578a857de05c5ef337e +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/37b3ee02391506fba50e8fafbf9a8f42806bebbc143f682958f2ccade49adf6be91ecc58afc9a41ceaa7582dc12537f7297571034e921a1e253b749415877672 +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran5.tar.gz/md5/dddddf9a74f094d8f7e8336a559701df +OpenBLAS.v0.3.23+5.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/4b8bb053d574329598fc59bd630a18461f972d86e7af6e8b022d9a5d124b3b6dd5adc62f84fe490dad4a5a80fbb8021fa90f4877ac580a85d54c30b6dd1336a1 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran3.tar.gz/md5/d2b4ffb0ab3290601e36503fca9ffd34 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran3.tar.gz/sha512/95342209d2aa3e9e501258092b8ee8c014eeace3f2683601190e676b69160e85476b3f0b762ea84e98fc4eb07f532b11147cbafad39b567dbac658676deb1889 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran4.tar.gz/md5/4912822999c62fe8f5310fc0eeb55547 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran4.tar.gz/sha512/496b8a396a027960ef66701a00bb4cb27462717cd46e10ef20922feb7cd897eef60e84bf7bc5cf6d3755e8411c067bf4f6cf27484698f583e900e49735477784 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran5.tar.gz/md5/cb39b61fb73577309875d159218402a9 +OpenBLAS.v0.3.23+5.aarch64-linux-musl-libgfortran5.tar.gz/sha512/e577e7610f4acf392b2b92c560f5aa9b9bd91d0f2c0e5cef9ecba4d5eff23f836c8a487088896f686582f917eee8542f28248f1f3a7506d73ae68bd62294c095 +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/8149572945a598bdb1c8f31ce8531740 +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/4bb2e761c8d5ecc10f48693880b027d80aceb81439d3f18d58021bcba8fb46d1184cf6e0f2a7976044f737e6bb65cf66fb087c0511c10025ac7ead2ad362121a +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/83941c6f773e6f12eb24233965e81d1f +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/8c04c8129574033cbf22244fee3142180ec99d4fd5a5dccd50d7beec71a46430d7f5d021ddd143dda6caf6972c576e8d27b6407784ea7722905d205b86de094a +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/3ff6ce5c868942bb58fe478fb00c4639 +OpenBLAS.v0.3.23+5.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/1adb37680e6d23333c4c396b6861d81bca9e08132baac93b440494e3708fb7a1fbb46317955e1e1568e4a32df55f3e948e8e6646df4d95a77d682a7824a53bc6 +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/a01b0c49ce10739fddf339aeeab93e4a +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/6bba0cfa56bbc9cbc447c7ea36e828db7b21ff080720fb91160b1f65a1680ca78d5494004658467124df003f9cccd0a76eec1008917db84b67a8719631d0a32e +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/e10f6df28a03b37f45edf43f1a7823fb +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/3ef461f8ad01fe88543598beedaf6bc23c53285fa283088cbe6b3c05a7e0d9e58f3b83242a80cc8a8505b430e6bbc76565e0ceeddb8dd41427718d356040cf68 +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/90a22047ac9c4a639caa3c8cfc28a884 +OpenBLAS.v0.3.23+5.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/1ad650f2fd27991470d046c862b77e3f5cc695d54b324379cae2ad529e91e40979d57e6f0665a7a4359d59ac0b5192402c2ff582961ef5686c331163fea019c0 +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/8149572945a598bdb1c8f31ce8531740 +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/4bb2e761c8d5ecc10f48693880b027d80aceb81439d3f18d58021bcba8fb46d1184cf6e0f2a7976044f737e6bb65cf66fb087c0511c10025ac7ead2ad362121a +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/83941c6f773e6f12eb24233965e81d1f +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/8c04c8129574033cbf22244fee3142180ec99d4fd5a5dccd50d7beec71a46430d7f5d021ddd143dda6caf6972c576e8d27b6407784ea7722905d205b86de094a +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/3ff6ce5c868942bb58fe478fb00c4639 +OpenBLAS.v0.3.23+5.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/1adb37680e6d23333c4c396b6861d81bca9e08132baac93b440494e3708fb7a1fbb46317955e1e1568e4a32df55f3e948e8e6646df4d95a77d682a7824a53bc6 +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/a01b0c49ce10739fddf339aeeab93e4a +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/6bba0cfa56bbc9cbc447c7ea36e828db7b21ff080720fb91160b1f65a1680ca78d5494004658467124df003f9cccd0a76eec1008917db84b67a8719631d0a32e +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/e10f6df28a03b37f45edf43f1a7823fb +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/3ef461f8ad01fe88543598beedaf6bc23c53285fa283088cbe6b3c05a7e0d9e58f3b83242a80cc8a8505b430e6bbc76565e0ceeddb8dd41427718d356040cf68 +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/90a22047ac9c4a639caa3c8cfc28a884 +OpenBLAS.v0.3.23+5.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/1ad650f2fd27991470d046c862b77e3f5cc695d54b324379cae2ad529e91e40979d57e6f0665a7a4359d59ac0b5192402c2ff582961ef5686c331163fea019c0 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran3.tar.gz/md5/43018db9b925939a361bc7f2b0af2e78 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran3.tar.gz/sha512/c37b3d8b146568878e1fbafbe012848c562dc88bde2563d9472fbac54119f57a39a1a693bcff3d23fcd7ca01ea631d5c55df9204f8f6412e8abc90d42f8ce788 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran4.tar.gz/md5/8c8c9de02167772624144c26b6eb4ddf +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran4.tar.gz/sha512/ed684b21db18039243366c3f3e2db8a733a79cd463ef2b05f8a1b7c983991ea21ee3dbe2f78febdb6df5a11c087fa19b64e5c2009d63e472e1c63d5ff1a12ca6 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran5.tar.gz/md5/7cda10161d1911ef1c55bc79437be0c2 +OpenBLAS.v0.3.23+5.i686-linux-gnu-libgfortran5.tar.gz/sha512/b11ac5899d437639ca8e95d0d29a981328552086e25644c2284fa0081dd81ce474128cbc0b198649ad1ef4784d39d7f1b054a258ee650d3a3b3ac0d337b13424 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran3.tar.gz/md5/b355a49a55323d3d60d27a7a366d0e79 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran3.tar.gz/sha512/a9590c57d8931ca8b2c8e55d1095dc75290f0d7bee14a4dfa0cff2fc2b5f2be73bfd77dc46dca22467886016df06c3a9dfa21946b4c8fb867e9bb1c16098fd85 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran4.tar.gz/md5/60a33b3b5216a73f56fa324901d7c869 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran4.tar.gz/sha512/50832dc62a08c04c688d14afea8b3f141263d554cd0af1b3bb4b9db1b1cfa2a64a1450a015e9506fc967cb847b18bfde595fdf3c54fb0e6b93b8a520aa77344f +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran5.tar.gz/md5/8622a48a2e43041f9f2c6fdaff217b57 +OpenBLAS.v0.3.23+5.i686-linux-musl-libgfortran5.tar.gz/sha512/03d5c2b1882815b541876d2cb3d54f010e402167a6d8c84683d53f195e97f69e2bae4c39a6829c5c9abf100652168873dcb4268175b94f74447815920a65e2f1 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran3.tar.gz/md5/710e4246ab705481bb8a27341883bcc5 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran3.tar.gz/sha512/da16d22c8bc5628744987ceb1fc3c9e8b3ae8485d2bc9e93da0593bb177e3daeb6591e49c29832296e095b27300030bf7da14f52a08c77fb82c914b6c00264c6 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran4.tar.gz/md5/af159e18cfb7b1ec349f61d75ed4f4b4 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran4.tar.gz/sha512/4f9fa98fb6feb8e3367d24bd2dd6ee27097898b73afdbc2a61231e2a359e2b5cbc311fead6e393f9a4cb355e5ef9a3f52e8d61e1f40e103869e1a87d4fa353b3 +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran5.tar.gz/md5/6101533ade279afb216247c2a2a5d94e +OpenBLAS.v0.3.23+5.i686-w64-mingw32-libgfortran5.tar.gz/sha512/ae800315993016ee9fab1e4c264cef8addd92155509de296488528441cfd69e695c30caeabb20dba8bfd5602eea07a646fa6037c68f0f0dc4ad262b7c926abd6 +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/d614ec4c2abb2f6350405b3991138be1 +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/8b5a0459d83bdd2cae1c6766a479ac92a8d3dc027c7c394a5eff04cd63ace68177cf36d56a8d9d8dd6611efdb3b0b9c2b9c80c6a99fdb5850d49043f54f6ca5d +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/812e8a33efb8f7f36da290a9ba6382e7 +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/295e5219f1c6e22646d840d573df662fb5304ce2634b865607348a3c75fe8ddd8bb6cd16d9446ff64eecdfcdb9796d702807013c08fcf24316e28800361d1929 +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/18f5cf23c5b83bf6d56c343fdeb97e3c +OpenBLAS.v0.3.23+5.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/fc140a43d134d65b752f41e96062883dfdb170f168612d7f624e72990d66c30d2e3e6379364d8a6fa27e39c6380d8cdffe3d3fff0a32d0b85d5453a7d98fdf4f +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran3.tar.gz/md5/aaa467004ff0e3a439d56143bf4fc7dc +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/aa82a5cc564aac5e430a6b842998e6b6d3c960b2ef31b330e8ac42455c556aca5529d709409d165f9268b7586840632493e2aeaee37407837a2522a1433568f3 +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran4.tar.gz/md5/301898a84303e00ee02d8b68876d92e5 +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/6c7b59fcfca9b67f15db8706de30cd06d28b058d736129f847f986d8cf2f3b8453936e714aef48f2d563725bfb1000de096d51c73a65786cbe3119ef0dd91a63 +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran5.tar.gz/md5/9df5e9390a965327d53c8a7419e35a9e +OpenBLAS.v0.3.23+5.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/ba93faad7b50ab168061420d5ae0e09dad52c6133fa65b9b7717302ea23e2b8778e8e88dd583a8299c8c6105977dcf78578fc79e88434add6228909d4062915c +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran3.tar.gz/md5/efaa4403801599f45b01f1388de88262 +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/cddf570cdef3cba4c29ebfecf3c3cf5fd31c3517524eb0c646d8aabe0d9d5856ad29132ca456122654f58444a02f2b3687b74a6818ab3d0882dd7f691ab8709a +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran4.tar.gz/md5/605bc2f322d4c0fd8758733c818f33d7 +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/083a0c1caf378d349e7da99dba441bf81ab45cc23241c6b367938f9dcc07fa3b5dbca5b6c7ed9b0dd55f665b733bdfd64475b2a5f5b61aa8e9775fcae7e0724d +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran5.tar.gz/md5/93a11e5ba14eafcbdde5ed097833e6d2 +OpenBLAS.v0.3.23+5.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/b903fd48c4d5628d1de12b0439c568f24be2ce4a3f413f39957a394940a227a3a16aaad54601082dbbe42f11a2ae742b2485239464c71640677f445b32c342fd +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran3.tar.gz/md5/8c78e914758ed162faa1038388407617 +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran3.tar.gz/sha512/829e3e9cce5d8df81bb2a88547793755aef74fc11bce8cdb28502264c42752ab0e2ef559f604b376b169b2d7c332e94a64c87e2514b8bba1db50d5d3280ac95f +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran4.tar.gz/md5/f6ef4b9521212e24b088f874acb7d926 +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran4.tar.gz/sha512/8f953ab32a9b801332698df37bd8f838d6ef01f320824dc0bcd95b0f4ec97dd700e3f6d39df6c19a6ca7844f9b2fb8fb4e2aabec17a9135fe1412bb2fd2c8e12 +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran5.tar.gz/md5/80501c5b7407177b18c84c0559340bd2 +OpenBLAS.v0.3.23+5.x86_64-linux-musl-libgfortran5.tar.gz/sha512/595eb78563425fc42bc4685b3a09bffa8df653ac0e73c879eecd5d7cc0f1dc3183055236764f32e7909ece36cf662f13ec41f8b082cdbd7941965de6f4df14b9 +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/23f4fd43aa2898c58594912acb080bd6 +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/7c73f26e73c2f47c9be2a7c4275432ed9e7a5d41828ab6299b95f6553a69262bceedb8f8e73d0cf164687e89413f35856b1d949b497659e6a552b6ac54a55971 +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/28155c8edfaa160258216a25ffcd891a +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/c7c861345442308bafbe10781e3b5c2e4057cb82152f66bdde941b24d13336db0dc7c18b8174c0beb6c3333a518adb43046a6249c57a0b9ffdabe07598e06f0b +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/1bbcda3a44c961b710ecd14a77e6fcc2 +OpenBLAS.v0.3.23+5.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/62505812e22be03af77809ff8d257f6afa007f6e34e98c54ce2943777bbe7c84160833047c348dc6087a59d1d63f0cf768e28e4a2010c7f76db2c24c1564ac6c +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/dc6a09a63cd26b0a63bd140e2c3be5d6 +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/aed98d4c2e41a66cbc9530841618a201dceb08feab79a2e429444fbee1fdc5fde3e3c716e5792661cbd42a49fcbb6044d10c5fcbc352d39c1bb4353862f29660 +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/c27de85153c436e8588962d3c204c31c +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/cee528de9a1f06f42c2abd6aa4d3bc3ba2472e0ba1203c562c614d250b2ba54aa2cbb011c9590219012d3f52f62e6622aac5347e61e780ea873d3ad749d617b3 +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/c78a85d643c561483a60bb00a8156192 +OpenBLAS.v0.3.23+5.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/6b7d270388c1a13433b6f7f425f6be0d3a2abc20bf3964995be80f8641e4e5b7c57303ff2dc79f4acc700dbc3ccc6bdaa3fb741972cc719c34ca8722ff22d464 +openblas-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/md5/4e30022e79990d5a6fa008e099a3ec56 openblas-394a9fbafe9010b76a2615c562204277a956eb52.tar.gz/sha512/3d1a096a738aa70c6c6c15acb9ac7fb77f3c8f9684c7f22dac1ceb7921c85131e3a7e55c893b6aed01f85f1bdff124d0b3a3fae3ca2dc5c0aae192c38c012417 diff --git a/deps/openblas.mk b/deps/openblas.mk index 6be017b967f94..6c3023f6ee8d1 100644 --- a/deps/openblas.mk +++ b/deps/openblas.mk @@ -105,7 +105,17 @@ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-m1-4003.patch-applied: $(BUILDDIR)/$(OP patch -p1 -f < $(SRCDIR)/patches/openblas-m1-4003.patch echo 1 > $@ -$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-m1-4003.patch-applied +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-asum-avx512.patch-applied: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-m1-4003.patch-applied + cd $(BUILDDIR)/$(OPENBLAS_SRC_DIR) && \ + patch -p1 -f < $(SRCDIR)/patches/openblas-asum-avx512.patch + echo 1 > $@ + +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-casum-fallback-fix.patch-applied: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-asum-avx512.patch-applied + cd $(BUILDDIR)/$(OPENBLAS_SRC_DIR) && \ + patch -p1 -f < $(SRCDIR)/patches/openblas-casum-fallback-fix.patch + echo 1 > $@ + +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-casum-fallback-fix.patch-applied echo 1 > $@ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-compiled: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured diff --git a/deps/patches/openblas-asum-avx512.patch b/deps/patches/openblas-asum-avx512.patch new file mode 100644 index 0000000000000..64ec6b4e42233 --- /dev/null +++ b/deps/patches/openblas-asum-avx512.patch @@ -0,0 +1,68 @@ +From 9019bc494514a74c2042152cdca0a36adea7b42f Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Sat, 4 Nov 2023 22:10:06 +0100 +Subject: [PATCH] Use SkylakeX ?ASUM microkernel for Cooperlake/Sapphirerapids + as well + +--- + kernel/x86_64/casum.c | 2 +- + kernel/x86_64/dasum.c | 2 +- + kernel/x86_64/sasum.c | 2 +- + kernel/x86_64/zasum.c | 2 +- + 4 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/kernel/x86_64/casum.c b/kernel/x86_64/casum.c +index 60feec0ce..e4d054311 100644 +--- a/kernel/x86_64/casum.c ++++ b/kernel/x86_64/casum.c +@@ -4,7 +4,7 @@ + #define ABS_K(a) ((a) > 0 ? (a) : (-(a))) + #endif + +-#if defined(SKYLAKEX) ++#if defined(SKYLAKEX) || defined(COOPERLAKE) || defined(SAPPHIRERAPIDS) + #include "casum_microk_skylakex-2.c" + #endif + +diff --git a/kernel/x86_64/dasum.c b/kernel/x86_64/dasum.c +index a9c40f38f..0147c6978 100644 +--- a/kernel/x86_64/dasum.c ++++ b/kernel/x86_64/dasum.c +@@ -4,7 +4,7 @@ + #define ABS_K(a) ((a) > 0 ? (a) : (-(a))) + #endif + +-#if defined(SKYLAKEX) ++#if defined(SKYLAKEX) || defined(COOPERLAKE) || defined(SAPPHIRERAPIDS) + #include "dasum_microk_skylakex-2.c" + #elif defined(HASWELL) || defined(ZEN) + #include "dasum_microk_haswell-2.c" +diff --git a/kernel/x86_64/sasum.c b/kernel/x86_64/sasum.c +index 37a92468f..3f22cb97a 100644 +--- a/kernel/x86_64/sasum.c ++++ b/kernel/x86_64/sasum.c +@@ -9,7 +9,7 @@ + + #endif + +-#if defined(SKYLAKEX) ++#if defined(SKYLAKEX) || defined(COOPERLAKE) || defined(SAPPHIRERAPIDS) + #include "sasum_microk_skylakex-2.c" + #elif defined(HASWELL) || defined(ZEN) + #include "sasum_microk_haswell-2.c" +diff --git a/kernel/x86_64/zasum.c b/kernel/x86_64/zasum.c +index 80e95a2c8..3f17ab1cf 100644 +--- a/kernel/x86_64/zasum.c ++++ b/kernel/x86_64/zasum.c +@@ -4,7 +4,7 @@ + #define ABS_K(a) ((a) > 0 ? (a) : (-(a))) + #endif + +-#if defined(SKYLAKEX) ++#if defined(SKYLAKEX) || defined(COOPERLAKE) || defined(SAPPHIRERAPIDS) + #include "zasum_microk_skylakex-2.c" + #endif + +-- +2.50.1 + diff --git a/deps/patches/openblas-casum-fallback-fix.patch b/deps/patches/openblas-casum-fallback-fix.patch new file mode 100644 index 0000000000000..eb9dea864f9a5 --- /dev/null +++ b/deps/patches/openblas-casum-fallback-fix.patch @@ -0,0 +1,79 @@ +From f8ad5344c210960fc399ca5b0ad8559ab5ca253e Mon Sep 17 00:00:00 2001 +From: Bart Oldeman +Date: Fri, 17 Nov 2023 23:49:34 +0000 +Subject: [PATCH] Fix casum fallback kernel. + +This kernel is only used on Skylake+ if the kernel with AVX512 +intrinsics can't be used, but used the variable x1 incorrectly +in the tail end of the loop, as it is still at the initial +value instead of where x points to. + +This caused 55 "other error"s in the LAPACK tests +(https://github.com/OpenMathLib/OpenBLAS/issues/4282) + +This change makes casum.c as similar as possible as zasum.c, +because zasum.c does this correctly. +--- + kernel/x86_64/casum.c | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/kernel/x86_64/casum.c b/kernel/x86_64/casum.c +index e4d054311..28d78d279 100644 +--- a/kernel/x86_64/casum.c ++++ b/kernel/x86_64/casum.c +@@ -9,12 +9,12 @@ + #endif + + #ifndef HAVE_CASUM_KERNEL +-static FLOAT casum_kernel(BLASLONG n, FLOAT *x1) ++static FLOAT casum_kernel(BLASLONG n, FLOAT *x) + { + + BLASLONG i=0; + BLASLONG n_8 = n & -8; +- FLOAT *x = x1; ++ FLOAT *x1 = x; + FLOAT temp0, temp1, temp2, temp3; + FLOAT temp4, temp5, temp6, temp7; + FLOAT sum0 = 0.0; +@@ -24,14 +24,14 @@ static FLOAT casum_kernel(BLASLONG n, FLOAT *x1) + FLOAT sum4 = 0.0; + + while (i < n_8) { +- temp0 = ABS_K(x[0]); +- temp1 = ABS_K(x[1]); +- temp2 = ABS_K(x[2]); +- temp3 = ABS_K(x[3]); +- temp4 = ABS_K(x[4]); +- temp5 = ABS_K(x[5]); +- temp6 = ABS_K(x[6]); +- temp7 = ABS_K(x[7]); ++ temp0 = ABS_K(x1[0]); ++ temp1 = ABS_K(x1[1]); ++ temp2 = ABS_K(x1[2]); ++ temp3 = ABS_K(x1[3]); ++ temp4 = ABS_K(x1[4]); ++ temp5 = ABS_K(x1[5]); ++ temp6 = ABS_K(x1[6]); ++ temp7 = ABS_K(x1[7]); + + sum0 += temp0; + sum1 += temp1; +@@ -43,12 +43,12 @@ static FLOAT casum_kernel(BLASLONG n, FLOAT *x1) + sum2 += temp6; + sum3 += temp7; + +- x+=8; ++ x1+=8; + i+=4; + } + + while (i < n) { +- sum4 += (ABS_K(x1[0]) + ABS_K(x1[1])); ++ sum4 += ABS_K(x1[0]) + ABS_K(x1[1]); + x1 += 2; + i++; + } +-- +2.50.1 + diff --git a/doc/src/devdocs/eval.md b/doc/src/devdocs/eval.md index 8f2fd68159676..21ec343f7f6be 100644 --- a/doc/src/devdocs/eval.md +++ b/doc/src/devdocs/eval.md @@ -62,25 +62,11 @@ The 10,000 foot view of the whole process is as follows: ## [Parsing](@id dev-parsing) -The Julia parser is a small lisp program written in femtolisp, the source-code for which is distributed -inside Julia in [src/flisp](https://github.com/JuliaLang/julia/tree/master/src/flisp). - -The interface functions for this are primarily defined in [`jlfrontend.scm`](https://github.com/JuliaLang/julia/blob/master/src/jlfrontend.scm). -The code in [`ast.c`](https://github.com/JuliaLang/julia/blob/master/src/ast.c) handles this handoff -on the Julia side. - -The other relevant files at this stage are [`julia-parser.scm`](https://github.com/JuliaLang/julia/blob/master/src/julia-parser.scm), -which handles tokenizing Julia code and turning it into an AST, and [`julia-syntax.scm`](https://github.com/JuliaLang/julia/blob/master/src/julia-syntax.scm), -which handles transforming complex AST representations into simpler, "lowered" AST representations -which are more suitable for analysis and execution. - -If you want to test the parser without re-building Julia in its entirety, you can run the frontend -on its own as follows: - - $ cd src - $ flisp/flisp - > (load "jlfrontend.scm") - > (jl-parse-file "") +By default, Julia uses [JuliaSyntax.jl](https://github.com/JuliaLang/JuliaSyntax.jl) to produce the +AST. Historically, it used a small lisp program written in femtolisp, the source-code for which is +distributed inside Julia in [src/flisp](https://github.com/JuliaLang/julia/tree/master/src/flisp). +If the `JULIA_USE_FLISP_PARSER` environment variable is set to `1`, the old parser will be used +instead. ## [Macro Expansion](@id dev-macro-expansion) diff --git a/src/cgutils.cpp b/src/cgutils.cpp index d560ad47ff7aa..5a509428f3847 100644 --- a/src/cgutils.cpp +++ b/src/cgutils.cpp @@ -638,13 +638,13 @@ static Value *emit_struct_gep(jl_codectx_t &ctx, Type *lty, Value *base, unsigne static Type *_julia_struct_to_llvm(jl_codegen_params_t *ctx, LLVMContext &ctxt, jl_value_t *jt, bool *isboxed, bool llvmcall=false); -static Type *_julia_type_to_llvm(jl_codegen_params_t *ctx, LLVMContext &ctxt, jl_value_t *jt, bool *isboxed) +static Type *_julia_type_to_llvm(jl_codegen_params_t *ctx, LLVMContext &ctxt, jl_value_t *jt, bool *isboxed, bool no_boxing) { // this function converts a Julia Type into the equivalent LLVM type if (isboxed) *isboxed = false; if (jt == (jl_value_t*)jl_bottom_type) return getVoidTy(ctxt); - if (jl_is_concrete_immutable(jt)) { + if (jl_is_concrete_immutable(jt) || no_boxing) { if (jl_datatype_nbits(jt) == 0) return getVoidTy(ctxt); Type *t = _julia_struct_to_llvm(ctx, ctxt, jt, isboxed); @@ -657,13 +657,20 @@ static Type *_julia_type_to_llvm(jl_codegen_params_t *ctx, LLVMContext &ctxt, jl static Type *julia_type_to_llvm(jl_codectx_t &ctx, jl_value_t *jt, bool *isboxed) { - return _julia_type_to_llvm(&ctx.emission_context, ctx.builder.getContext(), jt, isboxed); + return _julia_type_to_llvm(&ctx.emission_context, ctx.builder.getContext(), jt, isboxed, false); } extern "C" JL_DLLEXPORT_CODEGEN Type *jl_type_to_llvm_impl(jl_value_t *jt, LLVMContextRef ctxt, bool *isboxed) { - return _julia_type_to_llvm(NULL, *unwrap(ctxt), jt, isboxed); + return _julia_type_to_llvm(NULL, *unwrap(ctxt), jt, isboxed, false); +} + + +extern "C" JL_DLLEXPORT_CODEGEN +Type *jl_struct_to_llvm_impl(jl_value_t *jt, LLVMContextRef ctxt, bool *isboxed) +{ + return _julia_type_to_llvm(NULL, *unwrap(ctxt), jt, isboxed, true); } @@ -3086,6 +3093,7 @@ static void init_bits_value(jl_codectx_t &ctx, Value *newv, Value *v, MDNode *tb static void init_bits_cgval(jl_codectx_t &ctx, Value *newv, const jl_cgval_t& v, MDNode *tbaa) { // newv should already be tagged + newv = maybe_decay_tracked(ctx, newv); if (v.ispointer()) { emit_memcpy(ctx, newv, jl_aliasinfo_t::fromTBAA(ctx, tbaa), v, jl_datatype_size(v.typ), sizeof(void*)); } diff --git a/src/codegen-stubs.c b/src/codegen-stubs.c index b48ad7b98791f..26cf9229b6416 100644 --- a/src/codegen-stubs.c +++ b/src/codegen-stubs.c @@ -97,6 +97,8 @@ JL_DLLEXPORT LLVMOrcThreadSafeModuleRef jl_get_llvm_module_fallback(void *native JL_DLLEXPORT void *jl_type_to_llvm_fallback(jl_value_t *jt, LLVMContextRef llvmctxt, bool_t *isboxed) UNAVAILABLE +JL_DLLEXPORT void *jl_struct_to_llvm_fallback(jl_value_t *jt, LLVMContextRef llvmctxt, bool_t *isboxed) UNAVAILABLE + JL_DLLEXPORT jl_value_t *jl_get_libllvm_fallback(void) JL_NOTSAFEPOINT { return jl_nothing; diff --git a/src/codegen.cpp b/src/codegen.cpp index 20a6240a926d0..a7aeccfd79dcc 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -6553,8 +6553,11 @@ static Function* gen_cfun_wrapper( ctx.builder.ClearInsertionPoint(); if (aliasname) { - GlobalAlias::create(cw->getValueType(), cw->getType()->getAddressSpace(), + auto alias = GlobalAlias::create(cw->getValueType(), cw->getType()->getAddressSpace(), GlobalValue::ExternalLinkage, aliasname, cw, M); + if(ctx.emission_context.TargetTriple.isOSBinFormatCOFF()) { + alias->setDLLStorageClass(GlobalValue::DLLStorageClassTypes::DLLExportStorageClass); + } } if (nest) { diff --git a/src/gf.c b/src/gf.c index 1f87a3035076e..4dc87cf3bb183 100644 --- a/src/gf.c +++ b/src/gf.c @@ -112,7 +112,7 @@ static int8_t jl_cachearg_offset(jl_methtable_t *mt) static uint_t speccache_hash(size_t idx, jl_svec_t *data) { - jl_method_instance_t *ml = (jl_method_instance_t*)jl_svecref(data, idx); + jl_method_instance_t *ml = (jl_method_instance_t*)jl_svecref(data, idx); // This must always happen inside the lock jl_value_t *sig = ml->specTypes; if (jl_is_unionall(sig)) sig = jl_unwrap_unionall(sig); @@ -121,6 +121,8 @@ static uint_t speccache_hash(size_t idx, jl_svec_t *data) static int speccache_eq(size_t idx, const void *ty, jl_svec_t *data, uint_t hv) { + if (idx >= jl_svec_len(data)) + return 0; // We got a OOB access, probably due to a data race jl_method_instance_t *ml = (jl_method_instance_t*)jl_svecref(data, idx); jl_value_t *sig = ml->specTypes; if (ty == sig) diff --git a/src/jl_exported_funcs.inc b/src/jl_exported_funcs.inc index ee255a0e1a876..c63f3de48a1fd 100644 --- a/src/jl_exported_funcs.inc +++ b/src/jl_exported_funcs.inc @@ -558,6 +558,7 @@ YY(jl_dump_llvm_opt) \ YY(jl_dump_fptr_asm) \ YY(jl_get_function_id) \ + YY(jl_struct_to_llvm) \ YY(jl_type_to_llvm) \ YY(jl_getUnwindInfo) \ YY(jl_get_libllvm) \ diff --git a/src/llvm-multiversioning.cpp b/src/llvm-multiversioning.cpp index dc00f2332b477..157800e5b26a6 100644 --- a/src/llvm-multiversioning.cpp +++ b/src/llvm-multiversioning.cpp @@ -674,6 +674,7 @@ void CloneCtx::rewrite_alias(GlobalAlias *alias, Function *F) trampoline->removeFnAttr("julia.mv.reloc"); trampoline->removeFnAttr("julia.mv.clones"); trampoline->addFnAttr("julia.mv.alias"); + trampoline->setDLLStorageClass(alias->getDLLStorageClass()); alias->eraseFromParent(); uint32_t id; diff --git a/src/processor_arm.cpp b/src/processor_arm.cpp index 79975a5bde70a..55fc74c425b76 100644 --- a/src/processor_arm.cpp +++ b/src/processor_arm.cpp @@ -1871,12 +1871,55 @@ const std::pair &jl_get_llvm_disasm_target(void) return res; } +#ifndef __clang_gcanalyzer__ std::vector jl_get_llvm_clone_targets(void) { - if (jit_targets.empty()) - jl_error("JIT targets not initialized"); +auto &cmdline = get_cmdline_targets(); + check_cmdline(cmdline, true); + llvm::SmallVector, 0> image_targets; + for (auto &arg: cmdline) { + auto data = arg_target_data(arg, image_targets.empty()); + image_targets.push_back(std::move(data)); + } + auto ntargets = image_targets.size(); + if (image_targets.empty()) + jl_error("No targets specified"); std::vector res; - for (auto &target: jit_targets) { + // Now decide the clone condition. + for (size_t i = 1; i < ntargets; i++) { + auto &t = image_targets[i]; + if (t.en.flags & JL_TARGET_CLONE_ALL) + continue; + auto &features0 = image_targets[t.base].en.features; + // Always clone when code checks CPU features + t.en.flags |= JL_TARGET_CLONE_CPU; + static constexpr uint32_t clone_fp16[] = {Feature::fp16fml,Feature::fullfp16}; + for (auto fe: clone_fp16) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_FLOAT16; + break; + } + } + // The most useful one in general... + t.en.flags |= JL_TARGET_CLONE_LOOP; +#ifdef _CPU_ARM_ + static constexpr uint32_t clone_math[] = {Feature::vfp3, Feature::vfp4, Feature::neon}; + for (auto fe: clone_math) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_MATH; + break; + } + } + static constexpr uint32_t clone_simd[] = {Feature::neon}; + for (auto fe: clone_simd) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_SIMD; + break; + } + } +#endif + } + for (auto &target: image_targets) { auto features_en = target.en.features; auto features_dis = target.dis.features; for (auto &fename: feature_names) { @@ -1896,6 +1939,8 @@ std::vector jl_get_llvm_clone_targets(void) } return res; } +#endif + extern "C" int jl_test_cpu_feature(jl_cpu_feature_t feature) { diff --git a/src/processor_fallback.cpp b/src/processor_fallback.cpp index 603af8d56a3bb..6fe0e2f87b376 100644 --- a/src/processor_fallback.cpp +++ b/src/processor_fallback.cpp @@ -145,12 +145,26 @@ const std::pair &jl_get_llvm_disasm_target(void) return res; } +#ifndef __clang_gcanalyzer__ extern "C" std::vector jl_get_llvm_clone_targets(void) { - if (jit_targets.empty()) - jl_error("JIT targets not initialized"); + auto &cmdline = get_cmdline_targets(); + check_cmdline(cmdline, true); + llvm::SmallVector, 0> image_targets; + for (auto &arg: cmdline) { + auto data = arg_target_data(arg, image_targets.empty()); + image_targets.push_back(std::move(data)); + } + auto ntargets = image_targets.size(); + // Now decide the clone condition. + for (size_t i = 1; i < ntargets; i++) { + auto &t = image_targets[i]; + t.en.flags |= JL_TARGET_CLONE_ALL; + } + if (image_targets.empty()) + jl_error("No image targets found"); std::vector res; - for (auto &target: jit_targets) { + for (auto &target: image_targets) { jl_target_spec_t ele; std::tie(ele.cpu_name, ele.cpu_features) = get_llvm_target_str(target); ele.data = serialize_target_data(target.name, target.en.features, @@ -161,6 +175,7 @@ extern "C" std::vector jl_get_llvm_clone_targets(void) } return res; } +#endif JL_DLLEXPORT jl_value_t *jl_get_cpu_name(void) { diff --git a/src/processor_x86.cpp b/src/processor_x86.cpp index 57582121f29fe..03d7ae21145bb 100644 --- a/src/processor_x86.cpp +++ b/src/processor_x86.cpp @@ -1095,13 +1095,74 @@ extern "C" JL_DLLEXPORT const std::pair &jl_get_llvm_di {feature_masks, 0}, {{}, 0}, 0}); return res; } - +#ifndef __clang_gcanalyzer__ extern "C" JL_DLLEXPORT std::vector jl_get_llvm_clone_targets(void) { - if (jit_targets.empty()) - jl_error("JIT targets not initialized"); + auto &cmdline = get_cmdline_targets(); + check_cmdline(cmdline, true); + llvm::SmallVector, 0> image_targets; + for (auto &arg: cmdline) { + auto data = arg_target_data(arg, image_targets.empty()); + image_targets.push_back(std::move(data)); + } + + auto ntargets = image_targets.size(); + // Now decide the clone condition. + for (size_t i = 1; i < ntargets; i++) { + auto &t = image_targets[i]; + if (t.en.flags & JL_TARGET_CLONE_ALL) + continue; + // Always clone when code checks CPU features + t.en.flags |= JL_TARGET_CLONE_CPU; + // The most useful one in general... + t.en.flags |= JL_TARGET_CLONE_LOOP; + auto &features0 = image_targets[t.base].en.features; + // Special case for KNL/KNM since they're so different + if (!(t.dis.flags & JL_TARGET_CLONE_ALL)) { + if ((t.name == "knl" || t.name == "knm") && + image_targets[t.base].name != "knl" && image_targets[t.base].name != "knm") { + t.en.flags |= JL_TARGET_CLONE_ALL; + break; + } + } + static constexpr uint32_t clone_math[] = {Feature::fma, Feature::fma4}; + static constexpr uint32_t clone_simd[] = {Feature::sse3, Feature::ssse3, + Feature::sse41, Feature::sse42, + Feature::avx, Feature::avx2, + Feature::vaes, Feature::vpclmulqdq, + Feature::sse4a, Feature::avx512f, + Feature::avx512dq, Feature::avx512ifma, + Feature::avx512pf, Feature::avx512er, + Feature::avx512cd, Feature::avx512bw, + Feature::avx512vl, Feature::avx512vbmi, + Feature::avx512vpopcntdq, Feature::avxvnni, + Feature::avx512vbmi2, Feature::avx512vnni, + Feature::avx512bitalg, Feature::avx512bf16, + Feature::avx512vp2intersect, Feature::avx512fp16}; + for (auto fe: clone_math) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_MATH; + break; + } + } + for (auto fe: clone_simd) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_SIMD; + break; + } + } + static constexpr uint32_t clone_fp16[] = {Feature::avx512fp16}; + for (auto fe: clone_fp16) { + if (!test_nbit(features0, fe) && test_nbit(t.en.features, fe)) { + t.en.flags |= JL_TARGET_CLONE_FLOAT16; + break; + } + } + } + if (image_targets.empty()) + jl_error("No targets specified"); std::vector res; - for (auto &target: jit_targets) { + for (auto &target: image_targets) { auto features_en = target.en.features; auto features_dis = target.dis.features; for (auto &fename: feature_names) { @@ -1121,6 +1182,7 @@ extern "C" JL_DLLEXPORT std::vector jl_get_llvm_clone_targets( } return res; } +#endif extern "C" int jl_test_cpu_feature(jl_cpu_feature_t feature) { diff --git a/src/task.c b/src/task.c index e14b4a3e74956..fab25cf95dac9 100644 --- a/src/task.c +++ b/src/task.c @@ -1094,12 +1094,7 @@ JL_DLLEXPORT jl_task_t *jl_new_task(jl_function_t *start, jl_value_t *completion jl_timing_task_init(t); #ifdef COPY_STACKS - if (!t->copy_stack) { -#if defined(JL_DEBUG_BUILD) - memset(&t->ctx, 0, sizeof(t->ctx)); -#endif - } - else { + if (t->copy_stack) { if (always_copy_stacks) memcpy(&t->ctx.copy_ctx, &ct->ptls->copy_stack_ctx, sizeof(t->ctx.copy_ctx)); else diff --git a/stdlib/Distributed/src/cluster.jl b/stdlib/Distributed/src/cluster.jl index 2444695f90afd..9467f8e798db1 100644 --- a/stdlib/Distributed/src/cluster.jl +++ b/stdlib/Distributed/src/cluster.jl @@ -1262,6 +1262,28 @@ function terminate_all_workers() end end +function choose_bind_addr() + # We prefer IPv4 over IPv6. + # + # We also prefer non-link-local over link-local. + # (This is because on HPC clusters, link-local addresses are usually not + # usable for communication between compute nodes. + # + # Therefore, our order of preference is: + # 1. Non-link-local IPv4 + # 2. Non-link-local IPv6 + # 3. Link-local IPv4 + # 4. Link-local IPv6 + addrs = getipaddrs() + i = something( + findfirst(ip -> !islinklocaladdr(ip) && ip isa IPv4, addrs), # first non-link-local IPv4 + findfirst(ip -> !islinklocaladdr(ip) && ip isa IPv6, addrs), # first non-link-local IPv6 + findfirst(ip -> ip isa IPv4, addrs), # first IPv4 + findfirst(ip -> ip isa IPv6, addrs), # first IPv6 + ) + return addrs[i] +end + # initialize the local proc network address / port function init_bind_addr() opts = JLOptions() @@ -1276,7 +1298,7 @@ function init_bind_addr() else bind_port = 0 try - bind_addr = string(getipaddr()) + bind_addr = string(choose_bind_addr()) catch # All networking is unavailable, initialize bind_addr to the loopback address # Will cause an exception to be raised only when used. diff --git a/stdlib/InteractiveUtils/src/InteractiveUtils.jl b/stdlib/InteractiveUtils/src/InteractiveUtils.jl index 095227a827c5a..17f32fa0df2a9 100644 --- a/stdlib/InteractiveUtils/src/InteractiveUtils.jl +++ b/stdlib/InteractiveUtils/src/InteractiveUtils.jl @@ -115,7 +115,7 @@ function versioninfo(io::IO=stdout; verbose::Bool=false) Note: This is an unofficial build, please report bugs to the project responsible for this build and not to the Julia project unless you can - reproduce the issue using official builds available at https://julialang.org/downloads + reproduce the issue using official builds available at https://julialang.org """ ) end diff --git a/stdlib/Logging/test/runtests.jl b/stdlib/Logging/test/runtests.jl index 65a8c4051f4e7..fc239ee9068d1 100644 --- a/stdlib/Logging/test/runtests.jl +++ b/stdlib/Logging/test/runtests.jl @@ -335,4 +335,47 @@ end end end +@testset "Logging when multithreaded" begin + n = 10000 + cmd = `$(Base.julia_cmd()) -t4 --color=no $(joinpath(@__DIR__, "threads_exec.jl")) $n` + fname = tempname() + @testset "Thread safety" begin + f = open(fname, "w") + @test success(run(pipeline(cmd, stderr=f))) + close(f) + end + + @testset "No tearing in log printing" begin + # Check for print tearing by verifying that each log entry starts and ends correctly + f = open(fname, "r") + entry_start = r"┌ (Info|Warning|Error): iteration" + entry_end = r"└ " + + open_entries = 0 + total_entries = 0 + for line in eachline(fname) + starts = count(entry_start, line) + starts > 1 && error("Interleaved logs: Multiple log entries started on one line") + if starts == 1 + startswith(line, entry_start) || error("Interleaved logs: Log entry started in the middle of a line") + open_entries += 1 + total_entries += 1 + end + + ends = count(entry_end, line) + starts == 1 && ends == 1 && error("Interleaved logs: Log entry started and and another ended on one line") + ends > 1 && error("Interleaved logs: Multiple log entries ended on one line") + if ends == 1 + startswith(line, entry_end) || error("Interleaved logs: Log entry ended in the middle of a line") + open_entries -= 1 + end + # Ensure no mismatched log entries + open_entries >= 0 || error("Interleaved logs") + end + + @test open_entries == 0 # Ensure all entries closed properly + @test total_entries == n * 3 # Ensure all logs were printed (3 because @debug is hidden) + end +end + end diff --git a/stdlib/OpenBLAS_jll/Project.toml b/stdlib/OpenBLAS_jll/Project.toml index 92d68acd099f6..921d5931e1ce8 100644 --- a/stdlib/OpenBLAS_jll/Project.toml +++ b/stdlib/OpenBLAS_jll/Project.toml @@ -1,6 +1,6 @@ name = "OpenBLAS_jll" uuid = "4536629a-c528-5b80-bd46-f80d51c5b363" -version = "0.3.23+4" +version = "0.3.23+5" [deps] # See note in `src/OpenBLAS_jll.jl` about this dependency. diff --git a/stdlib/Test/src/Test.jl b/stdlib/Test/src/Test.jl index 3493cfc5e2bd9..02cb9abf1282a 100644 --- a/stdlib/Test/src/Test.jl +++ b/stdlib/Test/src/Test.jl @@ -223,7 +223,8 @@ struct Error <: Result end if test_type === :test_error || test_type === :nontest_error bt_str = try # try the latest world for this, since we might have eval'd new code for show - Base.invokelatest(sprint, Base.show_exception_stack, bt; context=stdout) + # Apply REPL backtrace scrubbing to hide REPL internals, similar to how REPL.jl handles it + Base.invokelatest(sprint, Base.show_exception_stack, Base.scrub_repl_backtrace(bt); context=stdout) catch ex "#=ERROR showing exception stack=# " * try @@ -1488,6 +1489,10 @@ end trigger_test_failure_break(@nospecialize(err)) = ccall(:jl_test_failure_breakpoint, Cvoid, (Any,), err) +is_failfast_error(err::FailFastError) = true +is_failfast_error(err::LoadError) = is_failfast_error(err.error) # handle `include` barrier +is_failfast_error(err) = false + """ Generate the code for an `@testset` with a `let` argument. """ @@ -1581,7 +1586,7 @@ function testset_beginend_call(args, tests, source) # something in the test block threw an error. Count that as an # error in this test set trigger_test_failure_break(err) - if err isa FailFastError + if is_failfast_error(err) get_testset_depth() > 1 ? rethrow() : failfast_print() else record(ts, Error(:nontest_error, Expr(:tuple), err, Base.current_exceptions(), $(QuoteNode(source)))) @@ -1672,7 +1677,9 @@ function testset_forloop(args, testloop, source) # Something in the test block threw an error. Count that as an # error in this test set trigger_test_failure_break(err) - if !isa(err, FailFastError) + if is_failfast_error(err) + get_testset_depth() > 1 ? rethrow() : failfast_print() + else record(ts, Error(:nontest_error, Expr(:tuple), err, Base.current_exceptions(), $(QuoteNode(source)))) end end diff --git a/stdlib/Test/test/runtests.jl b/stdlib/Test/test/runtests.jl index 0388e2107e098..36020719bf62e 100644 --- a/stdlib/Test/test/runtests.jl +++ b/stdlib/Test/test/runtests.jl @@ -1296,7 +1296,7 @@ end @test occursin(expected, result) end end - @testset "failfast" begin + @testset "failfast begin-end" begin expected = r""" Test Summary: | Fail Total Time Foo | 1 1 \s*\d*.\ds @@ -1321,6 +1321,32 @@ end @test occursin(expected, result) end end + @testset "failfast for-loop" begin + expected = r""" + Test Summary: \| Fail Total +Time + Foo \| 1 1 \s*\d*\.\ds + 1 \| 1 1 \s*\d*\.\ds + """ + mktemp() do f, _ + write(f, + """ + using Test + + @testset "Foo" failfast=true begin + @testset "\$x" for x in 1:2 + @test false + end + @testset "Bar" begin + @test false + @test true + end + end + """) + cmd = `$(Base.julia_cmd()) --startup-file=no --color=no $f` + result = read(pipeline(ignorestatus(cmd), stderr=devnull), String) + @test occursin(expected, result) + end + end @testset "failfast passes to child testsets" begin expected = r""" Test Summary: | Fail Total Time diff --git a/stdlib/Unicode/test/runtests.jl b/stdlib/Unicode/test/runtests.jl index 5248bd1e1fd27..50468e868243c 100644 --- a/stdlib/Unicode/test/runtests.jl +++ b/stdlib/Unicode/test/runtests.jl @@ -284,6 +284,8 @@ end @test_throws BoundsError graphemes("äöüx", 2:5) @test_throws BoundsError graphemes("äöüx", 5:5) @test_throws ArgumentError graphemes("äöüx", 0:1) + + @test @allocated(length(graphemes("äöüx"))) == 0 end @testset "#3721, #6939 up-to-date character widths" begin diff --git a/test/abstractarray.jl b/test/abstractarray.jl index e7469a7a331ed..aa3e4a2e7c9cb 100644 --- a/test/abstractarray.jl +++ b/test/abstractarray.jl @@ -855,6 +855,26 @@ generic_map_tests(map, map!) # @test_throws BoundsError map!(+, ones(3), ones(2, 2), ones(2, 2)) end +@testset "#30624" begin + ### unstructured + @test map!(+, ones(3), ones(3), ones(3), [1]) == [3, 1, 1] + @test map!(+, ones(3), [1], ones(3), ones(3)) == [3, 1, 1] + @test map!(+, [1], [1], [], []) == [1] + @test map!(+, [[1]], [1], [], []) == [[1]] + + # TODO: decide if input axes & lengths should be validated + # @test_throws BoundsError map!(+, ones(1), ones(2)) + # @test_throws BoundsError map!(+, ones(1), ones(2, 2)) + + @test map!(+, ones(3), view(ones(2, 3), 1:2, 2:3), ones(3)) == [2, 2, 2] + @test map!(+, ones(3), ones(2, 2), ones(3)) == [2, 2, 2] + + ### structured (all mapped arguments are <:AbstractArray equal ndims > 1) + @test map!(+, ones(4), ones(2, 2), ones(2, 2)) == [2, 2, 2, 2] + @test map!(+, ones(4), ones(2, 2), ones(1, 2)) == [2, 2, 1, 1] + # @test_throws BoundsError map!(+, ones(3), ones(2, 2), ones(2, 2)) +end + test_UInt_indexing(TestAbstractArray) test_13315(TestAbstractArray) test_checksquare() diff --git a/test/intrinsics.jl b/test/intrinsics.jl index 3c49afe2c4d7e..7db7c36e61487 100644 --- a/test/intrinsics.jl +++ b/test/intrinsics.jl @@ -361,3 +361,16 @@ Base.show(io::IO, a::IntWrap) = print(io, "IntWrap(", a.x, ")") @test r2 isa IntWrap && r2.x === 103 === r[].x && r2 !== r[] end end)() + +@testset "issue #54548" begin + @inline passthrough(ptr::Core.LLVMPtr{T,A}) where {T,A} = Base.llvmcall((""" + define i32 addrspace(1)* @entry(i32 addrspace(1)* %0) #0 { + entry: + ret i32 addrspace(1)* %0 + } + + attributes #0 = { alwaysinline }""", "entry"), + Core.LLVMPtr{T,A}, Tuple{Core.LLVMPtr{T,A}}, ptr) + f(gws) = passthrough(Core.bitcast(Core.LLVMPtr{UInt32,1}, gws)) + f(C_NULL) +end diff --git a/test/math.jl b/test/math.jl index bd00f3417ecd3..146aab2cefd00 100644 --- a/test/math.jl +++ b/test/math.jl @@ -1463,6 +1463,14 @@ end end end +@testset "special function `::Real` fallback shouldn't recur without bound, issue #57789" begin + mutable struct Issue57789 <: Real end + Base.float(::Issue57789) = Issue57789() + for f ∈ (sin, sinpi, log, exp) + @test_throws MethodError f(Issue57789()) + end +end + # Test that sqrt behaves correctly and doesn't exhibit fp80 double rounding. # This happened on old glibc versions. # Test case from https://sourceware.org/bugzilla/show_bug.cgi?id=14032. diff --git a/test/precompile.jl b/test/precompile.jl index ac155bb5d7af2..178d8d0f6057f 100644 --- a/test/precompile.jl +++ b/test/precompile.jl @@ -590,7 +590,10 @@ precompile_test_harness(false) do dir error("the \"break me\" test failed") catch exc isa(exc, ErrorException) || rethrow() - occursin("ERROR: LoadError: break me", exc.msg) && rethrow() + # The LoadError shouldn't be surfaced but is printed to stderr, hence the `@test_warn` capture tests + occursin("LoadError: break me", exc.msg) && rethrow() + # The actual error that is thrown + occursin("Failed to precompile FooBar2", exc.msg) || rethrow() end # Test that trying to eval into closed modules during precompilation is an error diff --git a/test/strings/basic.jl b/test/strings/basic.jl index e7c65909fabc9..87e4e0b127119 100644 --- a/test/strings/basic.jl +++ b/test/strings/basic.jl @@ -1073,6 +1073,7 @@ let s = "∀x∃y", u = codeunits(s) @test_throws Base.CanonicalIndexError (u[1] = 0x00) @test collect(u) == b"∀x∃y" @test Base.elsize(u) == Base.elsize(typeof(u)) == 1 + @test similar(typeof(u), 3) isa Vector{UInt8} end # issue #24388