diff --git a/.buildkite/cryptic_repo_keys/.gitignore b/.buildkite/cryptic_repo_keys/.gitignore new file mode 100644 index 0000000000000..8d18931dbcf7c --- /dev/null +++ b/.buildkite/cryptic_repo_keys/.gitignore @@ -0,0 +1,5 @@ +# Ignore the unencrypted repo_key +repo_key + +# Ignore any agent keys (public or private) we have stored +agent_key* diff --git a/.buildkite/pipelines/experimental/0_webui.yml b/.buildkite/pipelines/experimental/0_webui.yml index 54dbbc59d4256..eee9743d39f6a 100644 --- a/.buildkite/pipelines/experimental/0_webui.yml +++ b/.buildkite/pipelines/experimental/0_webui.yml @@ -4,7 +4,6 @@ agents: queue: "julia" sandbox.jl: "true" - steps: - label: ":unlock: Unlock secrets, launch pipelines" plugins: @@ -16,9 +15,8 @@ steps: # pipelines. unsigned_pipelines: - .buildkite/pipelines/experimental/launch_unsigned_builders.yml - # Our signed pipelines must have a `signature` or `signature_file` parameter that # verifies the treehash of the pipeline itself and the inputs listed in `inputs` # signed_pipelines: # - pipeline: .buildkite/pipelines/experimental/misc/foo_bar_baz.yml - # signature: "my_signature" + # signature_file: .buildkite/pipelines/experimental/misc/foo_bar_baz.yml.signature diff --git a/.buildkite/pipelines/experimental/launch_unsigned_builders.yml b/.buildkite/pipelines/experimental/launch_unsigned_builders.yml index f023e19a5c940..04d82a6e39a5e 100644 --- a/.buildkite/pipelines/experimental/launch_unsigned_builders.yml +++ b/.buildkite/pipelines/experimental/launch_unsigned_builders.yml @@ -1,6 +1,6 @@ steps: - label: ":buildkite: Launch unsigned pipelines" commands: | - buildkite-agent pipeline upload .buildkite/pipelines/experimental/misc/sanitizers.yml + true agents: queue: julia diff --git a/.buildkite/pipelines/experimental/misc/sanitizers.yml b/.buildkite/pipelines/experimental/misc/sanitizers.yml deleted file mode 100644 index 67c0b547d4b20..0000000000000 --- a/.buildkite/pipelines/experimental/misc/sanitizers.yml +++ /dev/null @@ -1,31 +0,0 @@ -agents: - queue: "julia" - # Only run on `sandbox.jl` machines (not `docker`-isolated ones) since we need nestable sandboxing - sandbox.jl: "true" - os: "linux" - -steps: - - label: "asan" - key: asan - plugins: - - JuliaCI/julia#v1: - version: 1.6 - - staticfloat/sandbox#v1: - rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v3.1/llvm_passes.x86_64.tar.gz - rootfs_treehash: "9dd715500b117a16fcfa419ea0bca0c0ca902cee" - uid: 1000 - gid: 1000 - workspaces: - - "/cache/repos:/cache/repos" - # `contrib/check-asan.jl` needs a `julia` binary: - - JuliaCI/julia#v1: - version: 1.6 - commands: | - echo "--- Build julia-debug with ASAN" - contrib/asan/build.sh ./tmp/test-asan -j$${JULIA_NUM_CORES} debug - echo "--- Test that ASAN is enabled" - contrib/asan/check.jl ./tmp/test-asan/asan/usr/bin/julia-debug - timeout_in_minutes: 120 - # notify: # TODO: uncomment this line - # - github_commit_status: # TODO: uncomment this line - # context: "asan" # TODO: uncomment this line diff --git a/.buildkite/pipelines/main/0_webui.yml b/.buildkite/pipelines/main/0_webui.yml index 8e7b9c58ea423..af68158f9a51f 100644 --- a/.buildkite/pipelines/main/0_webui.yml +++ b/.buildkite/pipelines/main/0_webui.yml @@ -4,7 +4,6 @@ agents: queue: "julia" sandbox.jl: "true" - steps: - label: ":unlock: Unlock secrets, launch pipelines" plugins: diff --git a/.buildkite/pipelines/main/launch_unsigned_builders.yml b/.buildkite/pipelines/main/launch_unsigned_builders.yml index 6e9f0f0d8fa23..2b6794ed13bd1 100644 --- a/.buildkite/pipelines/main/launch_unsigned_builders.yml +++ b/.buildkite/pipelines/main/launch_unsigned_builders.yml @@ -13,17 +13,21 @@ # something about the privileged steps. steps: - - label: ":buildkite: Launch unsigned builders" + - label: ":buildkite: Launch unsigned jobs" commands: | - # First, we launch the `whitespace` builder, because we want that builder to finish as quickly as possible. - buildkite-agent pipeline upload .buildkite/pipelines/main/misc/whitespace.yml - - # Next, we launch the miscellaneous builders in alphabetical order. + # Launch the miscellaneous jobs in alphabetical order. buildkite-agent pipeline upload .buildkite/pipelines/main/misc/doctest.yml buildkite-agent pipeline upload .buildkite/pipelines/main/misc/embedding.yml buildkite-agent pipeline upload .buildkite/pipelines/main/misc/llvmpasses.yml + buildkite-agent pipeline upload .buildkite/pipelines/main/misc/sanitizers.yml - # Finally, we launch the platform builders (`package_*`) and (`tester_*`) in alphabetical order. - buildkite-agent pipeline upload .buildkite/pipelines/main/platforms/linux64.yml + # Launch all of the platform jobs. + bash .buildkite/utilities/platforms/platforms.sh .buildkite/pipelines/main/platforms/package_linux.arches .buildkite/pipelines/main/platforms/package_linux.yml + bash .buildkite/utilities/platforms/platforms.sh .buildkite/pipelines/main/platforms/tester_linux.arches .buildkite/pipelines/main/platforms/tester_linux.yml + + # Launch the `whitespace` job last. Uploading it last actually causes it to start + # first. We want this job to start first because we want it to finish as quickly + # as possible. + buildkite-agent pipeline upload .buildkite/pipelines/main/misc/whitespace.yml agents: queue: julia diff --git a/.buildkite/pipelines/main/misc/doctest.yml b/.buildkite/pipelines/main/misc/doctest.yml index 0a5dc29bcb1c7..b83139ddc1f9b 100644 --- a/.buildkite/pipelines/main/misc/doctest.yml +++ b/.buildkite/pipelines/main/misc/doctest.yml @@ -3,16 +3,17 @@ agents: # Only run on `sandbox.jl` machines (not `docker`-isolated ones) since we need nestable sandboxing sandbox.jl: "true" os: "linux" - steps: - label: "doctest" key: doctest plugins: - JuliaCI/julia#v1: - version: 1.6 + # Drop default "registries" directory, so it is not persisted from execution to execution + persist_depot_dirs: packages,artifacts,compiled + version: '1.6' - staticfloat/sandbox#v1: - rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v3.1/package_linux.x86_64.tar.gz - rootfs_treehash: "8c33c341a864852629b8aac01a6eb6a79b73570e" + rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v4.8/package_linux.x86_64.tar.gz + rootfs_treehash: "2a058481b567f0e91b9aa3ce4ad4f09e6419355a" uid: 1000 gid: 1000 workspaces: @@ -20,7 +21,7 @@ steps: - "/cache/repos:/cache/repos" commands: | echo "--- Build Julia from source" - make -j 6 + make --output-sync -j 6 echo "--- Print Julia version info" ./julia -e 'using InteractiveUtils; InteractiveUtils.versioninfo()' @@ -31,6 +32,3 @@ steps: echo "--- Run Julia doctests" JULIA_NUM_THREADS=1 make -C doc doctest=true timeout_in_minutes: 45 - notify: - - github_commit_status: - context: "doctest" diff --git a/.buildkite/pipelines/main/misc/embedding.yml b/.buildkite/pipelines/main/misc/embedding.yml index 087ca0f68eb3d..bdd2a0a6065f5 100644 --- a/.buildkite/pipelines/main/misc/embedding.yml +++ b/.buildkite/pipelines/main/misc/embedding.yml @@ -3,16 +3,17 @@ agents: # Only run on `sandbox.jl` machines (not `docker`-isolated ones) since we need nestable sandboxing sandbox.jl: "true" os: "linux" - steps: - label: "embedding" key: "embedding" plugins: - JuliaCI/julia#v1: - version: 1.6 + # Drop default "registries" directory, so it is not persisted from execution to execution + persist_depot_dirs: packages,artifacts,compiled + version: '1.6' - staticfloat/sandbox#v1: - rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v3.1/package_linux.x86_64.tar.gz - rootfs_treehash: "8c33c341a864852629b8aac01a6eb6a79b73570e" + rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v4.8/package_linux.x86_64.tar.gz + rootfs_treehash: "2a058481b567f0e91b9aa3ce4ad4f09e6419355a" uid: 1000 gid: 1000 workspaces: @@ -20,15 +21,11 @@ steps: - "/cache/repos:/cache/repos" commands: | prefix="/tmp/prefix" - echo "+++ Build julia, deploy to $${prefix}" - make -j$${JULIA_NUM_CORES} JULIA_PRECOMPILE=0 prefix=$${prefix} install + echo "+++ Build julia, deploy to $${prefix:?}" + make --output-sync -j$${JULIA_CPU_THREADS:?} JULIA_PRECOMPILE=0 prefix=$${prefix:?} install embedding_output="/tmp/embedding-test" - echo "+++ Run embedding tests, deploy to $${embedding_output}" - mkdir -p "$${embedding_output}" - make -j$${JULIA_NUM_CORES} -C test/embedding JULIA="$${prefix}/bin/julia" BIN="$${embedding_output}" - + echo "+++ Run embedding tests, deploy to $${embedding_output:?}" + mkdir -p "$${embedding_output:?}" + make --output-sync -j$${JULIA_CPU_THREADS:?} -C test/embedding JULIA="$${prefix:?}/bin/julia" BIN="$${embedding_output:?}" timeout_in_minutes: 60 - notify: - - github_commit_status: - context: "embedding" diff --git a/.buildkite/pipelines/main/misc/llvmpasses.yml b/.buildkite/pipelines/main/misc/llvmpasses.yml index a012ace41acff..1f6d89014eb0d 100644 --- a/.buildkite/pipelines/main/misc/llvmpasses.yml +++ b/.buildkite/pipelines/main/misc/llvmpasses.yml @@ -3,50 +3,46 @@ agents: # Only run on `sandbox.jl` machines (not `docker`-isolated ones) since we need nestable sandboxing sandbox.jl: "true" os: "linux" - steps: - label: "analyzegc" key: "analyzegc" plugins: - JuliaCI/julia#v1: - version: 1.6 + # Drop default "registries" directory, so it is not persisted from execution to execution + persist_depot_dirs: packages,artifacts,compiled + version: '1.6' - staticfloat/sandbox#v1: - rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v3.1/llvm_passes.x86_64.tar.gz - rootfs_treehash: "9dd715500b117a16fcfa419ea0bca0c0ca902cee" + rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v4.8/llvm_passes.x86_64.tar.gz + rootfs_treehash: "c7a289a8cc544b234b1e2d7cbcce3e6815359ecd" workspaces: # Include `/cache/repos` so that our `git` version introspection works. - "/cache/repos:/cache/repos" commands: | echo "--- Install in-tree LLVM dependencies" - make -j$${JULIA_NUM_CORES} -C deps install-llvm install-clang install-llvm-tools install-libuv install-utf8proc install-unwind + make --output-sync -j$${JULIA_CPU_THREADS:?} -C deps install-llvm install-clang install-llvm-tools install-libuv install-utf8proc install-unwind echo "+++ run clangsa/analyzegc" - make -j$${JULIA_NUM_CORES} -C test/clangsa - make -j$${JULIA_NUM_CORES} -C src analyzegc + make --output-sync -j$${JULIA_CPU_THREADS:?} -C test/clangsa + make --output-sync -j$${JULIA_CPU_THREADS:?} -C src analyzegc timeout_in_minutes: 60 - notify: - - github_commit_status: - context: "analyzegc" - - label: "llvmpasses" key: "llvmpasses" plugins: - JuliaCI/julia#v1: - version: 1.6 + # Drop default "registries" directory, so it is not persisted from execution to execution + persist_depot_dirs: packages,artifacts,compiled + version: '1.6' - staticfloat/sandbox#v1: - rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v3.8/package_linux.x86_64.tar.gz - rootfs_treehash: "84a323ae8fcc724f8ea5aca5901bbbf4bda3e519" + rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v4.8/package_linux.x86_64.tar.gz + rootfs_treehash: "2a058481b567f0e91b9aa3ce4ad4f09e6419355a" uid: 1000 gid: 1000 workspaces: - "/cache/repos:/cache/repos" commands: | echo "--- make release" - make -j$${JULIA_NUM_CORES} release JULIA_PRECOMPILE=0 + make --output-sync -j$${JULIA_CPU_THREADS:?} release JULIA_PRECOMPILE=0 echo "--- make src/install-analysis-deps" - make -j$${JULIA_NUM_CORES} -C src install-analysis-deps + make --output-sync -j$${JULIA_CPU_THREADS:?} -C src install-analysis-deps echo "+++ make test/llvmpasses" - make -j$${JULIA_NUM_CORES} -C test/llvmpasses + make --output-sync -j$${JULIA_CPU_THREADS:?} -C test/llvmpasses timeout_in_minutes: 60 - notify: - - github_commit_status: - context: "llvmpasses" diff --git a/.buildkite/pipelines/main/misc/sanitizers.yml b/.buildkite/pipelines/main/misc/sanitizers.yml new file mode 100644 index 0000000000000..a0c40dda7e12f --- /dev/null +++ b/.buildkite/pipelines/main/misc/sanitizers.yml @@ -0,0 +1,47 @@ +agents: + queue: "julia" + # Only run on `sandbox.jl` machines (not `docker`-isolated ones) since we need nestable sandboxing + sandbox.jl: "true" + os: "linux" +steps: + - label: "asan" + key: "asan" + plugins: + - JuliaCI/julia#v1: + # Drop default "registries" directory, so it is not persisted from execution to execution + persist_depot_dirs: packages,artifacts,compiled + version: '1.6' + - staticfloat/sandbox#v1: + rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v4.8/llvm_passes.x86_64.tar.gz + rootfs_treehash: "c7a289a8cc544b234b1e2d7cbcce3e6815359ecd" + uid: 1000 + gid: 1000 + workspaces: + - "/cache/repos:/cache/repos" + timeout_in_minutes: 120 + if: | # We only run the `asan` job on Julia 1.8 and later. + (pipeline.slug != "julia-release-1-dot-6") && (pipeline.slug != "julia-release-1-dot-7") + soft_fail: true # TODO: delete this line (and thus disallow failures) once JuliaLang/julia#42540 is fixed + commands: | + echo "--- Build julia-debug with ASAN" + contrib/asan/build.sh ./tmp/test-asan -j$${JULIA_CPU_THREADS:?} debug + - label: "tsan" + key: "tsan" + plugins: + - JuliaCI/julia#v1: + # Drop default "registries" directory, so it is not persisted from execution to execution + persist_depot_dirs: packages,artifacts,compiled + version: '1.6' + - staticfloat/sandbox#v1: + rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v4.8/llvm_passes.x86_64.tar.gz + rootfs_treehash: "c7a289a8cc544b234b1e2d7cbcce3e6815359ecd" + uid: 1000 + gid: 1000 + workspaces: + - "/cache/repos:/cache/repos" + timeout_in_minutes: 120 + if: | # We only run the `tsan` job on Julia 1.8 and later. + (pipeline.slug != "julia-release-1-dot-6") && (pipeline.slug != "julia-release-1-dot-7") + commands: | + echo "--- Build julia-debug runtime with TSAN" + contrib/tsan/build.sh ./tmp/test-tsan -j$${JULIA_CPU_THREADS:?} julia-src-debug diff --git a/.buildkite/pipelines/main/misc/signed_pipeline_test.yml b/.buildkite/pipelines/main/misc/signed_pipeline_test.yml index fb13ac15a8d65..1d59253d43bce 100644 --- a/.buildkite/pipelines/main/misc/signed_pipeline_test.yml +++ b/.buildkite/pipelines/main/misc/signed_pipeline_test.yml @@ -5,6 +5,10 @@ agents: ## pipeline that showcases decryption of environment variable steps: - label: ":lock: :rocket: Signed pipeline test" + # We must accept the signed job id secret in order to propagate secrets + env: + BUILDKITE_PLUGIN_CRYPTIC_BASE64_SIGNED_JOB_ID_SECRET: ${BUILDKITE_PLUGIN_CRYPTIC_BASE64_SIGNED_JOB_ID_SECRET?} + depends_on: plugins: - staticfloat/cryptic#v1: variables: @@ -12,6 +16,3 @@ steps: commands: | echo "SECRET_KEY: $${SECRET_KEY}" -# We must accept the signed job id secret in order to propagate secrets -env: - BUILDKITE_PLUGIN_CRYPTIC_BASE64_SIGNED_JOB_ID_SECRET: ${BUILDKITE_PLUGIN_CRYPTIC_BASE64_SIGNED_JOB_ID_SECRET?} diff --git a/.buildkite/pipelines/main/misc/signed_pipeline_test.yml.signature b/.buildkite/pipelines/main/misc/signed_pipeline_test.yml.signature index 10220c758086a..b0844748c486f 100644 --- a/.buildkite/pipelines/main/misc/signed_pipeline_test.yml.signature +++ b/.buildkite/pipelines/main/misc/signed_pipeline_test.yml.signature @@ -1 +1 @@ -Salted__NE"";יܜ3%0-R`>tQΪZ6-NHe_5[dzn@@B9Hۮ' \ No newline at end of file +Salted__J0Q?rۀg~dۛŧөoUjʀp)$U$ y@gZM}{m,۠Ker \ No newline at end of file diff --git a/.buildkite/pipelines/main/misc/whitespace.yml b/.buildkite/pipelines/main/misc/whitespace.yml index 3f9bf13421d8e..673221e54cfdc 100644 --- a/.buildkite/pipelines/main/misc/whitespace.yml +++ b/.buildkite/pipelines/main/misc/whitespace.yml @@ -3,21 +3,22 @@ agents: # Only run on `sandbox.jl` machines (not `docker`-isolated ones) since we need nestable sandboxing sandbox.jl: "true" os: "linux" - steps: - label: "whitespace" key: "whitespace" plugins: - JuliaCI/julia#v1: - version: 1.6 + # Drop default "registries" directory, so it is not persisted from execution to execution + persist_depot_dirs: packages,artifacts,compiled + version: '1.6' - staticfloat/sandbox#v1: - rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v3.1/package_linux.x86_64.tar.gz - rootfs_treehash: "8c33c341a864852629b8aac01a6eb6a79b73570e" + rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v4.8/package_linux.x86_64.tar.gz + rootfs_treehash: "2a058481b567f0e91b9aa3ce4ad4f09e6419355a" workspaces: - "/cache/repos:/cache/repos" - commands: | - make -j$${JULIA_NUM_CORES} check-whitespace timeout_in_minutes: 10 notify: - github_commit_status: context: "whitespace" + commands: | + make --output-sync -j$${JULIA_CPU_THREADS:?} check-whitespace diff --git a/.buildkite/pipelines/main/platforms/linux64.yml b/.buildkite/pipelines/main/platforms/linux64.yml deleted file mode 100644 index 44b0ebe29f557..0000000000000 --- a/.buildkite/pipelines/main/platforms/linux64.yml +++ /dev/null @@ -1,93 +0,0 @@ -agents: - queue: "julia" - # Only run on `sandbox.jl` machines (not `docker`-isolated ones) since we need nestable sandboxing - sandbox.jl: "true" - os: "linux" - -steps: - - label: "package_linux64" - key: package_linux64 - plugins: - - JuliaCI/julia#v1: - version: 1.6 - - staticfloat/sandbox#v1: - rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v3.1/package_linux.x86_64.tar.gz - rootfs_treehash: "8c33c341a864852629b8aac01a6eb6a79b73570e" - uid: 1000 - gid: 1000 - workspaces: - # Include `/cache/repos` so that our `git` version introspection works. - - "/cache/repos:/cache/repos" - commands: | - echo "--- Print the short and long commit hashes" - SHORT_COMMIT_LENGTH=10 - SHORT_COMMIT=`echo $$BUILDKITE_COMMIT | cut -c1-$$SHORT_COMMIT_LENGTH` - JULIA_DIRECTORY_NAME="julia-$$SHORT_COMMIT" - JULIA_BINARYDIST_FILENAME=`make print-JULIA_BINARYDIST_FILENAME | cut -c27-` - ARTIFACT_FILE_EXTENSION="tar.gz" - ARTIFACT_FILENAME="$$JULIA_BINARYDIST_FILENAME.$$ARTIFACT_FILE_EXTENSION" - echo "The full commit is $$BUILDKITE_COMMIT" - echo "The Julia directory name will be $$JULIA_DIRECTORY_NAME" - echo "The artifact filename will be $$ARTIFACT_FILENAME" - - echo "--- Build Julia from source" - make -j 6 - make release - make install - - echo "--- Make sure that the working directory is clean" - if [ -z "$(git status --short)" ]; then echo "INFO: The working directory is clean."; else echo "ERROR: The working directory is dirty."; echo "Output of git status:"; git status; exit 1; fi - - echo "--- Print Julia version info" - ./julia -e 'using InteractiveUtils; InteractiveUtils.versioninfo()' - - echo "--- Compress build artifacts" - ls -ld $$JULIA_DIRECTORY_NAME/ - rm -rf $$ARTIFACT_FILENAME - tar czf $$ARTIFACT_FILENAME $$JULIA_DIRECTORY_NAME/ - ls -l $$ARTIFACT_FILENAME - - echo "--- Upload build artifacts" - buildkite-agent artifact upload $$ARTIFACT_FILENAME - timeout_in_minutes: 60 - notify: - - github_commit_status: - context: "package_linux64" - - # TODO: uncomment the following lines in order to enable the `tester_linux64` builder - # - label: "tester_linux64" - # key: tester_linux64 - # depends_on: package_linux64 - # plugins: - # - JuliaCI/julia#v1: - # version: 1.6 - # - staticfloat/sandbox#v1: - # # TODO: use a separate `tester_linux` image, instead of using the `package_linux` image. - # rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v3.1/package_linux.x86_64.tar.gz - # rootfs_treehash: "8c33c341a864852629b8aac01a6eb6a79b73570e" - # uid: 1000 - # gid: 1000 - # workspaces: - # # Include `/cache/repos` so that our `git` version introspection works. - # - "/cache/repos:/cache/repos" - # env: - # JULIA_SHELL: "/bin/bash" - # commands: | - # echo "--- Download build artifacts" - # rm -rf julia-linux64.tar.gz - # buildkite-agent artifact download julia-linux64.tar.gz . - # - # echo "--- Extract build artifacts" - # rm -rf julia-artifact/ - # tar xzf julia-linux64.tar.gz julia-artifact/ - # - # echo "--- Print Julia version info" - # julia-artifact/bin/julia -e 'using InteractiveUtils; InteractiveUtils.versioninfo()' - # - # echo "--- Run the Julia test suite" - # unset JULIA_DEPOT_PATH - # julia-artifact/bin/julia .buildkite/utilities/rr/rr_capture.jl julia-artifact/bin/julia -e 'Base.runtests(["all"]; ncores = Sys.CPU_THREADS)' - # timeout_in_minutes: 120 - # notify: - # - github_commit_status: - # context: "tester_linux64" diff --git a/.buildkite/pipelines/main/platforms/package_linux.arches b/.buildkite/pipelines/main/platforms/package_linux.arches new file mode 100644 index 0000000000000..dec82f530a832 --- /dev/null +++ b/.buildkite/pipelines/main/platforms/package_linux.arches @@ -0,0 +1,7 @@ +# PLATFORM LABEL GROUP ALLOW_FAIL ARCH ARCH_ROOTFS MAKE_FLAGS TIMEOUT_BK TIMEOUT_RR RETRIES IS_RR IS_ST IS_MT ROOTFS_TAG ROOTFS_HASH +linux 32 . . 32 i686 . . . . . . . v4.8 b6dffc772ab4c2cd7fd4f83459308f6f0d89b957 +linux 64 . . 64 x86_64 . . . . . . . v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a +# linux aarch64 . . aarch64 aarch64 . . . . . . . .... ........................................ +# linux armv7l . . armv7l armv7l . . . . . . . .... ........................................ +# linux ppc64le . . ppc64le powerpc64le . . . . . . . .... ........................................ +musl 64 . . 64 x86_64 . . . . . . . v4.8 d13a47c87c38005bd5d97132e51789cafd852f90 diff --git a/.buildkite/pipelines/main/platforms/package_linux.yml b/.buildkite/pipelines/main/platforms/package_linux.yml new file mode 100644 index 0000000000000..ce778c393b064 --- /dev/null +++ b/.buildkite/pipelines/main/platforms/package_linux.yml @@ -0,0 +1,54 @@ +agents: + queue: "julia" + # Only run on `sandbox.jl` machines (not `docker`-isolated ones) since we need nestable sandboxing + sandbox.jl: "true" + os: "linux" +steps: + - label: "package_${PLATFORM?}${LABEL?}" + key: package_${PLATFORM?}${LABEL?} + plugins: + - JuliaCI/julia#v1: + # Drop default "registries" directory, so it is not persisted from execution to execution + persist_depot_dirs: packages,artifacts,compiled + version: '1.6' + - staticfloat/sandbox#v1: + rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/${ROOTFS_TAG?}/package_${PLATFORM?}.${ARCH_ROOTFS?}.tar.gz + rootfs_treehash: "${ROOTFS_HASH?}" + uid: 1000 + gid: 1000 + workspaces: + # Include `/cache/repos` so that our `git` version introspection works. + - "/cache/repos:/cache/repos" + timeout_in_minutes: ${TIMEOUT_BK?} + commands: | + echo "--- Print the full and short commit hashes" + SHORT_COMMIT_LENGTH=10 + SHORT_COMMIT=`echo $${BUILDKITE_COMMIT:?} | cut -c1-$${SHORT_COMMIT_LENGTH:?}` + ARTIFACT_FILE_EXTENSION="tar.gz" + ARTIFACT_FILENAME="julia-$${SHORT_COMMIT:?}-${PLATFORM?}${ARCH?}.$${ARTIFACT_FILE_EXTENSION:?}" + JULIA_BINARYDIST_FILENAME=`make print-JULIA_BINARYDIST_FILENAME ${MAKE_FLAGS?} | cut -c27- | tr -s ' '` + JULIA_BINARYDIST="$${JULIA_BINARYDIST_FILENAME:?}.$${ARTIFACT_FILE_EXTENSION:?}" + + echo "The full commit is: $${BUILDKITE_COMMIT:?}" + echo "The short commit is: $${SHORT_COMMIT:?}" + echo "The artifact filename will be: $${ARTIFACT_FILENAME:?}" + + echo "--- Build Julia from source" + rm -rf $${ARTIFACT_FILENAME:?} + make --output-sync -j 8 ${MAKE_FLAGS?} + + echo "--- Check that the working directory is clean" + if [ -z "$(git status --short)" ]; then echo "INFO: The working directory is clean."; else echo "ERROR: The working directory is dirty."; echo "Output of git status:"; git status; exit 1; fi + + echo "--- Print Julia version info" + ./julia -e 'using InteractiveUtils; InteractiveUtils.versioninfo()' + + echo "--- Create build artifacts" + make --output-sync -j 8 binary-dist ${MAKE_FLAGS?} + ls -l $${JULIA_BINARYDIST:?} + if [[ "$${JULIA_BINARYDIST:?}" != "$${ARTIFACT_FILENAME:?}" ]]; then + mv $${JULIA_BINARYDIST:?} $${ARTIFACT_FILENAME:?} + fi + ls -l $${ARTIFACT_FILENAME:?} + echo "--- Upload build artifacts" + buildkite-agent artifact upload $${ARTIFACT_FILENAME:?} diff --git a/.buildkite/pipelines/main/platforms/tester_linux.arches b/.buildkite/pipelines/main/platforms/tester_linux.arches new file mode 100644 index 0000000000000..d1304563cb815 --- /dev/null +++ b/.buildkite/pipelines/main/platforms/tester_linux.arches @@ -0,0 +1,25 @@ +# PLATFORM LABEL GROUP ALLOW_FAIL ARCH ARCH_ROOTFS MAKE_FLAGS TIMEOUT_BK TIMEOUT_RR RETRIES IS_RR IS_ST IS_MT ROOTFS_TAG ROOTFS_HASH +linux 32_g1 g1 . 32 i686 . . . . . . . v4.8 b6dffc772ab4c2cd7fd4f83459308f6f0d89b957 +linux 32_g2 g2 . 32 i686 . . . 3 . . . v4.8 b6dffc772ab4c2cd7fd4f83459308f6f0d89b957 + +linux 64_g1_mt g1 . 64 x86_64 . . . . . . yes v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a +linux 64_g2_mt g2 . 64 x86_64 . . . 3 . . yes v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a + +linux 64_g1_st g1 . 64 x86_64 . . . . . yes . v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a +linux 64_g2_st g2 . 64 x86_64 . . . 3 . yes . v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a + +linux 64_g1_rrst g1 . 64 x86_64 . 300 240 . yes yes . v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a +linux 64_g2_rrst g2 . 64 x86_64 . 180 120 3 yes yes . v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a +linux 64_g3_st g3 . 64 x86_64 . . . 3 . yes . v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a + +# linux aarch64_g1 g1 true aarch64 aarch64 . . . . . . . ---- ---------------------------------------- +# linux aarch64_g2 g2 true aarch64 aarch64 . . . . . . . ---- ---------------------------------------- + +# linux armv7l_g1 g1 true armv7l armv7l . . . . . . . ---- ---------------------------------------- +# linux armv7l_g2 g2 true armv7l armv7l . . . . . . . ---- ---------------------------------------- + +# linux ppc64le_g1 g1 true ppc64le powerpc64le . . . . . . . ---- ---------------------------------------- +# linux ppc64le_g2 g2 true ppc64le powerpc64le . . . . . . . ---- ---------------------------------------- + +musl 64_g1 g1 true 64 x86_64 . . . . . . . v4.8 d13a47c87c38005bd5d97132e51789cafd852f90 +musl 64_g2 g2 true 64 x86_64 . . . . . . . v4.8 d13a47c87c38005bd5d97132e51789cafd852f90 diff --git a/.buildkite/pipelines/main/platforms/tester_linux.yml b/.buildkite/pipelines/main/platforms/tester_linux.yml new file mode 100644 index 0000000000000..18b019e66c8b7 --- /dev/null +++ b/.buildkite/pipelines/main/platforms/tester_linux.yml @@ -0,0 +1,120 @@ +agents: + queue: "julia" + # Only run on `sandbox.jl` machines (not `docker`-isolated ones) since we need nestable sandboxing + sandbox.jl: "true" + os: "linux" +steps: + - label: "tester_${PLATFORM?}${LABEL?}" + key: tester_${PLATFORM?}${LABEL?} + depends_on: package_${PLATFORM?}${ARCH?} + plugins: + - JuliaCI/julia#v1: + # Drop default "registries" directory, so it is not persisted from execution to execution + persist_depot_dirs: packages,artifacts,compiled + version: '1.6' + - staticfloat/sandbox#v1: + rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/${ROOTFS_TAG?}/package_${PLATFORM?}.${ARCH_ROOTFS?}.tar.gz + # rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/${ROOTFS_TAG?}/tester${PLATFORM?}.${ARCH_ROOTFS?}.tar.gz + rootfs_treehash: "${ROOTFS_HASH?}" + uid: 1000 + gid: 1000 + workspaces: + # Include `/cache/repos` so that our `git` version introspection works. + - "/cache/repos:/cache/repos" + env: + JULIA_SHELL: "/bin/bash" + timeout_in_minutes: ${TIMEOUT_BK?} + retry: + automatic: + - exit_status: "*" + limit: ${RETRIES?} + soft_fail: ${ALLOW_FAIL?} + commands: | + echo "--- Print the full and short commit hashes" + SHORT_COMMIT_LENGTH=10 + SHORT_COMMIT=`echo $${BUILDKITE_COMMIT:?} | cut -c1-$${SHORT_COMMIT_LENGTH:?}` + JULIA_DIR="julia-$${SHORT_COMMIT:?}" + JULIA_BINARY="$${JULIA_DIR:?}/bin/julia" + ARTIFACT_FILE_EXTENSION="tar.gz" + ARTIFACT_FILENAME="julia-$${SHORT_COMMIT:?}-${PLATFORM?}${ARCH?}.$${ARTIFACT_FILE_EXTENSION:?}" + echo "The full commit is: $${BUILDKITE_COMMIT:?}" + echo "The short commit is: $${SHORT_COMMIT:?}" + echo "The artifact filename will be: $${ARTIFACT_FILENAME:?}" + echo "The Julia directory name will be: $${JULIA_DIR:?}" + echo "The Julia binary will be: $${JULIA_BINARY:?}" + + echo "--- Download build artifacts" + rm -rf $${ARTIFACT_FILENAME:?} + buildkite-agent artifact download $${ARTIFACT_FILENAME:?} . + + echo "--- Extract build artifacts" + rm -rf $${JULIA_DIR:?}/ + tar xzf $${ARTIFACT_FILENAME:?} $${JULIA_DIR:?}/ + + echo "--- Print Julia version info" + $${JULIA_BINARY:?} -e 'using InteractiveUtils; InteractiveUtils.versioninfo()' + echo "JULIA_CPU_THREADS is: $${JULIA_CPU_THREADS:?}" + $${JULIA_BINARY:?} -e '@info "" Sys.CPU_THREADS' + + echo "--- Set some environment variables" + export OPENBLAS_NUM_THREADS=8 + unset JULIA_DEPOT_PATH + unset JULIA_PKG_SERVER + + # Make sure that temp files and temp directories are created in a location that is + # backed by real storage. + export TMPDIR="$(pwd)/tmp" + mkdir -p $${TMPDIR:?} + + export NETWORK_RELATED_TESTS="Artifacts Downloads download LazyArtifacts LibGit2/online Pkg" + + if [[ "${GROUP?}" == "all" ]]; then + export TESTS="all LibGit2/online --force-net" + elif [[ "${GROUP?}" == "all_except_pkg" ]]; then + export TESTS="all LibGit2/online --force-net --skip Pkg" + elif [[ "${GROUP?}" == "g1" ]]; then + # Group 1: ALL tests EXCEPT the network-related tests. + export TESTS="all --force-net --skip $${NETWORK_RELATED_TESTS:?}" + elif [[ "${GROUP?}" == "g2" ]]; then + # Group 2: ONLY the network-related tests. + # In Group 2, we use whatever the default setting is with regards to the Pkg server. + export TESTS="$${NETWORK_RELATED_TESTS:?} --force-net" + elif [[ "${GROUP?}" == "g3" ]]; then + # Group 3: only Pkg. + # In Group 3, we explicitly opt-out of the Pkg server. + # The purpose of group 3 is to test the non-Pkg-server codepaths of Pkg. + export TESTS="Pkg --force-net" + export JULIA_PKG_SERVER="" + else + echo "Invalid value for GROUP: ${GROUP?}" + exit 1 + fi + + export JULIA_TEST_RR_TIMEOUT="${TIMEOUT_RR?}" + + if [[ "${IS_RR?}" == "yes" ]]; then + export JULIA_CMD_FOR_TESTS="$${JULIA_BINARY:?} .buildkite/utilities/rr/rr_capture.jl $${JULIA_BINARY:?}" + export NCORES_FOR_TESTS="parse(Int, ENV[\"JULIA_RRCAPTURE_NUM_CORES\"])" + else + export JULIA_CMD_FOR_TESTS="$${JULIA_BINARY:?}" + export NCORES_FOR_TESTS="Sys.CPU_THREADS" + fi + + if [[ "${IS_ST?}" == "yes" ]]; then + export JULIA_NUM_THREADS=1 + fi + + if [[ "${IS_MT?}" == "yes" ]]; then + export JULIA_NUM_THREADS=16 + fi + + echo "--- Print the test group, list of test sets, and other useful environment variables" + echo "JULIA_CMD_FOR_TESTS is: $${JULIA_CMD_FOR_TESTS:?}" + echo "JULIA_NUM_THREADS is: $${JULIA_NUM_THREADS}" # Note: this environment variable might not be set + echo "NCORES_FOR_TESTS is: $${NCORES_FOR_TESTS:?}" + echo "OPENBLAS_NUM_THREADS is: $${OPENBLAS_NUM_THREADS:?}" + echo "GROUP is: ${GROUP?}" + echo "TESTS is: $${TESTS:?}" + + echo "--- Run the Julia test suite" + $${JULIA_CMD_FOR_TESTS:?} -e "Base.runtests(\"$${TESTS:?}\"; ncores = $${NCORES_FOR_TESTS:?})" diff --git a/.buildkite/pipelines/scheduled/0_webui.yml b/.buildkite/pipelines/scheduled/0_webui.yml index 8aaf812376b5c..78031b49d9f17 100644 --- a/.buildkite/pipelines/scheduled/0_webui.yml +++ b/.buildkite/pipelines/scheduled/0_webui.yml @@ -4,7 +4,6 @@ agents: queue: "julia" sandbox.jl: "true" - steps: - label: ":unlock: Unlock secrets, launch pipelines" plugins: @@ -14,11 +13,15 @@ steps: # Build secrets will not be available in these pipelines (or their children) # but some of our signed pipelines can wait upon the completion of these unsigned # pipelines. - # unsigned_pipelines: - # - .buildkite/pipelines/scheduled/launch_unsigned_builders.yml + unsigned_pipelines: + - .buildkite/pipelines/scheduled/launch_unsigned_jobs.yml # Our signed pipelines must have a `signature` or `signature_file` parameter that # verifies the treehash of the pipeline itself and the inputs listed in `inputs` signed_pipelines: - pipeline: .buildkite/pipelines/scheduled/coverage/coverage_linux64.yml - signature: "U2FsdGVkX1+lpFo/nKzx3c6xCZPKYTAuunXpOsZG4+s4+iU5LfEpMvtNvpKQjDugRoxQxCItMqB6vr4KZN3KtKhjkLbr8ExAyaPil/N/uFhrLlpwNem9dxHbPrU2l7qo" + signature_file: .buildkite/pipelines/scheduled/coverage/coverage_linux64.yml.signature + inputs: + - .buildkite/pipelines/scheduled/coverage/coverage_linux64.yml + - .buildkite/pipelines/scheduled/coverage/run_tests_parallel.jl + - .buildkite/pipelines/scheduled/coverage/upload_coverage.jl diff --git a/.buildkite/pipelines/scheduled/coverage/coverage_linux64.yml b/.buildkite/pipelines/scheduled/coverage/coverage_linux64.yml index ce7a3aca4227d..1ff88577e2be4 100644 --- a/.buildkite/pipelines/scheduled/coverage/coverage_linux64.yml +++ b/.buildkite/pipelines/scheduled/coverage/coverage_linux64.yml @@ -3,24 +3,30 @@ agents: # Only run on `sandbox.jl` machines (not `docker`-isolated ones) since we need nestable sandboxing sandbox.jl: "true" os: "linux" - steps: - label: ":unlock: :coverage: Run coverage test" + # We must accept the signed job id secret in order to propagate secrets + env: + BUILDKITE_PLUGIN_CRYPTIC_BASE64_SIGNED_JOB_ID_SECRET: ${BUILDKITE_PLUGIN_CRYPTIC_BASE64_SIGNED_JOB_ID_SECRET?} + depends_on: plugins: - staticfloat/cryptic: variables: - CODECOV_TOKEN="U2FsdGVkX19l0fhdBabbuiEdysyEabkJLRHfxm7CNRkuGbnwPV365sxxC7Czs/CVcws0N1oB4pVwALRRMe36oA==" - COVERALLS_TOKEN="U2FsdGVkX19zopI0hMNzzi2UUOvNVFD8Y0iisFnO/ryVxU7Tit8ZEaeN+gxodRx4CosUUh192F1+q3dTMWRIvw==" - JuliaCI/julia#v1: - version: 1.6 + # Drop default "registries" directory, so it is not persisted from execution to execution + persist_depot_dirs: packages,artifacts,compiled + version: '1.6' - staticfloat/sandbox#v1: - rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v3.1/package_linux.x86_64.tar.gz - rootfs_treehash: "8c33c341a864852629b8aac01a6eb6a79b73570e" + rootfs_url: https://github.com/JuliaCI/rootfs-images/releases/download/v4.8/package_linux.x86_64.tar.gz + rootfs_treehash: "2a058481b567f0e91b9aa3ce4ad4f09e6419355a" uid: 1000 gid: 1000 + timeout_in_minutes: 360 # 360 minutes = 6 hours commands: | echo "--- Build Julia from source" - make -j 6 + make --output-sync -j 6 echo "--- Print Julia version info" ./julia -e 'using InteractiveUtils; InteractiveUtils.versioninfo()' @@ -29,12 +35,10 @@ steps: git config --global init.defaultBranch master echo "--- Run Julia tests in parallel with code coverage enabled" - ./julia --code-coverage=all --sysimage-native-code=no .buildkite/pipelines/scheduled/coverage/run_tests_parallel.jl + export JULIA_NUM_THREADS=1 + export JULIA_WORKER_TIMEOUT=1200 # 1200 seconds = 20 minutes + ./julia -e 'import Distributed; @info "" Distributed.worker_timeout()' + ./julia .buildkite/pipelines/scheduled/coverage/run_tests_parallel.jl echo "--- Process and upload coverage information" ./julia .buildkite/pipelines/scheduled/coverage/upload_coverage.jl - timeout_in_minutes: 240 # 240 minutes = 4 hours - -# We must accept the signed job id secret in order to propagate secrets -env: - BUILDKITE_PLUGIN_CRYPTIC_BASE64_SIGNED_JOB_ID_SECRET: ${BUILDKITE_PLUGIN_CRYPTIC_BASE64_SIGNED_JOB_ID_SECRET?} diff --git a/.buildkite/pipelines/scheduled/coverage/coverage_linux64.yml.signature b/.buildkite/pipelines/scheduled/coverage/coverage_linux64.yml.signature new file mode 100644 index 0000000000000..4ecec8e8bb72c --- /dev/null +++ b/.buildkite/pipelines/scheduled/coverage/coverage_linux64.yml.signature @@ -0,0 +1 @@ +Salted__Iy֌>yNc kBvn+HvrލƼr/uYuIiiE(vL!?v \ No newline at end of file diff --git a/.buildkite/pipelines/scheduled/coverage/run_tests_parallel.jl b/.buildkite/pipelines/scheduled/coverage/run_tests_parallel.jl index 6da608b5e8be9..b6eed225f652d 100644 --- a/.buildkite/pipelines/scheduled/coverage/run_tests_parallel.jl +++ b/.buildkite/pipelines/scheduled/coverage/run_tests_parallel.jl @@ -1,25 +1,29 @@ # Important note: even if one or more tests fail, we will still exit with status code 0. - +# # The reason for this is that we always want to upload code coverage, even if some of the # tests fail. Therefore, even if the `coverage_linux64` builder passes, you should not # assume that all of the tests passed. If you want to know if all of the tests are passing, # please look at the status of the `tester_*` builders (e.g. `tester_linux64`). -# When running this file, make sure to set all of the following command-line flags: -# 1. `--code-coverage=all` -# 2. `--sysimage-native-code=no` +const ncores = Sys.CPU_THREADS +@info "" Sys.CPU_THREADS +@info "" ncores -empty!(Base.DEPOT_PATH) -push!(Base.DEPOT_PATH, mktempdir(; cleanup = true)) +script_native_yes = """ + Base.runtests(["cmdlineargs"]; ncores = $(ncores)) +""" +script_native_no = """ + Base.runtests(["all", "--skip", "cmdlineargs"]; ncores = $(ncores)) +""" -const tests = "all" -const ncores = Sys.CPU_THREADS +base_cmd = `$(Base.julia_cmd()) --code-coverage=all` +cmd_native_yes = `$(base_cmd) --sysimage-native-code=yes -e $(script_native_yes)` +cmd_native_no = `$(base_cmd) --sysimage-native-code=no -e $(script_native_no)` -@info "" Sys.CPU_THREADS -@info "" tests ncores +@info "Running command" cmd_native_yes +p1 = run(pipeline(cmd_native_yes; stdin, stdout, stderr); wait = false) +wait(p1) -try - Base.runtests(tests; ncores) -catch ex - @error "" exception=(ex, catch_backtrace()) -end +@info "Running command" cmd_native_no +p2 = run(pipeline(cmd_native_no; stdin, stdout, stderr); wait = false) +wait(p2) diff --git a/.buildkite/pipelines/scheduled/coverage/upload_coverage.jl b/.buildkite/pipelines/scheduled/coverage/upload_coverage.jl index 8d14cded56140..d995e97fc17fb 100644 --- a/.buildkite/pipelines/scheduled/coverage/upload_coverage.jl +++ b/.buildkite/pipelines/scheduled/coverage/upload_coverage.jl @@ -91,7 +91,7 @@ function print_coverage_summary( cov_pct = floor(Int, cov_lines/tot_lines * 100) end @info "$(description): $(cov_pct)% ($(cov_lines)/$(tot_lines))" - return nothing + return (; cov_pct) end function buildkite_env(name::String) @@ -198,7 +198,7 @@ end; sort!(fcs; by = fc -> fc.filename); print_coverage_summary.(fcs); -print_coverage_summary(fcs, "Total") +const total_cov_pct = print_coverage_summary(fcs, "Total").cov_pct let git_info = coveralls_buildkite_query_git_info() @@ -217,3 +217,12 @@ let # In order to upload to Codecov, you need to have the `CODECOV_TOKEN` environment variable defined. Coverage.Codecov.submit_generic(fcs, kwargs) end + +if total_cov_pct < 50 + msg = string( + "The total coverage is less than 50%. This should never happen, ", + "so it means that something has probably gone wrong with the code coverage job.", + ) + @error msg total_cov_pct + throw(ErrorException(msg)) +end diff --git a/.buildkite/pipelines/scheduled/launch_unsigned_builders.yml b/.buildkite/pipelines/scheduled/launch_unsigned_builders.yml deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/.buildkite/pipelines/scheduled/launch_unsigned_jobs.yml b/.buildkite/pipelines/scheduled/launch_unsigned_jobs.yml new file mode 100644 index 0000000000000..300c8d8466aea --- /dev/null +++ b/.buildkite/pipelines/scheduled/launch_unsigned_jobs.yml @@ -0,0 +1,8 @@ +steps: + - label: ":buildkite: Launch unsigned jobs" + commands: | + # Launch all of the `USE_BINARYBUILDER=0` jobs. + bash .buildkite/utilities/platforms/platforms.sh .buildkite/pipelines/scheduled/no_bb/no_bb_package_linux.arches .buildkite/pipelines/main/platforms/package_linux.yml + bash .buildkite/utilities/platforms/platforms.sh .buildkite/pipelines/scheduled/no_bb/no_bb_tester_linux.arches .buildkite/pipelines/main/platforms/tester_linux.yml + agents: + queue: julia diff --git a/.buildkite/pipelines/scheduled/no_bb/no_bb_package_linux.arches b/.buildkite/pipelines/scheduled/no_bb/no_bb_package_linux.arches new file mode 100644 index 0000000000000..dff2aab4591e2 --- /dev/null +++ b/.buildkite/pipelines/scheduled/no_bb/no_bb_package_linux.arches @@ -0,0 +1,2 @@ +# PLATFORM LABEL GROUP ALLOW_FAIL ARCH ARCH_ROOTFS MAKE_FLAGS TIMEOUT_BK TIMEOUT_RR RETRIES IS_RR IS_ST IS_MT ROOTFS_TAG ROOTFS_HASH +linux 64src . . 64src x86_64 USE_BINARYBUILDER=0 180 . . . . . v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a diff --git a/.buildkite/pipelines/scheduled/no_bb/no_bb_tester_linux.arches b/.buildkite/pipelines/scheduled/no_bb/no_bb_tester_linux.arches new file mode 100644 index 0000000000000..0b1fbdf63b796 --- /dev/null +++ b/.buildkite/pipelines/scheduled/no_bb/no_bb_tester_linux.arches @@ -0,0 +1,10 @@ +# PLATFORM LABEL GROUP ALLOW_FAIL ARCH ARCH_ROOTFS MAKE_FLAGS TIMEOUT_BK TIMEOUT_RR RETRIES IS_RR IS_ST IS_MT ROOTFS_TAG ROOTFS_HASH +linux 64src_g1_mt g1 . 64src x86_64 . . . . . . yes v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a +linux 64src_g2_mt g2 . 64src x86_64 . . . 3 . . yes v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a + +linux 64src_g1_st g1 . 64src x86_64 . . . . . yes . v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a +linux 64src_g2_st g2 . 64src x86_64 . . . 3 . yes . v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a + +linux 64src_g1_rrst g1 . 64src x86_64 . 300 240 . yes yes . v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a +linux 64src_g2_rrst g2 . 64src x86_64 . 180 120 3 yes yes . v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a +linux 64src_g3_st g3 . 64src x86_64 . . . 3 . yes . v4.8 2a058481b567f0e91b9aa3ce4ad4f09e6419355a diff --git a/.buildkite/secrets/.gitignore b/.buildkite/secrets/.gitignore new file mode 100644 index 0000000000000..2a84f48682a04 --- /dev/null +++ b/.buildkite/secrets/.gitignore @@ -0,0 +1,11 @@ +# Ignore everything +* + +# Don't ignore this `.gitignore` file +!.gitignore + +# Don't ignore encrypted files +!*.encrypted + +# Don't ignore public keys, that's fine to include +!*.pub diff --git a/.buildkite/secrets/ssh_docs_deploy.encrypted b/.buildkite/secrets/ssh_docs_deploy.encrypted new file mode 100644 index 0000000000000..8b7e2ffe27940 Binary files /dev/null and b/.buildkite/secrets/ssh_docs_deploy.encrypted differ diff --git a/.buildkite/secrets/ssh_docs_deploy.pub b/.buildkite/secrets/ssh_docs_deploy.pub new file mode 100644 index 0000000000000..eaea073e5257b --- /dev/null +++ b/.buildkite/secrets/ssh_docs_deploy.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC2HupO7+uq6NE//ZCCYS1szwDVutH8ZVtF0wjJJGmfRLzDe6l2Kcx+CY+i3k2HoxrfNlmri3RdWrfDbEruPZlWaz9HH/Hi8S8ZkyQO932dbag7u5JGKw3Mb/3x05O2QaL+0HGItUyfFMFT9NBZ1na+AH/ZPWamXR98PLh39ic1HFw2x2hacYA/4w0ylxwrojRfCqcjK/YVJUCdQ/XwsmSjs+0+rIfdVwSLbJKeHj5JYLX6CmF4zf4WzJKKDXx1k6gwaSS6oY5XOVit2I1u80cxZRiQhrMfYPKywY5+Y6gqjrGABLYSq/JJRKsgdJxs39V8O1ZjXVsGxbR+1r3F9ISH buildkite-docs-deploy diff --git a/.buildkite/utilities/platforms/platforms.sh b/.buildkite/utilities/platforms/platforms.sh new file mode 100755 index 0000000000000..9a47c18e9855b --- /dev/null +++ b/.buildkite/utilities/platforms/platforms.sh @@ -0,0 +1,76 @@ +#!/bin/bash + +ARCHES="$1" +YAML="$2" + +if [[ ! -f "${ARCHES:?}" ]] ; then + echo "Arches file does not exist: ${ARCHES:?}" + exit 1 +fi + +if [[ ! -f "${YAML:?}" ]] ; then + echo "YAML file does not exist: ${YAML:?}" + exit 1 +fi + +cat "${ARCHES:?}" | tr -s ' ' | while read _line; do + # Remove whitespace from the beginning and end of each line + line=`echo $_line | tr -s ' '` + + # Skip any line that begins with the `#` character + if [[ $line == \#* ]]; then + continue + fi + + # Skip any empty line + if [[ $line == "" ]]; then + continue + fi + + export PLATFORM=`echo $line | cut -d ' ' -f 1 | tr -s ' '` + export LABEL=`echo $line | cut -d ' ' -f 2 | tr -s ' '` + export GROUP=`echo $line | cut -d ' ' -f 3 | tr -s ' '` + + export ALLOW_FAIL=`echo $line | cut -d ' ' -f 4 | tr -s ' '` + export ARCH=`echo $line | cut -d ' ' -f 5 | tr -s ' '` + export ARCH_ROOTFS=`echo $line | cut -d ' ' -f 6 | tr -s ' '` + + export MAKE_FLAGS=`echo $line | cut -d ' ' -f 7 | tr -s ' '` + export TIMEOUT_BK=`echo $line | cut -d ' ' -f 8 | tr -s ' '` + export TIMEOUT_RR=`echo $line | cut -d ' ' -f 9 | tr -s ' '` + export RETRIES=`echo $line | cut -d ' ' -f 10 | tr -s ' '` + export IS_RR=`echo $line | cut -d ' ' -f 11 | tr -s ' '` + export IS_ST=`echo $line | cut -d ' ' -f 12 | tr -s ' '` + export IS_MT=`echo $line | cut -d ' ' -f 13 | tr -s ' '` + export ROOTFS_TAG=`echo $line | cut -d ' ' -f 14 | tr -s ' '` + export ROOTFS_HASH=`echo $line | cut -d ' ' -f 15 | tr -s ' '` + + if [[ "${IS_ST:?}" == "yes" ]]; then + if [[ "${IS_MT:?}" == "yes" ]]; then + echo "You cannot set both IS_ST and IS_MT to yes" + exit 1 + fi + fi + + if [[ "${ALLOW_FAIL:?}" == "." ]]; then + export ALLOW_FAIL="false" + fi + + if [[ "${MAKE_FLAGS:?}" == "." ]]; then + export MAKE_FLAGS="" + fi + + if [[ "${TIMEOUT_BK:?}" == "." ]]; then + export TIMEOUT_BK="90" # minutes + fi + + if [[ "${TIMEOUT_RR:?}" == "." ]]; then + export TIMEOUT_RR="60" # minutes + fi + + if [[ "${RETRIES:?}" == "." ]]; then + export RETRIES="0" + fi + + buildkite-agent pipeline upload "${YAML:?}" +done diff --git a/.buildkite/utilities/rr/rr_capture.jl b/.buildkite/utilities/rr/rr_capture.jl index 07d57f31ff29c..37bf3ca124271 100644 --- a/.buildkite/utilities/rr/rr_capture.jl +++ b/.buildkite/utilities/rr/rr_capture.jl @@ -1,44 +1,95 @@ -using Dates -using Pkg -using Tar - -if Base.VERSION < v"1.6" - throw(ErrorException("The `rr_capture.jl` script requires Julia 1.6 or greater")) -end - -if length(ARGS) < 1 - throw(ErrorException("Usage: rr_capture.jl [command...]")) +import Dates +import Pkg +import Tar + +function get_bool_from_env(name::AbstractString, default_value::Bool) + value = get(ENV, name, "$(default_value)") |> strip |> lowercase + result = parse(Bool, value)::Bool + return result end -const TIMEOUT = 2 * 60 * 60 # timeout in seconds +const is_buildkite = get_bool_from_env("BUILDKITE", false) +const always_save_rr_trace = get_bool_from_env("JULIA_ALWAYS_SAVE_RR_TRACE", false) -# We only use `rr` on the `tester_linux64` builder -const use_rr_if_builder_is = "tester_linux64" - -const run_id = get(ENV, "BUILDKITE_JOB_ID", "unknown") -const shortcommit = get(ENV, "BUILDKITE_COMMIT", "unknown") -const builder = get(ENV, "BUILDKITE_STEP_KEY", use_rr_if_builder_is) -const use_rr = builder == use_rr_if_builder_is +function get_from_env(name::AbstractString) + if is_buildkite + value = ENV[name] + else + value = get(ENV, name, "") + end + result = convert(String, strip(value))::String + return result +end -@info "" run_id shortcommit builder use_rr -@info "" ARGS +function my_exit(process::Base.Process) + wait(process) + + @info( + "", + process.exitcode, + process.termsignal, + ) + + # Pass the exit code back up + if process.termsignal != 0 + ccall(:raise, Cvoid, (Cint,), process.termsignal) + + # If for some reason the signal did not cause an exit, we'll exit manually. + # We need to make sure that we exit with a non-zero exit code. + if process.exitcode != 0 + exit(process.exitcode) + else + exit(1) + end + end + exit(process.exitcode) +end -# if !use_rr # TODO: uncomment this line -if true # TODO: delete this line - @info "We will not run the tests under rr" - p = run(`$ARGS`) - exit(p.exitcode) +if Base.VERSION < v"1.6" + throw(ErrorException("The `$(basename(@__FILE__))` script requires Julia 1.6 or greater")) end -@info "We will run the tests under rr" +if length(ARGS) < 1 + throw(ErrorException("Usage: julia $(basename(@__FILE__)) [command...]")) +end -const num_cores = min(Sys.CPU_THREADS, 8, parse(Int, get(ENV, "JULIA_TEST_NUM_CORES", "8")) + 1) -@info "" num_cores +@info "We will run the command under rr" + +const build_number = get_from_env("BUILDKITE_BUILD_NUMBER") +const job_name = get_from_env("BUILDKITE_STEP_KEY") +const commit_full = get_from_env("BUILDKITE_COMMIT") +const commit_short = first(commit_full, 10) +const JULIA_TEST_RR_TIMEOUT = get(ENV, "JULIA_TEST_RR_TIMEOUT", "120") +const timeout_minutes = parse(Int, JULIA_TEST_RR_TIMEOUT) +const JULIA_TEST_NUM_CORES = get(ENV, "JULIA_TEST_NUM_CORES", "8") +const julia_test_num_cores_int = parse(Int, JULIA_TEST_NUM_CORES) +const num_cores = min( + 8, + Sys.CPU_THREADS, + julia_test_num_cores_int + 1, +) + +ENV["JULIA_RRCAPTURE_NUM_CORES"] = "$(num_cores)" + +@info( + "", + build_number, + job_name, + commit_full, + commit_short, + timeout_minutes, + num_cores, +) + +const dumps_dir = joinpath(pwd(), "dumps") +const temp_parent_dir = joinpath(pwd(), "temp_for_rr") + +mkpath(dumps_dir) +mkpath(temp_parent_dir) proc = nothing -new_env = copy(ENV) -mktempdir() do dir +mktempdir(temp_parent_dir) do dir Pkg.activate(dir) Pkg.add("rr_jll") Pkg.add("Zstd_jll") @@ -68,18 +119,22 @@ mktempdir() do dir # Start asynchronous timer that will kill `rr` @async begin - sleep(TIMEOUT) + sleep(timeout_minutes * 60) # If we've exceeded the timeout and `rr` is still running, kill it. if isopen(proc) - println(stderr, "\n\nProcess timed out. Signalling `rr` for force-cleanup!") + println(stderr, "\n\nProcess timed out (with a timeout of $(timeout_minutes) minutes). Signalling `rr` for force-cleanup!") kill(proc, Base.SIGTERM) - # Give `rr` a chance to cleanup - sleep(60) + # Give `rr` a chance to cleanup and upload. + # Note: this time period includes the time to upload the `rr` trace files + # as Buildkite artifacts, so make sure it is long enough to allow the + # uploads to finish. + cleanup_minutes = 30 + sleep(cleanup_minutes * 60) if isopen(proc) - println(stderr, "\n\n`rr` failed to cleanup within one minute, killing and exiting immediately!") + println(stderr, "\n\n`rr` failed to cleanup and upload within $(cleanup_minutes) minutes, killing and exiting immediately!") kill(proc, Base.SIGKILL) exit(1) end @@ -87,11 +142,10 @@ mktempdir() do dir end # Wait for `rr` to finish, either through naturally finishing its run, or `SIGTERM`. - # If we have to `SIGKILL` wait(proc) + process_failed = !success(proc) - # On a non-zero exit code, upload the `rr` trace - if !success(proc) + if process_failed || always_save_rr_trace || is_buildkite println(stderr, "`rr` returned $(proc.exitcode), packing and uploading traces...") if !isdir(joinpath(dir, "rr_traces")) @@ -113,22 +167,34 @@ mktempdir() do dir run(ignorestatus(`$(rr_path) pack --pack-dir=$pack_dir $(trace_dirs)`)) # Tar it up - mkpath("dumps") - datestr = Dates.format(now(), dateformat"yyyy-mm-dd_HH_MM_SS") - dst_path = "dumps/rr-run_$(run_id)-gitsha_$(shortcommit)-$(datestr).tar.zst" + mkpath(dumps_dir) + date_str = Dates.format(Dates.now(), Dates.dateformat"yyyy_mm_dd_HH_MM_SS") + dst_file_name = string( + "rr", + "--build_$(build_number)", + "--$(job_name)", + "--commit_$(commit_short)", + "--$(date_str)", + ".tar.zst", + ) + dst_full_path = joinpath(dumps_dir, dst_file_name) zstd_jll.zstdmt() do zstdp - tarproc = open(`$zstdp -o $dst_path`, "w") + tarproc = open(`$(zstdp) -o $(dst_full_path)`, "w") Tar.create(dir, tarproc) close(tarproc.in) end + + @info "The `rr` trace file has been saved to: $(dst_full_path)" + if is_buildkite + @info "Since this is a Buildkite run, we will upload the `rr` trace file." + cd(dumps_dir) do + run(`buildkite-agent artifact upload $(dst_file_name)`) + end + end end + end end -# Pass the exit code back up to Buildkite -if proc.termsignal != 0 - ccall(:raise, Cvoid, (Cint,), proc.termsignal) - exit(1) # Just in case the signal did not cause an exit -else - exit(proc.exitcode) -end +@info "Finished running the command under rr" +my_exit(proc) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 5fc00a73b47d2..d2da8839ddb39 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -2,4 +2,5 @@ CODEOWNERS @JuliaLang/github-actions /.github/ @JuliaLang/github-actions /.buildkite/ @JuliaLang/github-actions +/.github/workflows/retry.yml @DilumAluthge /.github/workflows/statuses.yml @DilumAluthge diff --git a/.github/workflows/rerun_failed.yml b/.github/workflows/rerun_failed.yml new file mode 100644 index 0000000000000..7d022920658a9 --- /dev/null +++ b/.github/workflows/rerun_failed.yml @@ -0,0 +1,92 @@ +# Please ping @DilumAluthge when making any changes to this file. + +# Here are some steps that we take in this workflow file for security reasons: +# 1. We do not checkout any code. +# 2. We only run actions that are defined in a repository in the `JuliaLang` GitHub organization. +# 3. We do not give the `GITHUB_TOKEN` any permissions. +# 4. We only give the Buildkite API token (`BUILDKITE_API_TOKEN_RETRY`) the minimum necessary +# set of permissions. + +# Important note to Buildkite maintainers: +# In order to make this work, you need to tell Buildkite that it should NOT create a brand-new +# build when someone closes and reopens a pull request. To do so: +# 1. Go to the relevant pipeline (e.g. https://buildkite.com/julialang/julia-master). +# 2. Click on the "Pipeline Settings" button. +# 3. In the left sidebar, under "Pipeline Settings", click on "GitHub". +# 4. In the "GitHub Settings", under "Build Pull Requests", make sure that the "Skip pull +# request builds for existing commits" checkbox is checked. This is the setting that tells +# Buildkite that it should NOT create a brand-new build when someone closes and reopens a +# pull request. +# 5. At the bottom of the page, click the "Save GitHub Settings" button. + +name: Rerun Failed Buildkite Jobs + +# There are two ways that a user can rerun the failed Buildkite jobs: +# 1. Close and reopen the pull request. +# In order to use this approach, the user must be in one of the following three categories: +# (i) Author of the pull request +# (ii) Commit permissions +# (iii) Triage permissions +# 2. Post a comment on the pull request with exactly the following contents: /buildkite rerun failed +# In order to use this approach, the user must be in the following category: +# - A member of the JuliaLang GitHub organization (the membership must be publicized) + +on: + # When using the `pull_request_target` event, all PRs will get access to secret environment + # variables (such as the `BUILDKITE_API_TOKEN_RETRY` secret environment variable), even if + # the PR is from a fork. Therefore, for security reasons, we do not checkout any code in + # this workflow. + pull_request_target: + types: [ reopened ] + issue_comment: + types: [ created ] + +# We do not give the `GITHUB_TOKEN` any permissions. +# Therefore, the `GITHUB_TOKEN` only has the same access as any member of the public. +permissions: + contents: none + +jobs: + rerun-failed-buildkite-jobs: + name: Rerun Failed Buildkite Jobs + runs-on: ubuntu-latest + if: (github.repository == 'JuliaLang/julia') && ((github.event_name == 'pull_request_target' && github.event.action == 'reopened') || (github.event_name == 'issue_comment' && github.event.issue.pull_request && github.event.comment.body == '/buildkite rerun failed')) + steps: + # For security reasons, we do not checkout any code in this workflow. + - name: Check organization membership + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + if [[ "${{ github.event_name }}" == "pull_request_target" ]]; then + if [[ "${{ github.event.action }}" == "reopened" ]]; then + echo "This is a \"reopened\" event, so we do not need to check the user's organization membership." + echo "GOOD_TO_PROCEED=yes" >> ${GITHUB_ENV:?} + echo "PULL_REQUEST_NUMBER=${{ github.event.number }}" >> ${GITHUB_ENV:?} + else + echo "ERROR: The github.event_name is \"pull_request_target\", but the github.event.action is not \"reopened\"." + exit 1 + fi + else + curl -H "Authorization: token ${GITHUB_TOKEN:?}" "https://api.github.com/users/${{ github.event.sender.login }}" + curl -H "Authorization: token ${GITHUB_TOKEN:?}" "https://api.github.com/users/${{ github.event.sender.login }}/orgs" + export USER_IS_ORGANIZATION_MEMBER=`curl -H "Authorization: token ${GITHUB_TOKEN:?}" "https://api.github.com/users/${{ github.event.sender.login }}/orgs" | jq '[.[] | .login] | index("JuliaLang") != null' | tr -s ' '` + if [[ "${USER_IS_ORGANIZATION_MEMBER:?}" == "true" ]]; then + echo "The \"${{ github.event.sender.login }}\" user is a public member of the JuliaLang organization." + echo "GOOD_TO_PROCEED=yes" >> ${GITHUB_ENV:?} + echo "PULL_REQUEST_NUMBER=${{ github.event.issue.number }}" >> ${GITHUB_ENV:?} + else + echo "ERROR: the \"${{ github.event.sender.login }}\" user is NOT a public member of the JuliaLang organization." + echo "If you are a member, please make sure that you have publicized your membership." + exit 1 + fi + fi + - run: | + echo "GOOD_TO_PROCEED: ${{ env.GOOD_TO_PROCEED }}" + echo "PULL_REQUEST_NUMBER: ${{ env.PULL_REQUEST_NUMBER }}" + - uses: JuliaLang/buildkite-rerun-failed@057f6f2d37aa29a57b7679fd2af0df1d9f9188b4 + if: env.GOOD_TO_PROCEED == 'yes' + with: + buildkite_api_token: ${{ secrets.BUILDKITE_API_TOKEN_RETRY }} + buildkite_organization_slug: 'julialang' + buildkite_pipeline_slug: 'julia-master' + pr_number: ${{ env.PULL_REQUEST_NUMBER }} diff --git a/.github/workflows/statuses.yml b/.github/workflows/statuses.yml index 97ec290abe013..16c07f0f040cc 100644 --- a/.github/workflows/statuses.yml +++ b/.github/workflows/statuses.yml @@ -3,16 +3,13 @@ # This is just a short-term solution until we have migrated all of CI to Buildkite. # # 1. TODO: delete this file once we have migrated all of CI to Buildkite. -# -# 2. TODO: disable GitHub Actions on the `JuliaLang/julia` repository once we have migrated all -# of CI to Buildkite. # Here are some steps that we take in this workflow file for security reasons: # 1. We do not checkout any code. # 2. We do not run any external actions. -# 3. We only give `GITHUB_TOKEN` the minimum necessary set of permissions. +# 3. We only give the `GITHUB_TOKEN` the minimum necessary set of permissions. -name: Statuses +name: Create Buildbot Statuses on: push: @@ -23,29 +20,27 @@ on: # write permissions, even if the PR is from a fork. # Therefore, for security reasons, we do not checkout any code in this workflow. pull_request_target: + types: [opened, synchronize] branches: - 'master' - 'release-*' -# These are the permissions for the `GITHUB_TOKEN` token. +# These are the permissions for the `GITHUB_TOKEN`. # We should only give the token the minimum necessary set of permissions. permissions: statuses: write jobs: - statuses: - name: statuses + create-buildbot-statuses: + name: Create Buildbot Statuses runs-on: ubuntu-latest if: github.repository == 'JuliaLang/julia' - strategy: - fail-fast: false steps: + # For security reasons, we do not checkout any code in this workflow. - run: echo "SHA=${{ github.event.pull_request.head.sha }}" >> $GITHUB_ENV if: github.event_name == 'pull_request_target' - - run: echo "SHA=${{ github.sha }}" >> $GITHUB_ENV if: github.event_name != 'pull_request_target' - - run: echo "The SHA is ${{ env.SHA }}" # As we incrementally migrate individual jobs from Buildbot to Buildkite, we should @@ -53,9 +48,6 @@ jobs: - run: | declare -a CONTEXT_LIST=( "buildbot/tester_freebsd64" - "buildbot/tester_linux32" - "buildbot/tester_linux64" - "buildbot/tester_linuxaarch64" "buildbot/tester_macos64" "buildbot/tester_win32" "buildbot/tester_win64" diff --git a/.gitignore b/.gitignore index 2c5ee63bc3ee9..678f4fc73cec2 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,9 @@ .DS_Store .idea/* .vscode/* + +# Buildkite: cryptic plugin +# Ignore the unencrypted repo_key +repo_key +# Ignore any agent keys (public or private) we have stored +agent_key* diff --git a/base/Base.jl b/base/Base.jl index d1a549f897d4f..2f78da71ca42c 100644 --- a/base/Base.jl +++ b/base/Base.jl @@ -184,8 +184,6 @@ let os = ccall(:jl_get_UNAME, Any, ()) if os === :Darwin || os === :Apple if Base.DARWIN_FRAMEWORK push!(DL_LOAD_PATH, "@loader_path/Frameworks") - else - push!(DL_LOAD_PATH, "@loader_path/julia") end push!(DL_LOAD_PATH, "@loader_path") end diff --git a/base/compiler/ssair/inlining.jl b/base/compiler/ssair/inlining.jl index 1dce18bc35393..902c567957eeb 100644 --- a/base/compiler/ssair/inlining.jl +++ b/base/compiler/ssair/inlining.jl @@ -492,8 +492,7 @@ function ir_inline_unionsplit!(compact::IncrementalCompact, idx::Int, end # We're now in the join block. - compact.ssa_rename[compact.idx-1] = insert_node_here!(compact, pn, typ, line) - nothing + return insert_node_here!(compact, pn, typ, line) end function batch_inline!(todo::Vector{Pair{Int, Any}}, ir::IRCode, linetable::Vector{LineInfoNode}, propagate_inbounds::Bool) @@ -548,7 +547,7 @@ function batch_inline!(todo::Vector{Pair{Int, Any}}, ir::IRCode, linetable::Vect if isa(item, InliningTodo) compact.ssa_rename[old_idx] = ir_inline_item!(compact, idx, argexprs, linetable, item, boundscheck, state.todo_bbs) elseif isa(item, UnionSplit) - ir_inline_unionsplit!(compact, idx, argexprs, linetable, item, boundscheck, state.todo_bbs) + compact.ssa_rename[old_idx] = ir_inline_unionsplit!(compact, idx, argexprs, linetable, item, boundscheck, state.todo_bbs) end compact[idx] = nothing refinish && finish_current_bb!(compact, 0) diff --git a/base/compiler/ssair/verify.jl b/base/compiler/ssair/verify.jl index 6c2953c12c505..83e5ddcd39330 100644 --- a/base/compiler/ssair/verify.jl +++ b/base/compiler/ssair/verify.jl @@ -202,6 +202,10 @@ function verify_ir(ir::IRCode, print::Bool=true) @verify_error "SSAValue as assignment LHS" error("") end + if stmt.args[2] isa GlobalRef + # undefined GlobalRef as assignment RHS is OK + continue + end elseif stmt.head === :gc_preserve_end # We allow gc_preserve_end tokens to span across try/catch # blocks, which isn't allowed for regular SSA values, so diff --git a/base/compiler/typeutils.jl b/base/compiler/typeutils.jl index bf95a69154d54..ed9bb73c65a98 100644 --- a/base/compiler/typeutils.jl +++ b/base/compiler/typeutils.jl @@ -216,7 +216,7 @@ function unswitchtupleunion(u::Union) ts = uniontypes(u) n = -1 for t in ts - if t isa DataType && t.name === Tuple.name && !isvarargtype(t.parameters[end]) + if t isa DataType && t.name === Tuple.name && length(t.parameters) != 0 && !isvarargtype(t.parameters[end]) if n == -1 n = length(t.parameters) elseif n != length(t.parameters) diff --git a/base/compiler/utilities.jl b/base/compiler/utilities.jl index e047c7d83fac3..3ed40537ecb9a 100644 --- a/base/compiler/utilities.jl +++ b/base/compiler/utilities.jl @@ -154,7 +154,15 @@ function subst_trivial_bounds(@nospecialize(atypes)) end v = atypes.var if isconcretetype(v.ub) || v.lb === v.ub - return subst_trivial_bounds(atypes{v.ub}) + subst = try + atypes{v.ub} + catch + # Note in rare cases a var bound might not be valid to substitute. + nothing + end + if subst !== nothing + return subst_trivial_bounds(subst) + end end return UnionAll(v, subst_trivial_bounds(atypes.body)) end diff --git a/base/iterators.jl b/base/iterators.jl index af5e108845afb..8be343e4060d4 100644 --- a/base/iterators.jl +++ b/base/iterators.jl @@ -779,7 +779,7 @@ end IteratorSize(::Type{<:TakeWhile}) = SizeUnknown() eltype(::Type{TakeWhile{I,P}} where P) where {I} = eltype(I) -IteratorEltype(::Type{TakeWhile{I}} where P) where {I} = IteratorEltype(I) +IteratorEltype(::Type{TakeWhile{I, P}} where P) where {I} = IteratorEltype(I) # dropwhile diff --git a/base/libc.jl b/base/libc.jl index 547561ac964ba..b9cbeb18fe08e 100644 --- a/base/libc.jl +++ b/base/libc.jl @@ -402,6 +402,9 @@ Interface to the C `srand(seed)` function. """ srand(seed=floor(Int, time()) % Cuint) = ccall(:srand, Cvoid, (Cuint,), seed) +getuid() = ccall(:jl_getuid, Culong, ()) +geteuid() = ccall(:jl_geteuid, Culong, ()) + # Include dlopen()/dlpath() code include("libdl.jl") using .Libdl diff --git a/base/loading.jl b/base/loading.jl index a6145398946b8..76b4cc1c7ef39 100644 --- a/base/loading.jl +++ b/base/loading.jl @@ -1712,7 +1712,7 @@ get_compiletime_preferences(::Nothing) = String[] # returns true if it "cachefile.ji" is stale relative to "modpath.jl" # otherwise returns the list of dependencies to also check -function stale_cachefile(modpath::String, cachefile::String) +function stale_cachefile(modpath::String, cachefile::String; ignore_loaded = false) io = open(cachefile, "r") try if !isvalid_cache_header(io) @@ -1733,11 +1733,15 @@ function stale_cachefile(modpath::String, cachefile::String) M = root_module(req_key) if PkgId(M) == req_key && module_build_id(M) === req_build_id depmods[i] = M + elseif ignore_loaded + # Used by Pkg.precompile given that there it's ok to precompile different versions of loaded packages + @goto locate_branch else @debug "Rejecting cache file $cachefile because module $req_key is already loaded and incompatible." return true # Won't be able to fulfill dependency end else + @label locate_branch path = locate_package(req_key) get!(PkgOrigin, pkgorigins, req_key).path = path if path === nothing diff --git a/base/multidimensional.jl b/base/multidimensional.jl index 32d66c4c54cda..b3ac26ff4fbb3 100644 --- a/base/multidimensional.jl +++ b/base/multidimensional.jl @@ -349,8 +349,14 @@ module IteratorsMD # AbstractArray implementation Base.axes(iter::CartesianIndices{N,R}) where {N,R} = map(Base.axes1, iter.indices) Base.IndexStyle(::Type{CartesianIndices{N,R}}) where {N,R} = IndexCartesian() - @propagate_inbounds function Base.getindex(iter::CartesianIndices{N,R}, I::Vararg{Int, N}) where {N,R} - CartesianIndex(getindex.(iter.indices, I)) + @inline function Base.getindex(iter::CartesianIndices{N,R}, I::Vararg{Int, N}) where {N,R} + # Eagerly do boundscheck before calculating each item of the CartesianIndex so that + # we can pass `@inbounds` hint to inside the map and generates more efficient SIMD codes (#42115) + @boundscheck checkbounds(iter, I...) + index = map(iter.indices, I) do r, i + @inbounds getindex(r, i) + end + CartesianIndex(index) end ndims(R::CartesianIndices) = ndims(typeof(R)) @@ -1614,7 +1620,7 @@ _unique_dims(A::AbstractArray, dims::Colon) = invoke(unique, Tuple{Any}, A) else j_d = i_d end) begin - if (@nref $N A j) != (@nref $N A i) + if !isequal((@nref $N A j), (@nref $N A i)) collided[k] = true end end @@ -1644,7 +1650,7 @@ _unique_dims(A::AbstractArray, dims::Colon) = invoke(unique, Tuple{Any}, A) j_d = i_d end end begin - if (@nref $N A j) != (@nref $N A i) + if !isequal((@nref $N A j), (@nref $N A i)) nowcollided[k] = true end end diff --git a/base/parse.jl b/base/parse.jl index 1097e8a19b804..1c911c96e1479 100644 --- a/base/parse.jl +++ b/base/parse.jl @@ -194,10 +194,10 @@ function tryparse_internal(::Type{Bool}, sbuff::Union{String,SubString{String}}, orig_end = endpos # Ignore leading and trailing whitespace - while isspace(sbuff[startpos]) && startpos <= endpos + while startpos <= endpos && isspace(sbuff[startpos]) startpos = nextind(sbuff, startpos) end - while isspace(sbuff[endpos]) && endpos >= startpos + while endpos >= startpos && isspace(sbuff[endpos]) endpos = prevind(sbuff, endpos) end diff --git a/base/show.jl b/base/show.jl index ecf62d273655e..3c73ca048db05 100644 --- a/base/show.jl +++ b/base/show.jl @@ -1011,7 +1011,20 @@ function show(io::IO, m::Module) if is_root_module(m) print(io, nameof(m)) else - print(io, join(fullname(m),".")) + print_fullname(io, m) + end +end +# The call to print_fullname above was originally `print(io, join(fullname(m),"."))`, +# which allocates. The method below provides the same behavior without allocating. +# See https://github.com/JuliaLang/julia/pull/42773 for perf information. +function print_fullname(io::IO, m::Module) + mp = parentmodule(m) + if m === Main || m === Base || m === Core || mp === m + print(io, nameof(m)) + else + print_fullname(io, mp) + print(io, '.') + print(io, nameof(m)) end end diff --git a/base/util.jl b/base/util.jl index 0466614278d5e..9abdb39da03c3 100644 --- a/base/util.jl +++ b/base/util.jl @@ -187,6 +187,9 @@ function julia_cmd(julia=joinpath(Sys.BINDIR::String, julia_exename())) if opts.startupfile == 2 push!(addflags, "--startup-file=no") end + if opts.use_sysimage_native_code == 0 + push!(addflags, "--sysimage-native-code=no") + end return `$julia -C$cpu_target -J$image_file $addflags` end diff --git a/contrib/tsan/Make.user.tsan b/contrib/tsan/Make.user.tsan new file mode 100644 index 0000000000000..3773832aafeb8 --- /dev/null +++ b/contrib/tsan/Make.user.tsan @@ -0,0 +1,16 @@ +TOOLCHAIN=$(BUILDROOT)/../toolchain +BINDIR=$(TOOLCHAIN)/usr/bin +TOOLDIR=$(TOOLCHAIN)/usr/tools + +# use our new toolchain +USECLANG=1 +override CC=$(BINDIR)/clang +override CXX=$(TOOLDIR)/clang++ + +USE_BINARYBUILDER_LLVM=1 + +override SANITIZE=1 +override SANITIZE_THREAD=1 + +# default to a debug build for better line number reporting +override JULIA_BUILD_MODE=debug diff --git a/contrib/tsan/build.sh b/contrib/tsan/build.sh new file mode 100755 index 0000000000000..67956d2dcaa68 --- /dev/null +++ b/contrib/tsan/build.sh @@ -0,0 +1,61 @@ +#!/bin/bash +# This file is a part of Julia. License is MIT: https://julialang.org/license + +# +# Usage: +# contrib/tsan/build.sh [...] +# +# Build TSAN-enabled julia. Given a workspace directory , build +# TSAN-enabled julia in /tsan. Required toolss are install under +# /toolchain. Note that the same passed to `contrib/asan/build.sh` +# can be used to share the toolchain used for ASAN. This scripts also takes +# optional arguments which are passed to `make`. The default +# make target is `debug`. + +set -ue + +# `$WORKSPACE` is a directory in which we create `toolchain` and `tsan` +# sub-directories. +WORKSPACE="$1" +shift +if [ "$WORKSPACE" = "" ]; then + echo "Workspace directory must be specified as the first argument" >&2 + exit 2 +fi + +mkdir -pv "$WORKSPACE" +WORKSPACE="$(cd "$WORKSPACE" && pwd)" +if [ "$WORKSPACE" = "" ]; then + echo "Failed to create the workspace directory." >&2 + exit 2 +fi + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +JULIA_HOME="$HERE/../../" + +echo +echo "Installing toolchain..." + +TOOLCHAIN="$WORKSPACE/toolchain" +if [ ! -d "$TOOLCHAIN" ]; then + make -C "$JULIA_HOME" configure O=$TOOLCHAIN + cp "$HERE/../asan/Make.user.tools" "$TOOLCHAIN/Make.user" +fi + +make -C "$TOOLCHAIN/deps" install-clang install-llvm-tools + +# TODO: https://github.com/JuliaPackaging/Yggdrasil/issues/3359 +rm "$TOOLCHAIN/usr/tools/clang++" +ln -s "$TOOLCHAIN/usr/bin/clang" "$TOOLCHAIN/usr/tools/clang++" + +echo +echo "Building Julia..." + +BUILD="$WORKSPACE/tsan" +if [ ! -d "$BUILD" ]; then + make -C "$JULIA_HOME" configure O="$BUILD" + cp "$HERE/Make.user.tsan" "$BUILD/Make.user" +fi + +cd "$BUILD" # so that we can pass `-C src` to `make` +make "$@" diff --git a/deps/Versions.make b/deps/Versions.make index 09fd082cc3e4f..57a655fc72f78 100644 --- a/deps/Versions.make +++ b/deps/Versions.make @@ -101,7 +101,7 @@ SUITESPARSE_JLL_NAME := SuiteSparse # unwind UNWIND_VER := 1.3.2 UNWIND_JLL_NAME := LibUnwind -UNWIND_JLL_VER := 1.3.2+4 +UNWIND_JLL_VER := 1.3.2+6 # zlib ZLIB_VER := 1.2.11 diff --git a/deps/blas.mk b/deps/blas.mk index 0b4f6b0aa83ae..566fd69699c70 100644 --- a/deps/blas.mk +++ b/deps/blas.mk @@ -103,7 +103,17 @@ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-ofast-power.patch-applied: $(BUILDDIR)/ patch -p1 -f < $(SRCDIR)/patches/openblas-ofast-power.patch echo 1 > $@ -$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-ofast-power.patch-applied +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-julia40963-zdot.patch-applied: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-ofast-power.patch-applied + cd $(BUILDDIR)/$(OPENBLAS_SRC_DIR) && \ + patch -p1 -f < $(SRCDIR)/patches/openblas-julia40963-zdot.patch + echo 1 > $@ + +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-julia42415-lapack625-openblas3392.patch-applied: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-julia40963-zdot.patch-applied + cd $(BUILDDIR)/$(OPENBLAS_SRC_DIR) && \ + patch -p1 -f < $(SRCDIR)/patches/openblas-julia42415-lapack625-openblas3392.patch + echo 1 > $@ + +$(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/openblas-julia42415-lapack625-openblas3392.patch-applied echo 1 > $@ $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-compiled: $(BUILDDIR)/$(OPENBLAS_SRC_DIR)/build-configured diff --git a/deps/checksums/Downloads-1b456c65ca2284a0f98c09cdd543664380ff4e08.tar.gz/md5 b/deps/checksums/Downloads-1b456c65ca2284a0f98c09cdd543664380ff4e08.tar.gz/md5 deleted file mode 100644 index b6b7340d51fb1..0000000000000 --- a/deps/checksums/Downloads-1b456c65ca2284a0f98c09cdd543664380ff4e08.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -5d435ee6cfc340b337fac358e9baffb6 diff --git a/deps/checksums/Downloads-1b456c65ca2284a0f98c09cdd543664380ff4e08.tar.gz/sha512 b/deps/checksums/Downloads-1b456c65ca2284a0f98c09cdd543664380ff4e08.tar.gz/sha512 deleted file mode 100644 index 9cc32b6d376ca..0000000000000 --- a/deps/checksums/Downloads-1b456c65ca2284a0f98c09cdd543664380ff4e08.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -72d1bae6ea29fc71306eda870d4fbbce04d3ace0a3bedd41539319af1e683d2807c23dfb746956bb676b59f89d3846356ad0c25292b3825191d4eff0529b298e diff --git a/deps/checksums/Downloads-b07b4cf3b20b77faa7efbe29c0adfa8b4b7ee8d8.tar.gz/md5 b/deps/checksums/Downloads-b07b4cf3b20b77faa7efbe29c0adfa8b4b7ee8d8.tar.gz/md5 new file mode 100644 index 0000000000000..2afbb9d0e66bf --- /dev/null +++ b/deps/checksums/Downloads-b07b4cf3b20b77faa7efbe29c0adfa8b4b7ee8d8.tar.gz/md5 @@ -0,0 +1 @@ +4355616cfaa57276d9873dd96387aca4 diff --git a/deps/checksums/Downloads-b07b4cf3b20b77faa7efbe29c0adfa8b4b7ee8d8.tar.gz/sha512 b/deps/checksums/Downloads-b07b4cf3b20b77faa7efbe29c0adfa8b4b7ee8d8.tar.gz/sha512 new file mode 100644 index 0000000000000..9a65a125734c3 --- /dev/null +++ b/deps/checksums/Downloads-b07b4cf3b20b77faa7efbe29c0adfa8b4b7ee8d8.tar.gz/sha512 @@ -0,0 +1 @@ +902d82694a77d153f1327dcc469ac6bd9913f30e67db8c81ccfd1c8dc2a6eeae69437218e28ced646a92f7c80dd5e0a338eb739c3c3d35021bc999b4371218a7 diff --git a/deps/checksums/Pkg-12d944551784d6f84446768738d4e917cd857764.tar.gz/md5 b/deps/checksums/Pkg-12d944551784d6f84446768738d4e917cd857764.tar.gz/md5 deleted file mode 100644 index fd7e4badc2cf1..0000000000000 --- a/deps/checksums/Pkg-12d944551784d6f84446768738d4e917cd857764.tar.gz/md5 +++ /dev/null @@ -1 +0,0 @@ -a24ed21b8c7fadb07b56450af0a7fe00 diff --git a/deps/checksums/Pkg-12d944551784d6f84446768738d4e917cd857764.tar.gz/sha512 b/deps/checksums/Pkg-12d944551784d6f84446768738d4e917cd857764.tar.gz/sha512 deleted file mode 100644 index d5d2849201fc6..0000000000000 --- a/deps/checksums/Pkg-12d944551784d6f84446768738d4e917cd857764.tar.gz/sha512 +++ /dev/null @@ -1 +0,0 @@ -0b5ef6e84f470c23c984dc750cb9518b0ed3c922b0a1406fc6e8a0c430c09195ede2af43e786dd1391b842a24a37c383e44e833ccf2337c286381f74b55be8d2 diff --git a/deps/checksums/Pkg-3d41ca188d72e1dc1862e780f31153d629d6a3dd.tar.gz/md5 b/deps/checksums/Pkg-3d41ca188d72e1dc1862e780f31153d629d6a3dd.tar.gz/md5 new file mode 100644 index 0000000000000..148a83a34b7ff --- /dev/null +++ b/deps/checksums/Pkg-3d41ca188d72e1dc1862e780f31153d629d6a3dd.tar.gz/md5 @@ -0,0 +1 @@ +8148d9dbf324d5ff557816a865435418 diff --git a/deps/checksums/Pkg-3d41ca188d72e1dc1862e780f31153d629d6a3dd.tar.gz/sha512 b/deps/checksums/Pkg-3d41ca188d72e1dc1862e780f31153d629d6a3dd.tar.gz/sha512 new file mode 100644 index 0000000000000..37087020ca9f4 --- /dev/null +++ b/deps/checksums/Pkg-3d41ca188d72e1dc1862e780f31153d629d6a3dd.tar.gz/sha512 @@ -0,0 +1 @@ +1a17c410a49507ff10df5341b59dd4fe7deb20410445ea96ffcee88bfcc1eebdb84876ff17bad1627b4fac34bb9231d668bcc6b3c695659a72c2221d50bb4950 diff --git a/deps/checksums/libuv b/deps/checksums/libuv index 20fc811c961b0..1dddd23bcd992 100644 --- a/deps/checksums/libuv +++ b/deps/checksums/libuv @@ -1,34 +1,34 @@ -libuv-fb3e3364c33ae48c827f6b103e05c3f0e78b79a9.tar.gz/md5/dc93ae5119c8934f374570342ef036ed -libuv-fb3e3364c33ae48c827f6b103e05c3f0e78b79a9.tar.gz/sha512/29947c236aef8931be4767df1cd8404ee9b036ee107b31cbce6fad9a97743df57d068b15bc4bd00320b9b81cd879258a9ec9dc675853e424ccdb8d6bdd226240 -LibUV.v2.0.1+1.aarch64-apple-darwin.tar.gz/md5/4480493c7bd60252489fd41bc1a7c854 -LibUV.v2.0.1+1.aarch64-apple-darwin.tar.gz/sha512/ac3ce4ec5141cc8d0dea870eb3d28e0154606ffe88ff67f6ba37ded5f44179caad1afe4606d99a6e2b25f7f2eb099e4f2999bc94f4bbeb92f02b805d6d347c50 -LibUV.v2.0.1+1.aarch64-linux-gnu.tar.gz/md5/51cfcbb92235b1b1268c324797d5dacb -LibUV.v2.0.1+1.aarch64-linux-gnu.tar.gz/sha512/b9f7943267f72ced674e6c64217d215b7d9fb72e764f8d00bd6083582d541dfd455edc1c8328587f7ba9c2212e12ce2458efd7df731f79c7ac1a112d192e3dd6 -LibUV.v2.0.1+1.aarch64-linux-musl.tar.gz/md5/5131d367fc11b6c89ce0c28c4aa7c4a6 -LibUV.v2.0.1+1.aarch64-linux-musl.tar.gz/sha512/77220ba9dc843eedde99b72ca6127cdbef70f5871e889bf92a2688f7630b78d090e14129f78de9938110424ce381f10cebf0280310e36a4d6d266d98dda804d6 -LibUV.v2.0.1+1.armv6l-linux-gnueabihf.tar.gz/md5/358f194088c338da8f0755bbc675cbbf -LibUV.v2.0.1+1.armv6l-linux-gnueabihf.tar.gz/sha512/646839f954f046d09df4e2fe12fe919dd61228c87141386635a27ac5a350b652daa3882f30cacb2b57392f5aa0c8c859050ad243d03331ccf612516680d33af9 -LibUV.v2.0.1+1.armv6l-linux-musleabihf.tar.gz/md5/db57bac6e2c9eda420a1b184757f60dd -LibUV.v2.0.1+1.armv6l-linux-musleabihf.tar.gz/sha512/11ab91b1a6d55a1b12e9c13d6b889ad6c67e8f30f1034f6f473d234096df951d39a69acf2594008bc453ebfd486563feae82ebd376d0c69a782cef6cedd37276 -LibUV.v2.0.1+1.armv7l-linux-gnueabihf.tar.gz/md5/a224bae77a94b29fb37cad149eb9d0c7 -LibUV.v2.0.1+1.armv7l-linux-gnueabihf.tar.gz/sha512/d4d86720179de0c6730ac11148b886a9d02ad78c4115f96a68b843c35a317712164f96b6c006dbaa4bc0497edb1d0fb590246606aaba38765c4d43b83c5cb4b8 -LibUV.v2.0.1+1.armv7l-linux-musleabihf.tar.gz/md5/681da84e2784b9ac3728b253e4f759ab -LibUV.v2.0.1+1.armv7l-linux-musleabihf.tar.gz/sha512/e05b177c7222e6ff4016ae831746b59b9cacd39baf401e6120a289c199732aea825b929ed48d201e25cace7d355482dc5f762f862712964d271c2235998fce66 -LibUV.v2.0.1+1.i686-linux-gnu.tar.gz/md5/1fd7cd45f8b2c811f040e929274f5b4d -LibUV.v2.0.1+1.i686-linux-gnu.tar.gz/sha512/751b4b78d7c854c6eb603e1d189ade93fa8ffb6323fd3fdd0786ef643812948b15e5f20098a407c9dbd6aea0e7b7cf94b94db05f6d1dae91d49a658e86f687ee -LibUV.v2.0.1+1.i686-linux-musl.tar.gz/md5/2643defa72fc2d60f4dec91cf8e0b081 -LibUV.v2.0.1+1.i686-linux-musl.tar.gz/sha512/63312128ca7a82030ebe937ca7fa8d99bdc0da80595562b997f9e1112bf860618f42c08ef12015255f419b4c7be7ac589ce65086fd893721ef83b6f77213f174 -LibUV.v2.0.1+1.i686-w64-mingw32.tar.gz/md5/ae90363f1eefa30200968660835f511c -LibUV.v2.0.1+1.i686-w64-mingw32.tar.gz/sha512/7e9db60b573ba30e610a54910308f09beb8e7c2c23f80dfc47083b159ec00a980fbfb3133a6a8d9ac4138434162eb415edcc26b9fba5bbaf7a8bdc65948d6e23 -LibUV.v2.0.1+1.powerpc64le-linux-gnu.tar.gz/md5/8d14df7b5bb87eb60de9f0365ac5a364 -LibUV.v2.0.1+1.powerpc64le-linux-gnu.tar.gz/sha512/9be15974f0b156a1bc3716b1a691c5092f5ddb263d0c84810fb39fc02e1e6494f897c8a60e55c4a380b150b6bacddbe71d4bcd033daebd110b9aa11c8e7b4b20 -LibUV.v2.0.1+1.x86_64-apple-darwin.tar.gz/md5/c8bf8f3eb191869c5484858e747355a2 -LibUV.v2.0.1+1.x86_64-apple-darwin.tar.gz/sha512/c11e3f1cc90c8cd2ff52652e4742481b5298f40ec0faea4970aa056e15fd5c4941de05fb25d946dcb5f40b2ed59571c0a97ae41a5f774ecc1f35f2032493f7bf -LibUV.v2.0.1+1.x86_64-linux-gnu.tar.gz/md5/57c1d1ee013275529ef8b1a128985fb5 -LibUV.v2.0.1+1.x86_64-linux-gnu.tar.gz/sha512/af03f0b01cff52a79699576d45457fff302d2f479cef2bc9a21e4559069a297c00adef004917b97853175f457b01a1860f429dc77a70410a21d6c05fadc1bbe7 -LibUV.v2.0.1+1.x86_64-linux-musl.tar.gz/md5/6e783b6786cde5d141b2c8220d1fac00 -LibUV.v2.0.1+1.x86_64-linux-musl.tar.gz/sha512/bf1f54364553b1c7ad7aac4ed0f256c95ecd763bf2052696afabffbbe60d1464de55fa4e51a8ae5993fd24fdfa645c66786bb1b9a0d4d7e839489f5e70204aff -LibUV.v2.0.1+1.x86_64-unknown-freebsd.tar.gz/md5/e9f4d0cddcb7a5e1a8a78bbf861e6948 -LibUV.v2.0.1+1.x86_64-unknown-freebsd.tar.gz/sha512/4028121b5a6cd47e38705af0eb5931599df7acabab761f124ea861a0061ac81fe2daa732a2a171a43bf66f0198a89bb46cad6c70580fd94f70a249b9c686fae5 -LibUV.v2.0.1+1.x86_64-w64-mingw32.tar.gz/md5/88e2cbb4e288f671c0ed9427374d721c -LibUV.v2.0.1+1.x86_64-w64-mingw32.tar.gz/sha512/93a7ccab47487ab66442ae446f9127f48699e6e5a8cf7b7c981f2ba139876fd232a7b7899d0b9cff783c91cab0b8d8c2509ae3f7489931962fe3359082c91a8d +LibUV.v2.0.1+4.aarch64-apple-darwin.tar.gz/md5/c44261bfb4a254100af5085624e9805c +LibUV.v2.0.1+4.aarch64-apple-darwin.tar.gz/sha512/f94b74fcd6a39c903f05efdd626cbe6af9016099f37cfbe0da50c0dce962a7998f884a38a586b14a9b5e7a01b96f653e5e204afbcf2c22188834394de3b3e607 +LibUV.v2.0.1+4.aarch64-linux-gnu.tar.gz/md5/5cf0c759aacd96784a81b464240901ae +LibUV.v2.0.1+4.aarch64-linux-gnu.tar.gz/sha512/b8488345516cf424bcf4b4637799cbfcf6019b109dd6104784d09381a85d4f145c02d0e0ad3a3a3679b68b7d5a5ef0a9d63cbed62734272c80e8e3927eb047f5 +LibUV.v2.0.1+4.aarch64-linux-musl.tar.gz/md5/1c3ef838685ec4b32a68ee260cd9dfba +LibUV.v2.0.1+4.aarch64-linux-musl.tar.gz/sha512/f2560edceeb680ad46a3f4146a0d22f28a6727e892520f9599f0d5a105b0d7776dadf688b48e773f7e5b2d4204d3f56bd0f8f23d09c6ac5b4d6cd85c05a20fe5 +LibUV.v2.0.1+4.armv6l-linux-gnueabihf.tar.gz/md5/bc7fa34f167fa6ed945ef2f29807e910 +LibUV.v2.0.1+4.armv6l-linux-gnueabihf.tar.gz/sha512/124646ac504e8f995bccfcac0b8ae5ef524016f1cc2f2e58e058b23624193c52ab7f554ea4ffcb3046422e638cb2422442a8fcfb9e8b828d173f1f97d5ade910 +LibUV.v2.0.1+4.armv6l-linux-musleabihf.tar.gz/md5/c123949e81d4e49c8e1a4a63327c2ccf +LibUV.v2.0.1+4.armv6l-linux-musleabihf.tar.gz/sha512/b04aa8e293abcabf125e63d11efd56215d3605e1709b2635a7325d84b5e4de7174fb69695bde3c1e042309333f7ad80f8782bc8a9576efdbfe8cac62dcbba7bc +LibUV.v2.0.1+4.armv7l-linux-gnueabihf.tar.gz/md5/eb031d1135a79615381f3010b85e4a02 +LibUV.v2.0.1+4.armv7l-linux-gnueabihf.tar.gz/sha512/13383beb19cf6fa6601d02fd7c193f27877ccc63acefd935edd2ff7c13d4b8d8b900b5571da19fe418e007e3ade4c49c1f64a971326abb50aca5dec60c10a4b6 +LibUV.v2.0.1+4.armv7l-linux-musleabihf.tar.gz/md5/09ce6bb24ca286f92675349d583c03db +LibUV.v2.0.1+4.armv7l-linux-musleabihf.tar.gz/sha512/a71f58f61e7bbd479bb66c560804b99b0e4218df0e9b4b325b254cd58d8ab8600eca35a8b9b5e54f57099834ec22e36a1a11fb923b150305c7561242b7e62030 +LibUV.v2.0.1+4.i686-linux-gnu.tar.gz/md5/1efc848d7961a677cdeb0acec37d826b +LibUV.v2.0.1+4.i686-linux-gnu.tar.gz/sha512/8855729060b7e59a5a34ff2aea209d4af84657d7b801e736fc374d49d338e1bc87796e3346eeac7340f3e8e1f8037bf420144f04d81b93d3017fb5a32eece43a +LibUV.v2.0.1+4.i686-linux-musl.tar.gz/md5/71bde27fb51e9c7ccfe1c7eab34afbb4 +LibUV.v2.0.1+4.i686-linux-musl.tar.gz/sha512/588616fd1ff342e8070def2121fa2dd6be349e9ff1d19653d2414f0c713ba02d50a89aa7cdddeb19e6864654690c870164238204767990f09b277ddf788c9935 +LibUV.v2.0.1+4.i686-w64-mingw32.tar.gz/md5/090d2e845fcef61c3ef019fdbf7877df +LibUV.v2.0.1+4.i686-w64-mingw32.tar.gz/sha512/aaea203d285ee490803852d27fc628763358680e05373208385f85ca33d14bc09baf63cf243fd45788ef68b415858e5d919178574322cfc9e4a42774227ba8ab +LibUV.v2.0.1+4.powerpc64le-linux-gnu.tar.gz/md5/b69fd18d09ab59e3b139963b3988321e +LibUV.v2.0.1+4.powerpc64le-linux-gnu.tar.gz/sha512/e257c2c86af1c7a7ab76cd08faabf7e74ef9fa462e0f8f3df346d11a249157b4b47130fad44b47317d358bf74233bb9b854c57a9b76c29c0e05f15f9322b8b53 +LibUV.v2.0.1+4.x86_64-apple-darwin.tar.gz/md5/4242ead21755564805144cf2712e3d55 +LibUV.v2.0.1+4.x86_64-apple-darwin.tar.gz/sha512/f7448587af8186c5eb59f81cca7f48f840578440762b22a7a122e8243509bb9e2c541e337c1f2d1e94599cce1a928ec6b6c14e219e412bed21d82a68416caece +LibUV.v2.0.1+4.x86_64-linux-gnu.tar.gz/md5/46155e2617a76e3910f379c33127a31b +LibUV.v2.0.1+4.x86_64-linux-gnu.tar.gz/sha512/fa94f0dea120ff5381e7803672dd588ef69990d488bc7124c662a55ab52805b874b0913fb5c2b623ccf22ff0d1065229c3a06f44669a758b8186464118902b35 +LibUV.v2.0.1+4.x86_64-linux-musl.tar.gz/md5/921637f115807c2f0b86d6a5c1949789 +LibUV.v2.0.1+4.x86_64-linux-musl.tar.gz/sha512/95ee29a34d919dae348fea2ca81d7549be8210143936987ea68f28271331983e4358aaba884edc5e1fd16eef8e9d35770f6b113d3f1db412a3a829d381b9df42 +LibUV.v2.0.1+4.x86_64-unknown-freebsd.tar.gz/md5/f4e733fa82a5a34da86a8e9d143596c1 +LibUV.v2.0.1+4.x86_64-unknown-freebsd.tar.gz/sha512/f6e390126d2e75c2dd32da40db48905c48134437e52634101d10ade67b7426101324ccf652bb4c4cc29272c5b641d5543e673bac7c6ec1c31f8d7e77f61c09c0 +LibUV.v2.0.1+4.x86_64-w64-mingw32.tar.gz/md5/1c8e63632fb40fa97805efde91de764d +LibUV.v2.0.1+4.x86_64-w64-mingw32.tar.gz/sha512/2c64ac559beccbee8ce62dc0ce0277d8eaca5e46c13585bf10d2a79811bf4f5dcac30d49b2b6a02472c72857a859be021e4e7114f30e560f97c4e3979486dc7c +libuv-c6869fba163a1e04af64ede438a8fd0191e75e9e.tar.gz/md5/b60fc7b00bdfafcbbc66317858882058 +libuv-c6869fba163a1e04af64ede438a8fd0191e75e9e.tar.gz/sha512/197b386af51eb4456ce65e2951e033731e1194fca8bed08755a78360ebb3431ab4d8d69a75279e7995d2e4197133d613892e5b9b5d6411bffa692df35542420f diff --git a/deps/checksums/openblas b/deps/checksums/openblas index e29ce410dbd79..6327ec3d07ff8 100644 --- a/deps/checksums/openblas +++ b/deps/checksums/openblas @@ -1,94 +1,94 @@ -OpenBLAS.v0.3.10+3.aarch64-apple-darwin-libgfortran5.tar.gz/md5/eb262521f515891c18f426ccc611805e -OpenBLAS.v0.3.10+3.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/9b080755e58d276ab2c250c70c68505c265cc1f5c19c8be6e0184334ca92e7d4bfce9aa9610d63f26e29c8da435f1b65535a750e2865e7996f887a5f8e64c2fd -OpenBLAS.v0.3.10+3.aarch64-linux-gnu-libgfortran3.tar.gz/md5/db776632a516ca87241cf467aa099d7d -OpenBLAS.v0.3.10+3.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/5c0f5c94445471d6c1044c4f0a7e712b95612e97982f23acc387bb6e7feb2872e2de54dc47116a6f5a4e3b051fc9a1638a2752be96c90c4ef586365317a5dfe9 -OpenBLAS.v0.3.10+3.aarch64-linux-gnu-libgfortran4.tar.gz/md5/f8732061f3870536dd1ebea9ad343fb6 -OpenBLAS.v0.3.10+3.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/b0fba55de11eac90dad7e05ded621f8f564711a5b1649cadd2aa5f84cee10a5ba3e7c0aebb5739f282fe433cf723e398264ebfce3a605824fccec0dc5eff83d7 -OpenBLAS.v0.3.10+3.aarch64-linux-gnu-libgfortran5.tar.gz/md5/1d74f637a24f7078a89f01e9ba17d48f -OpenBLAS.v0.3.10+3.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/c06d5bf28998070a32d7116d904cdee497037f2dc79305b240d32327fd28d6b3133797558d9b0a63431d647d0517df26ab15291d2b1d6534937d130edc4d3c21 -OpenBLAS.v0.3.10+3.aarch64-linux-musl-libgfortran3.tar.gz/md5/d644598e9f6bbb27c22c06739b5ae408 -OpenBLAS.v0.3.10+3.aarch64-linux-musl-libgfortran3.tar.gz/sha512/25932b36b869d5db7858999357ad05bcd7d71765f4ea17948b84a86b03a93b9aa063e878dacc99738ac8d2b0cf9342c746a068e5823f6307c740b6e0f748c959 -OpenBLAS.v0.3.10+3.aarch64-linux-musl-libgfortran4.tar.gz/md5/a2f4c127e3f46d282cf57bdcccc9787c -OpenBLAS.v0.3.10+3.aarch64-linux-musl-libgfortran4.tar.gz/sha512/c7e21ced6c95535b9fa71a2d7158ba6bd5ba7bbb0691b88a6972826814be99ae0394f917f3a9dd43b8b695725d54457c38c2d597b46ad04d8ab34fd9066a66ec -OpenBLAS.v0.3.10+3.aarch64-linux-musl-libgfortran5.tar.gz/md5/fefbf6ed4c116ba02962f7227bb05ae6 -OpenBLAS.v0.3.10+3.aarch64-linux-musl-libgfortran5.tar.gz/sha512/03c655c025c2de374cbd50b7d6fe3f8b2f84e000864322fa5c36756815424efc8be1b79e8d817f3404439621ad6d1d48d0c8111d7cd0e79a71e87730c9b1581e -OpenBLAS.v0.3.10+3.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/886ddef4a65328691896d82b2dd9ce83 -OpenBLAS.v0.3.10+3.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/c09fa27fe3755295e0cd52daa0b83bbf4d8e45a115415922eb0bb424dcce1805faf9e82f00dd978a93ee61b81094e2e41013b79dafe0ad65b2728d5588343d94 -OpenBLAS.v0.3.10+3.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/cf761bc5816637327afcc7ec567edcf9 -OpenBLAS.v0.3.10+3.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/0dbb49103f9be21761c710052b48c60c6ec0a75ce3f498b6a6b2c3ec8dcd66e54410a746b6a061600c22d62a231bcd1f99c26a1696c2709f562ea9992b3d8057 -OpenBLAS.v0.3.10+3.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/121b4c3d06826a9058ded6f16dad7fa8 -OpenBLAS.v0.3.10+3.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/971dd03a71afc15ea9dfff7d9a33fdb35fc03f3061c831d1935ba983672d29184bb8a605f11146eaf65768c23dfc2d0799589cc18510c513c7804bc9959ea5fc -OpenBLAS.v0.3.10+3.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/270d684f116a0de59f031be1f7f09003 -OpenBLAS.v0.3.10+3.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/fe468deba39ca5f4b5aae753b1372040d6bdcf515f6e44771bd65396e0b2f4f671131ba19484c2bd36cb52beb67743ae185513bcd5b779e2f52ec63a51810f0d -OpenBLAS.v0.3.10+3.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/3c3ab8e2e8616e9e4769682a81194cb7 -OpenBLAS.v0.3.10+3.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/9e8638c587ef2075dc35bbff965818a3b972052fcf179e57f80fb8246dc0948542056ac979c66d43cc945119d1a5ddc1f9a91b775ad437096e8fad3084feeaca -OpenBLAS.v0.3.10+3.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/7cbfc869b9a2dc57296879d5d6ae645e -OpenBLAS.v0.3.10+3.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/3d3b35317e2497835f0ec85d58177acaf18aac6eebd49ace5d78fd8fc2d010726983a97b31f95e3ba92df12a040179530818309021699a148ed975e3da699331 -OpenBLAS.v0.3.10+3.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/8b4a0c82c997be8d3d133aa1d1eec652 -OpenBLAS.v0.3.10+3.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/58b515c4700f2b506784004f05c698125847177170ed79e6ea5ec78962049e00186d2a9c7505a0370d972a43cfd35b2432683cee436bf54c77c4faa0f7c3fd41 -OpenBLAS.v0.3.10+3.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/fb477bbf3eff7c0dc6435f52429aa59c -OpenBLAS.v0.3.10+3.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/52eeef50acbb3d44b3c617991631b2e4607e435b3ed84c7c39eaae6ff0974fb34b5033064d9c0225358baf0ea64df35bad2a71003ed5c3185b807d41615473bf -OpenBLAS.v0.3.10+3.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/328270a3c37237e0250bc243a63bdc41 -OpenBLAS.v0.3.10+3.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/e53e0cd6479116ad9a509433cab8ab9160547ce1f048ef9a967a9549cde00e8a11d7c11e66386b83ba6b62308cb57f973c53c607657eaf1cabacaf931d4bfa8b -OpenBLAS.v0.3.10+3.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/0715a9aa889c39521946780c5bf2c6b0 -OpenBLAS.v0.3.10+3.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/b9b137968ba9cc85ec5509e72ffbe13ccbde1c686e8f84c4c8f31883aa1541b17aa8138412f3110c94aeaed9ce423eb5ff6359f1e93e31956ce47dfbce329d47 -OpenBLAS.v0.3.10+3.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/33b565d5192caf02c192b8e54bbafd0d -OpenBLAS.v0.3.10+3.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/00fde2e71f37f99ec57462cfb9e7029758e0c634b602269a26ba3dc1db76222ce7df0f2170bd62c4ca499959ba1f443997bcdd6d906103fa4736d93e9937a56a -OpenBLAS.v0.3.10+3.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/16ac45ff9a0d4a7eaa826e3f57da0ebc -OpenBLAS.v0.3.10+3.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/5196ee0a2905c1c5416eedad50ef44fd192577e6ed575103c6c4b58a533ee7f28ac67336bcbd2db72d368ab7d1a9e628e290d5a481a7f55681f4c80ac2df0ec6 -OpenBLAS.v0.3.10+3.i686-linux-gnu-libgfortran3.tar.gz/md5/b0093f408695330e6534b3a2e95a1340 -OpenBLAS.v0.3.10+3.i686-linux-gnu-libgfortran3.tar.gz/sha512/ee2229a6384bc69c304491fc282f39f4a011375a812c4744dde1a5d50faa9a2bd9d2c33a380dd14d7a675d43213e78fd615ff2427ebfc18c6bb7ac8e88e0f9ca -OpenBLAS.v0.3.10+3.i686-linux-gnu-libgfortran4.tar.gz/md5/a4473dce3a1214411ea326345a8baa15 -OpenBLAS.v0.3.10+3.i686-linux-gnu-libgfortran4.tar.gz/sha512/3014ab7647b557b9b9b79b6d76b286f8fc7b6e016b56a58c6c5f0478d024b38330fda664dd274dfec22d3dc7d3f3ec742011a941c51c98872b8cfcb32a63cbeb -OpenBLAS.v0.3.10+3.i686-linux-gnu-libgfortran5.tar.gz/md5/cf113831a99647425bb783de57bab505 -OpenBLAS.v0.3.10+3.i686-linux-gnu-libgfortran5.tar.gz/sha512/b5800e81b74ad9a095e69927978540fc48ae2f5465be45fc1e02c0559eb86eaee097215fba8088fa47926f8413f6c324954d32b0d21ea8ce168659ace30e410c -OpenBLAS.v0.3.10+3.i686-linux-musl-libgfortran3.tar.gz/md5/d2533407a80ea8d0b5658957ed05c167 -OpenBLAS.v0.3.10+3.i686-linux-musl-libgfortran3.tar.gz/sha512/8b1cf7a05b90e1d9820b28238605adc2afbe8f32a030c7e2c90fa40a20baea40ac634b2dac89500b345c3408e22d1053d0ce89f2adf5ddfb12ab2c2f80e11483 -OpenBLAS.v0.3.10+3.i686-linux-musl-libgfortran4.tar.gz/md5/72ea8a260dfb607c84924ea262d7d93b -OpenBLAS.v0.3.10+3.i686-linux-musl-libgfortran4.tar.gz/sha512/459d52e6de60f907072b83080c1543fce166e52336eb6058cb84448e00775ab48386f993ddcbec6c37b81fcb3e432f24f61c2fbfadfdb734d9ac1ff7e24b7fcc -OpenBLAS.v0.3.10+3.i686-linux-musl-libgfortran5.tar.gz/md5/45bf1764c042866238f6ff065d00fe99 -OpenBLAS.v0.3.10+3.i686-linux-musl-libgfortran5.tar.gz/sha512/87b8a919ab5d4d631c2b9700a92fe0af275c05be580cdb43315fbea6fa0d343ba35e870cbb37026294acb9b1e72c4b019087c8b62e6402518d284717d7c463cf -OpenBLAS.v0.3.10+3.i686-w64-mingw32-libgfortran3.tar.gz/md5/20fcac4d38f5d18012fec8fd1d9257e2 -OpenBLAS.v0.3.10+3.i686-w64-mingw32-libgfortran3.tar.gz/sha512/ee36d6ca43257bd59d3d78d289a10e2d232bd1593422389a6f65fffe8cd91c1dfad55dba808a309b03f21499f3c717910298fccc499c5bae29cac9d2e89b5574 -OpenBLAS.v0.3.10+3.i686-w64-mingw32-libgfortran4.tar.gz/md5/f3b2ac79af5d0c13e0441300d6ec713f -OpenBLAS.v0.3.10+3.i686-w64-mingw32-libgfortran4.tar.gz/sha512/a2a7d5efb55c8e4840e70e68100b8a320d5fab785fc11f6df20475b2b5ba51dfbde3efbe8224e7cef9421b73daa56d04f4709faa11325dbef5ce731235418785 -OpenBLAS.v0.3.10+3.i686-w64-mingw32-libgfortran5.tar.gz/md5/08042098a77f6eecc6a2487c7c164ea6 -OpenBLAS.v0.3.10+3.i686-w64-mingw32-libgfortran5.tar.gz/sha512/bc1c0b8509e16f8c46b7aaf3b3211f64ad18034af6234d078b83c7e361a711d2e2cba47e06ce6dda6c34ec017402f533d0060b0fbe952c2ae5e86b4466cb59fe -OpenBLAS.v0.3.10+3.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/40dcd0c5f2a03be368e04f93fa084998 -OpenBLAS.v0.3.10+3.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/1c0c535c163a18dbac44586dfadbe635a65ae8eda6bcec58d845cb7821d36370a1dfdab0c874668709fe3e72e7bc56ab798ee503a631b6e92c6f13690d9821a8 -OpenBLAS.v0.3.10+3.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/30edb227e4618869b11ad2df0983ffb4 -OpenBLAS.v0.3.10+3.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/e01178c268e1e13b7f919dd0e81605dca895291d2c69ad28ed948d9ebffab53f08f28c18a503be2f72c96bc15ba0726a8bcc298c4326dd1b2a62e918932e1487 -OpenBLAS.v0.3.10+3.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/089ff4f5f8a02a6fa8905ed527149d30 -OpenBLAS.v0.3.10+3.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/d5213c286ffbe3cff4c3b6b710311ea2e8b4af639382930a40119b17ac3e17015628856d2656a9060765c5cbc9adacae448edf7b9c5731036b982a871f4bd95f -OpenBLAS.v0.3.10+3.x86_64-apple-darwin-libgfortran3.tar.gz/md5/7c1ff766cf7d100b9f3c02f928952e97 -OpenBLAS.v0.3.10+3.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/b5d6ad663b764101780368fb6ce0f982ccea755cd3e2cc7bc24181e1a7a428943b40adcee5fcd3517bc51323de6fed272a38664699f482b14d919268f56242db -OpenBLAS.v0.3.10+3.x86_64-apple-darwin-libgfortran4.tar.gz/md5/9e63f6b81cb0b32fa7f69471c520330a -OpenBLAS.v0.3.10+3.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/4249b680b49f11a54b5bcefbf31b7e4dcf65b951b201380be7b5b0dc899f5b3fc602abbe4d04911bff7eeb0c8fc93209f9f0f46e0d28d64ca4aac4bae7970ea1 -OpenBLAS.v0.3.10+3.x86_64-apple-darwin-libgfortran5.tar.gz/md5/032abea75621ebff82bdcd6957cd9470 -OpenBLAS.v0.3.10+3.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/eeb8159ec230ba5c59fc9a2e5c816109b478163dd8927cdbfd15f52576e492db4392953601e22bbb6c8b2f49a194f1870216e69e2e05c6335a2ba1c01ff7c980 -OpenBLAS.v0.3.10+3.x86_64-linux-gnu-libgfortran3.tar.gz/md5/1cedd3a7e35065c541ee487473781a33 -OpenBLAS.v0.3.10+3.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/585182ba00cf4a5f028e4afea556442e5ff948d187ac0d63ea879d76bd8c71c5591106b8c9d05511baac08e685957a2625b5c751ef6bac045b7509f4d4bc0def -OpenBLAS.v0.3.10+3.x86_64-linux-gnu-libgfortran4.tar.gz/md5/d59c08936ac2166dae0fa0a55a2cb932 -OpenBLAS.v0.3.10+3.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/a27e145495f40b7d78b745814d264e0c3b1bc24aff45d3982e44aa7840fd2b954b4b7c81fc9cd7e792b44eff2cfbd2c80c98cb4963ed7a30244ffdd0e6d97ed8 -OpenBLAS.v0.3.10+3.x86_64-linux-gnu-libgfortran5.tar.gz/md5/baf3236ee3382c082f28763f55edb296 -OpenBLAS.v0.3.10+3.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/d58274fc33ddabe13e99db22d79786058a5a30abc5439538208bba51cc23304e225a445cd8001ca9b58fc98ea481b61608299dd26ebe3590ba2c93c056b16ab8 -OpenBLAS.v0.3.10+3.x86_64-linux-musl-libgfortran3.tar.gz/md5/dce16a601557f1a8353bd6f23442efdf -OpenBLAS.v0.3.10+3.x86_64-linux-musl-libgfortran3.tar.gz/sha512/51114516388bdd1e01c48b9dfc0fbf3ec845527bdb729f125e71b74eca66f78f5ad55086d99ac9a1d5913fc62e8e7b1d360fe9bb3c54dd8885d13f6b281768fa -OpenBLAS.v0.3.10+3.x86_64-linux-musl-libgfortran4.tar.gz/md5/7b3e14b68c1348827054cad57cd8574b -OpenBLAS.v0.3.10+3.x86_64-linux-musl-libgfortran4.tar.gz/sha512/a6c36a417e04935dddf7aef6c636261493bb0eb7670b9b788df1800c7467b5ad10728c70d442bf6a850de3efc0c7e1cd134fc59803c73c7847a7dbba4e8d24f3 -OpenBLAS.v0.3.10+3.x86_64-linux-musl-libgfortran5.tar.gz/md5/38e0a175cc8da058aa252510a95c21af -OpenBLAS.v0.3.10+3.x86_64-linux-musl-libgfortran5.tar.gz/sha512/6197d85d850601a21629f123d3fe6a2fa8cea9d7231f20d72a2de8c0565819aa26cbcdb90bcc18718eecc34d3907b78101570b1bd8ae0c47bcc1fe696ed39933 -OpenBLAS.v0.3.10+3.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/785d11b740c2a33970a0e6f37d1d136b -OpenBLAS.v0.3.10+3.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/410b82a8a8501270fcaa9a2626b1d180f1e3d1d3ab239fe8a365f167a5b081d6ac66343524ce1f14e77fb6e1439eb0c843bd800eb4c46da144d4fd2cd11acb88 -OpenBLAS.v0.3.10+3.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/fa98f0db9a9fe6d221776f140e93386a -OpenBLAS.v0.3.10+3.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/f7d316a3219b30a1ff351bf14ab7fed4852fc48abdeb98351e91faa2234452acc1ad1347e0d68cd30cb2e2c4bbd3b6eebc0df0eccd8a7a3c9d66435797f35251 -OpenBLAS.v0.3.10+3.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/c680ed9cf50de5a9fcce483581df48f8 -OpenBLAS.v0.3.10+3.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/783fdc97381b4b6c8c54a7c0e9895c8c50667f311a0c2ea468b7afdaed824e7114c1f71d21f082ab0d4c47214b1a6dba8b17bc7863cf5b394f68936e8c4d6da4 -OpenBLAS.v0.3.10+3.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/6b078fccda6c20062d6385d58fe11569 -OpenBLAS.v0.3.10+3.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/380a2813ea324474268faef69237bbcdd4f89a3f864aab49a94b0ff714e1bbe98c1f154a5b56a9305aa64b138aeb1acc8108a87ec2b94f492265bdb8a0604421 -OpenBLAS.v0.3.10+3.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/deaa0f9254250ae3af42c24bd1c94ea8 -OpenBLAS.v0.3.10+3.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/23bae45e8871c0b9b7f9429ad36295b042f3a8b4c22b5b0f294d49a78f499ff1d18688a34d90ae2bf559af78632c61a1955b6ffda49f744c7874ba5532150f46 -OpenBLAS.v0.3.10+3.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/01405f2c40d460e1ac04e18d5903b6c7 -OpenBLAS.v0.3.10+3.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/53f64760c2bc3390e85816e82fcb6c4ea9c5d33ee2061995f509132e042c796f434050d7d6232098de495bc313611885e61d18a467381ff1358664399f20cacf openblas-63b03efc2af332c88b86d4fd8079d00f4b439adf.tar.gz/md5/3d692acc6927454f620a4c493bdb159d openblas-63b03efc2af332c88b86d4fd8079d00f4b439adf.tar.gz/sha512/cf89f6db1b6366833d29a1dc718ea0b8f61d162f70695c33fc94afbaba232605630a7a7cc3d3b9bed7493ec85402b65180ca99c3101de7141d6f2919318f55c1 +OpenBLAS.v0.3.10+9.aarch64-apple-darwin-libgfortran5.tar.gz/md5/fa9b8faa2c2019ff1c5ddbde30fd6dbd +OpenBLAS.v0.3.10+9.aarch64-apple-darwin-libgfortran5.tar.gz/sha512/1051c63fa385f6e1dd225e4769466a9a9b96ba34ad962bf1cab7ed8c92313bd41c9ec533a34b30b39ac8276a9d4f9cbf5fd205d857ce4db36894c07b8dd651f0 +OpenBLAS.v0.3.10+9.aarch64-linux-gnu-libgfortran3.tar.gz/md5/64267e0d657255dfd988759dc044223f +OpenBLAS.v0.3.10+9.aarch64-linux-gnu-libgfortran3.tar.gz/sha512/160554943ec5e0b3a9b500ab83d0388cd5c07ed5f915a306cf47b2eff94f28c0ca3b8ddb54d8a1af7f016cbf96234b5448815c38589e931ef78ca5282406d8a9 +OpenBLAS.v0.3.10+9.aarch64-linux-gnu-libgfortran4.tar.gz/md5/e25b933ebdb32704e8d46c2c6dca4966 +OpenBLAS.v0.3.10+9.aarch64-linux-gnu-libgfortran4.tar.gz/sha512/8467b1d29b9521c50fce2e9c49129acbca85307a2a6113ca9e9b377407d77a216fcc1cb4faae94ab652386e3e2c6007e811c4df35fc0fa78432919a025188029 +OpenBLAS.v0.3.10+9.aarch64-linux-gnu-libgfortran5.tar.gz/md5/bc42e653aabcffbe622b80d0f8db5db0 +OpenBLAS.v0.3.10+9.aarch64-linux-gnu-libgfortran5.tar.gz/sha512/7301710033cbf57c066c7216714f6695d566512520218662fd482164d1882d9d6f55142b0021bff5d352c47002fab0342ebe3360a7d207c10f5da221bc9f2ad1 +OpenBLAS.v0.3.10+9.aarch64-linux-musl-libgfortran3.tar.gz/md5/62796b6eea07e4e5ebc80a0d4468bba5 +OpenBLAS.v0.3.10+9.aarch64-linux-musl-libgfortran3.tar.gz/sha512/9d5da75f6d1dc32fb29da5cafd1660759794028ae4ac02d764f4af7f0d48e66d8667137efeb195439f2a1e16c835e95d5e6b297c3289bf3343a9fa2b07788461 +OpenBLAS.v0.3.10+9.aarch64-linux-musl-libgfortran4.tar.gz/md5/b571a6abac640cf443244a19d9b701ab +OpenBLAS.v0.3.10+9.aarch64-linux-musl-libgfortran4.tar.gz/sha512/42a25e823a6a20dacd785bf663d4a09f571707152f29950c31cb42ba7cd69139d5f6e54213422ea0c7dbfe851f685bb6cf985a4cedaa9cc7e69cbed2e0c9e23d +OpenBLAS.v0.3.10+9.aarch64-linux-musl-libgfortran5.tar.gz/md5/9a40e9167b9f0d40150c58506289acae +OpenBLAS.v0.3.10+9.aarch64-linux-musl-libgfortran5.tar.gz/sha512/ff517e676a552f98eba3459ae1df08b96df32c588d9ae10482bb48b72700e259927878480851121bd2208045de46ed12e27d91d30c1fa22d29af2b7c9bcd343f +OpenBLAS.v0.3.10+9.armv6l-linux-gnueabihf-libgfortran3.tar.gz/md5/a9853b59f06a6c71557f021fd27e8986 +OpenBLAS.v0.3.10+9.armv6l-linux-gnueabihf-libgfortran3.tar.gz/sha512/0084347ce918f5d9c43ebe25815d2275ee62b6544af76847fc0445c41bbbffdd333e4a74d7f793f0c993d1854f7242ab81e02892cceb5c58da8342c2271d39a7 +OpenBLAS.v0.3.10+9.armv6l-linux-gnueabihf-libgfortran4.tar.gz/md5/a217f0325f33a80ac79ef9c057b65338 +OpenBLAS.v0.3.10+9.armv6l-linux-gnueabihf-libgfortran4.tar.gz/sha512/0eff9ba39ab1011edc86e4b3c5d489ed05ac733ba3aff883d14ba085a09e0d43f24d9e1076f3c79d257d304e4d98952d5218708f71cb32ea2dcfba273a00341f +OpenBLAS.v0.3.10+9.armv6l-linux-gnueabihf-libgfortran5.tar.gz/md5/96e62cd51c7126423c5ce08f929823d7 +OpenBLAS.v0.3.10+9.armv6l-linux-gnueabihf-libgfortran5.tar.gz/sha512/5869a932c3b852ac8630dc0709955c8e911ba2bf8f0b4e25e825a0284823e8d9dccc2f7d35170ded5083135ba72e64e9635d8dd8760f71a35ae7ff609be1300a +OpenBLAS.v0.3.10+9.armv6l-linux-musleabihf-libgfortran3.tar.gz/md5/0153f954ba4c6eec5f1d3c4d05fb7e71 +OpenBLAS.v0.3.10+9.armv6l-linux-musleabihf-libgfortran3.tar.gz/sha512/f42ac3ab6c424bdfdb20021c77643d7c0ea34f620c807e09832aa45f84bc9a5787db6621131a184584be4a44a9bbc32abb57fcf095941721b3eefb099d356c1c +OpenBLAS.v0.3.10+9.armv6l-linux-musleabihf-libgfortran4.tar.gz/md5/df009d8ce36b276e7d105b583ce3ffa9 +OpenBLAS.v0.3.10+9.armv6l-linux-musleabihf-libgfortran4.tar.gz/sha512/dbc0f1f4c68283006c7a6045bb1278cf4491446179541580336a7abb8cb6ccca368959efcb6947fb6030169fb3908bd9de9beb885c114dba594132893e4307f0 +OpenBLAS.v0.3.10+9.armv6l-linux-musleabihf-libgfortran5.tar.gz/md5/2bf2e0b25d8dbc09c21459d6858264f2 +OpenBLAS.v0.3.10+9.armv6l-linux-musleabihf-libgfortran5.tar.gz/sha512/f6f42702b6e42e3a1d70d7296e0dbe4d8023bbb7e82d725badd8624814623e10e38237719ff05eeef3795e8b4be15323c3f511268a560169598ef3081e7f5ec0 +OpenBLAS.v0.3.10+9.armv7l-linux-gnueabihf-libgfortran3.tar.gz/md5/5ec164e90bd480ffbc0c124e68089892 +OpenBLAS.v0.3.10+9.armv7l-linux-gnueabihf-libgfortran3.tar.gz/sha512/11b60ec8f5ece731459366f9f1389351489d9f4cf97cca5feae29e395bf2fc0deaa95a1a9be8b96af5d318ebbe1ca8d1413d40643d9799dfb2d704cce0169a94 +OpenBLAS.v0.3.10+9.armv7l-linux-gnueabihf-libgfortran4.tar.gz/md5/4d53a1c5a406e3eff16f04053880d58e +OpenBLAS.v0.3.10+9.armv7l-linux-gnueabihf-libgfortran4.tar.gz/sha512/a552edd37f63c1cf51c046211abd159b4ac32be6b53846c7382ba91741be2bd4ed1ed0e73ace6248ef88b181e612d62d2db6056b5e4ab40b5b153a5f9820629a +OpenBLAS.v0.3.10+9.armv7l-linux-gnueabihf-libgfortran5.tar.gz/md5/06e60982bb6b38e5e832541f98bdd9ea +OpenBLAS.v0.3.10+9.armv7l-linux-gnueabihf-libgfortran5.tar.gz/sha512/ed11aaa25bd96fbdc135ade94428f3551c8586016e689ace0451be689b6b6c99ff36edc24668f311975483a09e37ee3c7080f1d2c445c1d766f67c5e3ea06a82 +OpenBLAS.v0.3.10+9.armv7l-linux-musleabihf-libgfortran3.tar.gz/md5/ea5ce955d8d26a198135c5392f293772 +OpenBLAS.v0.3.10+9.armv7l-linux-musleabihf-libgfortran3.tar.gz/sha512/f463679e97281aee83dbdf5f7d3fb99f903ee6c4775aadea4473aa128fb4cc37d9f3c5d204485f8cec539651d36e630e9e707db3db926e2325936c4dfdbd9955 +OpenBLAS.v0.3.10+9.armv7l-linux-musleabihf-libgfortran4.tar.gz/md5/eb468ef250043f05a2c44622057de8e0 +OpenBLAS.v0.3.10+9.armv7l-linux-musleabihf-libgfortran4.tar.gz/sha512/7a9650934b0fa77835ae9e38bbbac38121b372c2bce160b17e83856906d810a5c61ad708d33860bcfbad808b16c6a1394621a4243c32933de62031c989992bbe +OpenBLAS.v0.3.10+9.armv7l-linux-musleabihf-libgfortran5.tar.gz/md5/a94cfb5b787b962c5d3f8e0e16d511ba +OpenBLAS.v0.3.10+9.armv7l-linux-musleabihf-libgfortran5.tar.gz/sha512/2dd2c709257176d15557dd5c8524da7f4e435292b974d201a481ace392b276882714b1414e68c295a4509ba550b423fbe226a731ca491f873037f5b730262beb +OpenBLAS.v0.3.10+9.i686-linux-gnu-libgfortran3.tar.gz/md5/64142f175d19bb3a7311b0dfafa176bd +OpenBLAS.v0.3.10+9.i686-linux-gnu-libgfortran3.tar.gz/sha512/ca182752250959586c1c48cb060cfb4c5034caac12747877f617b037e070d677d6def74e7d6a10fb3aaa2301be8e46cce47482b442968708ca80c90f03ac7d4b +OpenBLAS.v0.3.10+9.i686-linux-gnu-libgfortran4.tar.gz/md5/3ca3bfd99550e07837fc0c3eed07584a +OpenBLAS.v0.3.10+9.i686-linux-gnu-libgfortran4.tar.gz/sha512/20a97be7527c465d9fc1ca964d19e358cbb70940a3d0285f3a4fa7862a7e3e7c08fe9f953630ad091efbc8cd5a0a3280ab98880ea224986906211f7678f3a66b +OpenBLAS.v0.3.10+9.i686-linux-gnu-libgfortran5.tar.gz/md5/4c656009fcbf68e058af6474006f5738 +OpenBLAS.v0.3.10+9.i686-linux-gnu-libgfortran5.tar.gz/sha512/88333342ff8ba9fa40de7ba94ca914af576d42f14028d8500c7172da44db48e014d0eb82328e1668d51a2c4780fb9b25a8d8b3c8eab2ffdca63ced182f14d7a5 +OpenBLAS.v0.3.10+9.i686-linux-musl-libgfortran3.tar.gz/md5/61ac3d71c28f742fded0cc810dbc233e +OpenBLAS.v0.3.10+9.i686-linux-musl-libgfortran3.tar.gz/sha512/f936582d06b26944d7619fd86280037acc9dfeabeebf9b96d07b7f98293e354da7226ee27ed970e831d1655920334ec92984988aefde5bd14ab91b4bdbf92714 +OpenBLAS.v0.3.10+9.i686-linux-musl-libgfortran4.tar.gz/md5/bf878bdd1dabc93cbfa0197f9c457b08 +OpenBLAS.v0.3.10+9.i686-linux-musl-libgfortran4.tar.gz/sha512/4a1fcf6834066a6ab3384ce5c02faa2564516c47ee6555d4e842d6bc50b6437774ce0dac273d224cedcdf632de19eeec456f4c8fe0b2dba233eacec528e9f2bf +OpenBLAS.v0.3.10+9.i686-linux-musl-libgfortran5.tar.gz/md5/30cc04df138227dfd32e955cd7546c71 +OpenBLAS.v0.3.10+9.i686-linux-musl-libgfortran5.tar.gz/sha512/4d0fb7275da62dd27a81f6a78cb54504b63962da8394dafa45be9e53b3d3bf015db3072c4d2120cab26eba010c1f41585f2fea0758f48bfe3e76ab4c2d9e90ea +OpenBLAS.v0.3.10+9.i686-w64-mingw32-libgfortran3.tar.gz/md5/e7c0ee66207ca197228dcfe0bb31d29d +OpenBLAS.v0.3.10+9.i686-w64-mingw32-libgfortran3.tar.gz/sha512/1bfd821c4ded2d555125909f70eed7e32973bc2b3d9c7978013d572f48a2263aa3b46c85d5a0918316576df063f5b6a61b1383a9bff97f3b8399de42a2a6ebdc +OpenBLAS.v0.3.10+9.i686-w64-mingw32-libgfortran4.tar.gz/md5/9be59c112a93313457e1075ae1c4fbf9 +OpenBLAS.v0.3.10+9.i686-w64-mingw32-libgfortran4.tar.gz/sha512/9fcefe56e97bb3882130f58be9660cbeb50e7f193110172a9b8163f1373f90b01c448db068c0355cec33f7f547e75aaa6b74272664052f9c69cfe47af1d8be56 +OpenBLAS.v0.3.10+9.i686-w64-mingw32-libgfortran5.tar.gz/md5/5c442cda6f0b524ee4013ed2db40e515 +OpenBLAS.v0.3.10+9.i686-w64-mingw32-libgfortran5.tar.gz/sha512/fd1a6df0b9279ccf715e18952d1ff477f539509d2a228df77c24ea91bee9d84a4ecb73889f6ad04ddb05aa707d84055aad43da9d00c851401b66a7791351a478 +OpenBLAS.v0.3.10+9.powerpc64le-linux-gnu-libgfortran3.tar.gz/md5/27ec8bc920c062bec977ecd5d0797ef5 +OpenBLAS.v0.3.10+9.powerpc64le-linux-gnu-libgfortran3.tar.gz/sha512/66b119bbdb4b37be5017ffd8fa59cc03342748a7ad6ff89dd8cd8dc382e1ee8387f0241a562ef3d8fe2e5d8fe394dae8c5bfd92436f166a4b2a2e8460d31649d +OpenBLAS.v0.3.10+9.powerpc64le-linux-gnu-libgfortran4.tar.gz/md5/847c4b5de2d52120b31d943c8f080a77 +OpenBLAS.v0.3.10+9.powerpc64le-linux-gnu-libgfortran4.tar.gz/sha512/c3542c741518e462ee125eaa3ed5fc622a756de06b8b2eb4350d669560ab8f43cf07da70644e594cc052b27e4940c3e3c2635399d4f99323d9b22844ac1275f3 +OpenBLAS.v0.3.10+9.powerpc64le-linux-gnu-libgfortran5.tar.gz/md5/2cfb6eb34e9e3e4791995962ee40e0a7 +OpenBLAS.v0.3.10+9.powerpc64le-linux-gnu-libgfortran5.tar.gz/sha512/8f246f0047f65c32b9af0c02a1051e27acfb3d8de1611f830a462aa82784bf704b5e1b9731133b1197f0ffc6073b1ec8ac3f09c28f69474e67a55707787d9989 +OpenBLAS.v0.3.10+9.x86_64-apple-darwin-libgfortran3.tar.gz/md5/24b4d74f75399e7470324c2da2df4f68 +OpenBLAS.v0.3.10+9.x86_64-apple-darwin-libgfortran3.tar.gz/sha512/bffcec4ee90558eca1f7d12ae035c92774c0e231e63edbf726176c53676551dc2d81dcb7a44838ab1b81f6c7ddb735a328a5a637ab3da38014750e4daf42fd95 +OpenBLAS.v0.3.10+9.x86_64-apple-darwin-libgfortran4.tar.gz/md5/e97b0b863e9710c170ca2fa5ce79d96f +OpenBLAS.v0.3.10+9.x86_64-apple-darwin-libgfortran4.tar.gz/sha512/2b405476fe933f9a62cd9afe577afdbd241760b7c90bb78bf10b9650ded3a6467049f216e506f5e634ba5fc071f1e7002841f88e355defbba49963db4e2226f0 +OpenBLAS.v0.3.10+9.x86_64-apple-darwin-libgfortran5.tar.gz/md5/4899ebc68065c7078cc7adf20060c5b4 +OpenBLAS.v0.3.10+9.x86_64-apple-darwin-libgfortran5.tar.gz/sha512/ab664811b97e74fbbbf2dd593cec25ce318e6d2c718e9054df2dc7d01cc3fab0b3eb37ba97467c465a857a68b77bece3d2bb5a324961d7c0ea215ac2c4d09b03 +OpenBLAS.v0.3.10+9.x86_64-linux-gnu-libgfortran3.tar.gz/md5/9dd3e06640a109d54b4fe150e10243f3 +OpenBLAS.v0.3.10+9.x86_64-linux-gnu-libgfortran3.tar.gz/sha512/a6b3215f05578c55d53b56cfa7310fcf3525eae70fb460e59a2766d3b76257e7d1ef14cfc23c8122c60961e58289d23421a8c1a33c4796f84aad44e34b17d1b6 +OpenBLAS.v0.3.10+9.x86_64-linux-gnu-libgfortran4.tar.gz/md5/ccb45e619b9daf2dcb63ef4faf73f760 +OpenBLAS.v0.3.10+9.x86_64-linux-gnu-libgfortran4.tar.gz/sha512/4b0751214ef81e47837c4cf59065fea7db7aca007c7a395ce4eb8d5610824aa1fd4a5d177cc4f6a92a212d17c94dee4d159c7541487521898eafeeac51f8c153 +OpenBLAS.v0.3.10+9.x86_64-linux-gnu-libgfortran5.tar.gz/md5/0401418e777e860786091af51d07ee7a +OpenBLAS.v0.3.10+9.x86_64-linux-gnu-libgfortran5.tar.gz/sha512/8c9fe368670df97599f4e2ea7f4be7789f89869663cfe12f3f773d797db3aed577a2ae1429190b3096dd9ca966570429d630b69647b456057ff357008137a05b +OpenBLAS.v0.3.10+9.x86_64-linux-musl-libgfortran3.tar.gz/md5/9bedd654ba6e0770b889d0f763e9a0e5 +OpenBLAS.v0.3.10+9.x86_64-linux-musl-libgfortran3.tar.gz/sha512/b3a6c3fd553d82cae6211d4c3bf59d4aeed453d910d84dcf2179e3752907f4d01a5d2c492beaf388c57be13e450f15871e1e1a4e6690f472048d4a0249c05aa1 +OpenBLAS.v0.3.10+9.x86_64-linux-musl-libgfortran4.tar.gz/md5/91b1ae1d7690b5c3a6b4d9af6f756dd1 +OpenBLAS.v0.3.10+9.x86_64-linux-musl-libgfortran4.tar.gz/sha512/b4bb68ff476fee6aec4e8886c913dd2c09a73cf5aa07fa8e3d258594640c74b588d1a35c2b36a754610637f9780cabbf89d00d66e63e2b1a572431c785750585 +OpenBLAS.v0.3.10+9.x86_64-linux-musl-libgfortran5.tar.gz/md5/7610feaa534b280f6708d000c8c82990 +OpenBLAS.v0.3.10+9.x86_64-linux-musl-libgfortran5.tar.gz/sha512/bf505bfea435388ef49b7c11a2843accf9c96fb747a7a98406501be9b37b70a28c9ec862d1561c9c97d2c3bb1886b2dab206b1c0276a0e96bb023df498798aeb +OpenBLAS.v0.3.10+9.x86_64-unknown-freebsd-libgfortran3.tar.gz/md5/bdf6281ffd5eac951ba6df402693a599 +OpenBLAS.v0.3.10+9.x86_64-unknown-freebsd-libgfortran3.tar.gz/sha512/56caedb480c76fa6bb50a9ea771506b7d32cf0b2c9db516824d5b813e93ff29a611f29da5982fcfddcb642f8aa84535f28864f600c960f808537b2d4a29e401d +OpenBLAS.v0.3.10+9.x86_64-unknown-freebsd-libgfortran4.tar.gz/md5/708a4bbe81dae0329e5e21f9f8a80432 +OpenBLAS.v0.3.10+9.x86_64-unknown-freebsd-libgfortran4.tar.gz/sha512/aecb34d4c5ca8503407af696bf07dd890c61f6a27b332f84320b52f346f055613882682f2536106edf9b079d003590144ee2ee64ea96a1eae3a7c07bd9c66c06 +OpenBLAS.v0.3.10+9.x86_64-unknown-freebsd-libgfortran5.tar.gz/md5/bfb83c79b427872770c9dd7959d51c71 +OpenBLAS.v0.3.10+9.x86_64-unknown-freebsd-libgfortran5.tar.gz/sha512/4866eb14fcee872a642c2eb8eeedca337f214eaf6b4317b8e35ef55b15072a5a46cc71af9ec4b69f05ae9be30ad849ac60b9a5bd75805399d22c8ae0076e4557 +OpenBLAS.v0.3.10+9.x86_64-w64-mingw32-libgfortran3.tar.gz/md5/e7eef0bc4dbd929ab1b3861ff12f7c5a +OpenBLAS.v0.3.10+9.x86_64-w64-mingw32-libgfortran3.tar.gz/sha512/7293a9f0fe6f08da27bac63a7a981273ad4fe5d0212100a2ee2a092f3aed621046d9963b0275abb0fd017bb3c12839d203aac7d2697d10b705571b0ab191bcfa +OpenBLAS.v0.3.10+9.x86_64-w64-mingw32-libgfortran4.tar.gz/md5/8bd6af01c88e8887b4d65b986ddc49b7 +OpenBLAS.v0.3.10+9.x86_64-w64-mingw32-libgfortran4.tar.gz/sha512/2b427281103cfefc6b8f91b30e6ca541afe9bacffadfbbf04f6489951ee7b70be13ed5670ab2e70d3a4a76957fd2e6bf41ca9d13f63b526e09fdf5c5ebc1e176 +OpenBLAS.v0.3.10+9.x86_64-w64-mingw32-libgfortran5.tar.gz/md5/6087df9b353d660606a10e515a1d0fe1 +OpenBLAS.v0.3.10+9.x86_64-w64-mingw32-libgfortran5.tar.gz/sha512/769196a2bf2dfcf47e749c1d6dfd5c68b264686d568cca2cfc917d04bdf4f3a1679b88f25bbbcc49f43d6ce1ec2732b798625510f1c45ec70abdcc556c3346a2 diff --git a/deps/checksums/unwind b/deps/checksums/unwind index f94bd78639bbe..1b6fd7ca1a36e 100644 --- a/deps/checksums/unwind +++ b/deps/checksums/unwind @@ -1,26 +1,26 @@ LibOSXUnwind.v0.0.6+1.x86_64-apple-darwin.tar.gz/md5/fd98df2005d13aa16341c5aecba1af70 LibOSXUnwind.v0.0.6+1.x86_64-apple-darwin.tar.gz/sha512/2d2263c3e5f095ad9eba7fea7cb882a19fece8a10486489d0a15b8e81ea0f8626804c4822b8c92a26a608d568c0ff1a4e976ea6d746be47ac1a70891455162a6 -LibUnwind.v1.3.2+4.aarch64-linux-gnu.tar.gz/md5/8f5cbf9820033211513f6d33e36194f1 -LibUnwind.v1.3.2+4.aarch64-linux-gnu.tar.gz/sha512/589886c4f141064126aecc1bf63365c610a4c3dd70e386aa8e17ce562505cac873542fa92cea023850e9bf54fcef3cf475d52f035d17d830a81c01d06d0454e4 -LibUnwind.v1.3.2+4.aarch64-linux-musl.tar.gz/md5/836a2d8ea7a11d87a74aee09f82582b5 -LibUnwind.v1.3.2+4.aarch64-linux-musl.tar.gz/sha512/4cd3805ae59854fdceee441967ba4b812246cf1a1e9ed20367f5bbbad9a47f0093731b4f78f881c696e52c101dec83498398c7b798c81c1a441232cd4ee96b58 -LibUnwind.v1.3.2+4.armv6l-linux-gnueabihf.tar.gz/md5/0047d02c4b4888050b363c77106d4ea1 -LibUnwind.v1.3.2+4.armv6l-linux-gnueabihf.tar.gz/sha512/8b02fb5189ca749e421fc17d560601e8624cbcc19a4c5c45e38828323b33db30ced8a92e08ebd429c663e52358c486d3e284e7e04898229cff2839cc01c067d5 -LibUnwind.v1.3.2+4.armv6l-linux-musleabihf.tar.gz/md5/1fe78c6f0ff7120b35c6745b16c6f838 -LibUnwind.v1.3.2+4.armv6l-linux-musleabihf.tar.gz/sha512/9576f913fbc40d00b42573f600c038fea85eb3c9b88a4878cff0e041c4096d9d005b856dbcd0d057dc40a3cdb74deeca6e9c1cc5c213e6e062328f75633ba8e3 -LibUnwind.v1.3.2+4.armv7l-linux-gnueabihf.tar.gz/md5/510db51b0364cf17207eb00e44d58974 -LibUnwind.v1.3.2+4.armv7l-linux-gnueabihf.tar.gz/sha512/76f119654a65b460917f41a321008c5a0593523db53fa12ac9aa82732368ebdee05d6366fdfdcdd300ba0fe4c7239aac25d80fb3b1ad0235f79b235dab68c796 -LibUnwind.v1.3.2+4.armv7l-linux-musleabihf.tar.gz/md5/4bb58bdc423312c74eafe52a781dd712 -LibUnwind.v1.3.2+4.armv7l-linux-musleabihf.tar.gz/sha512/02b69ec40dfcacc447169786bab3aac39c6db6b07874e9657c49a2907654be79efe16863abf09ee1e2a647cd6a651155b65bdbbd6d810a3ceaa332fc0a3ace4b -LibUnwind.v1.3.2+4.i686-linux-gnu.tar.gz/md5/76f549ae171aad91570d7874e73f44f6 -LibUnwind.v1.3.2+4.i686-linux-gnu.tar.gz/sha512/a5a654dd6233099e841d1b9c54b16cb99d736549d063e28d17d5f2014c3090d829a4a8dc4fee042d0f4a9d8a155fb30c5840cb84b9fd71758256fa072137baad -LibUnwind.v1.3.2+4.i686-linux-musl.tar.gz/md5/f8b58f061a03f24111f39f2f8cf72c61 -LibUnwind.v1.3.2+4.i686-linux-musl.tar.gz/sha512/cc6dedc551ee4d5e131cdd7ea7dd4a9cc64efe930d16cddb0c21dca7b13076b6810e00e406acb949404c80b506ca9e09d1e223069d8159e9f73fa8aa022e3f41 -LibUnwind.v1.3.2+4.powerpc64le-linux-gnu.tar.gz/md5/2fd4fda3c82c99ff102b630d078723f5 -LibUnwind.v1.3.2+4.powerpc64le-linux-gnu.tar.gz/sha512/b1c7f16d2877e08cfc9d1aa63c5c9acf30049bd11bdad90c6b1425a09f86762c76f0c1a27817ea1b939244f6e24320854552bc860c95f297a772403eeddc053d -LibUnwind.v1.3.2+4.x86_64-linux-gnu.tar.gz/md5/cd98359922fddcbbcfda56fbc011bea4 -LibUnwind.v1.3.2+4.x86_64-linux-gnu.tar.gz/sha512/7b2d78869be148db23ab8372bb6699abcf26cc58718871f050b8e67054c0c6c909f9a8c59d27c748abeef0ecb5eabc09484043c3b2232469d03c78a42a590e13 -LibUnwind.v1.3.2+4.x86_64-linux-musl.tar.gz/md5/bd8ea5006d6078a1d91743f599f37732 -LibUnwind.v1.3.2+4.x86_64-linux-musl.tar.gz/sha512/1c7feea46d70c60dbecfe6b945a29a086dc120e0d674ea9d488dc7943901711ba0505288694c94a2b0804bab6cd826b32e58912e407ed918724d16b6b6ec1d3d -LibUnwind.v1.3.2+4.x86_64-unknown-freebsd.tar.gz/md5/e72c36f0563a088282147275de90048b -LibUnwind.v1.3.2+4.x86_64-unknown-freebsd.tar.gz/sha512/3aaa7e5c21b3bcc30ff7826af4bc0b926865cac3a5b14dfa7f27f0c5d4344fa2a568a78c0c4ee32a18e668758cdac70c09f31f5ca55cc56c3d6a88654aa906fa +LibUnwind.v1.3.2+6.aarch64-linux-gnu.tar.gz/md5/dcd327c5b3d7b2ba082f2ad7f11939d3 +LibUnwind.v1.3.2+6.aarch64-linux-gnu.tar.gz/sha512/fffedf6df127538dff7cd394b4a780862fded082c7299e5ac36dc682dcd28a35db596c4621e94d9dce8483fb8053c6d0030a25b7a4bbbecc39af3efd3af14ab3 +LibUnwind.v1.3.2+6.aarch64-linux-musl.tar.gz/md5/d1582fc675158d3838f4d36214e51105 +LibUnwind.v1.3.2+6.aarch64-linux-musl.tar.gz/sha512/0636bfc0159b66d6427ae3437be3989930b6d404f94b2ffac92bd9115d87a5509a9bddc723f0c38b7c30ba2098da48c92a74b4648d6361dbebf547ccc4139813 +LibUnwind.v1.3.2+6.armv6l-linux-gnueabihf.tar.gz/md5/3e621439132504c14daae4944fb5eab8 +LibUnwind.v1.3.2+6.armv6l-linux-gnueabihf.tar.gz/sha512/d324018841343873b256df9684b51fdc9108d5b1af73f5275cd2e81d31a4c00917027afac1554b0cdc5bffd5d52a6417612d3f9399bedfb6a49100df594709f4 +LibUnwind.v1.3.2+6.armv6l-linux-musleabihf.tar.gz/md5/4603961011230cf0ef8c24881d7add7a +LibUnwind.v1.3.2+6.armv6l-linux-musleabihf.tar.gz/sha512/64e87f9074cb51442539a7907c979424682dc5a9a4cf4d538fbdc5f3bcba169c9b4d5aeb445c76060c0b0604d3fb5b0b88dbc7d3d919a4153c403d9c39110115 +LibUnwind.v1.3.2+6.armv7l-linux-gnueabihf.tar.gz/md5/2c8c2ca6b238bfdbd1c4d021df7ac7a6 +LibUnwind.v1.3.2+6.armv7l-linux-gnueabihf.tar.gz/sha512/b665d8d6b5de0b4a23f2577fe12208c4921f7ee6c3643f1434732c3c5203d1892d86f84875e3488cfc85efb250ceb0c66d02f2356e0accb3c24f200c936eeb84 +LibUnwind.v1.3.2+6.armv7l-linux-musleabihf.tar.gz/md5/0f786d4baf3d5f4fc94884ad7ae1b74b +LibUnwind.v1.3.2+6.armv7l-linux-musleabihf.tar.gz/sha512/1e4c447983d3aee05705b90962f0bbccd58f255b1d7b582069408d8927d21697fdeefea3aeb7ad84d7d087a70417164194d60c66e57bbb3a587845bbf636c06d +LibUnwind.v1.3.2+6.i686-linux-gnu.tar.gz/md5/d022d2a6a88ccf741c19889055132882 +LibUnwind.v1.3.2+6.i686-linux-gnu.tar.gz/sha512/75615cba1b4e945cd5969fd4debf7edd3913d5ae3819abf8ca724b0f1ece8f03064dcd2fde54d14d052f7e3e15bcb0efa5c7d9b55c4875e7dedee38034038b7f +LibUnwind.v1.3.2+6.i686-linux-musl.tar.gz/md5/5e57a072a0c683005921db5597f43d64 +LibUnwind.v1.3.2+6.i686-linux-musl.tar.gz/sha512/4bbaac240ef37ed48d1273cb68302e1b856622804f7704917a3db2a213118a9e0bd95ca504555a537aeec7f5baa2057cf93ca62e350a64b428a34770e64602a6 +LibUnwind.v1.3.2+6.powerpc64le-linux-gnu.tar.gz/md5/1ee397961af5567c37b5429d7b7a52cd +LibUnwind.v1.3.2+6.powerpc64le-linux-gnu.tar.gz/sha512/902017d1c64d00a67a378d0e7aef64493655a88480d27a5f720cac363bbd0aeab2f03f2b77560fae395a5799ae3da1f4122b6e8cda8d80f158c751215a1848bb +LibUnwind.v1.3.2+6.x86_64-linux-gnu.tar.gz/md5/e45a0c38c35ed4afbdcffe385998e6d3 +LibUnwind.v1.3.2+6.x86_64-linux-gnu.tar.gz/sha512/049ac0d6b74fbc6a96a7abe345b4ec783968a90bd0f3c230558ad9b3a44cbe65cf4553bfc9abdc9128529d746077308570a14f55317ffef5f65836a8413aa938 +LibUnwind.v1.3.2+6.x86_64-linux-musl.tar.gz/md5/77f053b93396484f3e4d37af9a294ad6 +LibUnwind.v1.3.2+6.x86_64-linux-musl.tar.gz/sha512/e87406503348d316940ea28f09b304c9349f3915e1ed193c87b823b7c5c7a1f6046e6b0e5eeba3b4760d5a403def5f87aa42a3f5f4d8c5f540dd4fba3743394b +LibUnwind.v1.3.2+6.x86_64-unknown-freebsd.tar.gz/md5/33c56decf549b45712642ebc73b622bd +LibUnwind.v1.3.2+6.x86_64-unknown-freebsd.tar.gz/sha512/ffb3866b2ccd3ddea168b7ce0b345d475914fa4f87a3743b92e3c07ac9453b4ad929ff01596677e00f08d4d30cf67676052cc3c4f985f722a800b82cba8334c3 diff --git a/deps/patches/libunwind-dwarf-table.patch b/deps/patches/libunwind-dwarf-table.patch new file mode 100644 index 0000000000000..5905982f9a349 --- /dev/null +++ b/deps/patches/libunwind-dwarf-table.patch @@ -0,0 +1,36 @@ +From a5b5fd28ed03cb1ab524d24dc534c1fa167bf5a1 Mon Sep 17 00:00:00 2001 +From: Alex Arslan +Date: Fri, 5 Nov 2021 16:58:41 -0700 +Subject: [PATCH] Fix table indexing in `dwarf_search_unwind_table` + +`table_len` is used as an index into `table`, assuming it represents the +number of entries. However, it is defined as the number of entries +multiplied by `sizeof(unw_word_t)`. This is accounted for in other +places that use `table_len`, e.g. in `lookup`, which divides out the +size of `unw_word_t`, but the indexing expression uses `table_len` +directly. So when `table` has say 2 entries, we're actually looking at +index 15 rather than 1 in the comparison. This can cause the conditional +to erroneously evaluate to true, allowing the following line to +segfault. + +This was observed with JIT compiled code from Julia with LLVM on +FreeBSD. + +Co-Authored-By: Jameson Nash +--- + src/dwarf/Gfind_proc_info-lsb.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/dwarf/Gfind_proc_info-lsb.c b/src/dwarf/Gfind_proc_info-lsb.c +index 5e27a501..af4cbce8 100644 +--- a/src/dwarf/Gfind_proc_info-lsb.c ++++ b/src/dwarf/Gfind_proc_info-lsb.c +@@ -866,7 +866,7 @@ dwarf_search_unwind_table (unw_addr_space_t as, unw_word_t ip, + if (as == unw_local_addr_space) + { + e = lookup (table, table_len, ip - ip_base); +- if (e && &e[1] < &table[table_len]) ++ if (e && &e[1] < &table[table_len / sizeof (unw_word_t)]) + last_ip = e[1].start_ip_offset + ip_base; + else + last_ip = di->end_ip; diff --git a/deps/patches/openblas-julia40963-zdot.patch b/deps/patches/openblas-julia40963-zdot.patch new file mode 100644 index 0000000000000..c5e4e7bb07b9a --- /dev/null +++ b/deps/patches/openblas-julia40963-zdot.patch @@ -0,0 +1,26 @@ +From b2053239fc36f9ca8c29286d8fc553d0200907b0 Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Sun, 23 Aug 2020 15:08:16 +0200 +Subject: [PATCH] Fix mssing dummy parameter (imag part of alpha) of + zdot_thread_function + +--- + kernel/x86_64/zdot.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/kernel/x86_64/zdot.c b/kernel/x86_64/zdot.c +index 90fd86da..1bc785ac 100644 +--- a/kernel/x86_64/zdot.c ++++ b/kernel/x86_64/zdot.c +@@ -168,7 +168,7 @@ static void zdot_compute (BLASLONG n, FLOAT *x, BLASLONG inc_x, FLOAT *y, BLASLO + + #if defined(SMP) + static int zdot_thread_function(BLASLONG n, BLASLONG dummy0, +-BLASLONG dummy1, FLOAT dummy2, FLOAT *x, BLASLONG inc_x, FLOAT *y, ++BLASLONG dummy1, FLOAT dummy2r, FLOAT dummy2i, FLOAT *x, BLASLONG inc_x, FLOAT *y, + BLASLONG inc_y, FLOAT *result, BLASLONG dummy3) + { + zdot_compute(n, x, inc_x, y, inc_y, (void *)result); +-- +2.33.0 + diff --git a/deps/patches/openblas-julia42415-lapack625-openblas3392.patch b/deps/patches/openblas-julia42415-lapack625-openblas3392.patch new file mode 100644 index 0000000000000..e7b874b961cca --- /dev/null +++ b/deps/patches/openblas-julia42415-lapack625-openblas3392.patch @@ -0,0 +1,95 @@ +From 2be5ee3cca97a597f2ee2118808a2d5eacea050c Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Fri, 1 Oct 2021 11:17:21 +0200 +Subject: [PATCH 1/4] Fix out of bounds read in ?llarv (Reference-LAPACK PR + 625) + +--- + lapack-netlib/SRC/clarrv.f | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lapack-netlib/SRC/clarrv.f b/lapack-netlib/SRC/clarrv.f +index a45f55ac3b..26a9febc87 100644 +--- a/lapack-netlib/SRC/clarrv.f ++++ b/lapack-netlib/SRC/clarrv.f +@@ -351,7 +351,7 @@ SUBROUTINE CLARRV( N, VL, VU, D, L, PIVMIN, + * + * Quick return if possible + * +- IF( N.LE.0 ) THEN ++ IF( (N.LE.0) .OR. (M.LE.0) ) THEN + RETURN + END IF + * + +From fe497efa0510466fd93578aaf9da1ad8ed4edbe7 Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Fri, 1 Oct 2021 11:18:20 +0200 +Subject: [PATCH 2/4] Fix out of bounds read in ?llarv (Reference-LAPACK PR + 625) + +--- + lapack-netlib/SRC/dlarrv.f | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lapack-netlib/SRC/dlarrv.f b/lapack-netlib/SRC/dlarrv.f +index 4a59a2bbf9..a1c6e9c9d7 100644 +--- a/lapack-netlib/SRC/dlarrv.f ++++ b/lapack-netlib/SRC/dlarrv.f +@@ -353,7 +353,7 @@ SUBROUTINE DLARRV( N, VL, VU, D, L, PIVMIN, + * + * Quick return if possible + * +- IF( N.LE.0 ) THEN ++ IF( (N.LE.0).OR.(M.LE.0) ) THEN + RETURN + END IF + * + +From ddb0ff5353637bb5f5ad060c9620e334c143e3d7 Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Fri, 1 Oct 2021 11:19:07 +0200 +Subject: [PATCH 3/4] Fix out of bounds read in ?llarv (Reference-LAPACK PR + 625) + +--- + lapack-netlib/SRC/slarrv.f | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lapack-netlib/SRC/slarrv.f b/lapack-netlib/SRC/slarrv.f +index 04519fde8c..9448b2fd92 100644 +--- a/lapack-netlib/SRC/slarrv.f ++++ b/lapack-netlib/SRC/slarrv.f +@@ -353,7 +353,7 @@ SUBROUTINE SLARRV( N, VL, VU, D, L, PIVMIN, + * + * Quick return if possible + * +- IF( N.LE.0 ) THEN ++ IF( (N.LE.0).OR.(M.LE.0) ) THEN + RETURN + END IF + * + +From 337b65133df174796794871b3988cd03426e6d41 Mon Sep 17 00:00:00 2001 +From: Martin Kroeker +Date: Fri, 1 Oct 2021 11:19:53 +0200 +Subject: [PATCH 4/4] Fix out of bounds read in ?llarv (Reference-LAPACK PR + 625) + +--- + lapack-netlib/SRC/zlarrv.f | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/lapack-netlib/SRC/zlarrv.f b/lapack-netlib/SRC/zlarrv.f +index 23976dbefe..8d10e3c2e3 100644 +--- a/lapack-netlib/SRC/zlarrv.f ++++ b/lapack-netlib/SRC/zlarrv.f +@@ -351,7 +351,7 @@ SUBROUTINE ZLARRV( N, VL, VU, D, L, PIVMIN, + * + * Quick return if possible + * +- IF( N.LE.0 ) THEN ++ IF( (N.LE.0).OR.(M.LE.0) ) THEN + RETURN + END IF + * diff --git a/deps/unwind.mk b/deps/unwind.mk index 674e3079413bf..797d80d638d6c 100644 --- a/deps/unwind.mk +++ b/deps/unwind.mk @@ -28,7 +28,11 @@ $(SRCCACHE)/libunwind-$(UNWIND_VER)/libunwind-cfa-rsp.patch-applied: $(SRCCACHE) cd $(SRCCACHE)/libunwind-$(UNWIND_VER) && patch -p1 -f -u < $(SRCDIR)/patches/libunwind-cfa-rsp.patch echo 1 > $@ -$(BUILDDIR)/libunwind-$(UNWIND_VER)/build-configured: $(SRCCACHE)/libunwind-$(UNWIND_VER)/source-extracted $(SRCCACHE)/libunwind-$(UNWIND_VER)/libunwind-cfa-rsp.patch-applied +$(SRCCACHE)/libunwind-$(UNWIND_VER)/libunwind-dwarf-table.patch-applied: $(SRCCACHE)/libunwind-$(UNWIND_VER)/libunwind-cfa-rsp.patch-applied + cd $(SRCCACHE)/libunwind-$(UNWIND_VER) && patch -p1 -f -u -l < $(SRCDIR)/patches/libunwind-dwarf-table.patch + echo 1 > $@ + +$(BUILDDIR)/libunwind-$(UNWIND_VER)/build-configured: $(SRCCACHE)/libunwind-$(UNWIND_VER)/source-extracted $(SRCCACHE)/libunwind-$(UNWIND_VER)/libunwind-dwarf-table.patch-applied mkdir -p $(dir $@) cd $(dir $@) && \ $(dir $<)/configure $(CONFIGURE_COMMON) CPPFLAGS="$(CPPFLAGS) $(LIBUNWIND_CPPFLAGS)" CFLAGS="$(CFLAGS) $(LIBUNWIND_CFLAGS)" --disable-shared --disable-minidebuginfo --disable-tests diff --git a/src/codegen.cpp b/src/codegen.cpp index 59f5d9e8b7d84..634af52500c42 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -4853,9 +4853,11 @@ static Function* gen_cfun_wrapper( newAttributes.emplace_back(it, AttributeSet::get(jl_LLVMContext, attrBuilder)); // Shift forward the rest of the attributes - for(;it < attributes.index_end(); ++it) { - if (attributes.hasAttributes(it)) { - newAttributes.emplace_back(it + 1, attributes.getAttributes(it)); + if (attributes.getNumAttrSets() > 0) { // without this check the loop range below is invalid + for(;it < attributes.index_end(); ++it) { + if (attributes.hasAttributes(it)) { + newAttributes.emplace_back(it + 1, attributes.getAttributes(it)); + } } } diff --git a/src/dlload.c b/src/dlload.c index 71af6238b4cf6..7106ab0e9ba17 100644 --- a/src/dlload.c +++ b/src/dlload.c @@ -163,6 +163,7 @@ JL_DLLEXPORT void *jl_load_dynamic_library(const char *modname, unsigned flags, uv_stat_t stbuf; void *handle; int abspath; + int is_atpath; // number of extensions to try — if modname already ends with the // standard extension, then we don't try adding additional extensions int n_extensions = endswith_extension(modname) ? 1 : N_EXTENSIONS; @@ -188,16 +189,30 @@ JL_DLLEXPORT void *jl_load_dynamic_library(const char *modname, unsigned flags, } abspath = isabspath(modname); + is_atpath = 0; + + // Detect if our `modname` is something like `@rpath/libfoo.dylib` +#ifdef _OS_DARWIN_ + size_t nameLen = strlen(modname); + const char *const atPaths[] = {"@executable_path/", "@loader_path/", "@rpath/"}; + for (i = 0; i < sizeof(atPaths)/sizeof(char*); ++i) { + size_t atLen = strlen(atPaths[i]); + if (nameLen >= atLen && 0 == strncmp(modname, atPaths[i], atLen)) { + is_atpath = 1; + } + } +#endif /* this branch permutes all base paths in DL_LOAD_PATH with all extensions note: skip when !jl_base_module to avoid UndefVarError(:DL_LOAD_PATH), and also skip for absolute paths + and also skip for `@`-paths on macOS We also do simple string replacement here for elements starting with `@executable_path/`. While these exist as OS concepts on Darwin, we want to use them on other platforms such as Windows, so we emulate them here. */ - if (!abspath && jl_base_module != NULL) { + if (!abspath && !is_atpath && jl_base_module != NULL) { jl_binding_t *b = jl_get_module_binding(jl_base_module, jl_symbol("DL_LOAD_PATH")); jl_array_t *DL_LOAD_PATH = (jl_array_t*)(b ? b->value : NULL); if (DL_LOAD_PATH != NULL) { diff --git a/src/julia-parser.scm b/src/julia-parser.scm index dbd9c35ff4ff4..4c4d0a47fd42e 100644 --- a/src/julia-parser.scm +++ b/src/julia-parser.scm @@ -219,13 +219,6 @@ (define (newline? c) (eqv? c #\newline)) -(define (skip-to-eol port) - (let ((c (peek-char port))) - (cond ((eof-object? c) c) - ((eqv? c #\newline) c) - (else (read-char port) - (skip-to-eol port))))) - (define (op-or-sufchar? c) (or (op-suffix-char? c) (opchar? c))) (define (read-operator port c0 (postfix? #f)) @@ -486,33 +479,56 @@ (pair? (cadr t)) (eq? (car (cadr t)) 'core) (memq (cadadr t) '(@int128_str @uint128_str @big_str)))) +(define (make-bidi-state) '(0 . 0)) + +(define (update-bidi-state st c) + (case c + ((#\U202A #\U202B #\U202D #\U202E) (cons (+ (car st) 1) (cdr st))) ;; LRE RLE LRO RLO + ((#\U2066 #\U2067 #\U2068) (cons (car st) (+ (cdr st) 1))) ;; LRI RLI FSI + ((#\U202C) (cons (- (car st) 1) (cdr st))) ;; PDF + ((#\U2069) (cons (car st) (- (cdr st) 1))) ;; PDI + ((#\newline) '(0 . 0)) + (else st))) + +(define (bidi-state-terminated? st) (equal? st '(0 . 0))) + +(define (skip-line-comment port) + (let ((c (peek-char port))) + (cond ((eof-object? c) c) + ((eqv? c #\newline) c) + (else (read-char port) + (skip-line-comment port))))) + +(define (skip-multiline-comment port count bds) + (let ((c (read-char port))) + (if (eof-object? c) + (error "incomplete: unterminated multi-line comment #= ... =#") ; NOTE: changing this may affect code in base/client.jl + (if (eqv? c #\=) + (let ((c (peek-char port))) + (if (eqv? c #\#) + (begin + (read-char port) + (if (> count 1) + (skip-multiline-comment port (- count 1) bds) + (if (not (bidi-state-terminated? bds)) + (error "unbalanced bidirectional formatting in comment")))) + (skip-multiline-comment port count (update-bidi-state bds c)))) + (if (eqv? c #\#) + (skip-multiline-comment port + (if (eqv? (peek-char port) #\=) + (begin (read-char port) + (+ count 1)) + count) + bds) + (skip-multiline-comment port count (update-bidi-state bds c))))))) + ;; skip to end of comment, starting at #: either #... or #= .... =#. (define (skip-comment port) - (define (skip-multiline-comment port count) - (let ((c (read-char port))) - (if (eof-object? c) - (error "incomplete: unterminated multi-line comment #= ... =#") ; NOTE: changing this may affect code in base/client.jl - (begin (if (eqv? c #\=) - (let ((c (peek-char port))) - (if (eqv? c #\#) - (begin - (read-char port) - (if (> count 1) - (skip-multiline-comment port (- count 1)))) - (skip-multiline-comment port count))) - (if (eqv? c #\#) - (skip-multiline-comment port - (if (eqv? (peek-char port) #\=) - (begin (read-char port) - (+ count 1)) - count)) - (skip-multiline-comment port count))))))) - (read-char port) ; read # that was already peeked (if (eqv? (peek-char port) #\=) (begin (read-char port) ; read initial = - (skip-multiline-comment port 1)) - (skip-to-eol port))) + (skip-multiline-comment port 1 (make-bidi-state))) + (skip-line-comment port))) (define (skip-ws-and-comments port) (skip-ws port #t) @@ -2221,24 +2237,28 @@ (let loop ((c (read-char p)) (b (open-output-string)) (e ()) - (quotes 0)) + (quotes 0) + (bds (make-bidi-state))) (cond ((eqv? c delim) (if (< quotes n) - (loop (read-char p) b e (+ quotes 1)) - (reverse (cons (io.tostring! b) e)))) + (loop (read-char p) b e (+ quotes 1) bds) + (begin + (if (not (bidi-state-terminated? bds)) + (error "unbalanced bidirectional formatting in string literal")) + (reverse (cons (io.tostring! b) e))))) ((= quotes 1) (if (not raw) (write-char #\\ b)) (write-char delim b) - (loop c b e 0)) + (loop c b e 0 (update-bidi-state bds c))) ((= quotes 2) (if (not raw) (write-char #\\ b)) (write-char delim b) (if (not raw) (write-char #\\ b)) (write-char delim b) - (loop c b e 0)) + (loop c b e 0 (update-bidi-state bds c))) ((eqv? c #\\) (if raw @@ -2251,16 +2271,16 @@ (io.write b (string.rep "\\" (div count 2))) (if (odd? count) (begin (write-char delim b) - (loop (read-char p) b e 0)) - (loop nxch b e 0))) + (loop (read-char p) b e 0 bds)) + (loop nxch b e 0 bds))) (else (io.write b (string.rep "\\" count)) (write-char nxch b) - (loop (read-char p) b e 0)))) + (loop (read-char p) b e 0 (update-bidi-state bds nxch))))) (let ((nxch (not-eof-for delim (read-char p)))) (write-char #\\ b) (write-char nxch b) - (loop (read-char p) b e 0)))) + (loop (read-char p) b e 0 (update-bidi-state bds nxch))))) ((and (eqv? c #\$) (not raw)) (let* ((ex (parse-interpolate s)) @@ -2270,7 +2290,7 @@ (loop (read-char p) (open-output-string) (list* ex (io.tostring! b) e) - 0))) + 0 bds))) ; convert literal \r and \r\n in strings to \n (issue #11988) ((eqv? c #\return) ; \r @@ -2278,11 +2298,11 @@ (if (eqv? (peek-char p) #\linefeed) ; \r\n (read-char p)) (write-char #\newline b) - (loop (read-char p) b e 0))) + (loop (read-char p) b e 0 bds))) (else (write-char (not-eof-for delim c) b) - (loop (read-char p) b e 0))))) + (loop (read-char p) b e 0 (update-bidi-state bds c)))))) (define (not-eof-1 c) (if (eof-object? c) diff --git a/src/macroexpand.scm b/src/macroexpand.scm index 5e55c7bbb29c1..f1302e57cc4c8 100644 --- a/src/macroexpand.scm +++ b/src/macroexpand.scm @@ -271,7 +271,9 @@ (define (other x) (resolve-expansion-vars-with-new-env x env m parent-scope inarg)) (case (car e) ((where) `(where ,(recur (cadr e)) ,@(map other (cddr e)))) - ((|::|) `(|::| ,(recur (cadr e)) ,(other (caddr e)))) + ((|::|) (if (length= e 2) + `(|::| ,(other (cadr e))) + `(|::| ,(recur (cadr e)) ,(other (caddr e))))) ((call) `(call ,(other (cadr e)) ,@(map (lambda (x) (resolve-expansion-vars-with-new-env x env m parent-scope #t)) @@ -397,13 +399,18 @@ ((not (length> e 2)) e) ((and (pair? (cadr e)) (eq? (caadr e) '|::|)) - `(kw (|::| - ,(if inarg - (resolve-expansion-vars- (cadr (cadr e)) env m parent-scope inarg) - ;; in keyword arg A=B, don't transform "A" - (unescape (cadr (cadr e)))) - ,(resolve-expansion-vars- (caddr (cadr e)) env m parent-scope inarg)) - ,(resolve-expansion-vars-with-new-env (caddr e) env m parent-scope inarg))) + (let* ((type-decl (cadr e)) ;; [argname]::type + (argname (and (length> type-decl 2) (cadr type-decl))) + (type (if argname (caddr type-decl) (cadr type-decl)))) + `(kw (|::| + ,@(if argname + (list (if inarg + (resolve-expansion-vars- argname env m parent-scope inarg) + ;; in keyword arg A=B, don't transform "A" + (unescape argname))) + '()) + ,(resolve-expansion-vars- type env m parent-scope inarg)) + ,(resolve-expansion-vars-with-new-env (caddr e) env m parent-scope inarg)))) (else `(kw ,(if inarg (resolve-expansion-vars- (cadr e) env m parent-scope inarg) diff --git a/src/module.c b/src/module.c index 231efbb357653..15624373d921f 100644 --- a/src/module.c +++ b/src/module.c @@ -818,9 +818,10 @@ JL_DLLEXPORT jl_value_t *jl_module_names(jl_module_t *m, int all, int imported) (imported && b->imported) || (b->owner == m && !b->imported && (all || m == jl_main_module))) && (all || (!b->deprecated && !hidden))) { + jl_sym_t *in_module_name = (jl_sym_t*)table[i-1]; // the name in the module may not be b->name, use the httable key instead jl_array_grow_end(a, 1); //XXX: change to jl_arrayset if array storage allocation for Array{Symbols,1} changes: - jl_array_ptr_set(a, jl_array_dim0(a)-1, (jl_value_t*)b->name); + jl_array_ptr_set(a, jl_array_dim0(a)-1, (jl_value_t*)in_module_name); } } } diff --git a/src/sys.c b/src/sys.c index 684e000026c6d..1036aca2177b7 100644 --- a/src/sys.c +++ b/src/sys.c @@ -230,6 +230,24 @@ JL_DLLEXPORT double jl_stat_ctime(char *statbuf) return (double)s->st_ctim.tv_sec + (double)s->st_ctim.tv_nsec * 1e-9; } +JL_DLLEXPORT unsigned long jl_getuid(void) +{ +#ifdef _OS_WINDOWS_ + return -1; +#else + return getuid(); +#endif +} + +JL_DLLEXPORT unsigned long jl_geteuid(void) +{ +#ifdef _OS_WINDOWS_ + return -1; +#else + return geteuid(); +#endif +} + // --- buffer manipulation --- JL_DLLEXPORT jl_array_t *jl_take_buffer(ios_t *s) diff --git a/src/task.c b/src/task.c index d65e7412bb7ab..81574a2113093 100644 --- a/src/task.c +++ b/src/task.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include "julia.h" @@ -75,8 +76,8 @@ static inline void tsan_switch_to_ctx(jl_ucontext_t *ctx) {} // empirically, jl_finish_task needs about 64k stack space to infer/run // and additionally, gc-stack reserves 64k for the guard pages -#if defined(MINSIGSTKSZ) && MINSIGSTKSZ > 131072 -#define MINSTKSZ MINSIGSTKSZ +#if defined(MINSIGSTKSZ) +#define MINSTKSZ (MINSIGSTKSZ > 131072 ? MINSIGSTKSZ : 131072) #else #define MINSTKSZ 131072 #endif diff --git a/stdlib/Distributed/test/distributed_exec.jl b/stdlib/Distributed/test/distributed_exec.jl index 7f804c51082ac..1192afca26975 100644 --- a/stdlib/Distributed/test/distributed_exec.jl +++ b/stdlib/Distributed/test/distributed_exec.jl @@ -132,6 +132,39 @@ end testf(id_me) testf(id_other) +function poll_while(f::Function; timeout_seconds::Integer = 120) + start_time = time_ns() + while f() + sleep(1) + if ( ( time_ns() - start_time )/1e9 ) > timeout_seconds + @error "Timed out" timeout_seconds + return false + end + end + return true +end + +function _getenv_include_thread_unsafe() + environment_variable_name = "JULIA_TEST_INCLUDE_THREAD_UNSAFE" + default_value = "false" + environment_variable_value = strip(get(ENV, environment_variable_name, default_value)) + b = parse(Bool, environment_variable_value)::Bool + return b +end +const _env_include_thread_unsafe = _getenv_include_thread_unsafe() +function include_thread_unsafe() + if Threads.nthreads() > 1 + if _env_include_thread_unsafe + return true + end + msg = "Skipping a thread-unsafe test because `Threads.nthreads() > 1`" + @warn msg Threads.nthreads() + Test.@test_broken false + return false + end + return true +end + # Distributed GC tests for Futures function test_futures_dgc(id) f = remotecall(myid, id) @@ -143,8 +176,7 @@ function test_futures_dgc(id) @test fetch(f) == id @test f.v !== nothing yield(); # flush gc msgs - @test remotecall_fetch(k->(yield();haskey(Distributed.PGRP.refs, k)), id, fid) == false - + @test poll_while(() -> remotecall_fetch(k->(yield();haskey(Distributed.PGRP.refs, k)), id, fid)) # if unfetched, it should be deleted after a finalize f = remotecall(myid, id) @@ -153,7 +185,7 @@ function test_futures_dgc(id) @test f.v === nothing finalize(f) yield(); # flush gc msgs - @test remotecall_fetch(k->(yield();haskey(Distributed.PGRP.refs, k)), id, fid) == false + @test poll_while(() -> remotecall_fetch(k->(yield();haskey(Distributed.PGRP.refs, k)), id, fid)) end test_futures_dgc(id_me) @@ -243,7 +275,7 @@ function test_remoteref_dgc(id) @test remotecall_fetch(k->(yield();haskey(Distributed.PGRP.refs, k)), id, rrid) == true finalize(rr) yield(); # flush gc msgs - @test remotecall_fetch(k->(yield();haskey(Distributed.PGRP.refs, k)), id, rrid) == false + @test poll_while(() -> remotecall_fetch(k->(yield();haskey(Distributed.PGRP.refs, k)), id, rrid)) end test_remoteref_dgc(id_me) test_remoteref_dgc(id_other) @@ -256,10 +288,14 @@ let wid1 = workers()[1], fstore = RemoteChannel(wid2) put!(fstore, rr) - @test remotecall_fetch(k -> haskey(Distributed.PGRP.refs, k), wid1, rrid) == true + if include_thread_unsafe() + @test remotecall_fetch(k -> haskey(Distributed.PGRP.refs, k), wid1, rrid) == true + end finalize(rr) # finalize locally yield() # flush gc msgs - @test remotecall_fetch(k -> haskey(Distributed.PGRP.refs, k), wid1, rrid) == true + if include_thread_unsafe() + @test remotecall_fetch(k -> haskey(Distributed.PGRP.refs, k), wid1, rrid) == true + end remotecall_fetch(r -> (finalize(take!(r)); yield(); nothing), wid2, fstore) # finalize remotely sleep(0.5) # to ensure that wid2 messages have been executed on wid1 @test remotecall_fetch(k -> haskey(Distributed.PGRP.refs, k), wid1, rrid) == false diff --git a/stdlib/Downloads.version b/stdlib/Downloads.version index 464fcd4e3d61b..cf98e7d23214d 100644 --- a/stdlib/Downloads.version +++ b/stdlib/Downloads.version @@ -1,2 +1,2 @@ DOWNLOADS_BRANCH = release-1.4 -DOWNLOADS_SHA1 = 1b456c65ca2284a0f98c09cdd543664380ff4e08 +DOWNLOADS_SHA1 = b07b4cf3b20b77faa7efbe29c0adfa8b4b7ee8d8 diff --git a/stdlib/LibGit2/src/rebase.jl b/stdlib/LibGit2/src/rebase.jl index 8151217b3950b..51b52ef006c38 100644 --- a/stdlib/LibGit2/src/rebase.jl +++ b/stdlib/LibGit2/src/rebase.jl @@ -83,7 +83,7 @@ function commit(rb::GitRebase, sig::GitSignature) oid_ptr, rb.ptr, C_NULL, sig.ptr, C_NULL, C_NULL) catch err # TODO: return current HEAD instead - err.code === Error.EAPPLIED && return nothing + err isa GitError && err.code === Error.EAPPLIED && return nothing rethrow() end return oid_ptr[] diff --git a/stdlib/LibUV_jll/Project.toml b/stdlib/LibUV_jll/Project.toml index dab1026a14381..20b72189e91ed 100644 --- a/stdlib/LibUV_jll/Project.toml +++ b/stdlib/LibUV_jll/Project.toml @@ -1,6 +1,6 @@ name = "LibUV_jll" uuid = "183b4373-6708-53ba-ad28-60e28bb38547" -version = "2.0.1+1" +version = "2.0.1+4" [deps] Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" diff --git a/stdlib/LinearAlgebra/test/blas.jl b/stdlib/LinearAlgebra/test/blas.jl index 61fd62b6be353..aaebc50546ac3 100644 --- a/stdlib/LinearAlgebra/test/blas.jl +++ b/stdlib/LinearAlgebra/test/blas.jl @@ -67,6 +67,16 @@ Random.seed!(100) @test BLAS.dotu(z1,z2) ≈ sum(z1.*z2) @test_throws DimensionMismatch BLAS.dotc(z1,rand(elty, n + 1)) @test_throws DimensionMismatch BLAS.dotu(z1,rand(elty, n + 1)) + + end + end + @testset "Issue #40963: OpenBLAS, cblas_zdotc_sub" begin + if elty <: Complex + arrSzie = 10001 + z1 = ones(elty, arrSzie); + z2 = ones(elty, arrSzie); + @test BLAS.dotc(z1,z2) ≈ sum(conj(z1).*z2) + @test BLAS.dotu(z1,z2) ≈ sum(z1.*z2) end end @testset "iamax" begin diff --git a/stdlib/LinearAlgebra/test/matmul.jl b/stdlib/LinearAlgebra/test/matmul.jl index 107c579ba1f94..dc957fb3a0521 100644 --- a/stdlib/LinearAlgebra/test/matmul.jl +++ b/stdlib/LinearAlgebra/test/matmul.jl @@ -152,7 +152,7 @@ end for vf in (copy(vvf), view(vvf, 1:3)), C in (copy(CC), view(CC, 1:3, 1:3)) @test mul!(C, vf, transpose(vf)) == vf*vf' C .= C0 = rand(eltype(C), size(C)) - @test mul!(C, vf, transpose(vf), 2, 3) == 2vf*vf' .+ 3C0 + @test mul!(C, vf, transpose(vf), 2, 3) ≈ 2vf*vf' .+ 3C0 end end diff --git a/stdlib/Markdown/src/Common/inline.jl b/stdlib/Markdown/src/Common/inline.jl index d2855f27a7add..fd5134481e113 100644 --- a/stdlib/Markdown/src/Common/inline.jl +++ b/stdlib/Markdown/src/Common/inline.jl @@ -146,13 +146,10 @@ function _is_link(s::AbstractString) end # non-normative regex from the HTML5 spec -const _email_regex = r"^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$" +const _email_regex = r"^mailto\:[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$" function _is_mailto(s::AbstractString) - length(s) < 6 && return false - # slicing strings is a bit risky, but this equality check is safe - lowercase(s[1:6]) == "mailto:" || return false - return occursin(_email_regex, s[6:end]) + return occursin(_email_regex, s) end # ––––––––––– diff --git a/stdlib/Markdown/test/runtests.jl b/stdlib/Markdown/test/runtests.jl index f90eefb85310e..3de9e667e2e06 100644 --- a/stdlib/Markdown/test/runtests.jl +++ b/stdlib/Markdown/test/runtests.jl @@ -1230,3 +1230,11 @@ end @test sprint(show, MIME("text/plain"), s) == " Misc:\n - line" end +@testset "issue #42139: autolink" begin + # ok + @test md"" |> html == """

