about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2019-11-25 19:37:54 +0000
committerbors <bors@rust-lang.org>2019-11-25 19:37:54 +0000
commita44774c3a9739b2eea8923e09d67b14312c78ef3 (patch)
tree9754b9b40a14e0835f1cd6ddd5b9cb40dca29eaa
parent91642e3ac0120c8e9cdd5f3c85ad03f3bf1b8b69 (diff)
parent43d773244954a66f4c6d0110254d84f6cfb37856 (diff)
downloadrust-a44774c3a9739b2eea8923e09d67b14312c78ef3.tar.gz
rust-a44774c3a9739b2eea8923e09d67b14312c78ef3.zip
Auto merge of #66739 - pietroalbini:rollup-2t2pd4a, r=pietroalbini
Rollup of 7 pull requests

Successful merges:

 - #65613 (Preserve whitespace inside one-backtick codeblocks)
 - #66512 (Add unix::process::CommandExt::arg0)
 - #66569 (GitHub Actions: preparations, part 1)
 - #66678 (Remove useless line for error index generation)
 - #66684 (Drive-by cleanup in region naming)
 - #66694 (Add some comments to panic runtime)
 - #66698 (tidy: Remove unused import)

Failed merges:

r? @ghost
-rw-r--r--src/bootstrap/util.rs4
-rw-r--r--src/ci/azure-pipelines/auto.yml168
-rw-r--r--src/ci/azure-pipelines/pr.yml7
-rw-r--r--src/ci/azure-pipelines/steps/run.yml34
-rw-r--r--src/ci/azure-pipelines/try.yml73
-rwxr-xr-xsrc/ci/docker/run.sh2
-rwxr-xr-xsrc/ci/run.sh4
-rwxr-xr-xsrc/ci/scripts/install-mingw.sh2
-rwxr-xr-xsrc/ci/scripts/install-msys2.sh6
-rwxr-xr-xsrc/ci/scripts/setup-environment.sh31
-rw-r--r--src/ci/shared.sh71
-rw-r--r--src/libcore/panicking.rs7
-rw-r--r--src/librustc_mir/borrow_check/nll/region_infer/error_reporting/region_name.rs43
-rw-r--r--src/librustdoc/html/static/rustdoc.css2
-rw-r--r--src/libstd/panicking.rs6
-rw-r--r--src/libstd/sys/unix/ext/process.rs16
-rw-r--r--src/libstd/sys/unix/process/process_common.rs23
-rw-r--r--src/libstd/sys/unix/process/process_fuchsia.rs2
-rw-r--r--src/libstd/sys/unix/process/process_unix.rs4
-rw-r--r--src/test/ui/command-argv0.rs33
-rw-r--r--src/tools/error_index_generator/build.rs1
-rw-r--r--src/tools/tidy/src/error_codes_check.rs1
22 files changed, 251 insertions, 289 deletions
diff --git a/src/bootstrap/util.rs b/src/bootstrap/util.rs
index 98ae7b692bb..6f8a6308745 100644
--- a/src/bootstrap/util.rs
+++ b/src/bootstrap/util.rs
@@ -262,6 +262,8 @@ pub enum CiEnv {
     None,
     /// The Azure Pipelines environment, for Linux (including Docker), Windows, and macOS builds.
     AzurePipelines,
+    /// The GitHub Actions environment, for Linux (including Docker), Windows and macOS builds.
+    GitHubActions,
 }
 
 impl CiEnv {
@@ -269,6 +271,8 @@ impl CiEnv {
     pub fn current() -> CiEnv {
         if env::var("TF_BUILD").ok().map_or(false, |e| &*e == "True") {
             CiEnv::AzurePipelines
+        } else if env::var("GITHUB_ACTIONS").ok().map_or(false, |e| &*e == "true") {
+            CiEnv::GitHubActions
         } else {
             CiEnv::None
         }
diff --git a/src/ci/azure-pipelines/auto.yml b/src/ci/azure-pipelines/auto.yml
index 946eb483c29..bfe5174bf1e 100644
--- a/src/ci/azure-pipelines/auto.yml
+++ b/src/ci/azure-pipelines/auto.yml
@@ -19,136 +19,46 @@ jobs:
   strategy:
     matrix:
       x86_64-gnu-llvm-6.0:
-        IMAGE: x86_64-gnu-llvm-6.0
         RUST_BACKTRACE: 1
-
-      dist-x86_64-linux:
-        IMAGE: dist-x86_64-linux
-        DEPLOY: 1
-
-      # "alternate" deployments, these are "nightlies" but have LLVM assertions
-      # turned on, they're deployed to a different location primarily for
-      # additional testing.
+      dist-x86_64-linux: {}
       dist-x86_64-linux-alt:
         IMAGE: dist-x86_64-linux
-        DEPLOY_ALT: 1
-
-      # Linux builders, remaining docker images
-      arm-android:
-        IMAGE: arm-android
-
-      armhf-gnu:
-        IMAGE: armhf-gnu
-
-      dist-various-1:
-        IMAGE: dist-various-1
-        DEPLOY: 1
-
-      dist-various-2:
-        IMAGE: dist-various-2
-        DEPLOY: 1
-
-      dist-aarch64-linux:
-        IMAGE: dist-aarch64-linux
-        DEPLOY: 1
-
-      dist-android:
-        IMAGE: dist-android
-        DEPLOY: 1
-
-      dist-arm-linux:
-        IMAGE: dist-arm-linux
-        DEPLOY: 1
-
-      dist-armhf-linux:
-        IMAGE: dist-armhf-linux
-        DEPLOY: 1
-
-      dist-armv7-linux:
-        IMAGE: dist-armv7-linux
-        DEPLOY: 1
-
-      dist-i586-gnu-i586-i686-musl:
-        IMAGE: dist-i586-gnu-i586-i686-musl
-        DEPLOY: 1
-
-      dist-i686-freebsd:
-        IMAGE: dist-i686-freebsd
-        DEPLOY: 1
-
-      dist-i686-linux:
-        IMAGE: dist-i686-linux
-        DEPLOY: 1
-
-      dist-mips-linux:
-        IMAGE: dist-mips-linux
-        DEPLOY: 1
-
-      dist-mips64-linux:
-        IMAGE: dist-mips64-linux
-        DEPLOY: 1
-
-      dist-mips64el-linux:
-        IMAGE: dist-mips64el-linux
-        DEPLOY: 1
-
-      dist-mipsel-linux:
-        IMAGE: dist-mipsel-linux
-        DEPLOY: 1
-
-      dist-powerpc-linux:
-        IMAGE: dist-powerpc-linux
-        DEPLOY: 1
-
-      dist-powerpc64-linux:
-        IMAGE: dist-powerpc64-linux
-        DEPLOY: 1
-
-      dist-powerpc64le-linux:
-        IMAGE: dist-powerpc64le-linux
-        DEPLOY: 1
-
-      dist-s390x-linux:
-        IMAGE: dist-s390x-linux
-        DEPLOY: 1
-
-      dist-x86_64-freebsd:
-        IMAGE: dist-x86_64-freebsd
-        DEPLOY: 1
-
-      dist-x86_64-musl:
-        IMAGE: dist-x86_64-musl
-        DEPLOY: 1
-
-      dist-x86_64-netbsd:
-        IMAGE: dist-x86_64-netbsd
-        DEPLOY: 1
-
-      i686-gnu:
-        IMAGE: i686-gnu
-      i686-gnu-nopt:
-        IMAGE: i686-gnu-nopt
-      test-various:
-        IMAGE: test-various
-      wasm32:
-        IMAGE: wasm32
-      x86_64-gnu:
-        IMAGE: x86_64-gnu
-      x86_64-gnu-full-bootstrap:
-        IMAGE: x86_64-gnu-full-bootstrap
-      x86_64-gnu-aux:
-        IMAGE: x86_64-gnu-aux
+      arm-android: {}
+      armhf-gnu: {}
+      dist-various-1: {}
+      dist-various-2: {}
+      dist-aarch64-linux: {}
+      dist-android: {}
+      dist-arm-linux: {}
+      dist-armhf-linux: {}
+      dist-armv7-linux: {}
+      dist-i586-gnu-i586-i686-musl: {}
+      dist-i686-freebsd: {}
+      dist-i686-linux: {}
+      dist-mips-linux: {}
+      dist-mips64-linux: {}
+      dist-mips64el-linux: {}
+      dist-mipsel-linux: {}
+      dist-powerpc-linux: {}
+      dist-powerpc64-linux: {}
+      dist-powerpc64le-linux: {}
+      dist-s390x-linux: {}
+      dist-x86_64-freebsd: {}
+      dist-x86_64-musl: {}
+      dist-x86_64-netbsd: {}
+      i686-gnu: {}
+      i686-gnu-nopt: {}
+      test-various: {}
+      wasm32: {}
+      x86_64-gnu: {}
+      x86_64-gnu-full-bootstrap: {}
+      x86_64-gnu-aux: {}
       x86_64-gnu-tools:
-        IMAGE: x86_64-gnu-tools
         DEPLOY_TOOLSTATES_JSON: toolstates-linux.json
-      x86_64-gnu-debug:
-        IMAGE: x86_64-gnu-debug
-      x86_64-gnu-nopt:
-        IMAGE: x86_64-gnu-nopt
-      x86_64-gnu-distcheck:
-        IMAGE: x86_64-gnu-distcheck
-      mingw-check:
-        IMAGE: mingw-check
+      x86_64-gnu-debug: {}
+      x86_64-gnu-nopt: {}
+      x86_64-gnu-distcheck: {}
+      mingw-check: {}
 
 - job: macOS
   timeoutInMinutes: 600
@@ -176,7 +86,6 @@ jobs:
       dist-x86_64-apple:
         SCRIPT: ./x.py dist
         RUST_CONFIGURE_ARGS: --target=aarch64-apple-ios,armv7-apple-ios,armv7s-apple-ios,i386-apple-ios,x86_64-apple-ios --enable-full-tools --enable-sanitizers --enable-profiler --set rust.jemalloc
-        DEPLOY: 1
         RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
         MACOSX_DEPLOYMENT_TARGET: 10.7
         NO_LLVM_ASSERTIONS: 1
@@ -186,7 +95,6 @@ jobs:
       dist-x86_64-apple-alt:
         SCRIPT: ./x.py dist
         RUST_CONFIGURE_ARGS: --enable-extended --enable-profiler --set rust.jemalloc
-        DEPLOY_ALT: 1
         RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
         MACOSX_DEPLOYMENT_TARGET: 10.7
         NO_LLVM_ASSERTIONS: 1
@@ -204,7 +112,6 @@ jobs:
       dist-i686-apple:
         SCRIPT: ./x.py dist
         RUST_CONFIGURE_ARGS: --build=i686-apple-darwin --enable-full-tools --enable-profiler --set rust.jemalloc
-        DEPLOY: 1
         RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
         MACOSX_DEPLOYMENT_TARGET: 10.7
         NO_LLVM_ASSERTIONS: 1
@@ -304,7 +211,6 @@ jobs:
           --enable-profiler
         SCRIPT: python x.py dist
         DIST_REQUIRE_ALL_TOOLS: 1
-        DEPLOY: 1
       dist-i686-msvc:
         RUST_CONFIGURE_ARGS: >-
           --build=i686-pc-windows-msvc
@@ -313,22 +219,18 @@ jobs:
           --enable-profiler
         SCRIPT: python x.py dist
         DIST_REQUIRE_ALL_TOOLS: 1
-        DEPLOY: 1
       dist-i686-mingw:
         RUST_CONFIGURE_ARGS: --build=i686-pc-windows-gnu --enable-full-tools --enable-profiler
         SCRIPT: python x.py dist
         CUSTOM_MINGW: 1
         DIST_REQUIRE_ALL_TOOLS: 1
-        DEPLOY: 1
       dist-x86_64-mingw:
         SCRIPT: python x.py dist
         RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-gnu --enable-full-tools --enable-profiler
         CUSTOM_MINGW: 1
         DIST_REQUIRE_ALL_TOOLS: 1
-        DEPLOY: 1
 
       # "alternate" deployment, see .travis.yml for more info
       dist-x86_64-msvc-alt:
         RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-extended --enable-profiler
         SCRIPT: python x.py dist
-        DEPLOY_ALT: 1
diff --git a/src/ci/azure-pipelines/pr.yml b/src/ci/azure-pipelines/pr.yml
index 566e654fdb3..aee4d8d5136 100644
--- a/src/ci/azure-pipelines/pr.yml
+++ b/src/ci/azure-pipelines/pr.yml
@@ -18,10 +18,7 @@ jobs:
     - template: steps/run.yml
   strategy:
     matrix:
-      x86_64-gnu-llvm-6.0:
-        IMAGE: x86_64-gnu-llvm-6.0
-      mingw-check:
-        IMAGE: mingw-check
+      x86_64-gnu-llvm-6.0: {}
+      mingw-check: {}
       x86_64-gnu-tools:
-        IMAGE: x86_64-gnu-tools
         CI_ONLY_WHEN_SUBMODULES_CHANGED: 1
diff --git a/src/ci/azure-pipelines/steps/run.yml b/src/ci/azure-pipelines/steps/run.yml
index 214c11fd690..f536388b25b 100644
--- a/src/ci/azure-pipelines/steps/run.yml
+++ b/src/ci/azure-pipelines/steps/run.yml
@@ -28,6 +28,9 @@ steps:
 - checkout: self
   fetchDepth: 2
 
+- bash: src/ci/scripts/setup-environment.sh
+  displayName: Setup environment
+
 - bash: src/ci/scripts/should-skip-this.sh
   displayName: Decide whether to run this job
 
@@ -38,38 +41,26 @@ steps:
   displayName: Show the current environment
 
 - bash: src/ci/scripts/install-sccache.sh
-  env:
-    AGENT_OS: $(Agent.OS)
   displayName: Install sccache
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
 - bash: src/ci/scripts/install-clang.sh
-  env:
-    AGENT_OS: $(Agent.OS)
   displayName: Install clang
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
 - bash: src/ci/scripts/switch-xcode.sh
-  env:
-    AGENT_OS: $(Agent.OS)
   displayName: Switch to Xcode 9.3
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
 - bash: src/ci/scripts/install-wix.sh
-  env:
-    AGENT_OS: $(Agent.OS)
   displayName: Install wix
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
 - bash: src/ci/scripts/install-innosetup.sh
-  env:
-    AGENT_OS: $(Agent.OS)
   displayName: Install InnoSetup
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
 - bash: src/ci/scripts/windows-symlink-build-dir.sh
-  env:
-    AGENT_OS: $(Agent.OS)
   displayName: Ensure the build happens on C:\ instead of D:\
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
@@ -78,35 +69,22 @@ steps:
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
 - bash: src/ci/scripts/install-msys2.sh
-  env:
-    AGENT_OS: $(Agent.OS)
-    SYSTEM_WORKFOLDER: $(System.Workfolder)
   displayName: Install msys2
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
 - bash: src/ci/scripts/install-msys2-packages.sh
-  env:
-    AGENT_OS: $(Agent.OS)
-    SYSTEM_WORKFOLDER: $(System.Workfolder)
   displayName: Install msys2 packages
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
 - bash: src/ci/scripts/install-mingw.sh
-  env:
-    AGENT_OS: $(Agent.OS)
-    SYSTEM_WORKFOLDER: $(System.Workfolder)
   displayName: Install MinGW
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
 - bash: src/ci/scripts/install-ninja.sh
-  env:
-    AGENT_OS: $(Agent.OS)
   displayName: Install ninja
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
 - bash: src/ci/scripts/enable-docker-ipv6.sh
-  env:
-    AGENT_OS: $(Agent.OS)
   displayName: Enable IPv6 on Docker
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
@@ -120,22 +98,16 @@ steps:
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
 - bash: src/ci/scripts/checkout-submodules.sh
-  env:
-    AGENT_OS: $(Agent.OS)
   displayName: Checkout submodules
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
 - bash: src/ci/scripts/verify-line-endings.sh
-  env:
-    AGENT_OS: $(Agent.OS)
   displayName: Verify line endings
   condition: and(succeeded(), not(variables.SKIP_JOB))
 
 # Ensure the `aws` CLI is installed so we can deploy later on, cache docker
 # images, etc.
 - bash: src/ci/scripts/install-awscli.sh
-  env:
-    AGENT_OS: $(Agent.OS)
   condition: and(succeeded(), not(variables.SKIP_JOB))
   displayName: Install awscli
 
diff --git a/src/ci/azure-pipelines/try.yml b/src/ci/azure-pipelines/try.yml
index fe39ce3e241..3732ab5458f 100644
--- a/src/ci/azure-pipelines/try.yml
+++ b/src/ci/azure-pipelines/try.yml
@@ -6,72 +6,19 @@ variables:
 - group: prod-credentials
 
 jobs:
-- job: Linux
+- job: Windows
   timeoutInMinutes: 600
   pool:
-    vmImage: ubuntu-16.04
+    vmImage: 'vs2017-win2016'
   steps:
   - template: steps/run.yml
   strategy:
     matrix:
-      dist-x86_64-linux:
-        IMAGE: dist-x86_64-linux
-        DEPLOY: 1
-
-      dist-x86_64-linux-alt:
-        IMAGE: dist-x86_64-linux
-        DEPLOY_ALT: 1
-
-# The macOS and Windows builds here are currently disabled due to them not being
-# overly necessary on `try` builds. We also don't actually have anything that
-# consumes the artifacts currently. Perhaps one day we can reenable, but for now
-# it helps free up capacity on Azure.
-# - job: macOS
-#   timeoutInMinutes: 600
-#   pool:
-#     vmImage: macos-10.13
-#   steps:
-#   - template: steps/run.yml
-#   strategy:
-#     matrix:
-#       dist-x86_64-apple:
-#         SCRIPT: ./x.py dist
-#         RUST_CONFIGURE_ARGS: --target=aarch64-apple-ios,armv7-apple-ios,armv7s-apple-ios,i386-apple-ios,x86_64-apple-ios --enable-full-tools --enable-sanitizers --enable-profiler --set rust.jemalloc
-#         DEPLOY: 1
-#         RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
-#         MACOSX_DEPLOYMENT_TARGET: 10.7
-#         NO_LLVM_ASSERTIONS: 1
-#         NO_DEBUG_ASSERTIONS: 1
-#         DIST_REQUIRE_ALL_TOOLS: 1
-#
-#       dist-x86_64-apple-alt:
-#         SCRIPT: ./x.py dist
-#         RUST_CONFIGURE_ARGS: --enable-extended --enable-profiler --set rust.jemalloc
-#         DEPLOY_ALT: 1
-#         RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
-#         MACOSX_DEPLOYMENT_TARGET: 10.7
-#         NO_LLVM_ASSERTIONS: 1
-#         NO_DEBUG_ASSERTIONS: 1
-#
-# - job: Windows
-#   timeoutInMinutes: 600
-#   pool:
-#     vmImage: 'vs2017-win2016'
-#   steps:
-#   - template: steps/run.yml
-#   strategy:
-#     matrix:
-#       dist-x86_64-msvc:
-#         RUST_CONFIGURE_ARGS: >
-#           --build=x86_64-pc-windows-msvc
-#           --target=x86_64-pc-windows-msvc,aarch64-pc-windows-msvc
-#           --enable-full-tools
-#           --enable-profiler
-#         SCRIPT: python x.py dist
-#         DIST_REQUIRE_ALL_TOOLS: 1
-#         DEPLOY: 1
-#
-#       dist-x86_64-msvc-alt:
-#         RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-extended --enable-profiler
-#         SCRIPT: python x.py dist
-#         DEPLOY_ALT: 1
+      dist-x86_64-msvc:
+        RUST_CONFIGURE_ARGS: >-
+          --build=x86_64-pc-windows-msvc
+          --target=x86_64-pc-windows-msvc,aarch64-pc-windows-msvc
+          --enable-full-tools
+          --enable-profiler
+        SCRIPT: python x.py dist
+        DIST_REQUIRE_ALL_TOOLS: 1
diff --git a/src/ci/docker/run.sh b/src/ci/docker/run.sh
index cdafcbadc9e..f29f9f3bf1c 100755
--- a/src/ci/docker/run.sh
+++ b/src/ci/docker/run.sh
@@ -172,6 +172,8 @@ docker \
   --env CI \
   --env TF_BUILD \
   --env BUILD_SOURCEBRANCHNAME \
+  --env GITHUB_ACTIONS \
+  --env GITHUB_REF \
   --env TOOLSTATE_REPO_ACCESS_TOKEN \
   --env TOOLSTATE_REPO \
   --env TOOLSTATE_PUBLISH \
diff --git a/src/ci/run.sh b/src/ci/run.sh
index bce35670c8d..ae5b22493ab 100755
--- a/src/ci/run.sh
+++ b/src/ci/run.sh
@@ -23,9 +23,7 @@ fi
 ci_dir=`cd $(dirname $0) && pwd`
 source "$ci_dir/shared.sh"
 
-branch_name=$(getCIBranch)
-
-if [ ! isCI ] || [ "$branch_name" = "auto" ] || [ "$branch_name" = "try" ]; then
+if [ ! isCI ] || isCiBranch auto || isCiBranch beta; then
     RUST_CONFIGURE_ARGS="$RUST_CONFIGURE_ARGS --set build.print-step-timings --enable-verbose-tests"
 fi
 
diff --git a/src/ci/scripts/install-mingw.sh b/src/ci/scripts/install-mingw.sh
index 8b579587b9e..98373df7fce 100755
--- a/src/ci/scripts/install-mingw.sh
+++ b/src/ci/scripts/install-mingw.sh
@@ -52,7 +52,7 @@ if isWindows; then
     if [[ "${CUSTOM_MINGW-0}" -ne 1 ]]; then
         pacman -S --noconfirm --needed mingw-w64-$arch-toolchain mingw-w64-$arch-cmake \
             mingw-w64-$arch-gcc mingw-w64-$arch-python2
-        ciCommandAddPath "${SYSTEM_WORKFOLDER}/msys2/mingw${bits}/bin"
+        ciCommandAddPath "$(ciCheckoutPath)/msys2/mingw${bits}/bin"
     else
         mingw_dir="mingw${bits}"
 
diff --git a/src/ci/scripts/install-msys2.sh b/src/ci/scripts/install-msys2.sh
index ce37c3b1469..c9fafc7fe6b 100755
--- a/src/ci/scripts/install-msys2.sh
+++ b/src/ci/scripts/install-msys2.sh
@@ -12,8 +12,8 @@ IFS=$'\n\t'
 source "$(cd "$(dirname "$0")" && pwd)/../shared.sh"
 
 if isWindows; then
-    choco install msys2 --params="/InstallDir:${SYSTEM_WORKFOLDER}/msys2 /NoPath" -y --no-progress
-    mkdir -p "${SYSTEM_WORKFOLDER}/msys2/home/${USERNAME}"
+    choco install msys2 --params="/InstallDir:$(ciCheckoutPath)/msys2 /NoPath" -y --no-progress
+    mkdir -p "$(ciCheckoutPath)/msys2/home/${USERNAME}"
 
-    ciCommandAddPath "${SYSTEM_WORKFOLDER}/msys2/usr/bin"
+    ciCommandAddPath "$(ciCheckoutPath)/msys2/usr/bin"
 fi
diff --git a/src/ci/scripts/setup-environment.sh b/src/ci/scripts/setup-environment.sh
new file mode 100755
index 00000000000..e126a06edab
--- /dev/null
+++ b/src/ci/scripts/setup-environment.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+# This script guesses some environment variables based on the builder name and
+# the current platform, to reduce the amount of variables defined in the CI
+# configuration.
+
+set -euo pipefail
+IFS=$'\n\t'
+
+source "$(cd "$(dirname "$0")" && pwd)/../shared.sh"
+
+# Builders starting with `dist-` are dist builders, but if they also end with
+# `-alt` they are alternate dist builders.
+if [[ "${CI_JOB_NAME}" = dist-* ]]; then
+    if [[ "${CI_JOB_NAME}" = *-alt ]]; then
+        echo "alternate dist builder detected, setting DEPLOY_ALT=1"
+        ciCommandSetEnv DEPLOY_ALT 1
+    else
+        echo "normal dist builder detected, setting DEPLOY=1"
+        ciCommandSetEnv DEPLOY 1
+    fi
+fi
+
+# All the Linux builds happen inside Docker.
+if isLinux; then
+    if [[ -z "${IMAGE+x}" ]]; then
+        echo "linux builder detected, using docker to run the build"
+        ciCommandSetEnv IMAGE "${CI_JOB_NAME}"
+    else
+        echo "a custom docker image is already set"
+    fi
+fi
diff --git a/src/ci/shared.sh b/src/ci/shared.sh
index 862ded0d5db..98120f5dff9 100644
--- a/src/ci/shared.sh
+++ b/src/ci/shared.sh
@@ -27,27 +27,66 @@ function retry {
 }
 
 function isCI {
-  [ "$CI" = "true" ] || [ "$TF_BUILD" = "True" ]
+    [[ "${CI-false}" = "true" ]] || isAzurePipelines || isGitHubActions
+}
+
+function isAzurePipelines {
+    [[ "${TF_BUILD-False}" = "True" ]]
+}
+
+function isGitHubActions {
+    [[ "${GITHUB_ACTIONS-false}" = "true" ]]
 }
 
 function isMacOS {
-  [ "$AGENT_OS" = "Darwin" ]
+    [[ "${OSTYPE}" = "darwin"* ]]
 }
 
 function isWindows {
-  [ "$AGENT_OS" = "Windows_NT" ]
+    [[ "${OSTYPE}" = "cygwin" ]] || [[ "${OSTYPE}" = "msys" ]]
 }
 
 function isLinux {
-  [ "$AGENT_OS" = "Linux" ]
+    [[ "${OSTYPE}" = "linux-gnu" ]]
 }
 
-function getCIBranch {
-  echo "$BUILD_SOURCEBRANCHNAME"
+function isCiBranch {
+    if [[ $# -ne 1 ]]; then
+        echo "usage: $0 <branch-name>"
+        exit 1
+    fi
+    name="$1"
+
+    if isAzurePipelines; then
+        [[ "${BUILD_SOURCEBRANCHNAME}" = "${name}" ]]
+    elif isGitHubActions; then
+        [[ "${GITHUB_REF}" = "refs/heads/${name}" ]]
+    else
+        echo "isCiBranch only works inside CI!"
+        exit 1
+    fi
 }
 
 function ciCommit {
-  echo "${BUILD_SOURCEVERSION}"
+    if isAzurePipelines; then
+        echo "${BUILD_SOURCEVERSION}"
+    elif isGitHubActions; then
+        echo "${GITHUB_SHA}"
+    else
+        echo "ciCommit only works inside CI!"
+        exit 1
+    fi
+}
+
+function ciCheckoutPath {
+    if isAzurePipelines; then
+        echo "${SYSTEM_WORKFOLDER}"
+    elif isGitHubActions; then
+        echo "${GITHUB_WORKSPACE}"
+    else
+        echo "ciCheckoutPath only works inside CI!"
+        exit 1
+    fi
 }
 
 function ciCommandAddPath {
@@ -57,7 +96,14 @@ function ciCommandAddPath {
     fi
     path="$1"
 
-    echo "##vso[task.prependpath]${path}"
+    if isAzurePipelines; then
+        echo "##vso[task.prependpath]${path}"
+    elif isGitHubActions; then
+        echo "::add-path::${value}"
+    else
+        echo "ciCommandAddPath only works inside CI!"
+        exit 1
+    fi
 }
 
 function ciCommandSetEnv {
@@ -68,5 +114,12 @@ function ciCommandSetEnv {
     name="$1"
     value="$2"
 
-    echo "##vso[task.setvariable variable=${name}]${value}"
+    if isAzurePipelines; then
+        echo "##vso[task.setvariable variable=${name}]${value}"
+    elif isGitHubActions; then
+        echo "::set-env name=${name}::${value}"
+    else
+        echo "ciCommandSetEnv only works inside CI!"
+        exit 1
+    fi
 }
diff --git a/src/libcore/panicking.rs b/src/libcore/panicking.rs
index 8a6ab99c65a..4833194be37 100644
--- a/src/libcore/panicking.rs
+++ b/src/libcore/panicking.rs
@@ -6,8 +6,7 @@
 //! interface for panicking is:
 //!
 //! ```
-//! # use std::fmt;
-//! fn panic_impl(fmt: fmt::Arguments, file_line_col: &(&'static str, u32, u32)) -> !
+//! fn panic_impl(pi: &core::panic::PanicInfo<'_>) -> !
 //! # { loop {} }
 //! ```
 //!
@@ -35,7 +34,7 @@ use crate::panic::{Location, PanicInfo};
 // never inline unless panic_immediate_abort to avoid code
 // bloat at the call sites as much as possible
 #[cfg_attr(not(feature="panic_immediate_abort"),inline(never))]
-#[lang = "panic"]
+#[lang = "panic"] // needed by codegen for panic on overflow and other `Assert` MIR terminators
 pub fn panic(expr: &str, location: &Location<'_>) -> ! {
     if cfg!(feature = "panic_immediate_abort") {
         unsafe { super::intrinsics::abort() }
@@ -52,7 +51,7 @@ pub fn panic(expr: &str, location: &Location<'_>) -> ! {
 
 #[cold]
 #[cfg_attr(not(feature="panic_immediate_abort"),inline(never))]
-#[lang = "panic_bounds_check"]
+#[lang = "panic_bounds_check"] // needed by codegen for panic on OOB array/slice access
 fn panic_bounds_check(location: &Location<'_>, index: usize, len: usize) -> ! {
     if cfg!(feature = "panic_immediate_abort") {
         unsafe { super::intrinsics::abort() }
diff --git a/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/region_name.rs b/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/region_name.rs
index d6e84940291..a8cc0cc044a 100644
--- a/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/region_name.rs
+++ b/src/librustc_mir/borrow_check/nll/region_infer/error_reporting/region_name.rs
@@ -77,17 +77,30 @@ impl RegionErrorNamingCtx {
         }
     }
 
+    /// Get the name of `region` if it has previously been named.
     crate fn get(&self, region: &RegionVid) -> Option<&RegionName> {
         self.renctx.get(region)
     }
 
+    /// Give `region` the name `name`.
     crate fn insert(&mut self, region: RegionVid, name: RegionName) {
         self.renctx.insert(region, name);
     }
+
+    /// Creates a synthetic region named `'N`, where `N` is the next value of the counter. Then,
+    /// increment the counter.
+    ///
+    /// The name is not memoized. A separate call to `insert` should be made later. (Currently,
+    /// this happens at the end of `give_region_a_name`).
+    crate fn synthesize_region_name(&mut self) -> Symbol {
+        let c = self.counter;
+        self.counter += 1;
+
+        Symbol::intern(&format!("'{:?}", c))
+    }
 }
 
 impl RegionName {
-    #[allow(dead_code)]
     crate fn was_named(&self) -> bool {
         match self.source {
             RegionNameSource::NamedEarlyBoundRegion(..) |
@@ -103,12 +116,6 @@ impl RegionName {
         }
     }
 
-    #[allow(dead_code)]
-    crate fn was_synthesized(&self) -> bool {
-        !self.was_named()
-    }
-
-    #[allow(dead_code)]
     crate fn name(&self) -> Symbol {
         self.name
     }
@@ -298,7 +305,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
                         } else {
                             bug!("Closure is not defined by a closure expr");
                         };
-                        let region_name = self.synthesize_region_name(renctx);
+                        let region_name = renctx.synthesize_region_name();
 
                         let closure_kind_ty = substs.as_closure().kind_ty(def_id, tcx);
                         let note = match closure_kind_ty.to_opt_closure_kind() {
@@ -478,7 +485,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
                 // This counter value will already have been used, so this function will increment
                 // it so the next value will be used next and return the region name that would
                 // have been used.
-                name: self.synthesize_region_name(renctx),
+                name: renctx.synthesize_region_name(),
                 source: RegionNameSource::CannotMatchHirTy(span, type_name),
             })
         } else {
@@ -533,7 +540,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
                     hir::TyKind::Rptr(_lifetime, referent_hir_ty),
                 ) => {
                     if region.to_region_vid() == needle_fr {
-                        let region_name = self.synthesize_region_name(renctx);
+                        let region_name = renctx.synthesize_region_name();
 
                         // Just grab the first character, the `&`.
                         let source_map = tcx.sess.source_map();
@@ -621,7 +628,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
             | hir::LifetimeName::Error
             | hir::LifetimeName::Static
             | hir::LifetimeName::Underscore => {
-                let region_name = self.synthesize_region_name(renctx);
+                let region_name = renctx.synthesize_region_name();
                 let ampersand_span = lifetime.span;
                 Some(RegionName {
                     name: region_name,
@@ -713,7 +720,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
         let upvar_index = self.get_upvar_index_for_region(tcx, fr)?;
         let (upvar_name, upvar_span) =
             self.get_upvar_name_and_span_for_region(tcx, upvars, upvar_index);
-        let region_name = self.synthesize_region_name(renctx);
+        let region_name = renctx.synthesize_region_name();
 
         Some(RegionName {
             name: region_name,
@@ -776,7 +783,7 @@ impl<'tcx> RegionInferenceContext<'tcx> {
             // This counter value will already have been used, so this function will increment it
             // so the next value will be used next and return the region name that would have been
             // used.
-            name: self.synthesize_region_name(renctx),
+            name: renctx.synthesize_region_name(),
             source: RegionNameSource::AnonRegionFromOutput(
                 return_span,
                 mir_description.to_string(),
@@ -831,16 +838,8 @@ impl<'tcx> RegionInferenceContext<'tcx> {
         );
 
         Some(RegionName {
-            name: self.synthesize_region_name(renctx),
+            name: renctx.synthesize_region_name(),
             source: RegionNameSource::AnonRegionFromYieldTy(yield_span, type_name),
         })
     }
-
-    /// Creates a synthetic region named `'1`, incrementing the counter.
-    fn synthesize_region_name(&self, renctx: &mut RegionErrorNamingCtx) -> Symbol {
-        let c = renctx.counter;
-        renctx.counter += 1;
-
-        Symbol::intern(&format!("'{:?}", c))
-    }
 }
diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css
index ca798931953..62fe23029d9 100644
--- a/src/librustdoc/html/static/rustdoc.css
+++ b/src/librustdoc/html/static/rustdoc.css
@@ -376,7 +376,7 @@ nav.sub {
 	text-overflow: ellipsis;
 	margin: 0;
 }
-.docblock-short code {
+.docblock code, .docblock-short code {
 	white-space: pre-wrap;
 }
 
diff --git a/src/libstd/panicking.rs b/src/libstd/panicking.rs
index f76969146fd..6819a4a04d7 100644
--- a/src/libstd/panicking.rs
+++ b/src/libstd/panicking.rs
@@ -44,6 +44,8 @@ extern {
                                 data: *mut u8,
                                 data_ptr: *mut usize,
                                 vtable_ptr: *mut usize) -> u32;
+
+    /// `payload` is actually a `*mut &mut dyn BoxMeUp` but that would cause FFI warnings.
     #[unwind(allowed)]
     fn __rust_start_panic(payload: usize) -> u32;
 }
@@ -294,7 +296,7 @@ pub fn panicking() -> bool {
     update_panic_count(0) != 0
 }
 
-/// Entry point of panic from the libcore crate.
+/// Entry point of panic from the libcore crate (`panic_impl` lang item).
 #[cfg(not(test))]
 #[panic_handler]
 #[unwind(allowed)]
@@ -380,7 +382,7 @@ fn continue_panic_fmt(info: &PanicInfo<'_>) -> ! {
 #[unstable(feature = "libstd_sys_internals",
            reason = "used by the panic! macro",
            issue = "0")]
-#[cfg_attr(not(test), lang = "begin_panic")]
+#[cfg_attr(not(test), lang = "begin_panic")] // lang item for CTFE panic support
 // never inline unless panic_immediate_abort to avoid code
 // bloat at the call sites as much as possible
 #[cfg_attr(not(feature="panic_immediate_abort"),inline(never))]
diff --git a/src/libstd/sys/unix/ext/process.rs b/src/libstd/sys/unix/ext/process.rs
index 7ace95edef9..0e95f97486b 100644
--- a/src/libstd/sys/unix/ext/process.rs
+++ b/src/libstd/sys/unix/ext/process.rs
@@ -2,6 +2,7 @@
 
 #![stable(feature = "rust1", since = "1.0.0")]
 
+use crate::ffi::OsStr;
 use crate::io;
 use crate::os::unix::io::{FromRawFd, RawFd, AsRawFd, IntoRawFd};
 use crate::process;
@@ -103,6 +104,14 @@ pub trait CommandExt {
     /// cross-platform `spawn` instead.
     #[stable(feature = "process_exec2", since = "1.9.0")]
     fn exec(&mut self) -> io::Error;
+
+    /// Set executable argument
+    ///
+    /// Set the first process argument, `argv[0]`, to something other than the
+    /// default executable path.
+    #[unstable(feature = "process_set_argv0", issue = "66510")]
+    fn arg0<S>(&mut self, arg: S) -> &mut process::Command
+        where S: AsRef<OsStr>;
 }
 
 #[stable(feature = "rust1", since = "1.0.0")]
@@ -127,6 +136,13 @@ impl CommandExt for process::Command {
     fn exec(&mut self) -> io::Error {
         self.as_inner_mut().exec(sys::process::Stdio::Inherit)
     }
+
+    fn arg0<S>(&mut self, arg: S) -> &mut process::Command
+        where S: AsRef<OsStr>
+    {
+        self.as_inner_mut().set_arg_0(arg.as_ref());
+        self
+    }
 }
 
 /// Unix-specific extensions to [`process::ExitStatus`].
diff --git a/src/libstd/sys/unix/process/process_common.rs b/src/libstd/sys/unix/process/process_common.rs
index 4edd2ebf8c5..0e6f96bb228 100644
--- a/src/libstd/sys/unix/process/process_common.rs
+++ b/src/libstd/sys/unix/process/process_common.rs
@@ -1,6 +1,6 @@
 use crate::os::unix::prelude::*;
 
-use crate::ffi::{OsString, OsStr, CString};
+use crate::ffi::{OsString, OsStr, CString, CStr};
 use crate::fmt;
 use crate::io;
 use crate::ptr;
@@ -11,10 +11,7 @@ use crate::sys_common::process::CommandEnv;
 use crate::collections::BTreeMap;
 
 #[cfg(not(target_os = "fuchsia"))]
-use {
-    crate::ffi::CStr,
-    crate::sys::fs::OpenOptions,
-};
+use crate::sys::fs::OpenOptions;
 
 use libc::{c_int, gid_t, uid_t, c_char, EXIT_SUCCESS, EXIT_FAILURE};
 
@@ -135,8 +132,8 @@ impl Command {
         let program = os2c(program, &mut saw_nul);
         Command {
             argv: Argv(vec![program.as_ptr(), ptr::null()]),
+            args: vec![program.clone()],
             program,
-            args: Vec::new(),
             env: Default::default(),
             cwd: None,
             uid: None,
@@ -149,11 +146,19 @@ impl Command {
         }
     }
 
+    pub fn set_arg_0(&mut self, arg: &OsStr) {
+        // Set a new arg0
+        let arg = os2c(arg, &mut self.saw_nul);
+        debug_assert!(self.argv.0.len() > 1);
+        self.argv.0[0] = arg.as_ptr();
+        self.args[0] = arg;
+    }
+
     pub fn arg(&mut self, arg: &OsStr) {
         // Overwrite the trailing NULL pointer in `argv` and then add a new null
         // pointer.
         let arg = os2c(arg, &mut self.saw_nul);
-        self.argv.0[self.args.len() + 1] = arg.as_ptr();
+        self.argv.0[self.args.len()] = arg.as_ptr();
         self.argv.0.push(ptr::null());
 
         // Also make sure we keep track of the owned value to schedule a
@@ -178,6 +183,10 @@ impl Command {
         &self.argv.0
     }
 
+    pub fn get_program(&self) -> &CStr {
+        &*self.program
+    }
+
     #[allow(dead_code)]
     pub fn get_cwd(&self) -> &Option<CString> {
         &self.cwd
diff --git a/src/libstd/sys/unix/process/process_fuchsia.rs b/src/libstd/sys/unix/process/process_fuchsia.rs
index 2b1a3ecfd70..486c12f9bf8 100644
--- a/src/libstd/sys/unix/process/process_fuchsia.rs
+++ b/src/libstd/sys/unix/process/process_fuchsia.rs
@@ -110,7 +110,7 @@ impl Command {
             ZX_HANDLE_INVALID,
             FDIO_SPAWN_CLONE_JOB | FDIO_SPAWN_CLONE_LDSVC | FDIO_SPAWN_CLONE_NAMESPACE
             | FDIO_SPAWN_CLONE_ENVIRON,  // this is ignored when envp is non-null
-            self.get_argv()[0], self.get_argv().as_ptr(), envp,
+            self.get_program().as_ptr(), self.get_argv().as_ptr(), envp,
             actions.len() as size_t, actions.as_ptr(),
             &mut process_handle,
             ptr::null_mut(),
diff --git a/src/libstd/sys/unix/process/process_unix.rs b/src/libstd/sys/unix/process/process_unix.rs
index 507dc689261..45e4d195f17 100644
--- a/src/libstd/sys/unix/process/process_unix.rs
+++ b/src/libstd/sys/unix/process/process_unix.rs
@@ -248,7 +248,7 @@ impl Command {
             *sys::os::environ() = envp.as_ptr();
         }
 
-        libc::execvp(self.get_argv()[0], self.get_argv().as_ptr());
+        libc::execvp(self.get_program().as_ptr(), self.get_argv().as_ptr());
         Err(io::Error::last_os_error())
     }
 
@@ -373,7 +373,7 @@ impl Command {
                 .unwrap_or_else(|| *sys::os::environ() as *const _);
             let ret = libc::posix_spawnp(
                 &mut p.pid,
-                self.get_argv()[0],
+                self.get_program().as_ptr(),
                 file_actions.0.as_ptr(),
                 attrs.0.as_ptr(),
                 self.get_argv().as_ptr() as *const _,
diff --git a/src/test/ui/command-argv0.rs b/src/test/ui/command-argv0.rs
new file mode 100644
index 00000000000..56a9fb4d391
--- /dev/null
+++ b/src/test/ui/command-argv0.rs
@@ -0,0 +1,33 @@
+// run-pass
+
+// ignore-windows - this is a unix-specific test
+// ignore-cloudabi no processes
+// ignore-emscripten no processes
+// ignore-sgx no processes
+#![feature(process_set_argv0)]
+
+use std::env;
+use std::os::unix::process::CommandExt;
+use std::process::Command;
+
+fn main() {
+    let args: Vec<_> = env::args().collect();
+
+    if args.len() > 1 {
+        assert_eq!(args[1], "doing-test");
+        assert_eq!(args[0], "i have a silly name");
+
+        println!("passed");
+        return;
+    }
+
+    let output =
+        Command::new(&args[0]).arg("doing-test").arg0("i have a silly name").output().unwrap();
+    assert!(
+        output.stderr.is_empty(),
+        "Non-empty stderr: {}",
+        String::from_utf8_lossy(&output.stderr)
+    );
+    assert!(output.status.success());
+    assert_eq!(output.stdout, b"passed\n");
+}
diff --git a/src/tools/error_index_generator/build.rs b/src/tools/error_index_generator/build.rs
index b04aff4939b..b6e7ede17e7 100644
--- a/src/tools/error_index_generator/build.rs
+++ b/src/tools/error_index_generator/build.rs
@@ -13,7 +13,6 @@ fn main() {
 
     println!("cargo:rerun-if-changed={}", error_codes_path);
     let file = fs::read_to_string(error_codes_path).unwrap()
-                  .replace("crate::register_diagnostics!", "register_diagnostics!")
                   .replace(": include_str!(\"./error_codes/", ": include_str!(\"./");
     let contents = format!("(|| {{\n{}\n}})()", file);
     fs::write(&out_dir.join("all_error_codes.rs"), &contents).unwrap();
diff --git a/src/tools/tidy/src/error_codes_check.rs b/src/tools/tidy/src/error_codes_check.rs
index 5364005840a..41c4b618e60 100644
--- a/src/tools/tidy/src/error_codes_check.rs
+++ b/src/tools/tidy/src/error_codes_check.rs
@@ -4,7 +4,6 @@
 use std::collections::HashMap;
 use std::ffi::OsStr;
 use std::fs::read_to_string;
-use std::io::Read;
 use std::path::Path;
 
 // A few of those error codes can't be tested but all the others can and *should* be tested!