From 1360b3acc5f4e9f0b9236ac84d91fedd3c8933bd Mon Sep 17 00:00:00 2001 From: Elliot Saba Date: Mon, 6 Feb 2023 21:56:36 -0500 Subject: [PATCH 01/52] Restrict `path` to be an `AbstractString` in `lbt_forward()` Some users tried to pass a `dlopen()` handle into `lbt_forward()` which sadly works just fine, despite `ccall()` declaring its first argument as being a `Cstring`. I guess it's trivial to convert a `Ptr{Cvoid}` into a `Cstring`, so this just goes through. To protect against this, restrict `path` to be an `AbstractString`. (cherry picked from commit 849203173ffaa2f73a4f052e8a832e2c43dcf3b9) --- stdlib/LinearAlgebra/src/lbt.jl | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 From d0a717512f3bc1959bfedf343ab3b5d81668656b Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Wed, 8 Feb 2023 08:12:23 -0500 Subject: [PATCH 02/52] Update LLVM build to 14.0.6+2 (#48544) (cherry picked from commit 43c6f7568bed8577c3ff93a73c970451859fae9d) --- deps/checksums/clang | 232 ++++++++-------- deps/checksums/lld | 232 ++++++++-------- deps/checksums/llvm | 466 ++++++++++++++++---------------- deps/clang.version | 2 +- deps/lld.version | 2 +- deps/llvm-tools.version | 4 +- deps/llvm.version | 4 +- stdlib/libLLVM_jll/Project.toml | 2 +- 8 files changed, 471 insertions(+), 473 deletions(-) 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..c215798eaf19f 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+2.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/5344b22c67a05a0e8f7a2a66b14f7c8d +LLD.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/95f3772927a4770d36817d3c681ea76ecc2f94256fde7866ce688b6631710b4d044952340f2cff08a81b1d8871beb242d0e4e980b5b4455a1b74cbb0786c51d1 +LLD.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.tar.gz/md5/924d77f9440be4e13d88c8d59cb60ae3 +LLD.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.tar.gz/sha512/e26b186f49b0709b5f9ebb5485568a69b0bb078395071cb43c02a659dfbb8f25ce21b17806377ae2f8dbefe36bce1db8c29cec8cdcd140099bde76eda5585612 +LLD.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/9b5ff100b332d5f9fe67de97b635ca20 +LLD.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/2d5619d5db7ca68fa4a14693084bb76520cba1a3dcf608783899793eac296c653b84d3b88a559a93a0c95d92c58e4847c796a69207cce5899924381f308d73c9 +LLD.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/20a1e3619501ed9b45344b98551359bc +LLD.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/e517788ae12045fe2647613f7654bd6178af842c2c284178216b87cda67a97fa1f9002292bb4f792de48f3296fff477cb3a80b114be40cf2c6c502d81f350abd +LLD.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/70add6dad0a85be2f44aad61a50dac37 +LLD.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/78062a9f2a7bea15c6230d03011ec6257dc015c76cec0023edbb85709cdfe3a97e2e28fa96045d6b42d8f2849d88d19a2d8e936bb53aa5638dcde17472c1181b +LLD.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/1e4bf7f0827d9056c906fa2b09b381dc +LLD.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/6a06c95a4ad191e013b3ffb15fa8da49ad2c448ca8f17db3079969575b9fda01d98db84bb26eb2e0ad570d3de4f9a07cdc8f0784cf18be8271025bf724eead4d +LLD.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/24e3af3ecf857aafc759ef40b3a52825 +LLD.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/dd1c825a7689c9ffc49365529a5320b618209e617df4720d6664b28cad1d03ea5a1209ab43a356e2871b0d8e6d2fcca82ba75202762046ed6582ed148a387c9f +LLD.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/159d8aeac0680f895b83cb8574ec65df +LLD.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/f219694d0508eccda753d7ae374cbd1b06ceb76c26569ebcf09932ff710f49f5bb789b4cd516ab92e56f9eca727d93a01cfe0940e655029451f3b1e38ef43c82 +LLD.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/2900777df5ec9d27cb05ef802e8256a1 +LLD.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/300f899063db9d3c915413d396a888174b3925876e1180ff5e614ce6f725b859dc483faae836176b95d8e88cdfb0905c7495a692dc626e38de1facf9a28e884f +LLD.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/eee9f3818f04d3ad29d618856fb79659 +LLD.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/5ca354aca71f16304ddabcef24b63fae0716a1bfef1c5d96029175964a7486c7da2d4f0b927e3dd13afddec78ff8ea294464145c9ee19a010433114d2f7c18d5 +LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/d5b3edd7d22e2c65042404330bd3e591 +LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/54af1917db010a0032aa19e7e20ca096609a45b01968353af03121b6809fcac53d414d594ed1127016667ad331c7e76b8ffd305bb186f7c80a786676ee1132e1 +LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/351534948a7507501af4ba6c17fdfa87 +LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/0b4f4265f20414d8d1417913f38cd853fac91a097ac6be297e5472fa05850277dd316e0c91481529a9362873c53e1ff5eddf4c4d2f1bb25c2f8e15a80b5e6497 +LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/4d3ce4de0f8f21f2f2ff75acf20b0362 +LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/d3463be7353570543ef6613dd5e5fdd8790f4cd24362991039178755e9cbfa4b67123219e06b8eb3749dd31b7f759cb899f6d76f5a5155717e1fd83e1325ed65 +LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/847cffc463372eb8ee7ec4ab0e672227 +LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/24596a775492d8f6ced29caff28859a600a5f7c38e6d48e4f9ab0200f28081e43f528c2892c895cea44083331273752545f96c542e0c56209d90743affeb223d +LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/2c932f1a9fd559b9f49d3e0f92ac3302 +LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/f4efb89a3af33817ded7adcbf758c47413f16a94b06978be43ed4b397d212d7da04429d003f2298dcf2ae7ff67614ce83e3d159f0e2c9eaa9268ff5a4c9ec113 +LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/ba7dc5b1b3753b24f15c334a6c25b5c1 +LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/3f09d1e4befbdda185e5e9df153a7730c25d84063ab83f3fefffddab7f0d8402cf923b69cd72bef2d02f3b1fd166924ca0c557c8e2bf4fea8bbb82c80474e387 +LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/18b16c9c5cafbffc375d512b9f84363b +LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/4e17f053e58bad9974002fb1c58ea0546cc1acd475ce253739d2de9113912f15a130ba8cecaef3017202fdd7f5ad5fd9977140d766f659d43abaaa6cf53b23ea +LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/54fa708a76f4627f267d87a9d8f78a4b +LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/7b0ea14824e5144ef05087f88c8ac477a159f76fcb1f84cb59ca98cc7f2c0993ae9c4b57749a395c7ae90f7f37c6a4c4c14ee8fc381859d47736a87acc233349 +LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/576e9e5765a3696e0cd3153ebbef6147 +LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/c643fab9837dbb02ff9cb9202e53766b03649855410e7da15e7e9fe54f6f15b7172fb2d336fc68b315401b8b3f8e8b597204b739592cc2e7cd548a78a3baf8ec +LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/065255972031a362edb3f5fb74e530c6 +LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/a7411c9f44ce798bc5e1f9838b73efeeb97d338a50b605c93918b85c0848cdbccc71daedcaeb4348c7d1236a3b23680f20ab46dce1b2fdd156b29b3c3677f971 +LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/b0ba1697475e35735d0d94389b1524e6 +LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/aba3b866c41c821b9f26a5cc32910e2f976a596b388a14a0dca9326ad72f1d346208bb18f478a0919471e10d578c41190236a6a8cdb94fe394c7e7af120678f0 +LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/1c7e5428cf571721bb320677189f1545 +LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/a8ea619b58e49db4acaec9a0feb5e5aa93b4fc7d1d6190c85c76661b3f833d5fa988692c42e643590a49a804b928a3799c91ac4e0b5df7a826ae76446d8fe8fe +LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/1ccf9badd8d0cfdcad55e080175411f9 +LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/b48da6e3d6513397f861dd694dd2129c0bcc86e73cc44fb079f9e27a715a27ef568078240f5afec0220514221e3fe588854cfc390c432e5d06abffcade1488ed +LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/38d64d93d5d0358135cf98a6399f1eb8 +LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/8af6b61dd4e4b32bfb17e91aabcad7ca31044b31b0aa124bc19185c2125b1f4408fbd865c3d14e56406159e4ba5d8a78d347036b1db09ddba34676eb05e22e1f +LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/9b8be38bed8a91dce3ef2bee57036d3c +LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/45e1eb6a49940fd3f77e8e22ac0cb34b7132466decc9bc893ab697e66becf9d1bf6c74a86509c71c8424d418eb7498b9fe843c913a1bc5ffb897fece178bf8a5 +LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/0b94c549ff012015384d50fba8c0821a +LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/81c31f243e66b7e61cf839647fb765305c6fee0393216846ed8ca4402c1115222e2392b1e5f737b48f4655f18177d97e08f50674b632638dcac537e87e8fa5fb +LLD.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/31f75615fd3219b630d2987e25f93a5b +LLD.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/1699aeea86bd8a1df53fc58770c34b87637ae621c48ac9831874734cd330ac67e845cb55af9077f18068cbd0b66f9f89cc82a286b098e0f44c7bd2b6b0fcef18 +LLD.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/418db3048ce54f8fa3a0f89a11f765ab +LLD.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/f1ecf8c0cb2c6be879e8a860592bcd317821fa2d89978f96175f3bb7c9a3a2aa261123c147dcf6c796c3212871398f5e7cfb5dc153ab503aa8004e6017b842a6 +LLD.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/8a70cbfe920fe7dbec2129f7c5b440b8 +LLD.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/e332ff1e1e2383d0bc01b178ae5ea44efc1986d919cbe9b13e8d4ce0980b5fa97232851d1f2e17b6b4bca0490775cfb00cc0efe0d588bcfbf10ac9e69faf3f8d +LLD.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/53117bd03ceeaabf93aaf0702c30e1e4 +LLD.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/3123e605d2ba1d7bc4fb4aeb15740b651cd09b75a6ea9eba22757a07ebc9dfaeff126bda912187ba2c16e89521d6f94ef53f587a61a67f4deec021479319e21e +LLD.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/0aa6ecc9753e17f8e45f4a63824998df +LLD.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/fd423adc752e338cce486c554b33432920950ccd87a02af9e92afcc415e0dfda141e17ea3a25abdfe2ef03ed9b0415cbc9fc4f099c65e5406a6663e06b707867 +LLD.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.tar.gz/md5/d2bf7a484c8fb31b3d72a18f6eacf042 +LLD.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/cd07d944f26b698a44dddcd0936189cbdd48b2edbb70cc84e9a267729fb672e1781356c56588770443c5523cc2c8900f81c9001be4e56595f6e2aac4a9ef36bb +LLD.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/21cfe7c71234c543e6ce99bd468602d4 +LLD.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/8c70edddf70231f53318781836ae329d20a869f0acac2f8994cb73a221734f8b5c34fe1f68442522a964cb014d972fa5b98773a65366ce02b497d57a23abf616 +LLD.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.tar.gz/md5/dde8dd2112180963e8b2d1c688553ced +LLD.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/704550b2aec1d73c1279eb1131b530e3309c796204845dc1da4b7132c612b862ccb3525a1d7a7af1483ec8cd211d8be532d3a49dde6c7a8e55c617bb3b665455 +LLD.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/c501233e2134da56034390a296684fda +LLD.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/5ef2bfd95647aefdc71b28fc018c3f3c3b5762ce6c8be7c136d56e01f47fe48c4bb99d913501916388d6bb46bd3d9a905efd04cda5b031def2f703942374fddd +LLD.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/8758e9198b98a72ef6c6546afb8f5551 +LLD.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/741d09735e3cef28f9e45aaeb0f715d312fcd92dca3ab9623cdb3215163c9dd68f7252842e3760f9a65470e4a6a666e58ae4da4bf57122d1a64dd70a3856debc +LLD.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/fb6abded431a1bf2c22a2d94d13d6cb9 +LLD.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/182e24978f298057c9d6f2299ef3165b1930c0d42c60215f01ea2ea57e0c864ffd98c80464ef340a34a89b158375746c9b1e063bc89955689a6fc31bc097a4a0 +LLD.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/036e3d82650c9d863c7a2ae6b98007cf +LLD.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/ccde6a4f3407966fa4522568d24d78afde26a5ebbe85708d0d6a28e0ed29ddf47ede86c2abf174c527bfdde53f461733bb2298c0828f5f2b529e390916999da7 +LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/b9fe932890276f6a4e1d315a573ec6e0 +LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/34f8f8b653cd1f56ff049d3f63212133f9cf07f4b0362ab2a2b7140436031c2a8802512c12b004299cecb0d0c8bf515bde38bf4b52dda57039d76ac948eb4577 +LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/f38c4d018cacd0021560e02c3039f5ff +LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/af2f2c901b4e707373a76b2b625f3835fa4573607399303b347e4e6ec401083ba7255c99044bdf853050e5b28fd9a785cd90e3aca0d7beb73406a056fb98fe0a +LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/e5a85e96fe144073b05796728af8c24f +LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/d4f97e23828700a34f0bc2e1000ffa2bf21e8b9879b9d114118bfd42406e65589a6e807337e38701e95a1064dc2924280997c7e342cca55c232e6d841bb40aaf +LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/e318117921ee0dc2d1f3e43931c6d420 +LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/7a5f264c8dd94734cd495e843854cb9c7cd57cf3fe29f08f21d6e7d690da535b95e4e9285df12d89134fcda6c5cf2df5b189d378106fa05f6fd5af92a2096755 +LLD.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/10a67e175285b206e86e1713a38be6a8 +LLD.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/6f1d6455db15a03b54289366970bf63c136630a75bf8a25ef6f68d25f621992e3b0b48b1e02942b7b9953eb3435fa48e54cb801fee69c40e8616b272c9e2194c +LLD.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.tar.gz/md5/a106b6b58bc5c8492334f540b0e427b0 +LLD.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.tar.gz/sha512/1d5340a1ffdefaa967af0fe1ac66f56e92fba7f85c5f63b783d224afc318394b3151514fc666c928ffa018db71dc2bc1e0b484a6e61918df9f3e971a4465cf81 +LLD.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/cc73a643641eb34a53a8c4dcc82dfa31 +LLD.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/7598cc478e25c6eb3328292aa6e50ae15454514790b6ae470fd492444018ba905df9e941846316907465c422be7fec0aee462cdc90c29d0dea09dff4d02f71ef +LLD.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/757b7170cc1213d01f0ff2a980372745 +LLD.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/f4a567cc1859b6cf85250e150131d8771b24a534469eb6ad6770f1e1594fd0bd2016cbeefed59dcacb50bc6328f8f462ad2200194afcf3f1eab8ae13eeeeb093 +LLD.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/f8f7b5a5ef2b93da4b1bf2932c098974 +LLD.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/f988ae43f3bfe56a3f6d54ac98420f053973406b07403bc850647698b23783cbfdc77f705299d2df114f7f58f6ef9d30a0eff789780d5e206c5dc5857a81f968 +LLD.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/9692fe8d0533df9243b6b9b49b158e9f +LLD.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/893c8fbe9483106fbf3b28f2490f1cf2faeceda29890f67f9d0adeb6d841dacf7b39300598c673b28157b1fe4a971e749bb71dc3df8e66983ed8ce9fd6973451 +LLD.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/ece7e11a288c20a156542bd31b3e642e +LLD.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/d032c3d738d9073ab92fab38ec47a45371e243963a5bd39a392be44e090189182be71f363ab8fc71116eb9d14835cae2bed70eb1a1ba5c6bda2972412719e0e7 +LLD.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/bec0b1fe84e4e754cf7a3f67362b2d87 +LLD.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/434030e81828df77b452e8d364359652266dedfa731395cc7cb5f41a8102ec614d1c147f25602a435c701c674095640279c59e3ab8ce3422a3694398880a2f7b +LLD.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/dadf9169ef4a6fde170430c5323cacf2 +LLD.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/cad9dd4973d83c6c46e32a04fe0b883d34c067922f14c569679dac9d8f04faeedbfc3aa4a17c6f3b461d12105fa7ef5dfaaccba3c5bdf518ffd06bcb44fe9132 +LLD.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/ad533cdc5d317ea7348efdb08724a9ad +LLD.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/baf8a1fb66ba41f88b42d0966f2b9f0a467dbbeed24f8854598916facdb6567130f379573851ffd137624687c9e5b6637b491a030f1a41916426360a1a9fcd8b +LLD.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/md5/cafa8a847b297701952fa1cb0e50af0b +LLD.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/sha512/d7f55d8696fe882e4c275ea40f3774d39a27cede475e135d6dfa7f7f7f4c6633062e0f75f8414963c37e92ca4889ba9f8ad7970a10364b4bbc30d225fa66c901 +LLD.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.tar.gz/md5/dd798db1f473b1ea2801258b98325969 +LLD.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.tar.gz/sha512/f4bba7ce56c6d8f55ca5777337d721bc2b663e9c2acd2e9636a86e6948815be1c0e7243c851811763d2c98a5918d454ebee6a48494b884aedce9afe8d9e1ffd5 +LLD.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/817201c1fd49c212881fb2de8971e0f4 +LLD.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/3cdbcd359859d22ecfba562367d3db522e6f25082b3bcdacfc29ad498398e86b2156a6c637aaad0010818771a815e6ab78c3e79227fc5e5de15b3c6de7544b4a +LLD.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/0253e0415d7fd046ece8a9f8b4583cde +LLD.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/f77c61f3a15d3782e1ec017580b782328dc0023b3c17d85a7deb5454e133de058778ac45703b509aaffdec4b58423e816803bb1bdca333b9846632b241f9595c +LLD.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/a2a132e6a57e03acb56a0dc4464f8511 +LLD.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/dfdd2755d341409bc12b097ce01848f99af24bb9bfeea0a687d016fd2167849f38ce4fb13fa87f7c70be0576771999e01f33c58883f56a50cd19ea7e963dffdd +LLD.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/eabba184b37f882bea4167870fa819f1 +LLD.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/2f75f55a31cf13a626070a2bbcb55c8eadeace453af70ed03377e5b4a2b9d7f0f7350aae0669e6702e3b650af6c0ca7c027534d99ae444431de5d3e6e7e53083 diff --git a/deps/checksums/llvm b/deps/checksums/llvm index 905a88f80a2e3..51bde45325990 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,121 @@ 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 llvmunwind-12.0.1.tar.xz/md5/4ec327cee517fdb1f6a20e83748e2c7b llvmunwind-12.0.1.tar.xz/sha512/847b6ba03010a43f4fdbfdc49bf16d18fd18474d01584712e651b11191814bf7c1cf53475021d9ee447ed78413202b4ed97973d7bdd851d3e49f8d06f55a7af4 diff --git a/deps/clang.version b/deps/clang.version index 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/lld.version b/deps/lld.version index 2b34a5d3012ad..d52ceb34552e2 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+2 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/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" From ceacba12d1a7e940cd8d44bd1799ea20012b0026 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Sun, 12 Feb 2023 18:02:37 -0500 Subject: [PATCH 03/52] Update checksums for llvm 14.0.6+2 (#48659) (cherry picked from commit ecfaef3394be9d22459c855969dcc655fc7e6e91) --- deps/checksums/llvm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/deps/checksums/llvm b/deps/checksums/llvm index 51bde45325990..d96d2da078b1f 100644 --- a/deps/checksums/llvm +++ b/deps/checksums/llvm @@ -262,5 +262,7 @@ libLLVM.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/2b 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 From 6213bb85e049b6afcf0fc7af414238b818affd6e Mon Sep 17 00:00:00 2001 From: Fredrik Ekre Date: Mon, 13 Feb 2023 17:23:04 +0100 Subject: [PATCH 04/52] [REPL] Meta-e: Don't execute the edited code when exiting editor (#46153) (cherry picked from commit aaab409957e32110cbc80318fee7215e616a555c) --- stdlib/REPL/src/LineEdit.jl | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) 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 From d43d055585f2689613a908afd9eb166d61d322e2 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Mon, 13 Feb 2023 17:06:17 -0500 Subject: [PATCH 05/52] Disable frame-pointer-optimiation on Linux (#48660) (cherry picked from commit 9c4a40c7b9e4e1ebb6bfb70fe66fc6fb8e4f4b6d) --- src/codegen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index 4fb5c7bc0cdee..78d0ff5010b4a 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 From b3d42d18e3954a44f0d84954ba0d6191c07bf72a Mon Sep 17 00:00:00 2001 From: Wesley Jenkins <103457588+wesjenkins@users.noreply.github.com> Date: Tue, 14 Feb 2023 11:35:11 -0500 Subject: [PATCH 06/52] Fix Base.libllvm_path and jl_get_libllvm don't support non-ASCII characters in path on Windows (#45126) (#45127) * Fix jl_get_libllvm_impl to support non-ASCII characters * Fix jl_get_libllvm_impl to support non-ASCII characters, fix whitespace * Fix jl_get_libllvm_impl to support non-ASCII characters, fix null and buffer (cherry picked from commit 6976bacd66e606865f656312bf6d991f3a6e4507) --- src/codegen.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index 78d0ff5010b4a..d5c44df6bef4c 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -8927,11 +8927,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)) From 25bad181eb184bce7d3a32a18699fe9f9f9a9325 Mon Sep 17 00:00:00 2001 From: Jeff Bezanson Date: Tue, 24 Jan 2023 09:05:18 -0500 Subject: [PATCH 07/52] fix #47658, state stack overflow on unions containing typevars (#48221) (cherry picked from commit 596ce6542624e9b8c3782b19936e2226f307e118) --- src/subtype.c | 34 ++++++++++++++++++++++++++++++++++ test/subtype.jl | 24 +++++++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) 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/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) From f7c4f593b252c95c204a47e3cfe23c112e00c746 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Mon, 20 Feb 2023 13:08:22 +0100 Subject: [PATCH 08/52] restore kwcall_mt optimizations --- src/staticdata.c | 3 ++- test/keywordargs.jl | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/staticdata.c b/src/staticdata.c index 07e971a10d33b..013a88cdb4723 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: 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 From 5e39fc675e28cb3dd9633ad076c097c0787dbf92 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Wed, 16 Nov 2022 09:27:26 +0900 Subject: [PATCH 09/52] lattice: fix minor lattice issues (#47570) I found some lattice issues when implementing `MustAlias` under the new extendable lattice system in another PR. (cherry picked from commit ee0f3fc334a8377da2d2b18e69c538eabc5aec13) --- base/compiler/abstractinterpretation.jl | 195 +++++++++++++++--------- base/compiler/inferencestate.jl | 6 +- 2 files changed, 130 insertions(+), 71 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 554ba191d4449..a3549c24fc8da 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 @@ -133,7 +133,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 +166,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 @@ -2422,19 +2422,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 +2484,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 +2555,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 +2636,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 +2644,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 @@ -2590,6 +2666,7 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) ssavaluetypes = frame.ssavaluetypes bbs = frame.cfg.blocks nbbs = length(bbs) + 𝕃ₚ, 𝕃ᵢ = ipo_lattice(interp), typeinf_lattice(interp) currbb = frame.currbb if currbb != 1 @@ -2659,19 +2736,19 @@ function typeinf_local(interp::AbstractInterpreter, frame::InferenceState) # 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 +2760,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 +2780,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 +2798,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 +2823,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 +2835,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 +2848,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 +2872,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 +2888,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..7f14c1fdf738b 100644 --- a/base/compiler/inferencestate.jl +++ b/base/compiler/inferencestate.jl @@ -429,14 +429,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) From 84e3545b35f720b216ae60bdbd71a5a9eeb101fa Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Tue, 14 Feb 2023 19:51:12 -0500 Subject: [PATCH 10/52] Put back getfield :boundscheck hack (#48677) We used to have this hack before #48246, but I removed it because I had hoped we don't need. Unfortunately, we weren't able to infer consistency of ``` @inbounds (1,2)[1] ``` With this hack, constprop is able to independently prove inbounded-ness, overriding the usual consistency taintaing that happens for inbounds. (cherry picked from commit 113c2f3c95bf2ae67ac1e8214a17b7d9404dbbfa) --- base/compiler/abstractinterpretation.jl | 18 ++++++++++++++++++ test/compiler/effects.jl | 9 +++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index a3549c24fc8da..909ffcddbad3c 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -1837,6 +1837,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 @@ -2045,6 +2053,15 @@ function abstract_eval_value_expr(interp::AbstractInterpreter, e::Expr, vtypes:: end 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 +2070,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" diff --git a/test/compiler/effects.jl b/test/compiler/effects.jl index 3aad5d1bdd8ab..5594e73afdda2 100644 --- a/test/compiler/effects.jl +++ b/test/compiler/effects.jl @@ -683,11 +683,16 @@ 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 + From 2324310f64232878ee144cafc9574e475da5b3bd Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Wed, 8 Feb 2023 11:23:40 +0100 Subject: [PATCH 11/52] make `insert_extension_triggers` idempotent (cherry picked from commit 2a0b9dd50657beddb7a28d9ecf66b86367ca7084) --- base/loading.jl | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/base/loading.jl b/base/loading.jl index 7ab232338a456..c593797d970df 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -1104,18 +1104,18 @@ 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) + insert_extension_triggers(env, pkg) end 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 +1133,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 +1148,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 +1156,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) From 7734b342281609b02055b2d5c405e7802ef6ad8c Mon Sep 17 00:00:00 2001 From: Kristoffer Date: Fri, 10 Feb 2023 15:45:47 +0100 Subject: [PATCH 12/52] fix printing of parents to extensions in `@time_imports` (cherry picked from commit 6bd658eaf4f3b7495f17c5f28c2d2f1c5c0e3894) --- base/loading.jl | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/base/loading.jl b/base/loading.jl index c593797d970df..b6c9a9f3889f7 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -1020,11 +1020,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 From 6545919d71a97f13ca161c35494d9be863230fd9 Mon Sep 17 00:00:00 2001 From: Fons van der Plas Date: Mon, 13 Feb 2023 15:26:31 +0100 Subject: [PATCH 13/52] julia_cmd() docstring: include pkgimages (#48392) (cherry picked from commit 4a75129efe00ebe1880e3ab86f6901524ca063bc) --- base/util.jl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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() From 1121d257bf18e7e9fdfb73c50228f2241c1e70c0 Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Fri, 10 Feb 2023 16:20:27 -0300 Subject: [PATCH 14/52] Allow for use 60% of constrained/total system memory (#48614) Remove the high watermark logic, because it doesn't really make sense, and allow for use of 60% of system memory before aggressive GC kicks in. Should fix #48473 (cherry picked from commit 500f561f728d0be3d5f6916f274cdf14387cf375) --- src/gc.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/gc.c b/src/gc.c index 17ad622900a43..5a3d4b3d26c59 100644 --- a/src/gc.c +++ b/src/gc.c @@ -3682,15 +3682,9 @@ 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; + max_total_memory = total_mem / 10 * 6; #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; - jl_gc_mark_sp_t sp = {NULL, NULL, NULL, NULL}; gc_mark_loop(NULL, sp); t_start = jl_hrtime(); From a66d09211ba284d4843ef2e7c62192c2fcb9711e Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Tue, 31 Jan 2023 14:01:14 -0500 Subject: [PATCH 15/52] update loading test to best-practices (#48429) Many of these test were hiding output or using semi-deprecated functions or failing to cleanup output or setting the wrong variables. (cherry picked from commit b48104d5f29fcfd477c72b1baa22145297c08bb6) --- test/loading.jl | 68 +++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/test/loading.jl b/test/loading.jl index f98f08103c9d7..6b84bdc7bb3e1 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,15 +999,14 @@ 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") HasExtensions.ext_loaded && error("ext_loaded set") @@ -1020,21 +1022,25 @@ 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) - end + cmd = gen_extension_cmd(``) + cmd = addenv(cmd, "JULIA_LOAD_PATH" => join([mktempdir(), proj], sep)) + cmd = pipeline(cmd; stdout, stderr) + @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,7 +1081,7 @@ 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 From 54539363c10909c82750e946022ba765f5aee4a3 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Mon, 20 Feb 2023 09:49:16 +0100 Subject: [PATCH 16/52] only load extension triggers from the evnironment where the parent package is loaded (#48703) (cherry picked from commit 200c96272a22a5c9d2434a0d091658cb0e7d0fe4) --- base/loading.jl | 56 +++++++++++-------- test/loading.jl | 23 +++++++- .../EnvWithHasExtensions/Manifest.toml | 29 ++++++++++ .../EnvWithHasExtensions/Project.toml | 4 ++ .../EnvWithHasExtensionsv2/Manifest.toml | 25 +++++++++ .../EnvWithHasExtensionsv2/Project.toml | 4 ++ .../HasExtensions_v2.jl/Project.toml | 9 +++ .../HasExtensions_v2.jl/ext/Extension2.jl | 3 + .../HasExtensions_v2.jl/src/HasExtensions.jl | 10 ++++ 9 files changed, 137 insertions(+), 26 deletions(-) create mode 100644 test/project/Extensions/EnvWithHasExtensions/Manifest.toml create mode 100644 test/project/Extensions/EnvWithHasExtensions/Project.toml create mode 100644 test/project/Extensions/EnvWithHasExtensionsv2/Manifest.toml create mode 100644 test/project/Extensions/EnvWithHasExtensionsv2/Project.toml create mode 100644 test/project/Extensions/HasExtensions_v2.jl/Project.toml create mode 100644 test/project/Extensions/HasExtensions_v2.jl/ext/Extension2.jl create mode 100644 test/project/Extensions/HasExtensions_v2.jl/src/HasExtensions.jl diff --git a/base/loading.jl b/base/loading.jl index b6c9a9f3889f7..0ab3f5474904f 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 """ @@ -1108,9 +1114,13 @@ const EXT_DORMITORY_FAILED = ExtensionId[] function insert_extension_triggers(pkg::PkgId) pkg.uuid === nothing && return - for env in load_path() - insert_extension_triggers(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(env::String, pkg::PkgId)::Union{Nothing,Missing} diff --git a/test/loading.jl b/test/loading.jl index 6b84bdc7bb3e1..5374a14129004 100644 --- a/test/loading.jl +++ b/test/loading.jl @@ -1008,10 +1008,10 @@ end 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") @@ -1029,12 +1029,29 @@ end @test success(cmd) end - # 48351 sep = Sys.iswindows() ? ';' : ':' + + # 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 try rm(depot_path, force=true, recursive=true) 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 From 86b9df234b77a2729e2f14dce718d51ddfb5e48d Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Wed, 8 Feb 2023 18:40:14 +0900 Subject: [PATCH 17/52] effects: taint `:nothrow` effect on unknown `:static_parameter` (#46791) * effects: taint `:nothrow` effect on unknown `:static_parameter` (conservatively) With this commit, we taint `:nothrow` effect property correctly on access to unknown `:static_parameter`, e.g.: ```julia unknown_sparam_throw(::Union{Nothing, Type{T}}) where T = (T; nothing) @test Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, ((Type{Int},)))) @test !Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, ((Nothing,)))) ``` This commit implements a very conservative analysis, and thus there is a room for improvement still, e.g.: ```julia unknown_sparam_nothrow(x::Ref{T}) where {T} = (T; nothing) @test_broken Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_nothrow, (Ref,))) ``` * inference: improve `:nothrow` modeling for `:static_parameter` (#46820) * Fix test with free type params * Test: Ignore ::Type{T} in detect_unbounded These are only technically unbounded because of the existence of ill-formed types. However, this function is supposed to be an API sanity check and ordinary users should never have ill-formed types, so for the purpose we want here, allow unboundedness in Type{T}. --------- Co-authored-by: Keno Fischer Co-authored-by: Elliot Saba (cherry picked from commit b5d17ea2b3d68f41ffca57a87527a337abc8b74d) --- base/compiler/abstractinterpretation.jl | 11 ++- base/compiler/inferencestate.jl | 103 +++++++++++++++++++++--- base/compiler/optimize.jl | 6 +- base/compiler/ssair/slot2ssa.jl | 2 +- base/compiler/ssair/verify.jl | 2 +- stdlib/Test/src/Test.jl | 45 +---------- test/compiler/effects.jl | 13 +++ test/compiler/inference.jl | 13 +++ 8 files changed, 135 insertions(+), 60 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 909ffcddbad3c..0e971ab1043ec 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -2048,9 +2048,17 @@ 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] @@ -2295,8 +2303,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 diff --git a/base/compiler/inferencestate.jl b/base/compiler/inferencestate.jl index 7f14c1fdf738b..a901f627e7ab2 100644 --- a/base/compiler/inferencestate.jl +++ b/base/compiler/inferencestate.jl @@ -348,15 +348,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 +450,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 +491,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 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/slot2ssa.jl b/base/compiler/ssair/slot2ssa.jl index bdf87f929a31a..0049967473c66 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 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/stdlib/Test/src/Test.jl b/stdlib/Test/src/Test.jl index 7a4dc3ec184d9..13a0a2db8eac5 100644 --- a/stdlib/Test/src/Test.jl +++ b/stdlib/Test/src/Test.jl @@ -1964,54 +1964,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/test/compiler/effects.jl b/test/compiler/effects.jl index 5594e73afdda2..37b04e98b7e14 100644 --- a/test/compiler/effects.jl +++ b/test/compiler/effects.jl @@ -696,3 +696,16 @@ end |> !Core.Compiler.is_consistent @inbounds x[1] end |> Core.Compiler.is_total +# unknown :static_parameter should taint :nothrow +# https://github.com/JuliaLang/julia/issues/46771 +unknown_sparam_throw(::Union{Nothing, Type{T}}) where T = (T; nothing) +unknown_sparam_nothrow1(x::Ref{T}) where T = (T; nothing) +unknown_sparam_nothrow2(x::Ref{Ref{T}}) where T = (T; nothing) +@test Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, (Type{Int},))) +@test Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, (Type{<:Integer},))) +@test !Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, (Type,))) +@test !Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, (Nothing,))) +@test !Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, (Union{Type{Int},Nothing},))) +@test !Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, (Any,))) +@test Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_nothrow1, (Ref,))) +@test Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_nothrow2, (Ref{Ref{T}} where T,))) 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 From af0e4c18824e0c8a2db439b6ac86c51d640ab754 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Fri, 10 Feb 2023 07:18:50 -0500 Subject: [PATCH 18/52] force singlethreading during precompilation (#48592) (cherry picked from commit c0d2c574d44231dba39f90d6a6b27448f71763ca) --- base/loading.jl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/base/loading.jl b/base/loading.jl index 0ab3f5474904f..55cace21764f8 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -2053,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 From 0cb0bb4bcb8da46c48b9a6a6a142c9cd3255fc3c Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Sat, 11 Feb 2023 08:07:34 -0300 Subject: [PATCH 19/52] Bump LLD to get dsymutil and use it for pkgimgs (#48628) * Run dsymutil on pkgimgs for apple platforms + LLD bump to get dsymutil from the jll (cherry picked from commit d8c225007498a68d1a1c9f3229d0dbc11b98f0cf) --- Makefile | 3 + base/linking.jl | 22 ++++ base/loading.jl | 6 + deps/checksums/lld | 232 ++++++++++++++++++------------------ deps/lld.version | 2 +- stdlib/LLD_jll/Project.toml | 4 +- 6 files changed, 150 insertions(+), 119 deletions(-) diff --git a/Makefile b/Makefile index 8010088bd1b17..41359c5e82e64 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 diff --git a/base/linking.jl b/base/linking.jl index 288279347f1c5..ef0426cddcc97 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() diff --git a/base/loading.jl b/base/loading.jl index 55cace21764f8..9b301b414b0e8 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -2203,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 @@ -2230,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) diff --git a/deps/checksums/lld b/deps/checksums/lld index c215798eaf19f..25a89e959d297 100644 --- a/deps/checksums/lld +++ b/deps/checksums/lld @@ -1,116 +1,116 @@ -LLD.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/5344b22c67a05a0e8f7a2a66b14f7c8d -LLD.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/95f3772927a4770d36817d3c681ea76ecc2f94256fde7866ce688b6631710b4d044952340f2cff08a81b1d8871beb242d0e4e980b5b4455a1b74cbb0786c51d1 -LLD.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.tar.gz/md5/924d77f9440be4e13d88c8d59cb60ae3 -LLD.v14.0.6+2.aarch64-apple-darwin-llvm_version+14.tar.gz/sha512/e26b186f49b0709b5f9ebb5485568a69b0bb078395071cb43c02a659dfbb8f25ce21b17806377ae2f8dbefe36bce1db8c29cec8cdcd140099bde76eda5585612 -LLD.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/9b5ff100b332d5f9fe67de97b635ca20 -LLD.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/2d5619d5db7ca68fa4a14693084bb76520cba1a3dcf608783899793eac296c653b84d3b88a559a93a0c95d92c58e4847c796a69207cce5899924381f308d73c9 -LLD.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/20a1e3619501ed9b45344b98551359bc -LLD.v14.0.6+2.aarch64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/e517788ae12045fe2647613f7654bd6178af842c2c284178216b87cda67a97fa1f9002292bb4f792de48f3296fff477cb3a80b114be40cf2c6c502d81f350abd -LLD.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/70add6dad0a85be2f44aad61a50dac37 -LLD.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/78062a9f2a7bea15c6230d03011ec6257dc015c76cec0023edbb85709cdfe3a97e2e28fa96045d6b42d8f2849d88d19a2d8e936bb53aa5638dcde17472c1181b -LLD.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/1e4bf7f0827d9056c906fa2b09b381dc -LLD.v14.0.6+2.aarch64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/6a06c95a4ad191e013b3ffb15fa8da49ad2c448ca8f17db3079969575b9fda01d98db84bb26eb2e0ad570d3de4f9a07cdc8f0784cf18be8271025bf724eead4d -LLD.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/24e3af3ecf857aafc759ef40b3a52825 -LLD.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/dd1c825a7689c9ffc49365529a5320b618209e617df4720d6664b28cad1d03ea5a1209ab43a356e2871b0d8e6d2fcca82ba75202762046ed6582ed148a387c9f -LLD.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/159d8aeac0680f895b83cb8574ec65df -LLD.v14.0.6+2.aarch64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/f219694d0508eccda753d7ae374cbd1b06ceb76c26569ebcf09932ff710f49f5bb789b4cd516ab92e56f9eca727d93a01cfe0940e655029451f3b1e38ef43c82 -LLD.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/2900777df5ec9d27cb05ef802e8256a1 -LLD.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/300f899063db9d3c915413d396a888174b3925876e1180ff5e614ce6f725b859dc483faae836176b95d8e88cdfb0905c7495a692dc626e38de1facf9a28e884f -LLD.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/eee9f3818f04d3ad29d618856fb79659 -LLD.v14.0.6+2.aarch64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/5ca354aca71f16304ddabcef24b63fae0716a1bfef1c5d96029175964a7486c7da2d4f0b927e3dd13afddec78ff8ea294464145c9ee19a010433114d2f7c18d5 -LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/d5b3edd7d22e2c65042404330bd3e591 -LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/54af1917db010a0032aa19e7e20ca096609a45b01968353af03121b6809fcac53d414d594ed1127016667ad331c7e76b8ffd305bb186f7c80a786676ee1132e1 -LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/351534948a7507501af4ba6c17fdfa87 -LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/0b4f4265f20414d8d1417913f38cd853fac91a097ac6be297e5472fa05850277dd316e0c91481529a9362873c53e1ff5eddf4c4d2f1bb25c2f8e15a80b5e6497 -LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/4d3ce4de0f8f21f2f2ff75acf20b0362 -LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/d3463be7353570543ef6613dd5e5fdd8790f4cd24362991039178755e9cbfa4b67123219e06b8eb3749dd31b7f759cb899f6d76f5a5155717e1fd83e1325ed65 -LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/847cffc463372eb8ee7ec4ab0e672227 -LLD.v14.0.6+2.armv6l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/24596a775492d8f6ced29caff28859a600a5f7c38e6d48e4f9ab0200f28081e43f528c2892c895cea44083331273752545f96c542e0c56209d90743affeb223d -LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/2c932f1a9fd559b9f49d3e0f92ac3302 -LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/f4efb89a3af33817ded7adcbf758c47413f16a94b06978be43ed4b397d212d7da04429d003f2298dcf2ae7ff67614ce83e3d159f0e2c9eaa9268ff5a4c9ec113 -LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/ba7dc5b1b3753b24f15c334a6c25b5c1 -LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/3f09d1e4befbdda185e5e9df153a7730c25d84063ab83f3fefffddab7f0d8402cf923b69cd72bef2d02f3b1fd166924ca0c557c8e2bf4fea8bbb82c80474e387 -LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/18b16c9c5cafbffc375d512b9f84363b -LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/4e17f053e58bad9974002fb1c58ea0546cc1acd475ce253739d2de9113912f15a130ba8cecaef3017202fdd7f5ad5fd9977140d766f659d43abaaa6cf53b23ea -LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/54fa708a76f4627f267d87a9d8f78a4b -LLD.v14.0.6+2.armv6l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/7b0ea14824e5144ef05087f88c8ac477a159f76fcb1f84cb59ca98cc7f2c0993ae9c4b57749a395c7ae90f7f37c6a4c4c14ee8fc381859d47736a87acc233349 -LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/576e9e5765a3696e0cd3153ebbef6147 -LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/c643fab9837dbb02ff9cb9202e53766b03649855410e7da15e7e9fe54f6f15b7172fb2d336fc68b315401b8b3f8e8b597204b739592cc2e7cd548a78a3baf8ec -LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/md5/065255972031a362edb3f5fb74e530c6 -LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx03-llvm_version+14.tar.gz/sha512/a7411c9f44ce798bc5e1f9838b73efeeb97d338a50b605c93918b85c0848cdbccc71daedcaeb4348c7d1236a3b23680f20ab46dce1b2fdd156b29b3c3677f971 -LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/b0ba1697475e35735d0d94389b1524e6 -LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/aba3b866c41c821b9f26a5cc32910e2f976a596b388a14a0dca9326ad72f1d346208bb18f478a0919471e10d578c41190236a6a8cdb94fe394c7e7af120678f0 -LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/md5/1c7e5428cf571721bb320677189f1545 -LLD.v14.0.6+2.armv7l-linux-gnueabihf-cxx11-llvm_version+14.tar.gz/sha512/a8ea619b58e49db4acaec9a0feb5e5aa93b4fc7d1d6190c85c76661b3f833d5fa988692c42e643590a49a804b928a3799c91ac4e0b5df7a826ae76446d8fe8fe -LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/md5/1ccf9badd8d0cfdcad55e080175411f9 -LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.asserts.tar.gz/sha512/b48da6e3d6513397f861dd694dd2129c0bcc86e73cc44fb079f9e27a715a27ef568078240f5afec0220514221e3fe588854cfc390c432e5d06abffcade1488ed -LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/md5/38d64d93d5d0358135cf98a6399f1eb8 -LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx03-llvm_version+14.tar.gz/sha512/8af6b61dd4e4b32bfb17e91aabcad7ca31044b31b0aa124bc19185c2125b1f4408fbd865c3d14e56406159e4ba5d8a78d347036b1db09ddba34676eb05e22e1f -LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/md5/9b8be38bed8a91dce3ef2bee57036d3c -LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.asserts.tar.gz/sha512/45e1eb6a49940fd3f77e8e22ac0cb34b7132466decc9bc893ab697e66becf9d1bf6c74a86509c71c8424d418eb7498b9fe843c913a1bc5ffb897fece178bf8a5 -LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/md5/0b94c549ff012015384d50fba8c0821a -LLD.v14.0.6+2.armv7l-linux-musleabihf-cxx11-llvm_version+14.tar.gz/sha512/81c31f243e66b7e61cf839647fb765305c6fee0393216846ed8ca4402c1115222e2392b1e5f737b48f4655f18177d97e08f50674b632638dcac537e87e8fa5fb -LLD.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/31f75615fd3219b630d2987e25f93a5b -LLD.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/1699aeea86bd8a1df53fc58770c34b87637ae621c48ac9831874734cd330ac67e845cb55af9077f18068cbd0b66f9f89cc82a286b098e0f44c7bd2b6b0fcef18 -LLD.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/418db3048ce54f8fa3a0f89a11f765ab -LLD.v14.0.6+2.i686-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/f1ecf8c0cb2c6be879e8a860592bcd317821fa2d89978f96175f3bb7c9a3a2aa261123c147dcf6c796c3212871398f5e7cfb5dc153ab503aa8004e6017b842a6 -LLD.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/8a70cbfe920fe7dbec2129f7c5b440b8 -LLD.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/e332ff1e1e2383d0bc01b178ae5ea44efc1986d919cbe9b13e8d4ce0980b5fa97232851d1f2e17b6b4bca0490775cfb00cc0efe0d588bcfbf10ac9e69faf3f8d -LLD.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/53117bd03ceeaabf93aaf0702c30e1e4 -LLD.v14.0.6+2.i686-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/3123e605d2ba1d7bc4fb4aeb15740b651cd09b75a6ea9eba22757a07ebc9dfaeff126bda912187ba2c16e89521d6f94ef53f587a61a67f4deec021479319e21e -LLD.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/0aa6ecc9753e17f8e45f4a63824998df -LLD.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/fd423adc752e338cce486c554b33432920950ccd87a02af9e92afcc415e0dfda141e17ea3a25abdfe2ef03ed9b0415cbc9fc4f099c65e5406a6663e06b707867 -LLD.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.tar.gz/md5/d2bf7a484c8fb31b3d72a18f6eacf042 -LLD.v14.0.6+2.i686-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/cd07d944f26b698a44dddcd0936189cbdd48b2edbb70cc84e9a267729fb672e1781356c56588770443c5523cc2c8900f81c9001be4e56595f6e2aac4a9ef36bb -LLD.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/21cfe7c71234c543e6ce99bd468602d4 -LLD.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/8c70edddf70231f53318781836ae329d20a869f0acac2f8994cb73a221734f8b5c34fe1f68442522a964cb014d972fa5b98773a65366ce02b497d57a23abf616 -LLD.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.tar.gz/md5/dde8dd2112180963e8b2d1c688553ced -LLD.v14.0.6+2.i686-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/704550b2aec1d73c1279eb1131b530e3309c796204845dc1da4b7132c612b862ccb3525a1d7a7af1483ec8cd211d8be532d3a49dde6c7a8e55c617bb3b665455 -LLD.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/c501233e2134da56034390a296684fda -LLD.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/5ef2bfd95647aefdc71b28fc018c3f3c3b5762ce6c8be7c136d56e01f47fe48c4bb99d913501916388d6bb46bd3d9a905efd04cda5b031def2f703942374fddd -LLD.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/8758e9198b98a72ef6c6546afb8f5551 -LLD.v14.0.6+2.i686-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/741d09735e3cef28f9e45aaeb0f715d312fcd92dca3ab9623cdb3215163c9dd68f7252842e3760f9a65470e4a6a666e58ae4da4bf57122d1a64dd70a3856debc -LLD.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/fb6abded431a1bf2c22a2d94d13d6cb9 -LLD.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/182e24978f298057c9d6f2299ef3165b1930c0d42c60215f01ea2ea57e0c864ffd98c80464ef340a34a89b158375746c9b1e063bc89955689a6fc31bc097a4a0 -LLD.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/036e3d82650c9d863c7a2ae6b98007cf -LLD.v14.0.6+2.i686-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/ccde6a4f3407966fa4522568d24d78afde26a5ebbe85708d0d6a28e0ed29ddf47ede86c2abf174c527bfdde53f461733bb2298c0828f5f2b529e390916999da7 -LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/b9fe932890276f6a4e1d315a573ec6e0 -LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/34f8f8b653cd1f56ff049d3f63212133f9cf07f4b0362ab2a2b7140436031c2a8802512c12b004299cecb0d0c8bf515bde38bf4b52dda57039d76ac948eb4577 -LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/f38c4d018cacd0021560e02c3039f5ff -LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/af2f2c901b4e707373a76b2b625f3835fa4573607399303b347e4e6ec401083ba7255c99044bdf853050e5b28fd9a785cd90e3aca0d7beb73406a056fb98fe0a -LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/e5a85e96fe144073b05796728af8c24f -LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/d4f97e23828700a34f0bc2e1000ffa2bf21e8b9879b9d114118bfd42406e65589a6e807337e38701e95a1064dc2924280997c7e342cca55c232e6d841bb40aaf -LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/e318117921ee0dc2d1f3e43931c6d420 -LLD.v14.0.6+2.powerpc64le-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/7a5f264c8dd94734cd495e843854cb9c7cd57cf3fe29f08f21d6e7d690da535b95e4e9285df12d89134fcda6c5cf2df5b189d378106fa05f6fd5af92a2096755 -LLD.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/md5/10a67e175285b206e86e1713a38be6a8 -LLD.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.asserts.tar.gz/sha512/6f1d6455db15a03b54289366970bf63c136630a75bf8a25ef6f68d25f621992e3b0b48b1e02942b7b9953eb3435fa48e54cb801fee69c40e8616b272c9e2194c -LLD.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.tar.gz/md5/a106b6b58bc5c8492334f540b0e427b0 -LLD.v14.0.6+2.x86_64-apple-darwin-llvm_version+14.tar.gz/sha512/1d5340a1ffdefaa967af0fe1ac66f56e92fba7f85c5f63b783d224afc318394b3151514fc666c928ffa018db71dc2bc1e0b484a6e61918df9f3e971a4465cf81 -LLD.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/md5/cc73a643641eb34a53a8c4dcc82dfa31 -LLD.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.asserts.tar.gz/sha512/7598cc478e25c6eb3328292aa6e50ae15454514790b6ae470fd492444018ba905df9e941846316907465c422be7fec0aee462cdc90c29d0dea09dff4d02f71ef -LLD.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/md5/757b7170cc1213d01f0ff2a980372745 -LLD.v14.0.6+2.x86_64-linux-gnu-cxx03-llvm_version+14.tar.gz/sha512/f4a567cc1859b6cf85250e150131d8771b24a534469eb6ad6770f1e1594fd0bd2016cbeefed59dcacb50bc6328f8f462ad2200194afcf3f1eab8ae13eeeeb093 -LLD.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/md5/f8f7b5a5ef2b93da4b1bf2932c098974 -LLD.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.asserts.tar.gz/sha512/f988ae43f3bfe56a3f6d54ac98420f053973406b07403bc850647698b23783cbfdc77f705299d2df114f7f58f6ef9d30a0eff789780d5e206c5dc5857a81f968 -LLD.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/md5/9692fe8d0533df9243b6b9b49b158e9f -LLD.v14.0.6+2.x86_64-linux-gnu-cxx11-llvm_version+14.tar.gz/sha512/893c8fbe9483106fbf3b28f2490f1cf2faeceda29890f67f9d0adeb6d841dacf7b39300598c673b28157b1fe4a971e749bb71dc3df8e66983ed8ce9fd6973451 -LLD.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/md5/ece7e11a288c20a156542bd31b3e642e -LLD.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.asserts.tar.gz/sha512/d032c3d738d9073ab92fab38ec47a45371e243963a5bd39a392be44e090189182be71f363ab8fc71116eb9d14835cae2bed70eb1a1ba5c6bda2972412719e0e7 -LLD.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/md5/bec0b1fe84e4e754cf7a3f67362b2d87 -LLD.v14.0.6+2.x86_64-linux-musl-cxx03-llvm_version+14.tar.gz/sha512/434030e81828df77b452e8d364359652266dedfa731395cc7cb5f41a8102ec614d1c147f25602a435c701c674095640279c59e3ab8ce3422a3694398880a2f7b -LLD.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/md5/dadf9169ef4a6fde170430c5323cacf2 -LLD.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.asserts.tar.gz/sha512/cad9dd4973d83c6c46e32a04fe0b883d34c067922f14c569679dac9d8f04faeedbfc3aa4a17c6f3b461d12105fa7ef5dfaaccba3c5bdf518ffd06bcb44fe9132 -LLD.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/md5/ad533cdc5d317ea7348efdb08724a9ad -LLD.v14.0.6+2.x86_64-linux-musl-cxx11-llvm_version+14.tar.gz/sha512/baf8a1fb66ba41f88b42d0966f2b9f0a467dbbeed24f8854598916facdb6567130f379573851ffd137624687c9e5b6637b491a030f1a41916426360a1a9fcd8b -LLD.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/md5/cafa8a847b297701952fa1cb0e50af0b -LLD.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.asserts.tar.gz/sha512/d7f55d8696fe882e4c275ea40f3774d39a27cede475e135d6dfa7f7f7f4c6633062e0f75f8414963c37e92ca4889ba9f8ad7970a10364b4bbc30d225fa66c901 -LLD.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.tar.gz/md5/dd798db1f473b1ea2801258b98325969 -LLD.v14.0.6+2.x86_64-unknown-freebsd-llvm_version+14.tar.gz/sha512/f4bba7ce56c6d8f55ca5777337d721bc2b663e9c2acd2e9636a86e6948815be1c0e7243c851811763d2c98a5918d454ebee6a48494b884aedce9afe8d9e1ffd5 -LLD.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/md5/817201c1fd49c212881fb2de8971e0f4 -LLD.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.asserts.tar.gz/sha512/3cdbcd359859d22ecfba562367d3db522e6f25082b3bcdacfc29ad498398e86b2156a6c637aaad0010818771a815e6ab78c3e79227fc5e5de15b3c6de7544b4a -LLD.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/md5/0253e0415d7fd046ece8a9f8b4583cde -LLD.v14.0.6+2.x86_64-w64-mingw32-cxx03-llvm_version+14.tar.gz/sha512/f77c61f3a15d3782e1ec017580b782328dc0023b3c17d85a7deb5454e133de058778ac45703b509aaffdec4b58423e816803bb1bdca333b9846632b241f9595c -LLD.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/md5/a2a132e6a57e03acb56a0dc4464f8511 -LLD.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.asserts.tar.gz/sha512/dfdd2755d341409bc12b097ce01848f99af24bb9bfeea0a687d016fd2167849f38ce4fb13fa87f7c70be0576771999e01f33c58883f56a50cd19ea7e963dffdd -LLD.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/md5/eabba184b37f882bea4167870fa819f1 -LLD.v14.0.6+2.x86_64-w64-mingw32-cxx11-llvm_version+14.tar.gz/sha512/2f75f55a31cf13a626070a2bbcb55c8eadeace453af70ed03377e5b4a2b9d7f0f7350aae0669e6702e3b650af6c0ca7c027534d99ae444431de5d3e6e7e53083 +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/lld.version b/deps/lld.version index d52ceb34552e2..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+2 +LLD_JLL_VER := 14.0.6+3 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" From 624c665c1b6fb5c3fa9550bc8ce59765d3e9c418 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 21 Feb 2023 13:52:31 +0100 Subject: [PATCH 20/52] put back DelimitedFiles as a non-sysimage "stdlib" (#48671) (cherry picked from commit 56667bb47af73c9f6d574dd96ef946983854e1ee) --- contrib/cache_stdlibs.jl | 1 + .../md5 | 1 + .../sha512 | 1 + stdlib/.gitignore | 2 ++ stdlib/DelimitedFiles.version | 4 ++++ stdlib/Makefile | 2 +- test/loading.jl | 4 ++++ 7 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 deps/checksums/DelimitedFiles-db79c842f95f55b1f8d8037c0d3363ab21cd3b90.tar.gz/md5 create mode 100644 deps/checksums/DelimitedFiles-db79c842f95f55b1f8d8037c0d3363ab21cd3b90.tar.gz/sha512 create mode 100644 stdlib/DelimitedFiles.version 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/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/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/test/loading.jl b/test/loading.jl index 5374a14129004..24cca245ae4cb 100644 --- a/test/loading.jl +++ b/test/loading.jl @@ -1104,3 +1104,7 @@ 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 From 956f54b920955878e1559252502519ce5b2c9599 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mos=C3=A8=20Giordano?= Date: Mon, 20 Feb 2023 14:47:04 +0000 Subject: [PATCH 21/52] [OpenBLAS_jll] Upgrade to new build optimised for PowerPC (#48689) * [OpenBLAS_jll] Upgrade to new build optimised for PowerPC This only difference compared to previous build is that this one enables use of dynamic architecture detection also for the PowerPC architecture. --------- Co-authored-by: Valentin Churavy (cherry picked from commit aacfcf0afcd325c2ad2e59fc16497405a07b4f85) --- Make.inc | 1 - deps/checksums/openblas | 184 ++++++++++++------------- deps/openblas.mk | 7 +- deps/patches/openblas-power-test.patch | 55 ++++++++ stdlib/OpenBLAS_jll/Project.toml | 2 +- 5 files changed, 154 insertions(+), 95 deletions(-) create mode 100644 deps/patches/openblas-power-test.patch diff --git a/Make.inc b/Make.inc index 9fd75d76190e9..acc0a6a7147ef 100644 --- a/Make.inc +++ b/Make.inc @@ -848,7 +848,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 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/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/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" From b5d9781128490ab4510e3112d980a744878323c2 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 17 Feb 2023 10:59:02 -0500 Subject: [PATCH 22/52] staticdata: encode link_id in tagged linkage (#48673) On 64-bit, we have enough space to encode (1) the tag, (2) the `depmods` index, and (3) the offset all in a single 64-bit pointer field. This means we don't need the external `link_id` arrays, which reduces the size of many pkgimages by ~5%. On 32-bit, we don't have enough bits to implement this strategy. However, most linkages seem to be against the sysimage, and so by giving that a separate tag we can achieve similar compression because the `link_id` lists will be much shorter. Co-authored-by: Tim Holy (cherry picked from commit 8e3e97074e34f86e7c796536a46fcdeca53a52dc) --- src/codegen.cpp | 6 +- src/gc.c | 2 - src/jl_exported_data.inc | 2 - src/julia_internal.h | 10 +-- src/staticdata.c | 163 +++++++++++++++++++++------------------ src/staticdata_utils.c | 42 ++++++++++ 6 files changed, 136 insertions(+), 89 deletions(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index d5c44df6bef4c..5b8459311d22f 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -4230,7 +4230,7 @@ static jl_cgval_t emit_invoke(jl_codectx_t &ctx, const jl_cgval_t &lival, const bool cache_valid = ctx.use_cache; bool external = false; if (ctx.external_linkage) { - if (jl_object_in_image((jl_value_t*)codeinst)) { + if (0 && jl_object_in_image((jl_value_t*)codeinst)) { // Target is present in another pkgimage cache_valid = true; external = true; @@ -5597,7 +5597,7 @@ static Function *emit_tojlinvoke(jl_code_instance_t *codeinst, Module *M, jl_cod bool cache_valid = params.cache; if (params.external_linkage) { - if (jl_object_in_image((jl_value_t*)codeinst)) { + if (0 && jl_object_in_image((jl_value_t*)codeinst)) { // Target is present in another pkgimage cache_valid = true; } @@ -8503,7 +8503,7 @@ void jl_compile_workqueue( auto invoke = jl_atomic_load_relaxed(&codeinst->invoke); bool cache_valid = params.cache; if (params.external_linkage) { - cache_valid = jl_object_in_image((jl_value_t*)codeinst); + cache_valid = 0 && 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) { diff --git a/src/gc.c b/src/gc.c index 5a3d4b3d26c59..9e824e2829edb 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); 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/julia_internal.h b/src/julia_internal.h index 995a320787ede..df5c462887cc3 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 diff --git a/src/staticdata.c b/src/staticdata.c index 013a88cdb4723..f8b509a89007e 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -304,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; @@ -357,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; @@ -378,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 { @@ -386,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. @@ -403,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; @@ -868,20 +875,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; @@ -1438,12 +1447,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)) { @@ -1571,11 +1581,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; @@ -1622,10 +1637,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) @@ -1646,25 +1663,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(); } @@ -1847,7 +1869,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; } @@ -1955,7 +1977,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); @@ -2277,7 +2300,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 @@ -2326,10 +2349,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; @@ -2519,22 +2543,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); @@ -2653,7 +2671,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 @@ -2826,25 +2844,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); @@ -3248,12 +3267,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); } diff --git a/src/staticdata_utils.c b/src/staticdata_utils.c index f636485541aed..abecb98eb2455 100644 --- a/src/staticdata_utils.c +++ b/src/staticdata_utils.c @@ -1230,3 +1230,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; +} From 50b8c1358449ac454ea1bb2574a9277fce797149 Mon Sep 17 00:00:00 2001 From: Tim Besard Date: Tue, 21 Feb 2023 17:05:24 +0100 Subject: [PATCH 23/52] Add world argument to jl_create_native. (#48746) (cherry picked from commit 09759069203b06024d87dc49071af7a1519c7559) --- src/aotcompile.cpp | 4 ++-- src/codegen-stubs.c | 2 +- src/julia_internal.h | 2 +- src/precompile_utils.c | 3 ++- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/aotcompile.cpp b/src/aotcompile.cpp index 6eca670652e04..03eacff192a51 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -271,7 +271,7 @@ void replaceUsesWithLoad(Function &F, function_ref Date: Tue, 7 Feb 2023 18:34:49 -0500 Subject: [PATCH 24/52] [compiler] Teach type inference that `GotoIfNot` can throw (#48583) Previously, the effects system would ignore certain cases where `GotoIfNot` nodes would be capable of throwing; this resulted in simple examples such as the following being marked as `nothrow`: ``` julia> foo(x) = x > 0 ? x : 0 Base.infer_effects(foo, (Missing,)) (+c,+e,+n,+t,+s,+m,+i) ``` With this change, we correctly notice when a `GotoIfNot` node is given a non-`Bool` condition, annotate the basic block as possibly throwing, and further end type inference if the condition is provably non-`Bool`. --- base/compiler/abstractinterpretation.jl | 9 +++++++++ test/compiler/effects.jl | 19 ++++++------------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 0e971ab1043ec..7842a249a4a96 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -2727,6 +2727,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 @@ -2758,6 +2759,14 @@ 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) diff --git a/test/compiler/effects.jl b/test/compiler/effects.jl index 37b04e98b7e14..82da475c6429a 100644 --- a/test/compiler/effects.jl +++ b/test/compiler/effects.jl @@ -696,16 +696,9 @@ end |> !Core.Compiler.is_consistent @inbounds x[1] end |> Core.Compiler.is_total -# unknown :static_parameter should taint :nothrow -# https://github.com/JuliaLang/julia/issues/46771 -unknown_sparam_throw(::Union{Nothing, Type{T}}) where T = (T; nothing) -unknown_sparam_nothrow1(x::Ref{T}) where T = (T; nothing) -unknown_sparam_nothrow2(x::Ref{Ref{T}}) where T = (T; nothing) -@test Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, (Type{Int},))) -@test Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, (Type{<:Integer},))) -@test !Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, (Type,))) -@test !Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, (Nothing,))) -@test !Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, (Union{Type{Int},Nothing},))) -@test !Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_throw, (Any,))) -@test Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_nothrow1, (Ref,))) -@test Core.Compiler.is_nothrow(Base.infer_effects(unknown_sparam_nothrow2, (Ref{Ref{T}} where T,))) +# 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,))) From d2de99de46a38e5bf9e8c710e0d994e6a0ecafaf Mon Sep 17 00:00:00 2001 From: Keno Fischer Date: Thu, 29 Dec 2022 13:13:15 -0500 Subject: [PATCH 25/52] Stop renumbering statements in inference proper (#48022) I don't think there's any good reason to try to delete the statements here. The very next thing we do is to convert to IRCode which drops dead code anyway, so this just seems redundant. In addition, it complicates Cthulhu-like analysis, which now has to track an extra set of statement numbers. --- base/compiler/ssair/irinterp.jl | 4 +++- base/compiler/ssair/slot2ssa.jl | 8 +++++--- base/compiler/typeinfer.jl | 24 ++++-------------------- 3 files changed, 12 insertions(+), 24 deletions(-) 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 0049967473c66..30bfae5706b1c 100644 --- a/base/compiler/ssair/slot2ssa.jl +++ b/base/compiler/ssair/slot2ssa.jl @@ -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/typeinfer.jl b/base/compiler/typeinfer.jl index 6336059c79960..3fb66852a8ee5 100644 --- a/base/compiler/typeinfer.jl +++ b/base/compiler/typeinfer.jl @@ -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 From a6a19e44993fbefd8bc49849fade5802154a6332 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Wed, 1 Mar 2023 15:37:54 +0900 Subject: [PATCH 26/52] inference: fix the correctness of inference bail out interface (#48826) Since we allow overloading of the `bail_out_xxx` hooks, we need to make sure that we widen both type and effects to the top when bailing on inference regardless of the condition presumed by a hook. This commit particularly fixes the correctness of `bail_out_apply` (fixes #48807). I wanted to make a simplified test case for this, but it turns out to be a bit tricky since it relies on the details of multiple match analysis and the bail out logic. --- base/compiler/abstractinterpretation.jl | 28 ++++++++++++++++--------- base/compiler/inferencestate.jl | 21 +++++++++++++------ 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 7842a249a4a96..78dc74f4d30a3 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -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 @@ -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,7 +201,9 @@ function abstract_call_gf_by_type(interp::AbstractInterpreter, @nospecialize(f), info = ConstCallInfo(info, const_results) end - if seen != napplicable + if seen ≠ napplicable + # there is unanalyzed candidate, widen type and effects to the top + rettype = Any # 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) @@ -1529,7 +1531,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 +1547,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) diff --git a/base/compiler/inferencestate.jl b/base/compiler/inferencestate.jl index a901f627e7ab2..0c4dd03e925db 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 From 09757f7c83f91b8428f8229375f77810fa829683 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Wed, 1 Mar 2023 19:07:59 +0900 Subject: [PATCH 27/52] effects: taint `nonoverlayed` when bailing out inference (#48838) --- base/compiler/abstractinterpretation.jl | 4 +--- test/compiler/AbstractInterpreter.jl | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 78dc74f4d30a3..82035070ac2c9 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -204,9 +204,7 @@ function abstract_call_gf_by_type(interp::AbstractInterpreter, @nospecialize(f), if seen ≠ napplicable # there is unanalyzed candidate, widen type and effects to the top rettype = Any - # 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) + 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. diff --git a/test/compiler/AbstractInterpreter.jl b/test/compiler/AbstractInterpreter.jl index cfb26d714db9f..e20d328ccbdb6 100644 --- a/test/compiler/AbstractInterpreter.jl +++ b/test/compiler/AbstractInterpreter.jl @@ -45,6 +45,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 +72,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) From 2761b0604e4d8550d74e08b7a14f44d6a6ea0cb7 Mon Sep 17 00:00:00 2001 From: Shuhei Kadowaki <40514306+aviatesk@users.noreply.github.com> Date: Fri, 3 Mar 2023 09:40:31 +0900 Subject: [PATCH 28/52] effects: handle va-method properly when refining `:inaccessiblememonly` (#48854) Previously the `:inaccessiblememonly` effect bit may be wrongly refined when analyzing va-method, e.g.: ```julia julia> callgetfield1(xs...) = getfield(getfield(xs, 1), 1) callgetfield1 (generic function with 1 method) julia> Base.infer_effects(callgetfield1, (Base.RefValue{Symbol},)) (+c,+e,!n,+t,+s,+m,+i) # inaccessiblememonly is wrongly refined here ``` This leads to wrong concrete evaluation of `callgetfield1` and thus may result in a problem like below: ```julia julia> const GLOBAL_XS = Ref(:julia); julia> global_getfield() = callgetfield1(GLOBAL_XS); julia> @test let Base.Experimental.@force_compile global_getfield() end === :julia Test Passed julia> GLOBAL_XS[] = :julia2; julia> @test let Base.Experimental.@force_compile global_getfield() end === :julia2 # this fails Test Failed at REPL[8]:1 Expression: let #= REPL[8]:2 =# Base.Experimental.@force_compile global_getfield() end === :julia2 Evaluated: julia === julia2 ``` This commit fixes it up. --- base/compiler/abstractinterpretation.jl | 2 +- base/compiler/inferencestate.jl | 8 +++++--- base/compiler/typeinfer.jl | 2 +- test/compiler/effects.jl | 15 +++++++++++++++ 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/base/compiler/abstractinterpretation.jl b/base/compiler/abstractinterpretation.jl index 82035070ac2c9..1ee84f50edf2f 100644 --- a/base/compiler/abstractinterpretation.jl +++ b/base/compiler/abstractinterpretation.jl @@ -2692,7 +2692,7 @@ 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 diff --git a/base/compiler/inferencestate.jl b/base/compiler/inferencestate.jl index 0c4dd03e925db..ca2e1acc2ee94 100644 --- a/base/compiler/inferencestate.jl +++ b/base/compiler/inferencestate.jl @@ -613,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/typeinfer.jl b/base/compiler/typeinfer.jl index 3fb66852a8ee5..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) diff --git a/test/compiler/effects.jl b/test/compiler/effects.jl index 82da475c6429a..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 From e25fcc9bf1a90199b75a05a96109f7c9b5483709 Mon Sep 17 00:00:00 2001 From: Ian Butterworth Date: Tue, 21 Feb 2023 08:02:28 -0500 Subject: [PATCH 29/52] Test: add space after test failure for visual clarity (#48526) (cherry picked from commit ba1e568966f82f4732f9a906ab186b02741eccb0) --- stdlib/Test/docs/src/index.md | 2 ++ stdlib/Test/src/Test.jl | 2 ++ 2 files changed, 4 insertions(+) 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 13a0a2db8eac5..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 ``` """ From 54bdee82590d6470ab5df50323f1063f046038ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mos=C3=A8=20Giordano?= Date: Sat, 25 Feb 2023 11:20:42 +0000 Subject: [PATCH 30/52] [Make.inc] Define new variable `PATCHELF_SET_RPATH_ARG` (cherry picked from commit 219ef2184723ba0c2bb89af96d79c368c4a0f673) --- Make.inc | 4 ++++ Makefile | 14 +++++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/Make.inc b/Make.inc index acc0a6a7147ef..84a497b220c70 100644 --- a/Make.inc +++ b/Make.inc @@ -1035,6 +1035,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 41359c5e82e64..9c3dd44b704cd 100644 --- a/Makefile +++ b/Makefile @@ -368,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 @@ -400,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)) @@ -440,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 From a671f0cce8823c1e46659e070d9aefa4ffa7e5c4 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Sun, 26 Feb 2023 07:01:21 -0500 Subject: [PATCH 31/52] Accept weakdeps as a source for UUIDS for Preferences (cherry picked from commit d6431a38913f0b2c44f1147e354fa9a773fabc56) --- base/loading.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/base/loading.jl b/base/loading.jl index 9b301b414b0e8..edbfb96211917 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -2463,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} @@ -2478,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 From b5243af0e7cab90aab873e6ee27c35be5c82d5ec Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Tue, 28 Feb 2023 12:26:50 +0100 Subject: [PATCH 32/52] add a type assert to logging to prevent Base.require invalidation (#48810) (cherry picked from commit 85709517be408f32cf102234b906f3d918fafdf2) --- base/logging.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 2497f835dfaa75c0301b07522b43983b24de3431 Mon Sep 17 00:00:00 2001 From: Cody Tapscott <84105208+topolarity@users.noreply.github.com> Date: Tue, 28 Feb 2023 11:14:40 -0700 Subject: [PATCH 33/52] Add libjulia-internal to ORCJIT symbol resolution (#48712) We need to make sure that libjulia-internal is loaded and placed first in the DynamicLibrary search 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). (cherry picked from commit fd45943e993ea851edcc4b1f2cc7e002438be07e) --- src/jitlayers.cpp | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/jitlayers.cpp b/src/jitlayers.cpp index db99cee8b724d..774d5554b5f0e 100644 --- a/src/jitlayers.cpp +++ b/src/jitlayers.cpp @@ -1270,13 +1270,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()))); From 8ba214d3d3cdfbc61d0e72df25afc5361a29ff56 Mon Sep 17 00:00:00 2001 From: Mark Kittisopikul Date: Tue, 28 Feb 2023 14:47:46 -0500 Subject: [PATCH 34/52] Update MbedTLS to 2.28.2 (#48806) * Update MbedTLS to 2.28.2 * Update deps/mbedtls.mk * Update mbedtls checksum (cherry picked from commit 127fb73ef5804e0c040aefadb47eb07763e36d9c) --- deps/checksums/mbedtls | 68 ++++++++++++++--------------- deps/mbedtls.mk | 2 +- deps/mbedtls.version | 2 +- stdlib/MbedTLS_jll/Project.toml | 2 +- stdlib/MbedTLS_jll/test/runtests.jl | 2 +- 5 files changed, 38 insertions(+), 38 deletions(-) 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/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/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 From b710bd22d2f236500d44814716084935da1e4926 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mos=C3=A8=20Giordano?= Date: Wed, 1 Mar 2023 15:44:14 +0000 Subject: [PATCH 35/52] Always use `-Wl,--warn-unresolved-symbols` in MSAN builds (#48835) * Always use `-Wl,--warn-unresolved-symbols` in MSAN builds * Use `-Wl,--warn-unresolved-symbols` only on Linux and FreeBSD (cherry picked from commit a07f51298994299eaeeae3bb254f2079aa6b6e4a) --- Make.inc | 5 ++++- deps/libsuitesparse.mk | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Make.inc b/Make.inc index 84a497b220c70..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 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)" From 3f040cad9f4456a7833ebe31a3194312a7069280 Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Thu, 2 Mar 2023 22:42:18 -0600 Subject: [PATCH 36/52] Calculate a checksum for the system image (#48869) (cherry picked from commit 48b4caaf94c6dcfc9d28e9929ebb27d480b7b6cc) --- src/staticdata.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/staticdata.c b/src/staticdata.c index f8b509a89007e..697617f53be3c 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -3367,10 +3367,9 @@ 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) @@ -3421,8 +3420,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(); } @@ -3433,7 +3433,8 @@ 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(); } From df3f68619e44c03d710b91190890631471c89251 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Fri, 3 Mar 2023 03:45:33 -0500 Subject: [PATCH 37/52] fixup! effects: taint `nonoverlayed` when bailing out inference (#48838) --- test/compiler/AbstractInterpreter.jl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/compiler/AbstractInterpreter.jl b/test/compiler/AbstractInterpreter.jl index e20d328ccbdb6..7c7298940569e 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) From 44085f952922b008a81855f97fff24a45e6a2d35 Mon Sep 17 00:00:00 2001 From: pchintalapudi <34727397+pchintalapudi@users.noreply.github.com> Date: Tue, 21 Feb 2023 23:07:54 -0500 Subject: [PATCH 38/52] Atomically order specsigflags, specptr, and invoke (#47832) Co-authored-by: Jameson Nash Co-authored-by: Dilum Aluthge (cherry picked from commit 6412a56223e38824ce6eff78bf34662637971e1c) --- src/codegen.cpp | 40 +++++++++++++----- src/gf.c | 98 ++++++++++++++++++++++++++++++-------------- src/jitlayers.cpp | 46 +++++++++++++-------- src/julia.h | 2 +- src/julia_atomics.h | 9 ++++ src/opaque_closure.c | 27 +++++++----- src/staticdata.c | 6 +-- 7 files changed, 155 insertions(+), 73 deletions(-) diff --git a/src/codegen.cpp b/src/codegen.cpp index 5b8459311d22f..697aba43eef97 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -4215,7 +4215,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); @@ -4240,10 +4240,14 @@ static jl_cgval_t emit_invoke(jl_codectx_t &ctx, const jl_cgval_t &lival, const 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; } @@ -5763,9 +5767,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 +5786,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,7 +8513,7 @@ 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 = 0 && jl_object_in_image((jl_value_t*)codeinst); @@ -8508,10 +8521,17 @@ void jl_compile_workqueue( // 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; } diff --git a/src/gf.c b/src/gf.c index 024faa145c6f7..d7acac2526fff 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; @@ -2217,12 +2217,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 +2268,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 +2300,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 +2317,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 +2327,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 +2367,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 +2701,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 +2721,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 774d5554b5f0e..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) { diff --git a/src/julia.h b/src/julia.h index f62d9af58234e..5756d229d3173 100644 --- a/src/julia.h +++ b/src/julia.h @@ -433,7 +433,7 @@ 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; // & 0b1 == specptr is a specialized function signature for specTypes->rettype, &0b10 == invokeptr matches specptr _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 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/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/staticdata.c b/src/staticdata.c index 697617f53be3c..e99c2d87c1396 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -1396,7 +1396,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; @@ -1916,7 +1916,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 = 0b11; // TODO: set only if confirmed to be true } else { codeinst->invoke = (jl_callptr_t)fptr; @@ -2002,7 +2002,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)); v = (uintptr_t)codeinst->specptr.fptr; } *gv = v; From 570251ec8de8e69ab0d9906f71285d75be4fab49 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Sat, 25 Feb 2023 15:31:33 -0700 Subject: [PATCH 39/52] enable re-using external code in pkgimages (#48723) * enable using external code in pkgimages This was unintentionally disabled (and incomplete) in the original PR for pkgimages. Co-authored-by: Valentin Churavy (cherry picked from commit c136b7e787aee1dffefcea6afce51d0bdd6d5dd1) --- base/linking.jl | 4 +- src/aotcompile.cpp | 24 ++-------- src/codegen.cpp | 111 +++++++++++++++++++++++++++------------------ src/jitlayers.h | 2 +- src/julia.h | 4 +- src/staticdata.c | 9 ++-- 6 files changed, 80 insertions(+), 74 deletions(-) diff --git a/base/linking.jl b/base/linking.jl index ef0426cddcc97..38cbdcd562693 100644 --- a/base/linking.jl +++ b/base/linking.jl @@ -162,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/src/aotcompile.cpp b/src/aotcompile.cpp index 03eacff192a51..785398fa3ec33 100644 --- a/src/aotcompile.cpp +++ b/src/aotcompile.cpp @@ -369,34 +369,16 @@ void *jl_create_native_impl(jl_array_t *methods, LLVMOrcThreadSafeModuleRef llvm size_t offset = gvars.size(); data->jl_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.cpp b/src/codegen.cpp index 697aba43eef97..f7adf9c3f6efd 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -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; } } @@ -4227,16 +4259,17 @@ 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 (0 && 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? @@ -4249,15 +4282,20 @@ static jl_cgval_t emit_invoke(jl_codectx_t &ctx, const jl_cgval_t &lival, const 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); @@ -4265,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)); @@ -5598,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 (0 && 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); @@ -8515,9 +8539,6 @@ void jl_compile_workqueue( bool preal_specsig = false; auto invoke = jl_atomic_load_acquire(&codeinst->invoke); bool cache_valid = params.cache; - if (params.external_linkage) { - cache_valid = 0 && 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); diff --git a/src/jitlayers.h b/src/jitlayers.h index fed5092789008..87be629e55cab 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; diff --git a/src/julia.h b/src/julia.h index 5756d229d3173..d5697f75297d0 100644 --- a/src/julia.h +++ b/src/julia.h @@ -433,7 +433,9 @@ typedef struct _jl_code_instance_t { jl_value_t *argescapes; // escape information of call arguments // compilation state cache - _Atomic(uint8_t) specsigflags; // & 0b1 == specptr is a specialized function signature for specTypes->rettype, &0b10 == invokeptr matches specptr + _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 diff --git a/src/staticdata.c b/src/staticdata.c index e99c2d87c1396..01254bf1f963b 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -1105,7 +1105,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 } @@ -1916,7 +1916,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->specsigflags = 0b11; // 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; @@ -1953,11 +1953,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 @@ -2002,7 +2003,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->specsigflags & 0b01)); + assert(codeinst && (codeinst->specsigflags & 0b01) && codeinst->specptr.fptr); v = (uintptr_t)codeinst->specptr.fptr; } *gv = v; From 4710009fd04460aafb4b10f9a9568f907d2d95ea Mon Sep 17 00:00:00 2001 From: William Moses Date: Fri, 10 Feb 2023 15:02:21 -0500 Subject: [PATCH 40/52] Fix final gc lowering on dynamically sized allocation (#48620) (cherry picked from commit 7e57dc7bcf60eab24d89497d5ac4077c2603d120) --- src/llvm-final-gc-lowering.cpp | 48 ++++++++++++++++++++----------- src/llvm-pass-helpers.cpp | 19 ++++++++++++ src/llvm-pass-helpers.h | 3 ++ test/llvmpasses/final-lower-gc.ll | 15 ++++++++++ 4 files changed, 68 insertions(+), 17 deletions(-) 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/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"} From b07fb407104ef8338c129296019cfe55c7c43f64 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Tue, 28 Feb 2023 20:09:15 -0500 Subject: [PATCH 41/52] gf: cache cache_with_orig decision (#48833) Memoizing this can save a lot of repeated effort for queries such as `@which eltype(String)`. Otherwise we repeatedly try to check if `eltype(::Type)` is a good way to cache that result, even though it never gets better the more we check it. (cherry picked from commit bdcd5e2c6d0fdea879a961f1a72d774b743cc846) --- src/gf.c | 6 ++++++ src/jltypes.c | 6 ++++-- src/julia.h | 1 + src/method.c | 1 + 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/gf.c b/src/gf.c index d7acac2526fff..443cebcf58e71 100644 --- a/src/gf.c +++ b/src/gf.c @@ -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)` 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 d5697f75297d0..f75d240d92595 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 }; diff --git a/src/method.c b/src/method.c index 852c5bf25659a..f6da5106433d1 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->inInference = 0; li->precompiled = 0; return li; } From d57c4eacbbe73f897d26761ed62a5dba28f6fcd5 Mon Sep 17 00:00:00 2001 From: KristofferC Date: Fri, 3 Mar 2023 12:06:25 +0100 Subject: [PATCH 42/52] bump Pkg to latest 1.9 --- .../Pkg-3ced87de6b48ac8b886f5b26b2a1e8dd764614ae.tar.gz/md5 | 1 + .../Pkg-3ced87de6b48ac8b886f5b26b2a1e8dd764614ae.tar.gz/sha512 | 1 + .../Pkg-887b06bb9b768bfca0622f112dc739d1a770932c.tar.gz/md5 | 1 - .../Pkg-887b06bb9b768bfca0622f112dc739d1a770932c.tar.gz/sha512 | 1 - stdlib/Pkg.version | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 deps/checksums/Pkg-3ced87de6b48ac8b886f5b26b2a1e8dd764614ae.tar.gz/md5 create mode 100644 deps/checksums/Pkg-3ced87de6b48ac8b886f5b26b2a1e8dd764614ae.tar.gz/sha512 delete mode 100644 deps/checksums/Pkg-887b06bb9b768bfca0622f112dc739d1a770932c.tar.gz/md5 delete mode 100644 deps/checksums/Pkg-887b06bb9b768bfca0622f112dc739d1a770932c.tar.gz/sha512 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/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 From ec5e702ed89536b6f441ce8059e531e6e70a3277 Mon Sep 17 00:00:00 2001 From: Kristoffer Carlsson Date: Fri, 3 Mar 2023 14:47:40 +0100 Subject: [PATCH 43/52] fixup! fixup! effects: taint `nonoverlayed` when bailing out inference (#48838) --- test/compiler/AbstractInterpreter.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/compiler/AbstractInterpreter.jl b/test/compiler/AbstractInterpreter.jl index 7c7298940569e..dfdf84d9c2fbe 100644 --- a/test/compiler/AbstractInterpreter.jl +++ b/test/compiler/AbstractInterpreter.jl @@ -22,7 +22,7 @@ macro newinterp(name) meta # additional information $name(world = Base.get_world_counter(); interp = CC.NativeInterpreter(world), - cache = $cachename(IdDict{MethodInstance,CodeInstance}(), + cache = $cachename(IdDict{MethodInstance,CodeInstance}()), meta = nothing ) = new(interp, cache, meta) end From 65a025f58b5d1deb7d5f580a04aabaa7de62b3f5 Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Fri, 3 Mar 2023 06:11:00 -0500 Subject: [PATCH 44/52] staticdata: make hookup of code instances correct (#48751) Previously we would double-account for many of these, leading to occasional chaos. Try to avoid serializing code that does not belong to this incremental compilation session package. Refs: #48723 (cherry picked from commit 81f366d7d731ecaaad34ad4dbacdfe53f4f06fa4) --- src/method.c | 2 + src/staticdata.c | 58 ++++++++++--------- src/staticdata_utils.c | 128 ++++++++++++++--------------------------- 3 files changed, 78 insertions(+), 110 deletions(-) diff --git a/src/method.c b/src/method.c index f6da5106433d1..9e905bb7a483f 100644 --- a/src/method.c +++ b/src/method.c @@ -603,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/staticdata.c b/src/staticdata.c index 01254bf1f963b..2a67b2ac7836f 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -608,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); @@ -648,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); @@ -672,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; @@ -700,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)); @@ -775,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; @@ -818,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) { @@ -2877,10 +2897,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); @@ -3142,19 +3163,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 @@ -3330,7 +3340,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(); @@ -3342,12 +3351,9 @@ 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); diff --git a/src/staticdata_utils.c b/src/staticdata_utils.c index abecb98eb2455..9ff2c68f31b89 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,35 @@ 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)); 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 +820,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 +1050,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 +1100,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 +1128,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) { From c1cb0582428266781b48b63b89d5d5901e101a6e Mon Sep 17 00:00:00 2001 From: Jameson Nash Date: Tue, 28 Feb 2023 20:10:17 -0500 Subject: [PATCH 45/52] staticdata: make completeinfo memory-/gc-safe (#48832) There is actually almost no cases where `jl_alloc_svec_uninit` is safe, since if was safe, you would likely would prefer to use the `jl_svec` constructor instead. (cherry picked from commit 0608824bd9553514d71fa3a67d6c9fafecbe15be) --- src/staticdata.c | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/src/staticdata.c b/src/staticdata.c index 2a67b2ac7836f..40fed31c70aab 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -3308,7 +3308,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; @@ -3354,19 +3354,22 @@ static jl_value_t *jl_restore_package_image_from_stream(ios_t *f, jl_image_t *im // reinit ccallables jl_reinit_ccallable(&ccallable_list, base, NULL); arraylist_free(&ccallable_list); - 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); + } } } @@ -3379,16 +3382,16 @@ static void jl_restore_system_image_from_stream(ios_t *f, jl_image_t *image, uin jl_restore_system_image_from_stream_(f, image, NULL, checksum | ((uint64_t)0xfdfcfbfa << 32), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); } -JL_DLLEXPORT jl_value_t *jl_restore_incremental_from_buf(const char *buf, jl_image_t *image, size_t sz, jl_array_t *depmods, int 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) { @@ -3396,7 +3399,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; } @@ -3446,7 +3449,7 @@ JL_DLLEXPORT void jl_restore_system_image_data(const char *buf, size_t len) 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) { @@ -3498,7 +3501,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; } From fcde5693bf11d1b5625b992360fde47c0bc538c1 Mon Sep 17 00:00:00 2001 From: Valentin Churavy Date: Sun, 5 Mar 2023 20:47:20 -0500 Subject: [PATCH 46/52] fixup! gf: cache cache_with_orig decision (#48833) --- src/method.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/method.c b/src/method.c index f6da5106433d1..4d59dabc79c4e 100644 --- a/src/method.c +++ b/src/method.c @@ -447,7 +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->inInference = 0; + li->cache_with_orig = 0; li->precompiled = 0; return li; } From 8024dd6cc9fab787fd8e44108e509751413f114a Mon Sep 17 00:00:00 2001 From: Patrick Bouffard Date: Fri, 3 Mar 2023 11:10:13 -0800 Subject: [PATCH 47/52] Add note to NEWS about keywords in tab completion (#48863) (cherry picked from commit 3850e88dedb511e6329518f00f8d671d9ab750b3) --- NEWS.md | 1 + 1 file changed, 1 insertion(+) 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 From fd1108bc438a7c9da42e2c7f82de253ddcf9ad88 Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Fri, 3 Mar 2023 17:15:33 -0600 Subject: [PATCH 48/52] staticdata: set method.nroots_sysimg in `jl_write_values` (#48875) This ensures that the value gets set after all possible compilation has occurred. (cherry picked from commit 0ec704e2669f7190e8b3f346b1ff8bab85205472) --- src/staticdata.c | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/src/staticdata.c b/src/staticdata.c index 40fed31c70aab..926ee4e2b3186 100644 --- a/src/staticdata.c +++ b/src/staticdata.c @@ -1386,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); @@ -2206,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; @@ -2330,8 +2310,6 @@ static void jl_save_system_image_to_stream(ios_t *f, jl_array_t *mod_array, // 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; From 96b3fe3315bc379735a4ad2fc3645e481bf78892 Mon Sep 17 00:00:00 2001 From: Tim Holy Date: Fri, 3 Mar 2023 17:21:01 -0600 Subject: [PATCH 49/52] staticdata: check ci->relocatability before caching external specializations (#48882) Fixes #48837 (cherry picked from commit 89f30fff275a9abbc99c9513922e6cff62622cfa) --- src/staticdata_utils.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/staticdata_utils.c b/src/staticdata_utils.c index 9ff2c68f31b89..60cea5b99c4b5 100644 --- a/src/staticdata_utils.c +++ b/src/staticdata_utils.c @@ -230,6 +230,8 @@ static jl_array_t *queue_external_cis(jl_array_t *list) 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 (ci->inferred && jl_is_method(m) && jl_object_in_image((jl_value_t*)m->module)) { From 9f3b747a03960e0e706422521f7b792da3b7c409 Mon Sep 17 00:00:00 2001 From: Prem Chintalapudi Date: Sun, 5 Mar 2023 03:37:58 -0500 Subject: [PATCH 50/52] Initialize JIT bytes (cherry picked from commit 39e34ee6f890ce2923aa37ff0a6fb76e17f1c78b) --- src/jitlayers.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/jitlayers.h b/src/jitlayers.h index 87be629e55cab..810a992317359 100644 --- a/src/jitlayers.h +++ b/src/jitlayers.h @@ -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; From e6249e76b07972c4058e2eaf753d025dc5e677af Mon Sep 17 00:00:00 2001 From: Lilith Orion Hafner Date: Sun, 5 Mar 2023 21:35:44 -0600 Subject: [PATCH 51/52] Fix sorting missing values with offset indices (#48864) * Fix sorting missing values with offset indices * Add tests (cherry picked from commit 7eb961588f204e1866aea0bdee63f5dd91d42ac3) --- base/sort.jl | 1 + test/sorting.jl | 7 +++++++ 2 files changed, 8 insertions(+) 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/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 From 9ced0709ec7dbc442e516431ef3af1502458d03f Mon Sep 17 00:00:00 2001 From: Gabriel Baraldi Date: Fri, 3 Mar 2023 14:32:51 -0300 Subject: [PATCH 52/52] Fix heapsize hint and use a line for max memory (#48747) * Fix heapsize hint and use a line so that large machines utilize more of their ram (cherry picked from commit 51db8af409f0a386dc26a1fa674f923db0dcc6a3) --- src/gc.c | 14 +++++++++++++- src/jl_exported_funcs.inc | 1 + src/julia.h | 1 + test/cmdlineargs.jl | 2 ++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/gc.c b/src/gc.c index 9e824e2829edb..c6f338725dd1b 100644 --- a/src/gc.c +++ b/src/gc.c @@ -3680,8 +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; - max_total_memory = total_mem / 10 * 6; + double percent; + if (total_mem < 128e9) + percent = total_mem * 2.34375e-12 + 0.6; // 60% at 0 gigs and 90% at 128 to not + else // overcommit too much on memory contrained devices + percent = 0.9; + max_total_memory = total_mem * percent; #endif + if (jl_options.heap_size_hint) + jl_gc_set_max_memory(jl_options.heap_size_hint); jl_gc_mark_sp_t sp = {NULL, NULL, NULL, NULL}; gc_mark_loop(NULL, sp); @@ -3695,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/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/julia.h b/src/julia.h index f75d240d92595..2fe299c6edffb 100644 --- a/src/julia.h +++ b/src/julia.h @@ -925,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/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