mailto:foo@bar.com

\n""" + # not ok + @test md"" |> html == """

<mailto foo@bar.com>

\n""" + # see issue #42139 + @test md"<一轮红日初升>" |> html == """

<一轮红日初升>

\n""" +end diff --git a/stdlib/OpenBLAS_jll/Project.toml b/stdlib/OpenBLAS_jll/Project.toml index 8095195241afd..7e929a6af1fa6 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.10+3" +version = "0.3.10+9" [deps] CompilerSupportLibraries_jll = "e66e0078-7015-5450-92f7-15fbd957f2ae" diff --git a/stdlib/Pkg.version b/stdlib/Pkg.version index b467d433008b1..9c86baca41097 100644 --- a/stdlib/Pkg.version +++ b/stdlib/Pkg.version @@ -1,2 +1,2 @@ PKG_BRANCH = release-1.6 -PKG_SHA1 = 12d944551784d6f84446768738d4e917cd857764 +PKG_SHA1 = 3d41ca188d72e1dc1862e780f31153d629d6a3dd diff --git a/stdlib/REPL/src/REPLCompletions.jl b/stdlib/REPL/src/REPLCompletions.jl index 3002adfad7bed..263cb72d2b405 100644 --- a/stdlib/REPL/src/REPLCompletions.jl +++ b/stdlib/REPL/src/REPLCompletions.jl @@ -384,6 +384,7 @@ function get_value(sym::Expr, fn) end get_value(sym::Symbol, fn) = isdefined(fn, sym) ? (getfield(fn, sym), true) : (nothing, false) get_value(sym::QuoteNode, fn) = isdefined(fn, sym.value) ? (getfield(fn, sym.value), true) : (nothing, false) +get_value(sym::GlobalRef, fn) = get_value(sym.name, sym.mod) get_value(sym, fn) = (sym, true) # Return the value of a getfield call expression @@ -456,6 +457,11 @@ function get_type(sym::Expr, fn::Module) # try to analyze nests of calls. if this fails, try using the expanded form. val, found = try_get_type(sym, fn) found && return val, found + # https://github.com/JuliaLang/julia/issues/27184 + if isexpr(sym, :macrocall) + _, found = get_type(first(sym.args), fn) + found || return Any, false + end return try_get_type(Meta.lower(fn, sym), fn) end diff --git a/stdlib/REPL/src/docview.jl b/stdlib/REPL/src/docview.jl index cac5927ba6352..ca3996e19512b 100644 --- a/stdlib/REPL/src/docview.jl +++ b/stdlib/REPL/src/docview.jl @@ -338,9 +338,13 @@ function symbol_latex(s::String) return get(symbols_latex, s, "") end function repl_latex(io::IO, s::String) - # decompose NFC-normalized identifier to match tab-completion input - s = normalize(s, :NFD) latex = symbol_latex(s) + if isempty(latex) + # Decompose NFC-normalized identifier to match tab-completion + # input if the first search came up empty. + s = normalize(s, :NFD) + latex = symbol_latex(s) + end if !isempty(latex) print(io, "\"") printstyled(io, s, color=:cyan) diff --git a/stdlib/REPL/test/replcompletions.jl b/stdlib/REPL/test/replcompletions.jl index 8a1d2f39a18f4..876fcef912d7e 100644 --- a/stdlib/REPL/test/replcompletions.jl +++ b/stdlib/REPL/test/replcompletions.jl @@ -1109,3 +1109,10 @@ let s = "test_dict[\"ab" c, r = test_complete_context(s) @test c == Any["\"abc\"", "\"abcd\""] end + +# https://github.com/JuliaLang/julia/issues/27184 +let + (test_complete("@noexist."); @test true) + (test_complete("Main.@noexist."); @test true) + (test_complete("@Main.noexist."); @test true) +end diff --git a/stdlib/Test/src/Test.jl b/stdlib/Test/src/Test.jl index e9debaed5e682..1f6a0534a0bfd 100644 --- a/stdlib/Test/src/Test.jl +++ b/stdlib/Test/src/Test.jl @@ -801,7 +801,7 @@ record(ts::DefaultTestSet, t::Pass) = (ts.n_passed += 1; t) # but do not terminate. Print a backtrace. function record(ts::DefaultTestSet, t::Union{Fail, Error}) if TESTSET_PRINT_ENABLE[] - printstyled(ts.description, ": ", color=:white) + print(ts.description, ": ") # don't print for interrupted tests if !(t isa Error) || t.test_type !== :test_interrupted print(t) @@ -860,7 +860,7 @@ function print_test_results(ts::DefaultTestSet, depth_pad=0) align = max(get_alignment(ts, 0), length("Test Summary:")) # Print the outer test set header once pad = total == 0 ? "" : " " - printstyled(rpad("Test Summary:", align, " "), " |", pad; bold=true, color=:white) + printstyled(rpad("Test Summary:", align, " "), " |", pad; bold=true) if pass_width > 0 printstyled(lpad("Pass", pass_width, " "), " "; bold=true, color=:green) end diff --git a/test/arrayops.jl b/test/arrayops.jl index 542beffeb72a1..05a46cf5cf8e1 100644 --- a/test/arrayops.jl +++ b/test/arrayops.jl @@ -778,6 +778,10 @@ let A, B, C, D # With hash collisions @test map(x -> x.x, unique(map(HashCollision, B), dims=1)) == C + + # With NaNs: + E = [1 NaN 3; 1 NaN 3; 1 NaN 3]; + @test isequal(unique(E, dims=1), [1 NaN 3]) end @testset "large matrices transpose" begin diff --git a/test/boundscheck_exec.jl b/test/boundscheck_exec.jl index e1a7029334a3d..735cd88c13758 100644 --- a/test/boundscheck_exec.jl +++ b/test/boundscheck_exec.jl @@ -259,4 +259,17 @@ if bc_opt == bc_default || bc_opt == bc_off @test !occursin("arrayref(true", typed_40281) end +@testset "pass inbounds meta to getindex on CartesianIndices (#42115)" begin + @inline getindex_42115(r, i, j) = @inbounds getindex(r, i, j) + + R = CartesianIndices((5, 5)) + if bc_opt == bc_on + @test_throws BoundsError getindex_42115(R, -1, -1) + @test_throws BoundsError getindex_42115(R, 1, -1) + else + @test getindex_42115(R, -1, -1) == CartesianIndex(-1, -1) + @test getindex_42115(R, 1, -1) == CartesianIndex(1, -1) + end +end + end diff --git a/test/choosetests.jl b/test/choosetests.jl index 460b8121bb9f5..40c4cfcd54eb1 100644 --- a/test/choosetests.jl +++ b/test/choosetests.jl @@ -23,13 +23,15 @@ Upon return: - `seed` is a seed which will be used to initialize the global RNG for each test to be run. -Three options can be passed to `choosetests` by including a special token +Several options can be passed to `choosetests` by including a special token in the `choices` argument: - "--skip", which makes all tests coming after be skipped, - "--exit-on-error" which sets the value of `exit_on_error`, - "--seed=SEED", which sets the value of `seed` to `SEED` (parsed as an `UInt128`); `seed` is otherwise initialized randomly. This option can be used to reproduce failed tests. + - "--help", which prints a help message and then skips all tests. + - "--help-list", which prints the options computed without running them. """ function choosetests(choices = []) testnames = [ @@ -59,14 +61,16 @@ function choosetests(choices = []) ] tests = [] - skip_tests = [] + skip_tests = Set() exit_on_error = false use_revise = false seed = rand(RandomDevice(), UInt128) + force_net = false + dryrun = false for (i, t) in enumerate(choices) if t == "--skip" - skip_tests = choices[i + 1:end] + union!(skip_tests, choices[i + 1:end]) break elseif t == "--exit-on-error" exit_on_error = true @@ -74,11 +78,37 @@ function choosetests(choices = []) use_revise = true elseif startswith(t, "--seed=") seed = parse(UInt128, t[8:end]) + elseif t == "--force-net" + force_net = true + elseif t == "--help-list" + dryrun = true + elseif t == "--help" + println(""" + USAGE: ./julia runtests.jl [options] [tests] + OPTIONS: + --exit-on-error : stop tests immediately when a test group fails + --help : prints this help message + --help-list : prints the options computed without running them + --revise : load Revise + --seed= : set the initial seed for all testgroups (parsed as a UInt128) + --skip ... : skip test or collection tagged with + TESTS: + Can be special tokens, such as "all", "unicode", "stdlib", the names of stdlib modules, or the names of any file in the TESTNAMES array (defaults to "all"). + + Or prefix a name with `-` (such as `-core`) to skip a particular test. + """) + return [], false, false, false, UInt128(0) + elseif startswith(t, "--") + error("unknown option: $t") + elseif startswith(t, "-") + push!(skip_tests, t[2:end]) else push!(tests, t) end end + unhandled = copy(skip_tests) + if tests == ["all"] || isempty(tests) tests = testnames end @@ -87,12 +117,16 @@ function choosetests(choices = []) flt = x -> (x != name && !(x in files)) if name in skip_tests filter!(flt, tests) + pop!(unhandled, name) elseif name in tests filter!(flt, tests) prepend!(tests, files) end end + explicit_pkg3 = "Pkg" in tests + explicit_libgit2 = "LibGit2/online" in tests + filtertests!(tests, "unicode", ["unicode/utf8"]) filtertests!(tests, "strings", ["strings/basic", "strings/search", "strings/util", "strings/io", "strings/types"]) @@ -108,7 +142,7 @@ function choosetests(choices = []) if startswith(string(Sys.ARCH), "arm") # Remove profile from default tests on ARM since it currently segfaults # Allow explicitly adding it for testing - @warn "Skipping Profile tests" + @warn "Skipping Profile tests because the architecture is ARM" filter!(x -> (x != "Profile"), tests) end @@ -116,7 +150,12 @@ function choosetests(choices = []) net_on = true try ipa = getipaddr() - catch + catch ex + if force_net + msg = "Networking is unavailable, and the `--force-net` option was passed" + @error msg + rethrow() + end @warn "Networking unavailable: Skipping tests [" * join(net_required_for, ", ") * "]" net_on = false end @@ -130,10 +169,9 @@ function choosetests(choices = []) filter!(x -> x != "rounding", tests) end + filter!(!in(tests), unhandled) filter!(!in(skip_tests), tests) - explicit_pkg3 = "Pkg/pkg" in tests - explicit_libgit2 = "LibGit2/online" in tests new_tests = String[] for test in tests if test in STDLIBS @@ -149,11 +187,30 @@ function choosetests(choices = []) end filter!(x -> (x != "stdlib" && !(x in STDLIBS)) , tests) append!(tests, new_tests) - explicit_pkg3 || filter!(x -> x != "Pkg/pkg", tests) + explicit_pkg3 || filter!(x -> x != "Pkg", tests) explicit_libgit2 || filter!(x -> x != "LibGit2/online", tests) # Filter out tests from the test groups in the stdlibs + filter!(!in(tests), unhandled) filter!(!in(skip_tests), tests) + if !isempty(unhandled) + @warn "Not skipping tests: $(join(unhandled, ", "))" + end + + if dryrun + print("Tests enabled to run:") + foreach(t -> print("\n ", t), tests) + if !isempty(skip_tests) + print("\n\nTests skipped:") + foreach(t -> print("\n ", t), skip_tests) + end + print("\n") + exit_on_error && (print("\nwith option "); printstyled("exit_on_error", bold=true)) + use_revise && (print("\nwith option "); printstyled("use_revise", bold=true); print(" (Revise.jl)")) + print("\n\n") + empty!(tests) + end + tests, net_on, exit_on_error, use_revise, seed end diff --git a/test/cmdlineargs.jl b/test/cmdlineargs.jl index 4c69bce4253f8..7f075e231e8da 100644 --- a/test/cmdlineargs.jl +++ b/test/cmdlineargs.jl @@ -581,7 +581,7 @@ end # test error handling code paths of running --sysimage -let exename = Base.julia_cmd() +let exename = `$(Base.julia_cmd().exec[1]) -t 1` sysname = unsafe_string(Base.JLOptions().image_file) for nonexist_image in ( joinpath(@__DIR__, "nonexistent"), diff --git a/test/compiler/inference.jl b/test/compiler/inference.jl index 9e461b9c39824..9238ce65475f5 100644 --- a/test/compiler/inference.jl +++ b/test/compiler/inference.jl @@ -3085,3 +3085,8 @@ end end return x end) === Union{Int, Float64, Char} + +# issue #41908 +f41908(x::Complex{T}) where {String<:T<:String} = 1 +g41908() = f41908(Any[1][1]) +@test only(Base.return_types(g41908, ())) <: Int diff --git a/test/compiler/inline.jl b/test/compiler/inline.jl index 152aaac50d971..6aa95e242215d 100644 --- a/test/compiler/inline.jl +++ b/test/compiler/inline.jl @@ -331,3 +331,11 @@ struct NonIsBitsDimsUndef end @test Core.Compiler.is_inlineable_constant(NonIsBitsDimsUndef()) @test !Core.Compiler.is_inlineable_constant((("a"^1000, "b"^1000), nothing)) + +# Issue #42264 - crash on certain union splits +let f(x) = (x...,) + # Test splatting with a Union of non-{Tuple, SimpleVector} types that require creating new `iterate` calls + # in inlining. For this particular case, we're relying on `iterate(::CaretesianIndex)` throwing an error, such + # the the original apply call is not union-split, but the inserted `iterate` call is. + @test code_typed(f, Tuple{Union{Int64, CartesianIndex{1}, CartesianIndex{3}}})[1][2] == Tuple{Int64} +end diff --git a/test/docs.jl b/test/docs.jl index 465de47f026ad..50b36a9702838 100644 --- a/test/docs.jl +++ b/test/docs.jl @@ -1009,6 +1009,8 @@ end # issue #36378 (\u1e8b and x\u307 are the fully composed and decomposed forms of ẋ, respectively) @test sprint(repl_latex, "\u1e8b") == "\"x\u307\" can be typed by x\\dot\n\n" +# issue 39814 +@test sprint(repl_latex, "\u2209") == "\"\u2209\" can be typed by \\notin\n\n" # issue #15684 begin diff --git a/test/file.jl b/test/file.jl index 4f93417deb112..6d79e1fb5e5b5 100644 --- a/test/file.jl +++ b/test/file.jl @@ -91,13 +91,15 @@ using Random end @testset "tempname with parent" begin - t = tempname() - @test dirname(t) == tempdir() - mktempdir() do d - t = tempname(d) - @test dirname(t) == d + withenv("TMPDIR" => nothing) do + t = tempname() + @test dirname(t) == tempdir() + mktempdir() do d + t = tempname(d) + @test dirname(t) == d + end + @test_throws ArgumentError tempname(randstring()) end - @test_throws ArgumentError tempname(randstring()) end child_eval(code::String) = eval(Meta.parse(readchomp(`$(Base.julia_cmd()) -E $code`))) @@ -516,7 +518,10 @@ end if !Sys.iswindows() # chown will give an error if the user does not have permissions to change files - if get(ENV, "USER", "") == "root" || get(ENV, "HOME", "") == "/root" + uid = Libc.geteuid() + @test stat(file).uid == uid + @test uid == Libc.getuid() + if uid == 0 # root user chown(file, -2, -1) # Change the file owner to nobody @test stat(file).uid != 0 chown(file, 0, -2) # Change the file group to nogroup (and owner back to root) diff --git a/test/iterators.jl b/test/iterators.jl index 6007a59464f5a..bbcd81ddea82a 100644 --- a/test/iterators.jl +++ b/test/iterators.jl @@ -201,6 +201,7 @@ end @test collect(takewhile(_->true,5:10)) == 5:10 @test collect(takewhile(isodd,[1,1,2,3])) == [1,1] @test collect(takewhile(<(2), takewhile(<(3), [1,1,2,3]))) == [1,1] + @test Base.IteratorEltype(typeof(takewhile(<(4),Iterators.map(identity, 1:10)))) isa Base.EltypeUnknown end # dropwhile @@ -213,6 +214,7 @@ end @test isempty(dropwhile(_->true, 1:3)) @test collect(dropwhile(isodd,[1,1,2,3])) == [2,3] @test collect(dropwhile(iseven,dropwhile(isodd,[1,1,2,3]))) == [3] + @test Base.IteratorEltype(typeof(dropwhile(<(4),Iterators.map(identity, 1:10)))) isa Base.EltypeUnknown end # cycle diff --git a/test/parse.jl b/test/parse.jl index 2deeecd516f2a..ae07936b3a18e 100644 --- a/test/parse.jl +++ b/test/parse.jl @@ -236,6 +236,13 @@ end @test_throws ArgumentError parse(Int, "2", base = 63) end +@testset "issue #42616" begin + @test tryparse(Bool, "") === nothing + @test tryparse(Bool, " ") === nothing + @test_throws ArgumentError parse(Bool, "") + @test_throws ArgumentError parse(Bool, " ") +end + # issue #17333: tryparse should still throw on invalid base for T in (Int32, BigInt), base in (0,1,100) @test_throws ArgumentError tryparse(T, "0", base = base) diff --git a/test/read.jl b/test/read.jl index b31216811b75c..acbd0930c7511 100644 --- a/test/read.jl +++ b/test/read.jl @@ -465,7 +465,7 @@ rm(f) io = Base.Filesystem.open(f, Base.Filesystem.JL_O_WRONLY | Base.Filesystem.JL_O_CREAT | Base.Filesystem.JL_O_EXCL, 0o000) @test write(io, "abc") == 3 close(io) -if !Sys.iswindows() && get(ENV, "USER", "") != "root" && get(ENV, "HOME", "") != "/root" +if !Sys.iswindows() && Libc.geteuid() != 0 # root user # msvcrt _wchmod documentation states that all files are readable, # so we don't test that it correctly set the umask on windows @test_throws SystemError open(f) @@ -515,7 +515,7 @@ close(f1) close(f2) @test eof(f1) @test_throws Base.IOError eof(f2) -if get(ENV, "USER", "") != "root" && get(ENV, "HOME", "") != "/root" +if Libc.geteuid() != 0 # root user @test_throws SystemError open(f, "r+") @test_throws Base.IOError Base.Filesystem.open(f, Base.Filesystem.JL_O_RDWR) else diff --git a/test/syntax.jl b/test/syntax.jl index b032283523c4f..f188fe3494baa 100644 --- a/test/syntax.jl +++ b/test/syntax.jl @@ -2473,6 +2473,10 @@ import .Mod: x as x2 @test x2 == 1 @test !@isdefined(x) +module_names = names(@__MODULE__; all=true, imported=true) +@test :x2 ∈ module_names +@test :x ∉ module_names + import .Mod2.y as y2 @test y2 == 2 @@ -2704,3 +2708,32 @@ end # issue #39705 @eval f39705(x) = $(Expr(:||)) && x @test f39705(1) === false + +# issue 42220 +macro m42220() + return quote + function foo(::Type{T}=Float64) where {T} + return Vector{T}(undef, 10) + end + end +end +@test @m42220()() isa Vector{Float64} +@test @m42220()(Bool) isa Vector{Bool} + +@test_throws ParseError Meta.parse(""" +function checkUserAccess(u::User) + if u.accessLevel != "user\u202e \u2066# users are not allowed\u2069\u2066" + return true + end + return false +end +""") + +@test_throws ParseError Meta.parse(""" +function checkUserAccess(u::User) + #=\u202e \u2066if (u.isAdmin)\u2069 \u2066 begin admins only =# + return true + #= end admin only \u202e \u2066end\u2069 \u2066=# + return false +end +""")