summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/ci/docker/host-x86_64/x86_64-gnu-integration/build-fuchsia.sh2
-rwxr-xr-xsrc/ci/docker/scripts/build-fuchsia-toolchain.sh8
-rwxr-xr-xsrc/ci/docker/scripts/fuchsia-test-runner.py2
-rwxr-xr-xsrc/ci/github-actions/calculate-job-matrix.py115
-rw-r--r--src/ci/github-actions/ci.yml438
-rw-r--r--src/ci/github-actions/jobs.yml426
-rwxr-xr-xsrc/ci/scripts/calculate-job-matrix.py25
-rw-r--r--src/doc/unstable-book/src/language-features/coroutines.md23
-rw-r--r--src/doc/unstable-book/src/language-features/inline-const-pat.md2
-rw-r--r--src/doc/unstable-book/src/language-features/inline-const.md32
-rw-r--r--src/doc/unstable-book/src/the-unstable-book.md4
-rw-r--r--src/tools/clippy/tests/ui-toml/suppress_lint_in_const/test.rs1
-rw-r--r--src/tools/clippy/tests/ui-toml/suppress_lint_in_const/test.stderr12
-rw-r--r--src/tools/clippy/tests/ui/arithmetic_side_effects.rs2
-rw-r--r--src/tools/clippy/tests/ui/bool_to_int_with_if.fixed2
-rw-r--r--src/tools/clippy/tests/ui/bool_to_int_with_if.rs2
-rw-r--r--src/tools/clippy/tests/ui/const_is_empty.rs1
-rw-r--r--src/tools/clippy/tests/ui/const_is_empty.stderr52
-rw-r--r--src/tools/clippy/tests/ui/crashes/ice-5238.rs4
-rw-r--r--src/tools/clippy/tests/ui/indexing_slicing_index.rs1
-rw-r--r--src/tools/clippy/tests/ui/indexing_slicing_index.stderr32
-rw-r--r--src/tools/clippy/tests/ui/large_futures.fixed1
-rw-r--r--src/tools/clippy/tests/ui/large_futures.rs1
-rw-r--r--src/tools/clippy/tests/ui/large_futures.stderr16
-rw-r--r--src/tools/clippy/tests/ui/manual_float_methods.rs1
-rw-r--r--src/tools/clippy/tests/ui/manual_float_methods.stderr12
-rw-r--r--src/tools/clippy/tests/ui/never_loop.rs2
-rw-r--r--src/tools/clippy/tests/ui/panicking_macros.rs1
-rw-r--r--src/tools/clippy/tests/ui/panicking_macros.stderr32
-rw-r--r--src/tools/clippy/tests/ui/redundant_locals.rs6
-rw-r--r--src/tools/miri/src/lib.rs1
-rw-r--r--src/tools/miri/tests/fail/coroutine-pinned-moved.rs4
-rw-r--r--src/tools/miri/tests/pass/coroutine.rs36
-rw-r--r--src/tools/miri/tests/pass/portable-simd.rs2
-rw-r--r--src/tools/miri/tests/pass/shims/path.rs1
-rw-r--r--src/tools/miri/tests/pass/stacked-borrows/coroutine-self-referential.rs4
-rw-r--r--src/tools/miri/tests/pass/track-caller-attribute.rs6
-rw-r--r--src/tools/rust-analyzer/crates/ide-db/src/generated/lints.rs6
-rw-r--r--src/tools/rustfmt/tests/source/immovable_coroutines.rs3
-rw-r--r--src/tools/rustfmt/tests/target/immovable_coroutines.rs3
-rw-r--r--src/tools/tidy/src/allowed_run_make_makefiles.txt1
41 files changed, 702 insertions, 623 deletions
diff --git a/src/ci/docker/host-x86_64/x86_64-gnu-integration/build-fuchsia.sh b/src/ci/docker/host-x86_64/x86_64-gnu-integration/build-fuchsia.sh
index d6de992913b..9cc508fe928 100755
--- a/src/ci/docker/host-x86_64/x86_64-gnu-integration/build-fuchsia.sh
+++ b/src/ci/docker/host-x86_64/x86_64-gnu-integration/build-fuchsia.sh
@@ -5,7 +5,7 @@
set -euf -o pipefail
-INTEGRATION_SHA=56310bca298872ffb5ea02e665956d9b6dc41171
+INTEGRATION_SHA=1011e3298775ee7cdf6f6dc73e808d6a86e33bd6
PICK_REFS=()
checkout=fuchsia
diff --git a/src/ci/docker/scripts/build-fuchsia-toolchain.sh b/src/ci/docker/scripts/build-fuchsia-toolchain.sh
index beea2f522fd..7a0d4fcffc1 100755
--- a/src/ci/docker/scripts/build-fuchsia-toolchain.sh
+++ b/src/ci/docker/scripts/build-fuchsia-toolchain.sh
@@ -4,13 +4,13 @@ set -ex
source shared.sh
FUCHSIA_SDK_URL=https://chrome-infra-packages.appspot.com/dl/fuchsia/sdk/core/linux-amd64
-FUCHSIA_SDK_ID=MrhQwtmP8CpZre-i_PNOREcThbUcrX3bA-45d6WQr-cC
-FUCHSIA_SDK_SHA256=32b850c2d98ff02a59adefa2fcf34e44471385b51cad7ddb03ee3977a590afe7
+FUCHSIA_SDK_ID=version:20.20240412.3.1
+FUCHSIA_SDK_SHA256=cc52f3497487dd813c89d9316e6967efcea89c7759edccf3e40fcf3662e53f19
FUCHSIA_SDK_USR_DIR=/usr/local/core-linux-amd64-fuchsia-sdk
CLANG_DOWNLOAD_URL=\
https://chrome-infra-packages.appspot.com/dl/fuchsia/third_party/clang/linux-amd64
-CLANG_DOWNLOAD_ID=Tpc85d1ZwSlZ6UKl2d96GRUBGNA5JKholOKe24sRDr0C
-CLANG_DOWNLOAD_SHA256=4e973ce5dd59c12959e942a5d9df7a19150118d03924a86894e29edb8b110ebd
+CLANG_DOWNLOAD_ID=git_revision:c777c011a709dffd4fa5e79cad7947b7c3405d02
+CLANG_DOWNLOAD_SHA256=779167422ad73c292f049dcea5569f84577af9292189ed2749518b966a4d0844
install_clang() {
mkdir -p clang_download
diff --git a/src/ci/docker/scripts/fuchsia-test-runner.py b/src/ci/docker/scripts/fuchsia-test-runner.py
index 437b51641fc..8ac00a8863f 100755
--- a/src/ci/docker/scripts/fuchsia-test-runner.py
+++ b/src/ci/docker/scripts/fuchsia-test-runner.py
@@ -280,7 +280,7 @@ class TestEnvironment:
# Look up the product bundle transfer manifest.
self.log_info("Looking up the product bundle transfer manifest...")
product_name = "minimal." + self.triple_to_arch(self.target)
- fuchsia_version = "14.20230811.2.1"
+ fuchsia_version = "20.20240412.3.1"
# FIXME: We should be able to replace this with the machine parsable
# `ffx --machine json product lookup ...` once F15 is released.
diff --git a/src/ci/github-actions/calculate-job-matrix.py b/src/ci/github-actions/calculate-job-matrix.py
new file mode 100755
index 00000000000..c24cefa8d89
--- /dev/null
+++ b/src/ci/github-actions/calculate-job-matrix.py
@@ -0,0 +1,115 @@
+#!/usr/bin/env python3
+
+"""
+This script serves for generating a matrix of jobs that should
+be executed on CI.
+
+It reads job definitions from `src/ci/github-actions/jobs.yml`
+and filters them based on the event that happened on CI.
+"""
+import dataclasses
+import enum
+import json
+import logging
+import os
+from pathlib import Path
+from typing import List, Dict, Any, Optional
+
+import yaml
+
+JOBS_YAML_PATH = Path(__file__).absolute().parent / "jobs.yml"
+
+
+def name_jobs(jobs: List[Dict], prefix: str) -> List[Dict]:
+ """
+ Add a `name` attribute to each job, based on its image and the given `prefix`.
+ """
+ for job in jobs:
+ job["name"] = f"{prefix} - {job['image']}"
+ return jobs
+
+
+def add_base_env(jobs: List[Dict], environment: Dict[str, str]) -> List[Dict]:
+ """
+ Prepends `environment` to the `env` attribute of each job.
+ The `env` of each job has higher precedence than `environment`.
+ """
+ for job in jobs:
+ env = environment.copy()
+ env.update(job.get("env", {}))
+ job["env"] = env
+ return jobs
+
+
+class JobType(enum.Enum):
+ PR = enum.auto()
+ Try = enum.auto()
+ Auto = enum.auto()
+
+
+@dataclasses.dataclass
+class GitHubCtx:
+ event_name: str
+ ref: str
+ repository: str
+
+
+def find_job_type(ctx: GitHubCtx) -> Optional[JobType]:
+ if ctx.event_name == "pull_request":
+ return JobType.PR
+ elif ctx.event_name == "push":
+ old_bors_try_build = (
+ ctx.ref in ("refs/heads/try", "refs/heads/try-perf") and
+ ctx.repository == "rust-lang-ci/rust"
+ )
+ new_bors_try_build = (
+ ctx.ref == "refs/heads/automation/bors/try" and
+ ctx.repository == "rust-lang/rust"
+ )
+ try_build = old_bors_try_build or new_bors_try_build
+
+ if try_build:
+ return JobType.Try
+
+ if ctx.ref == "refs/heads/auto" and ctx.repository == "rust-lang-ci/rust":
+ return JobType.Auto
+
+ return None
+
+
+def calculate_jobs(job_type: JobType, job_data: Dict[str, Any]) -> List[Dict[str, Any]]:
+ if job_type == JobType.PR:
+ return add_base_env(name_jobs(job_data["pr"], "PR"), job_data["envs"]["pr"])
+ elif job_type == JobType.Try:
+ return add_base_env(name_jobs(job_data["try"], "try"), job_data["envs"]["try"])
+ elif job_type == JobType.Auto:
+ return add_base_env(name_jobs(job_data["auto"], "auto"), job_data["envs"]["auto"])
+
+ return []
+
+
+def get_github_ctx() -> GitHubCtx:
+ return GitHubCtx(
+ event_name=os.environ["GITHUB_EVENT_NAME"],
+ ref=os.environ["GITHUB_REF"],
+ repository=os.environ["GITHUB_REPOSITORY"]
+ )
+
+
+if __name__ == "__main__":
+ logging.basicConfig(level=logging.INFO)
+
+ with open(JOBS_YAML_PATH) as f:
+ data = yaml.safe_load(f)
+
+ github_ctx = get_github_ctx()
+
+ job_type = find_job_type(github_ctx)
+ logging.info(f"Job type: {job_type}")
+
+ jobs = []
+ if job_type is not None:
+ jobs = calculate_jobs(job_type, data)
+
+ logging.info(f"Output:\n{yaml.dump(jobs, indent=4)}")
+ print(f"jobs={json.dumps(jobs)}")
diff --git a/src/ci/github-actions/ci.yml b/src/ci/github-actions/ci.yml
index de71b9f874f..19d6b517552 100644
--- a/src/ci/github-actions/ci.yml
+++ b/src/ci/github-actions/ci.yml
@@ -342,6 +342,8 @@ concurrency:
jobs:
# The job matrix for `calculate_matrix` is defined in src/ci/github-actions/jobs.yml.
+ # It calculates which jobs should be executed, based on the data of the ${{ github }} context.
+ # If you want to modify CI jobs, take a look at src/ci/github-actions/jobs.yml.
calculate_matrix:
name: Calculate job matrix
runs-on: ubuntu-latest
@@ -351,422 +353,34 @@ jobs:
- name: Checkout the source code
uses: actions/checkout@v4
- name: Calculate the CI job matrix
- run: python3 src/ci/scripts/calculate-job-matrix.py >> $GITHUB_OUTPUT
+ run: python3 src/ci/github-actions/calculate-job-matrix.py >> $GITHUB_OUTPUT
id: jobs
- pr:
+ job:
<<: *base-ci-job
- name: PR - ${{ matrix.name }}
+ name: ${{ matrix.name }}
needs: [ calculate_matrix ]
env:
- <<: [*shared-ci-variables, *public-variables]
- PR_CI_JOB: 1
- if: github.event_name == 'pull_request'
- continue-on-error: ${{ matrix.name == 'mingw-check-tidy' }}
+ CI_JOB_NAME: ${{ matrix.image }}
+ CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
+ # commit of PR sha or commit sha. `GITHUB_SHA` is not accurate for PRs.
+ HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
+ DOCKER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ SCCACHE_BUCKET: rust-lang-ci-sccache2
+ TOOLSTATE_REPO: https://github.com/rust-lang-nursery/rust-toolstate
+ CACHE_DOMAIN: ci-caches.rust-lang.org
+ continue-on-error: ${{ matrix.continue_on_error || false }}
strategy:
matrix:
# Check the `calculate_matrix` job to see how is the matrix defined.
include: ${{ fromJSON(needs.calculate_matrix.outputs.jobs) }}
-
- auto:
- <<: *base-ci-job
- name: auto - ${{ matrix.name }}
- env:
- <<: [*shared-ci-variables, *prod-variables]
- if: github.event_name == 'push' && github.ref == 'refs/heads/auto' && github.repository == 'rust-lang-ci/rust'
- strategy:
- matrix:
- include:
- #############################
- # Linux/Docker builders #
- #############################
-
- - name: aarch64-gnu
- <<: *job-aarch64-linux
-
- - name: arm-android
- <<: *job-linux-8c
-
- - name: armhf-gnu
- <<: *job-linux-8c
-
- - name: dist-aarch64-linux
- env:
- CODEGEN_BACKENDS: llvm,cranelift
- <<: *job-linux-8c
-
- - name: dist-android
- <<: *job-linux-8c
-
- - name: dist-arm-linux
- <<: *job-linux-16c
-
- - name: dist-armhf-linux
- <<: *job-linux-8c
-
- - name: dist-armv7-linux
- <<: *job-linux-8c
-
- - name: dist-i586-gnu-i586-i686-musl
- <<: *job-linux-8c
-
- - name: dist-i686-linux
- <<: *job-linux-8c
-
- - name: dist-loongarch64-linux
- <<: *job-linux-8c
-
- - name: dist-ohos
- <<: *job-linux-8c
-
- - name: dist-powerpc-linux
- <<: *job-linux-8c
-
- - name: dist-powerpc64-linux
- <<: *job-linux-8c
-
- - name: dist-powerpc64le-linux
- <<: *job-linux-8c
-
- - name: dist-riscv64-linux
- <<: *job-linux-8c
-
- - name: dist-s390x-linux
- <<: *job-linux-8c
-
- - name: dist-various-1
- <<: *job-linux-8c
-
- - name: dist-various-2
- <<: *job-linux-8c
-
- - name: dist-x86_64-freebsd
- <<: *job-linux-8c
-
- - name: dist-x86_64-illumos
- <<: *job-linux-8c
-
- - &dist-x86_64-linux
- name: dist-x86_64-linux
- env:
- CODEGEN_BACKENDS: llvm,cranelift
- <<: *job-linux-16c
-
- - name: dist-x86_64-linux-alt
- env:
- IMAGE: dist-x86_64-linux
- CODEGEN_BACKENDS: llvm,cranelift
- <<: *job-linux-16c
-
- - name: dist-x86_64-musl
- env:
- CODEGEN_BACKENDS: llvm,cranelift
- <<: *job-linux-8c
-
- - name: dist-x86_64-netbsd
- <<: *job-linux-8c
-
- - name: i686-gnu
- <<: *job-linux-8c
-
- - name: i686-gnu-nopt
- <<: *job-linux-8c
-
- - name: mingw-check
- <<: *job-linux-4c
-
- - name: test-various
- <<: *job-linux-8c
-
- - name: x86_64-gnu
- <<: *job-linux-4c
-
- # This job ensures commits landing on nightly still pass the full
- # test suite on the stable channel. There are some UI tests that
- # depend on the channel being built (for example if they include the
- # channel name on the output), and this builder prevents landing
- # changes that would result in broken builds after a promotion.
- - name: x86_64-gnu-stable
- env:
- IMAGE: x86_64-gnu
- RUST_CI_OVERRIDE_RELEASE_CHANNEL: stable
- # Only run this job on the nightly channel. Running this on beta
- # could cause failures when `dev: 1` in `stage0.txt`, and running
- # this on stable is useless.
- CI_ONLY_WHEN_CHANNEL: nightly
- <<: *job-linux-4c
-
- - name: x86_64-gnu-aux
- <<: *job-linux-4c
-
- - name: x86_64-gnu-integration
- env:
- # Only run this job on the nightly channel. Fuchsia requires
- # nightly features to compile, and this job would fail if
- # executed on beta and stable.
- CI_ONLY_WHEN_CHANNEL: nightly
- <<: *job-linux-8c
-
- - name: x86_64-gnu-debug
- <<: *job-linux-8c
-
- - name: x86_64-gnu-distcheck
- <<: *job-linux-8c
-
- - name: x86_64-gnu-llvm-18
- env:
- RUST_BACKTRACE: 1
- <<: *job-linux-8c
-
- - name: x86_64-gnu-llvm-17
- env:
- RUST_BACKTRACE: 1
- <<: *job-linux-8c
-
- - name: x86_64-gnu-nopt
- <<: *job-linux-4c
-
- - name: x86_64-gnu-tools
- env:
- DEPLOY_TOOLSTATES_JSON: toolstates-linux.json
- <<: *job-linux-8c
-
- ####################
- # macOS Builders #
- ####################
-
- - name: dist-x86_64-apple
- env:
- SCRIPT: ./x.py dist bootstrap --include-default-paths --host=x86_64-apple-darwin --target=x86_64-apple-darwin
- RUST_CONFIGURE_ARGS: --enable-full-tools --enable-sanitizers --enable-profiler --set rust.jemalloc --set rust.lto=thin --set rust.codegen-units=1
- RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
- MACOSX_DEPLOYMENT_TARGET: 10.12
- SELECT_XCODE: /Applications/Xcode_14.3.1.app
- NO_LLVM_ASSERTIONS: 1
- NO_DEBUG_ASSERTIONS: 1
- NO_OVERFLOW_CHECKS: 1
- DIST_REQUIRE_ALL_TOOLS: 1
- CODEGEN_BACKENDS: llvm,cranelift
- <<: *job-macos-xl
-
- - name: dist-apple-various
- env:
- SCRIPT: ./x.py dist bootstrap --include-default-paths --host='' --target=aarch64-apple-ios,x86_64-apple-ios,aarch64-apple-ios-sim
- RUST_CONFIGURE_ARGS: --enable-sanitizers --enable-profiler --set rust.jemalloc
- RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
- MACOSX_DEPLOYMENT_TARGET: 10.12
- SELECT_XCODE: /Applications/Xcode_14.3.1.app
- NO_LLVM_ASSERTIONS: 1
- NO_DEBUG_ASSERTIONS: 1
- NO_OVERFLOW_CHECKS: 1
- <<: *job-macos-xl
-
- - name: x86_64-apple-1
- env: &env-x86_64-apple-tests
- SCRIPT: ./x.py --stage 2 test --skip tests/ui --skip tests/rustdoc --skip tests/run-make-fulldeps
- RUST_CONFIGURE_ARGS: --build=x86_64-apple-darwin --enable-sanitizers --enable-profiler --set rust.jemalloc
- RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
- MACOSX_DEPLOYMENT_TARGET: 10.12
- MACOSX_STD_DEPLOYMENT_TARGET: 10.12
- SELECT_XCODE: /Applications/Xcode_14.3.1.app
- NO_LLVM_ASSERTIONS: 1
- NO_DEBUG_ASSERTIONS: 1
- NO_OVERFLOW_CHECKS: 1
- <<: *job-macos-xl
-
- - name: x86_64-apple-2
- env:
- SCRIPT: ./x.py --stage 2 test tests/ui tests/rustdoc tests/run-make-fulldeps
- <<: *env-x86_64-apple-tests
- <<: *job-macos-xl
-
- # This target only needs to support 11.0 and up as nothing else supports the hardware
- - name: dist-aarch64-apple
- env:
- SCRIPT: ./x.py dist bootstrap --include-default-paths --host=aarch64-apple-darwin --target=aarch64-apple-darwin
- RUST_CONFIGURE_ARGS: >-
- --enable-full-tools
- --enable-sanitizers
- --enable-profiler
- --set rust.jemalloc
- --set llvm.ninja=false
- --set rust.lto=thin
- RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
- SELECT_XCODE: /Applications/Xcode_14.3.1.app
- USE_XCODE_CLANG: 1
- MACOSX_DEPLOYMENT_TARGET: 11.0
- MACOSX_STD_DEPLOYMENT_TARGET: 11.0
- NO_LLVM_ASSERTIONS: 1
- NO_DEBUG_ASSERTIONS: 1
- NO_OVERFLOW_CHECKS: 1
- DIST_REQUIRE_ALL_TOOLS: 1
- <<: *job-macos-m1
-
- # This target only needs to support 11.0 and up as nothing else supports the hardware
- - name: aarch64-apple
- env:
- SCRIPT: ./x.py --stage 2 test --host=aarch64-apple-darwin --target=aarch64-apple-darwin
- RUST_CONFIGURE_ARGS: >-
- --enable-sanitizers
- --enable-profiler
- --set rust.jemalloc
- RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
- SELECT_XCODE: /Applications/Xcode_14.3.1.app
- USE_XCODE_CLANG: 1
- MACOSX_DEPLOYMENT_TARGET: 11.0
- MACOSX_STD_DEPLOYMENT_TARGET: 11.0
- NO_LLVM_ASSERTIONS: 1
- NO_DEBUG_ASSERTIONS: 1
- NO_OVERFLOW_CHECKS: 1
- <<: *job-macos-m1
-
- ######################
- # Windows Builders #
- ######################
-
- - name: x86_64-msvc
- env:
- RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-profiler
- SCRIPT: make ci-msvc
- <<: *job-windows-8c
-
- - name: i686-msvc
- env:
- RUST_CONFIGURE_ARGS: --build=i686-pc-windows-msvc
- SCRIPT: make ci-msvc
- <<: *job-windows-8c
-
- - name: x86_64-msvc-ext
- env:
- SCRIPT: python x.py --stage 2 test src/tools/cargotest src/tools/cargo && src/ci/docker/host-x86_64/x86_64-gnu-tools/checktools.sh x.py /tmp/toolstate/toolstates.json windows
- HOST_TARGET: x86_64-pc-windows-msvc
- RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-lld --save-toolstates=/tmp/toolstate/toolstates.json
- DEPLOY_TOOLSTATES_JSON: toolstates-windows.json
- <<: *job-windows-8c
-
- # 32/64-bit MinGW builds.
- #
- # We are using MinGW with POSIX threads since LLVM requires
- # C++'s std::thread which is disabled in libstdc++ with win32 threads.
- # FIXME: Libc++ doesn't have this limitation so we can avoid
- # winpthreads if we switch to it.
- #
- # Instead of relying on the MinGW version installed on CI we download
- # and install one ourselves so we won't be surprised by changes to CI's
- # build image.
- #
- # Finally, note that the downloads below are all in the `rust-lang-ci` S3
- # bucket, but they clearly didn't originate there! The downloads originally
- # came from the mingw-w64 SourceForge download site. Unfortunately
- # SourceForge is notoriously flaky, so we mirror it on our own infrastructure.
-
- - name: i686-mingw
- env:
- RUST_CONFIGURE_ARGS: --build=i686-pc-windows-gnu
- SCRIPT: make ci-mingw
- # We are intentionally allowing an old toolchain on this builder (and that's
- # incompatible with LLVM downloads today).
- NO_DOWNLOAD_CI_LLVM: 1
- CUSTOM_MINGW: 1
- <<: *job-windows-8c
-
- - name: x86_64-mingw
- env:
- SCRIPT: make ci-mingw
- RUST_CONFIGURE_ARGS: >-
- --build=x86_64-pc-windows-gnu
- --enable-profiler
- # We are intentionally allowing an old toolchain on this builder (and that's
- # incompatible with LLVM downloads today).
- NO_DOWNLOAD_CI_LLVM: 1
- CUSTOM_MINGW: 1
- <<: *job-windows-8c
-
- - name: dist-x86_64-msvc
- env:
- RUST_CONFIGURE_ARGS: >-
- --build=x86_64-pc-windows-msvc
- --host=x86_64-pc-windows-msvc
- --target=x86_64-pc-windows-msvc
- --enable-full-tools
- --enable-profiler
- --set rust.codegen-units=1
- SCRIPT: python x.py build --set rust.debug=true opt-dist && PGO_HOST=x86_64-pc-windows-msvc ./build/x86_64-pc-windows-msvc/stage0-tools-bin/opt-dist windows-ci -- python x.py dist bootstrap --include-default-paths
- DIST_REQUIRE_ALL_TOOLS: 1
- <<: *job-windows-8c
-
- - name: dist-i686-msvc
- env:
- RUST_CONFIGURE_ARGS: >-
- --build=i686-pc-windows-msvc
- --host=i686-pc-windows-msvc
- --target=i686-pc-windows-msvc,i586-pc-windows-msvc
- --enable-full-tools
- --enable-profiler
- SCRIPT: python x.py dist bootstrap --include-default-paths
- DIST_REQUIRE_ALL_TOOLS: 1
- <<: *job-windows-8c
-
- - name: dist-aarch64-msvc
- env:
- RUST_CONFIGURE_ARGS: >-
- --build=x86_64-pc-windows-msvc
- --host=aarch64-pc-windows-msvc
- --enable-full-tools
- --enable-profiler
- SCRIPT: python x.py dist bootstrap --include-default-paths
- DIST_REQUIRE_ALL_TOOLS: 1
- <<: *job-windows-8c
-
- - name: dist-i686-mingw
- env:
- RUST_CONFIGURE_ARGS: >-
- --build=i686-pc-windows-gnu
- --enable-full-tools
- --enable-profiler
- # We are intentionally allowing an old toolchain on this builder (and that's
- # incompatible with LLVM downloads today).
- NO_DOWNLOAD_CI_LLVM: 1
- SCRIPT: python x.py dist bootstrap --include-default-paths
- CUSTOM_MINGW: 1
- DIST_REQUIRE_ALL_TOOLS: 1
- <<: *job-windows-8c
-
- - name: dist-x86_64-mingw
- env:
- SCRIPT: python x.py dist bootstrap --include-default-paths
- RUST_CONFIGURE_ARGS: >-
- --build=x86_64-pc-windows-gnu
- --enable-full-tools
- --enable-profiler
- # We are intentionally allowing an old toolchain on this builder (and that's
- # incompatible with LLVM downloads today).
- NO_DOWNLOAD_CI_LLVM: 1
- CUSTOM_MINGW: 1
- DIST_REQUIRE_ALL_TOOLS: 1
- <<: *job-windows-8c
-
- - name: dist-x86_64-msvc-alt
- env:
- RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-extended --enable-profiler
- SCRIPT: python x.py dist bootstrap --include-default-paths
- <<: *job-windows-8c
-
- try:
- <<: *base-ci-job
- name: try - ${{ matrix.name }}
- env:
- DIST_TRY_BUILD: 1
- <<: [*shared-ci-variables, *prod-variables]
- if: github.event_name == 'push' && (((github.ref == 'refs/heads/try' || github.ref == 'refs/heads/try-perf') && github.repository == 'rust-lang-ci/rust') || ((github.ref == 'refs/heads/automation/bors/try') && github.repository == 'rust-lang/rust'))
- strategy:
- matrix:
- include:
- - &dist-x86_64-linux
- name: dist-x86_64-linux
- env:
- CODEGEN_BACKENDS: llvm,cranelift
- <<: *job-linux-16c
-
+ # GitHub Actions fails the workflow if an empty list of jobs is provided to
+ # the workflow, so we need to skip this job if nothing was produced by
+ # the Python script.
+ #
+ # Unfortunately checking whether a list is empty is not possible in a nice
+ # way due to GitHub Actions expressions limits.
+ # This hack is taken from https://github.com/ferrocene/ferrocene/blob/d43edc6b7697cf1719ec1c17c54904ab94825763/.github/workflows/release.yml#L75-L82
+ if: fromJSON(needs.calculate_matrix.outputs.jobs)[0] != null
master:
name: master
@@ -791,18 +405,18 @@ jobs:
# build completed, as there is no practical way to detect when a workflow is
# successful listening to webhooks only.
try-success:
- needs: [try]
+ needs: [ job ]
if: "success() && github.event_name == 'push' && (github.ref == 'refs/heads/try' || github.ref == 'refs/heads/try-perf') && github.repository == 'rust-lang-ci/rust'"
<<: *base-success-job
try-failure:
- needs: [try]
+ needs: [ job ]
if: "!success() && github.event_name == 'push' && (github.ref == 'refs/heads/try' || github.ref == 'refs/heads/try-perf') && github.repository == 'rust-lang-ci/rust'"
<<: *base-failure-job
auto-success:
- needs: [auto]
+ needs: [ job ]
if: "success() && github.event_name == 'push' && github.ref == 'refs/heads/auto' && github.repository == 'rust-lang-ci/rust'"
<<: *base-success-job
auto-failure:
- needs: [auto]
+ needs: [ job ]
if: "!success() && github.event_name == 'push' && github.ref == 'refs/heads/auto' && github.repository == 'rust-lang-ci/rust'"
<<: *base-failure-job
diff --git a/src/ci/github-actions/jobs.yml b/src/ci/github-actions/jobs.yml
index 7e89eef2670..ec58bd0924e 100644
--- a/src/ci/github-actions/jobs.yml
+++ b/src/ci/github-actions/jobs.yml
@@ -2,7 +2,7 @@
# dynamically in CI from ci.yml.
# You *do not* need to re-run `src/tools/expand-yaml-anchors` when you
# modify this file.
-shared_defs:
+runners:
- &base-job
env: { }
@@ -37,14 +37,430 @@ shared_defs:
- &job-aarch64-linux
os: [ self-hosted, ARM64, linux ]
+envs:
+ production:
+ &production
+ DEPLOY_BUCKET: rust-lang-ci2
+ TOOLSTATE_ISSUES_API_URL: https://api.github.com/repos/rust-lang/rust/issues
+ TOOLSTATE_PUBLISH: 1
+ # AWS_SECRET_ACCESS_KEYs are stored in GitHub's secrets storage, named
+ # AWS_SECRET_ACCESS_KEY_<keyid>. Including the key id in the name allows to
+ # rotate them in a single branch while keeping the old key in another
+ # branch, which wouldn't be possible if the key was named with the kind
+ # (caches, artifacts...).
+ CACHES_AWS_ACCESS_KEY_ID: AKIA46X5W6CZI5DHEBFL
+ ARTIFACTS_AWS_ACCESS_KEY_ID: AKIA46X5W6CZN24CBO55
+ AWS_REGION: us-west-1
+
+ try:
+ <<: *production
+ DIST_TRY_BUILD: 1
+
+ auto:
+ <<: *production
+
+ pr:
+ PR_CI_JOB: 1
+
+# Jobs that run on each push to a pull request (PR)
+# These jobs automatically inherit envs.pr, to avoid repeating
+# it in each job definition.
pr:
- - name: mingw-check
+ - image: mingw-check
<<: *job-linux-4c
- - name: mingw-check-tidy
+ - image: mingw-check-tidy
+ continue_on_error: true
<<: *job-linux-4c
- - name: x86_64-gnu-llvm-17
+ - image: x86_64-gnu-llvm-17
env:
ENABLE_GCC_CODEGEN: "1"
<<: *job-linux-16c
- - name: x86_64-gnu-tools
+ - image: x86_64-gnu-tools
+ <<: *job-linux-16c
+
+# Jobs that run when you perform a try build (@bors try)
+# These jobs automatically inherit envs.production, to avoid repeating
+# it in each job definition.
+try:
+ - image: dist-x86_64-linux
+ env:
+ CODEGEN_BACKENDS: llvm,cranelift
+ <<: *job-linux-16c
+
+# Main CI jobs that have to be green to merge a commit into master
+# These jobs automatically inherit envs.production, to avoid repeating
+# it in each job definition.
+auto:
+ #############################
+ # Linux/Docker builders #
+ #############################
+
+ - image: aarch64-gnu
+ <<: *job-aarch64-linux
+
+ - image: arm-android
+ <<: *job-linux-8c
+
+ - image: armhf-gnu
+ <<: *job-linux-8c
+
+ - image: dist-aarch64-linux
+ env:
+ CODEGEN_BACKENDS: llvm,cranelift
+ <<: *job-linux-8c
+
+ - image: dist-android
+ <<: *job-linux-8c
+
+ - image: dist-arm-linux
+ <<: *job-linux-16c
+
+ - image: dist-armhf-linux
+ <<: *job-linux-8c
+
+ - image: dist-armv7-linux
+ <<: *job-linux-8c
+
+ - image: dist-i586-gnu-i586-i686-musl
+ <<: *job-linux-8c
+
+ - image: dist-i686-linux
+ <<: *job-linux-8c
+
+ - image: dist-loongarch64-linux
+ <<: *job-linux-8c
+
+ - image: dist-ohos
+ <<: *job-linux-8c
+
+ - image: dist-powerpc-linux
+ <<: *job-linux-8c
+
+ - image: dist-powerpc64-linux
+ <<: *job-linux-8c
+
+ - image: dist-powerpc64le-linux
+ <<: *job-linux-8c
+
+ - image: dist-riscv64-linux
+ <<: *job-linux-8c
+
+ - image: dist-s390x-linux
+ <<: *job-linux-8c
+
+ - image: dist-various-1
+ <<: *job-linux-8c
+
+ - image: dist-various-2
+ <<: *job-linux-8c
+
+ - image: dist-x86_64-freebsd
+ <<: *job-linux-8c
+
+ - image: dist-x86_64-illumos
+ <<: *job-linux-8c
+
+ - image: dist-x86_64-linux
+ env:
+ CODEGEN_BACKENDS: llvm,cranelift
+ <<: *job-linux-16c
+
+ - image: dist-x86_64-linux-alt
+ env:
+ IMAGE: dist-x86_64-linux
+ CODEGEN_BACKENDS: llvm,cranelift
<<: *job-linux-16c
+
+ - image: dist-x86_64-musl
+ env:
+ CODEGEN_BACKENDS: llvm,cranelift
+ <<: *job-linux-8c
+
+ - image: dist-x86_64-netbsd
+ <<: *job-linux-8c
+
+ - image: i686-gnu
+ <<: *job-linux-8c
+
+ - image: i686-gnu-nopt
+ <<: *job-linux-8c
+
+ - image: mingw-check
+ <<: *job-linux-4c
+
+ - image: test-various
+ <<: *job-linux-8c
+
+ - image: x86_64-gnu
+ <<: *job-linux-4c
+
+ # This job ensures commits landing on nightly still pass the full
+ # test suite on the stable channel. There are some UI tests that
+ # depend on the channel being built (for example if they include the
+ # channel name on the output), and this builder prevents landing
+ # changes that would result in broken builds after a promotion.
+ - image: x86_64-gnu-stable
+ env:
+ IMAGE: x86_64-gnu
+ RUST_CI_OVERRIDE_RELEASE_CHANNEL: stable
+ # Only run this job on the nightly channel. Running this on beta
+ # could cause failures when `dev: 1` in `stage0.txt`, and running
+ # this on stable is useless.
+ CI_ONLY_WHEN_CHANNEL: nightly
+ <<: *job-linux-4c
+
+ - image: x86_64-gnu-aux
+ <<: *job-linux-4c
+
+ - image: x86_64-gnu-integration
+ env:
+ # Only run this job on the nightly channel. Fuchsia requires
+ # nightly features to compile, and this job would fail if
+ # executed on beta and stable.
+ CI_ONLY_WHEN_CHANNEL: nightly
+ <<: *job-linux-8c
+
+ - image: x86_64-gnu-debug
+ <<: *job-linux-8c
+
+ - image: x86_64-gnu-distcheck
+ <<: *job-linux-8c
+
+ - image: x86_64-gnu-llvm-18
+ env:
+ RUST_BACKTRACE: 1
+ <<: *job-linux-8c
+
+ - image: x86_64-gnu-llvm-17
+ env:
+ RUST_BACKTRACE: 1
+ <<: *job-linux-8c
+
+ - image: x86_64-gnu-nopt
+ <<: *job-linux-4c
+
+ - image: x86_64-gnu-tools
+ env:
+ DEPLOY_TOOLSTATES_JSON: toolstates-linux.json
+ <<: *job-linux-8c
+
+ ####################
+ # macOS Builders #
+ ####################
+
+ - image: dist-x86_64-apple
+ env:
+ SCRIPT: ./x.py dist bootstrap --include-default-paths --host=x86_64-apple-darwin --target=x86_64-apple-darwin
+ RUST_CONFIGURE_ARGS: --enable-full-tools --enable-sanitizers --enable-profiler --set rust.jemalloc --set rust.lto=thin --set rust.codegen-units=1
+ RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
+ MACOSX_DEPLOYMENT_TARGET: 10.12
+ SELECT_XCODE: /Applications/Xcode_14.3.1.app
+ NO_LLVM_ASSERTIONS: 1
+ NO_DEBUG_ASSERTIONS: 1
+ NO_OVERFLOW_CHECKS: 1
+ DIST_REQUIRE_ALL_TOOLS: 1
+ CODEGEN_BACKENDS: llvm,cranelift
+ <<: *job-macos-xl
+
+ - image: dist-apple-various
+ env:
+ SCRIPT: ./x.py dist bootstrap --include-default-paths --host='' --target=aarch64-apple-ios,x86_64-apple-ios,aarch64-apple-ios-sim
+ RUST_CONFIGURE_ARGS: --enable-sanitizers --enable-profiler --set rust.jemalloc
+ RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
+ MACOSX_DEPLOYMENT_TARGET: 10.12
+ SELECT_XCODE: /Applications/Xcode_14.3.1.app
+ NO_LLVM_ASSERTIONS: 1
+ NO_DEBUG_ASSERTIONS: 1
+ NO_OVERFLOW_CHECKS: 1
+ <<: *job-macos-xl
+
+ - image: x86_64-apple-1
+ env: &env-x86_64-apple-tests
+ SCRIPT: ./x.py --stage 2 test --skip tests/ui --skip tests/rustdoc --skip tests/run-make-fulldeps
+ RUST_CONFIGURE_ARGS: --build=x86_64-apple-darwin --enable-sanitizers --enable-profiler --set rust.jemalloc
+ RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
+ MACOSX_DEPLOYMENT_TARGET: 10.12
+ MACOSX_STD_DEPLOYMENT_TARGET: 10.12
+ SELECT_XCODE: /Applications/Xcode_14.3.1.app
+ NO_LLVM_ASSERTIONS: 1
+ NO_DEBUG_ASSERTIONS: 1
+ NO_OVERFLOW_CHECKS: 1
+ <<: *job-macos-xl
+
+ - image: x86_64-apple-2
+ env:
+ SCRIPT: ./x.py --stage 2 test tests/ui tests/rustdoc tests/run-make-fulldeps
+ <<: *env-x86_64-apple-tests
+ <<: *job-macos-xl
+
+ # This target only needs to support 11.0 and up as nothing else supports the hardware
+ - image: dist-aarch64-apple
+ env:
+ SCRIPT: ./x.py dist bootstrap --include-default-paths --host=aarch64-apple-darwin --target=aarch64-apple-darwin
+ RUST_CONFIGURE_ARGS: >-
+ --enable-full-tools
+ --enable-sanitizers
+ --enable-profiler
+ --set rust.jemalloc
+ --set llvm.ninja=false
+ --set rust.lto=thin
+ RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
+ SELECT_XCODE: /Applications/Xcode_14.3.1.app
+ USE_XCODE_CLANG: 1
+ MACOSX_DEPLOYMENT_TARGET: 11.0
+ MACOSX_STD_DEPLOYMENT_TARGET: 11.0
+ NO_LLVM_ASSERTIONS: 1
+ NO_DEBUG_ASSERTIONS: 1
+ NO_OVERFLOW_CHECKS: 1
+ DIST_REQUIRE_ALL_TOOLS: 1
+ <<: *job-macos-m1
+
+ # This target only needs to support 11.0 and up as nothing else supports the hardware
+ - image: aarch64-apple
+ env:
+ SCRIPT: ./x.py --stage 2 test --host=aarch64-apple-darwin --target=aarch64-apple-darwin
+ RUST_CONFIGURE_ARGS: >-
+ --enable-sanitizers
+ --enable-profiler
+ --set rust.jemalloc
+ RUSTC_RETRY_LINKER_ON_SEGFAULT: 1
+ SELECT_XCODE: /Applications/Xcode_14.3.1.app
+ USE_XCODE_CLANG: 1
+ MACOSX_DEPLOYMENT_TARGET: 11.0
+ MACOSX_STD_DEPLOYMENT_TARGET: 11.0
+ NO_LLVM_ASSERTIONS: 1
+ NO_DEBUG_ASSERTIONS: 1
+ NO_OVERFLOW_CHECKS: 1
+ <<: *job-macos-m1
+
+ ######################
+ # Windows Builders #
+ ######################
+
+ - image: x86_64-msvc
+ env:
+ RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-profiler
+ SCRIPT: make ci-msvc
+ <<: *job-windows-8c
+
+ - image: i686-msvc
+ env:
+ RUST_CONFIGURE_ARGS: --build=i686-pc-windows-msvc
+ SCRIPT: make ci-msvc
+ <<: *job-windows-8c
+
+ - image: x86_64-msvc-ext
+ env:
+ SCRIPT: python x.py --stage 2 test src/tools/cargotest src/tools/cargo && src/ci/docker/host-x86_64/x86_64-gnu-tools/checktools.sh x.py /tmp/toolstate/toolstates.json windows
+ HOST_TARGET: x86_64-pc-windows-msvc
+ RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-lld --save-toolstates=/tmp/toolstate/toolstates.json
+ DEPLOY_TOOLSTATES_JSON: toolstates-windows.json
+ <<: *job-windows-8c
+
+ # 32/64-bit MinGW builds.
+ #
+ # We are using MinGW with POSIX threads since LLVM requires
+ # C++'s std::thread which is disabled in libstdc++ with win32 threads.
+ # FIXME: Libc++ doesn't have this limitation so we can avoid
+ # winpthreads if we switch to it.
+ #
+ # Instead of relying on the MinGW version installed on CI we download
+ # and install one ourselves so we won't be surprised by changes to CI's
+ # build image.
+ #
+ # Finally, note that the downloads below are all in the `rust-lang-ci` S3
+ # bucket, but they clearly didn't originate there! The downloads originally
+ # came from the mingw-w64 SourceForge download site. Unfortunately
+ # SourceForge is notoriously flaky, so we mirror it on our own infrastructure.
+
+ - image: i686-mingw
+ env:
+ RUST_CONFIGURE_ARGS: --build=i686-pc-windows-gnu
+ SCRIPT: make ci-mingw
+ # We are intentionally allowing an old toolchain on this builder (and that's
+ # incompatible with LLVM downloads today).
+ NO_DOWNLOAD_CI_LLVM: 1
+ CUSTOM_MINGW: 1
+ <<: *job-windows-8c
+
+ - image: x86_64-mingw
+ env:
+ SCRIPT: make ci-mingw
+ RUST_CONFIGURE_ARGS: >-
+ --build=x86_64-pc-windows-gnu
+ --enable-profiler
+ # We are intentionally allowing an old toolchain on this builder (and that's
+ # incompatible with LLVM downloads today).
+ NO_DOWNLOAD_CI_LLVM: 1
+ CUSTOM_MINGW: 1
+ <<: *job-windows-8c
+
+ - image: dist-x86_64-msvc
+ env:
+ RUST_CONFIGURE_ARGS: >-
+ --build=x86_64-pc-windows-msvc
+ --host=x86_64-pc-windows-msvc
+ --target=x86_64-pc-windows-msvc
+ --enable-full-tools
+ --enable-profiler
+ --set rust.codegen-units=1
+ SCRIPT: python x.py build --set rust.debug=true opt-dist && PGO_HOST=x86_64-pc-windows-msvc ./build/x86_64-pc-windows-msvc/stage0-tools-bin/opt-dist windows-ci -- python x.py dist bootstrap --include-default-paths
+ DIST_REQUIRE_ALL_TOOLS: 1
+ <<: *job-windows-8c
+
+ - image: dist-i686-msvc
+ env:
+ RUST_CONFIGURE_ARGS: >-
+ --build=i686-pc-windows-msvc
+ --host=i686-pc-windows-msvc
+ --target=i686-pc-windows-msvc,i586-pc-windows-msvc
+ --enable-full-tools
+ --enable-profiler
+ SCRIPT: python x.py dist bootstrap --include-default-paths
+ DIST_REQUIRE_ALL_TOOLS: 1
+ <<: *job-windows-8c
+
+ - image: dist-aarch64-msvc
+ env:
+ RUST_CONFIGURE_ARGS: >-
+ --build=x86_64-pc-windows-msvc
+ --host=aarch64-pc-windows-msvc
+ --enable-full-tools
+ --enable-profiler
+ SCRIPT: python x.py dist bootstrap --include-default-paths
+ DIST_REQUIRE_ALL_TOOLS: 1
+ <<: *job-windows-8c
+
+ - image: dist-i686-mingw
+ env:
+ RUST_CONFIGURE_ARGS: >-
+ --build=i686-pc-windows-gnu
+ --enable-full-tools
+ --enable-profiler
+ # We are intentionally allowing an old toolchain on this builder (and that's
+ # incompatible with LLVM downloads today).
+ NO_DOWNLOAD_CI_LLVM: 1
+ SCRIPT: python x.py dist bootstrap --include-default-paths
+ CUSTOM_MINGW: 1
+ DIST_REQUIRE_ALL_TOOLS: 1
+ <<: *job-windows-8c
+
+ - image: dist-x86_64-mingw
+ env:
+ SCRIPT: python x.py dist bootstrap --include-default-paths
+ RUST_CONFIGURE_ARGS: >-
+ --build=x86_64-pc-windows-gnu
+ --enable-full-tools
+ --enable-profiler
+ # We are intentionally allowing an old toolchain on this builder (and that's
+ # incompatible with LLVM downloads today).
+ NO_DOWNLOAD_CI_LLVM: 1
+ CUSTOM_MINGW: 1
+ DIST_REQUIRE_ALL_TOOLS: 1
+ <<: *job-windows-8c
+
+ - image: dist-x86_64-msvc-alt
+ env:
+ RUST_CONFIGURE_ARGS: --build=x86_64-pc-windows-msvc --enable-extended --enable-profiler
+ SCRIPT: python x.py dist bootstrap --include-default-paths
+ <<: *job-windows-8c
diff --git a/src/ci/scripts/calculate-job-matrix.py b/src/ci/scripts/calculate-job-matrix.py
deleted file mode 100755
index 9b1e74c23c3..00000000000
--- a/src/ci/scripts/calculate-job-matrix.py
+++ /dev/null
@@ -1,25 +0,0 @@
-#!/usr/bin/env python3
-
-"""
-This script serves for generating a matrix of jobs that should
-be executed on CI.
-
-It reads job definitions from `src/ci/github-actions/jobs.yml`
-and filters them based on the event that happened on CI.
-
-Currently, it only supports PR builds.
-"""
-
-import json
-from pathlib import Path
-
-import yaml
-
-JOBS_YAML_PATH = Path(__file__).absolute().parent.parent / "github-actions" / "jobs.yml"
-
-
-if __name__ == "__main__":
- with open(JOBS_YAML_PATH) as f:
- jobs = yaml.safe_load(f)
- job_output = jobs["pr"]
- print(f"jobs={json.dumps(job_output)}")
diff --git a/src/doc/unstable-book/src/language-features/coroutines.md b/src/doc/unstable-book/src/language-features/coroutines.md
index f8e5a22fbd5..9fb07594650 100644
--- a/src/doc/unstable-book/src/language-features/coroutines.md
+++ b/src/doc/unstable-book/src/language-features/coroutines.md
@@ -26,13 +26,13 @@ tweaks to the overall design.
A syntactical example of a coroutine is:
```rust
-#![feature(coroutines, coroutine_trait)]
+#![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
use std::ops::{Coroutine, CoroutineState};
use std::pin::Pin;
fn main() {
- let mut coroutine = || {
+ let mut coroutine = #[coroutine] || {
yield 1;
return "foo"
};
@@ -48,7 +48,8 @@ fn main() {
}
```
-Coroutines are closure-like literals which can contain a `yield` statement. The
+Coroutines are closure-like literals which are annotated with `#[coroutine]`
+and can contain a `yield` statement. The
`yield` statement takes an optional expression of a value to yield out of the
coroutine. All coroutine literals implement the `Coroutine` trait in the
`std::ops` module. The `Coroutine` trait has one main method, `resume`, which
@@ -58,13 +59,13 @@ An example of the control flow of coroutines is that the following example
prints all numbers in order:
```rust
-#![feature(coroutines, coroutine_trait)]
+#![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
use std::ops::Coroutine;
use std::pin::Pin;
fn main() {
- let mut coroutine = || {
+ let mut coroutine = #[coroutine] || {
println!("2");
yield;
println!("4");
@@ -78,9 +79,9 @@ fn main() {
}
```
-At this time the main intended use case of coroutines is an implementation
-primitive for async/await syntax, but coroutines will likely be extended to
-ergonomic implementations of iterators and other primitives in the future.
+At this time the main use case of coroutines is an implementation
+primitive for `async`/`await` and `gen` syntax, but coroutines
+will likely be extended to other primitives in the future.
Feedback on the design and usage is always appreciated!
### The `Coroutine` trait
@@ -163,14 +164,14 @@ which point all state is saved off in the coroutine and a value is returned.
Let's take a look at an example to see what's going on here:
```rust
-#![feature(coroutines, coroutine_trait)]
+#![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
use std::ops::Coroutine;
use std::pin::Pin;
fn main() {
let ret = "foo";
- let mut coroutine = move || {
+ let mut coroutine = #[coroutine] move || {
yield 1;
return ret
};
@@ -183,7 +184,7 @@ fn main() {
This coroutine literal will compile down to something similar to:
```rust
-#![feature(arbitrary_self_types, coroutines, coroutine_trait)]
+#![feature(arbitrary_self_types, coroutine_trait)]
use std::ops::{Coroutine, CoroutineState};
use std::pin::Pin;
diff --git a/src/doc/unstable-book/src/language-features/inline-const-pat.md b/src/doc/unstable-book/src/language-features/inline-const-pat.md
index 5f0f7547a0a..c6f54d79cfc 100644
--- a/src/doc/unstable-book/src/language-features/inline-const-pat.md
+++ b/src/doc/unstable-book/src/language-features/inline-const-pat.md
@@ -2,8 +2,6 @@
The tracking issue for this feature is: [#76001]
-See also [`inline_const`](inline-const.md)
-
------
This feature allows you to use inline constant expressions in pattern position:
diff --git a/src/doc/unstable-book/src/language-features/inline-const.md b/src/doc/unstable-book/src/language-features/inline-const.md
deleted file mode 100644
index 7be70eed6ce..00000000000
--- a/src/doc/unstable-book/src/language-features/inline-const.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# `inline_const`
-
-The tracking issue for this feature is: [#76001]
-
-See also [`inline_const_pat`](inline-const-pat.md)
-
-------
-
-This feature allows you to use inline constant expressions. For example, you can
-turn this code:
-
-```rust
-# fn add_one(x: i32) -> i32 { x + 1 }
-const MY_COMPUTATION: i32 = 1 + 2 * 3 / 4;
-
-fn main() {
- let x = add_one(MY_COMPUTATION);
-}
-```
-
-into this code:
-
-```rust
-#![feature(inline_const)]
-
-# fn add_one(x: i32) -> i32 { x + 1 }
-fn main() {
- let x = add_one(const { 1 + 2 * 3 / 4 });
-}
-```
-
-[#76001]: https://github.com/rust-lang/rust/issues/76001
diff --git a/src/doc/unstable-book/src/the-unstable-book.md b/src/doc/unstable-book/src/the-unstable-book.md
index 0f4fb405669..63134f7ae28 100644
--- a/src/doc/unstable-book/src/the-unstable-book.md
+++ b/src/doc/unstable-book/src/the-unstable-book.md
@@ -5,13 +5,13 @@ each one organized by a "feature flag." That is, when using an unstable
feature of Rust, you must use a flag, like this:
```rust
-#![feature(coroutines, coroutine_trait)]
+#![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
use std::ops::{Coroutine, CoroutineState};
use std::pin::Pin;
fn main() {
- let mut coroutine = || {
+ let mut coroutine = #[coroutine] || {
yield 1;
return "foo"
};
diff --git a/src/tools/clippy/tests/ui-toml/suppress_lint_in_const/test.rs b/src/tools/clippy/tests/ui-toml/suppress_lint_in_const/test.rs
index 4ae75544c60..232bccf6a15 100644
--- a/src/tools/clippy/tests/ui-toml/suppress_lint_in_const/test.rs
+++ b/src/tools/clippy/tests/ui-toml/suppress_lint_in_const/test.rs
@@ -1,4 +1,3 @@
-#![feature(inline_const)]
#![warn(clippy::indexing_slicing)]
// We also check the out_of_bounds_indexing lint here, because it lints similar things and
// we want to avoid false positives.
diff --git a/src/tools/clippy/tests/ui-toml/suppress_lint_in_const/test.stderr b/src/tools/clippy/tests/ui-toml/suppress_lint_in_const/test.stderr
index 120f5c35cb0..5ce2ed2ffae 100644
--- a/src/tools/clippy/tests/ui-toml/suppress_lint_in_const/test.stderr
+++ b/src/tools/clippy/tests/ui-toml/suppress_lint_in_const/test.stderr
@@ -1,5 +1,5 @@
error: indexing may panic
- --> tests/ui-toml/suppress_lint_in_const/test.rs:27:5
+ --> tests/ui-toml/suppress_lint_in_const/test.rs:26:5
|
LL | x[index];
| ^^^^^^^^
@@ -9,7 +9,7 @@ LL | x[index];
= help: to override `-D warnings` add `#[allow(clippy::indexing_slicing)]`
error: indexing may panic
- --> tests/ui-toml/suppress_lint_in_const/test.rs:42:5
+ --> tests/ui-toml/suppress_lint_in_const/test.rs:41:5
|
LL | v[0];
| ^^^^
@@ -17,7 +17,7 @@ LL | v[0];
= help: consider using `.get(n)` or `.get_mut(n)` instead
error: indexing may panic
- --> tests/ui-toml/suppress_lint_in_const/test.rs:43:5
+ --> tests/ui-toml/suppress_lint_in_const/test.rs:42:5
|
LL | v[10];
| ^^^^^
@@ -25,7 +25,7 @@ LL | v[10];
= help: consider using `.get(n)` or `.get_mut(n)` instead
error: indexing may panic
- --> tests/ui-toml/suppress_lint_in_const/test.rs:44:5
+ --> tests/ui-toml/suppress_lint_in_const/test.rs:43:5
|
LL | v[1 << 3];
| ^^^^^^^^^
@@ -33,7 +33,7 @@ LL | v[1 << 3];
= help: consider using `.get(n)` or `.get_mut(n)` instead
error: indexing may panic
- --> tests/ui-toml/suppress_lint_in_const/test.rs:50:5
+ --> tests/ui-toml/suppress_lint_in_const/test.rs:49:5
|
LL | v[N];
| ^^^^
@@ -41,7 +41,7 @@ LL | v[N];
= help: consider using `.get(n)` or `.get_mut(n)` instead
error: indexing may panic
- --> tests/ui-toml/suppress_lint_in_const/test.rs:51:5
+ --> tests/ui-toml/suppress_lint_in_const/test.rs:50:5
|
LL | v[M];
| ^^^^
diff --git a/src/tools/clippy/tests/ui/arithmetic_side_effects.rs b/src/tools/clippy/tests/ui/arithmetic_side_effects.rs
index b454c29aef4..fdec14a1528 100644
--- a/src/tools/clippy/tests/ui/arithmetic_side_effects.rs
+++ b/src/tools/clippy/tests/ui/arithmetic_side_effects.rs
@@ -10,7 +10,7 @@
arithmetic_overflow,
unconditional_panic
)]
-#![feature(const_mut_refs, inline_const)]
+#![feature(const_mut_refs)]
#![warn(clippy::arithmetic_side_effects)]
extern crate proc_macro_derive;
diff --git a/src/tools/clippy/tests/ui/bool_to_int_with_if.fixed b/src/tools/clippy/tests/ui/bool_to_int_with_if.fixed
index 167263d31df..f7dad28b036 100644
--- a/src/tools/clippy/tests/ui/bool_to_int_with_if.fixed
+++ b/src/tools/clippy/tests/ui/bool_to_int_with_if.fixed
@@ -1,4 +1,4 @@
-#![feature(let_chains, inline_const)]
+#![feature(let_chains)]
#![warn(clippy::bool_to_int_with_if)]
#![allow(unused, dead_code, clippy::unnecessary_operation, clippy::no_effect)]
diff --git a/src/tools/clippy/tests/ui/bool_to_int_with_if.rs b/src/tools/clippy/tests/ui/bool_to_int_with_if.rs
index f3f055eb7f0..d22871d2c8f 100644
--- a/src/tools/clippy/tests/ui/bool_to_int_with_if.rs
+++ b/src/tools/clippy/tests/ui/bool_to_int_with_if.rs
@@ -1,4 +1,4 @@
-#![feature(let_chains, inline_const)]
+#![feature(let_chains)]
#![warn(clippy::bool_to_int_with_if)]
#![allow(unused, dead_code, clippy::unnecessary_operation, clippy::no_effect)]
diff --git a/src/tools/clippy/tests/ui/const_is_empty.rs b/src/tools/clippy/tests/ui/const_is_empty.rs
index ae37a82e4f9..04e0de91ecf 100644
--- a/src/tools/clippy/tests/ui/const_is_empty.rs
+++ b/src/tools/clippy/tests/ui/const_is_empty.rs
@@ -1,4 +1,3 @@
-#![feature(inline_const)]
#![warn(clippy::const_is_empty)]
#![allow(clippy::needless_late_init, unused_must_use)]
diff --git a/src/tools/clippy/tests/ui/const_is_empty.stderr b/src/tools/clippy/tests/ui/const_is_empty.stderr
index 0e09da77bb4..7f80b520b1a 100644
--- a/src/tools/clippy/tests/ui/const_is_empty.stderr
+++ b/src/tools/clippy/tests/ui/const_is_empty.stderr
@@ -1,5 +1,5 @@
error: this expression always evaluates to true
- --> tests/ui/const_is_empty.rs:6:8
+ --> tests/ui/const_is_empty.rs:5:8
|
LL | if "".is_empty() {
| ^^^^^^^^^^^^^
@@ -8,151 +8,151 @@ LL | if "".is_empty() {
= help: to override `-D warnings` add `#[allow(clippy::const_is_empty)]`
error: this expression always evaluates to false
- --> tests/ui/const_is_empty.rs:9:8
+ --> tests/ui/const_is_empty.rs:8:8
|
LL | if "foobar".is_empty() {
| ^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to true
- --> tests/ui/const_is_empty.rs:15:8
+ --> tests/ui/const_is_empty.rs:14:8
|
LL | if b"".is_empty() {
| ^^^^^^^^^^^^^^
error: this expression always evaluates to false
- --> tests/ui/const_is_empty.rs:18:8
+ --> tests/ui/const_is_empty.rs:17:8
|
LL | if b"foobar".is_empty() {
| ^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to true
- --> tests/ui/const_is_empty.rs:35:8
+ --> tests/ui/const_is_empty.rs:34:8
|
LL | if empty2.is_empty() {
| ^^^^^^^^^^^^^^^^^
error: this expression always evaluates to false
- --> tests/ui/const_is_empty.rs:38:8
+ --> tests/ui/const_is_empty.rs:37:8
|
LL | if non_empty2.is_empty() {
| ^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to true
- --> tests/ui/const_is_empty.rs:60:13
+ --> tests/ui/const_is_empty.rs:59:13
|
LL | let _ = EMPTY_STR.is_empty();
| ^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to false
- --> tests/ui/const_is_empty.rs:62:13
+ --> tests/ui/const_is_empty.rs:61:13
|
LL | let _ = NON_EMPTY_STR.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to true
- --> tests/ui/const_is_empty.rs:64:13
+ --> tests/ui/const_is_empty.rs:63:13
|
LL | let _ = EMPTY_BSTR.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to false
- --> tests/ui/const_is_empty.rs:66:13
+ --> tests/ui/const_is_empty.rs:65:13
|
LL | let _ = NON_EMPTY_BSTR.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to true
- --> tests/ui/const_is_empty.rs:68:13
+ --> tests/ui/const_is_empty.rs:67:13
|
LL | let _ = EMPTY_ARRAY.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to true
- --> tests/ui/const_is_empty.rs:70:13
+ --> tests/ui/const_is_empty.rs:69:13
|
LL | let _ = EMPTY_ARRAY_REPEAT.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to true
- --> tests/ui/const_is_empty.rs:72:13
+ --> tests/ui/const_is_empty.rs:71:13
|
LL | let _ = EMPTY_U8_SLICE.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to false
- --> tests/ui/const_is_empty.rs:74:13
+ --> tests/ui/const_is_empty.rs:73:13
|
LL | let _ = NON_EMPTY_U8_SLICE.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to false
- --> tests/ui/const_is_empty.rs:76:13
+ --> tests/ui/const_is_empty.rs:75:13
|
LL | let _ = NON_EMPTY_ARRAY.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to false
- --> tests/ui/const_is_empty.rs:78:13
+ --> tests/ui/const_is_empty.rs:77:13
|
LL | let _ = NON_EMPTY_ARRAY_REPEAT.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to true
- --> tests/ui/const_is_empty.rs:80:13
+ --> tests/ui/const_is_empty.rs:79:13
|
LL | let _ = EMPTY_REF_ARRAY.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to false
- --> tests/ui/const_is_empty.rs:82:13
+ --> tests/ui/const_is_empty.rs:81:13
|
LL | let _ = NON_EMPTY_REF_ARRAY.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to true
- --> tests/ui/const_is_empty.rs:84:13
+ --> tests/ui/const_is_empty.rs:83:13
|
LL | let _ = EMPTY_SLICE.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to false
- --> tests/ui/const_is_empty.rs:86:13
+ --> tests/ui/const_is_empty.rs:85:13
|
LL | let _ = NON_EMPTY_SLICE.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to false
- --> tests/ui/const_is_empty.rs:88:13
+ --> tests/ui/const_is_empty.rs:87:13
|
LL | let _ = NON_EMPTY_SLICE_REPEAT.is_empty();
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: this expression always evaluates to false
- --> tests/ui/const_is_empty.rs:94:13
+ --> tests/ui/const_is_empty.rs:93:13
|
LL | let _ = value.is_empty();
| ^^^^^^^^^^^^^^^^
error: this expression always evaluates to false
- --> tests/ui/const_is_empty.rs:97:13
+ --> tests/ui/const_is_empty.rs:96:13
|
LL | let _ = x.is_empty();
| ^^^^^^^^^^^^
error: this expression always evaluates to true
- --> tests/ui/const_is_empty.rs:99:13
+ --> tests/ui/const_is_empty.rs:98:13
|
LL | let _ = "".is_empty();
| ^^^^^^^^^^^^^
error: this expression always evaluates to true
- --> tests/ui/const_is_empty.rs:101:13
+ --> tests/ui/const_is_empty.rs:100:13
|
LL | let _ = b"".is_empty();
| ^^^^^^^^^^^^^^
error: this expression always evaluates to true
- --> tests/ui/const_is_empty.rs:155:13
+ --> tests/ui/const_is_empty.rs:154:13
|
LL | let _ = val.is_empty();
| ^^^^^^^^^^^^^^
diff --git a/src/tools/clippy/tests/ui/crashes/ice-5238.rs b/src/tools/clippy/tests/ui/crashes/ice-5238.rs
index b1fc3fb9d25..fe03a39ad1b 100644
--- a/src/tools/clippy/tests/ui/crashes/ice-5238.rs
+++ b/src/tools/clippy/tests/ui/crashes/ice-5238.rs
@@ -1,9 +1,9 @@
// Regression test for #5238 / https://github.com/rust-lang/rust/pull/69562
-#![feature(coroutines, coroutine_trait)]
+#![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
fn main() {
- let _ = || {
+ let _ = #[coroutine] || {
yield;
};
}
diff --git a/src/tools/clippy/tests/ui/indexing_slicing_index.rs b/src/tools/clippy/tests/ui/indexing_slicing_index.rs
index 27ee2f91594..2e726141649 100644
--- a/src/tools/clippy/tests/ui/indexing_slicing_index.rs
+++ b/src/tools/clippy/tests/ui/indexing_slicing_index.rs
@@ -1,6 +1,5 @@
//@compile-flags: -Zdeduplicate-diagnostics=yes
-#![feature(inline_const)]
#![warn(clippy::indexing_slicing)]
// We also check the out_of_bounds_indexing lint here, because it lints similar things and
// we want to avoid false positives.
diff --git a/src/tools/clippy/tests/ui/indexing_slicing_index.stderr b/src/tools/clippy/tests/ui/indexing_slicing_index.stderr
index 5f62ec9b556..386f91becf1 100644
--- a/src/tools/clippy/tests/ui/indexing_slicing_index.stderr
+++ b/src/tools/clippy/tests/ui/indexing_slicing_index.stderr
@@ -1,5 +1,5 @@
error: indexing may panic
- --> tests/ui/indexing_slicing_index.rs:16:20
+ --> tests/ui/indexing_slicing_index.rs:15:20
|
LL | const REF: &i32 = &ARR[idx()]; // This should be linted, since `suppress-restriction-lint-in-const` default is false.
| ^^^^^^^^^^
@@ -10,19 +10,19 @@ LL | const REF: &i32 = &ARR[idx()]; // This should be linted, since `suppress-re
= help: to override `-D warnings` add `#[allow(clippy::indexing_slicing)]`
error[E0080]: evaluation of `main::{constant#3}` failed
- --> tests/ui/indexing_slicing_index.rs:48:14
+ --> tests/ui/indexing_slicing_index.rs:47:14
|
LL | const { &ARR[idx4()] };
| ^^^^^^^^^^^ index out of bounds: the length is 2 but the index is 4
note: erroneous constant encountered
- --> tests/ui/indexing_slicing_index.rs:48:5
+ --> tests/ui/indexing_slicing_index.rs:47:5
|
LL | const { &ARR[idx4()] };
| ^^^^^^^^^^^^^^^^^^^^^^
error: indexing may panic
- --> tests/ui/indexing_slicing_index.rs:29:5
+ --> tests/ui/indexing_slicing_index.rs:28:5
|
LL | x[index];
| ^^^^^^^^
@@ -30,7 +30,7 @@ LL | x[index];
= help: consider using `.get(n)` or `.get_mut(n)` instead
error: index is out of bounds
- --> tests/ui/indexing_slicing_index.rs:32:5
+ --> tests/ui/indexing_slicing_index.rs:31:5
|
LL | x[4];
| ^^^^
@@ -39,13 +39,13 @@ LL | x[4];
= help: to override `-D warnings` add `#[allow(clippy::out_of_bounds_indexing)]`
error: index is out of bounds
- --> tests/ui/indexing_slicing_index.rs:34:5
+ --> tests/ui/indexing_slicing_index.rs:33:5
|
LL | x[1 << 3];
| ^^^^^^^^^
error: indexing may panic
- --> tests/ui/indexing_slicing_index.rs:45:14
+ --> tests/ui/indexing_slicing_index.rs:44:14
|
LL | const { &ARR[idx()] };
| ^^^^^^^^^^
@@ -54,7 +54,7 @@ LL | const { &ARR[idx()] };
= note: the suggestion might not be applicable in constant blocks
error: indexing may panic
- --> tests/ui/indexing_slicing_index.rs:48:14
+ --> tests/ui/indexing_slicing_index.rs:47:14
|
LL | const { &ARR[idx4()] };
| ^^^^^^^^^^^
@@ -63,13 +63,13 @@ LL | const { &ARR[idx4()] };
= note: the suggestion might not be applicable in constant blocks
error: index is out of bounds
- --> tests/ui/indexing_slicing_index.rs:55:5
+ --> tests/ui/indexing_slicing_index.rs:54:5
|
LL | y[4];
| ^^^^
error: indexing may panic
- --> tests/ui/indexing_slicing_index.rs:58:5
+ --> tests/ui/indexing_slicing_index.rs:57:5
|
LL | v[0];
| ^^^^
@@ -77,7 +77,7 @@ LL | v[0];
= help: consider using `.get(n)` or `.get_mut(n)` instead
error: indexing may panic
- --> tests/ui/indexing_slicing_index.rs:60:5
+ --> tests/ui/indexing_slicing_index.rs:59:5
|
LL | v[10];
| ^^^^^
@@ -85,7 +85,7 @@ LL | v[10];
= help: consider using `.get(n)` or `.get_mut(n)` instead
error: indexing may panic
- --> tests/ui/indexing_slicing_index.rs:62:5
+ --> tests/ui/indexing_slicing_index.rs:61:5
|
LL | v[1 << 3];
| ^^^^^^^^^
@@ -93,13 +93,13 @@ LL | v[1 << 3];
= help: consider using `.get(n)` or `.get_mut(n)` instead
error: index is out of bounds
- --> tests/ui/indexing_slicing_index.rs:70:5
+ --> tests/ui/indexing_slicing_index.rs:69:5
|
LL | x[N];
| ^^^^
error: indexing may panic
- --> tests/ui/indexing_slicing_index.rs:73:5
+ --> tests/ui/indexing_slicing_index.rs:72:5
|
LL | v[N];
| ^^^^
@@ -107,7 +107,7 @@ LL | v[N];
= help: consider using `.get(n)` or `.get_mut(n)` instead
error: indexing may panic
- --> tests/ui/indexing_slicing_index.rs:75:5
+ --> tests/ui/indexing_slicing_index.rs:74:5
|
LL | v[M];
| ^^^^
@@ -115,7 +115,7 @@ LL | v[M];
= help: consider using `.get(n)` or `.get_mut(n)` instead
error: index is out of bounds
- --> tests/ui/indexing_slicing_index.rs:79:13
+ --> tests/ui/indexing_slicing_index.rs:78:13
|
LL | let _ = x[4];
| ^^^^
diff --git a/src/tools/clippy/tests/ui/large_futures.fixed b/src/tools/clippy/tests/ui/large_futures.fixed
index aa8c3021b97..1e87859f452 100644
--- a/src/tools/clippy/tests/ui/large_futures.fixed
+++ b/src/tools/clippy/tests/ui/large_futures.fixed
@@ -1,4 +1,3 @@
-#![feature(coroutines)]
#![warn(clippy::large_futures)]
#![allow(clippy::never_loop)]
#![allow(clippy::future_not_send)]
diff --git a/src/tools/clippy/tests/ui/large_futures.rs b/src/tools/clippy/tests/ui/large_futures.rs
index fc6ea458d3d..3f4ea2ebf8b 100644
--- a/src/tools/clippy/tests/ui/large_futures.rs
+++ b/src/tools/clippy/tests/ui/large_futures.rs
@@ -1,4 +1,3 @@
-#![feature(coroutines)]
#![warn(clippy::large_futures)]
#![allow(clippy::never_loop)]
#![allow(clippy::future_not_send)]
diff --git a/src/tools/clippy/tests/ui/large_futures.stderr b/src/tools/clippy/tests/ui/large_futures.stderr
index 5709c7b77a0..00082e579c5 100644
--- a/src/tools/clippy/tests/ui/large_futures.stderr
+++ b/src/tools/clippy/tests/ui/large_futures.stderr
@@ -1,5 +1,5 @@
error: large future with a size of 16385 bytes
- --> tests/ui/large_futures.rs:11:9
+ --> tests/ui/large_futures.rs:10:9
|
LL | big_fut([0u8; 1024 * 16]).await;
| ^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider `Box::pin` on it: `Box::pin(big_fut([0u8; 1024 * 16]))`
@@ -8,37 +8,37 @@ LL | big_fut([0u8; 1024 * 16]).await;
= help: to override `-D warnings` add `#[allow(clippy::large_futures)]`
error: large future with a size of 16386 bytes
- --> tests/ui/large_futures.rs:15:5
+ --> tests/ui/large_futures.rs:14:5
|
LL | f.await
| ^ help: consider `Box::pin` on it: `Box::pin(f)`
error: large future with a size of 16387 bytes
- --> tests/ui/large_futures.rs:20:9
+ --> tests/ui/large_futures.rs:19:9
|
LL | wait().await;
| ^^^^^^ help: consider `Box::pin` on it: `Box::pin(wait())`
error: large future with a size of 16387 bytes
- --> tests/ui/large_futures.rs:25:13
+ --> tests/ui/large_futures.rs:24:13
|
LL | wait().await;
| ^^^^^^ help: consider `Box::pin` on it: `Box::pin(wait())`
error: large future with a size of 65540 bytes
- --> tests/ui/large_futures.rs:33:5
+ --> tests/ui/large_futures.rs:32:5
|
LL | foo().await;
| ^^^^^ help: consider `Box::pin` on it: `Box::pin(foo())`
error: large future with a size of 49159 bytes
- --> tests/ui/large_futures.rs:35:5
+ --> tests/ui/large_futures.rs:34:5
|
LL | calls_fut(fut).await;
| ^^^^^^^^^^^^^^ help: consider `Box::pin` on it: `Box::pin(calls_fut(fut))`
error: large future with a size of 65540 bytes
- --> tests/ui/large_futures.rs:48:5
+ --> tests/ui/large_futures.rs:47:5
|
LL | / async {
LL | |
@@ -59,7 +59,7 @@ LL + })
|
error: large future with a size of 65540 bytes
- --> tests/ui/large_futures.rs:60:13
+ --> tests/ui/large_futures.rs:59:13
|
LL | / async {
LL | | let x = [0i32; 1024 * 16];
diff --git a/src/tools/clippy/tests/ui/manual_float_methods.rs b/src/tools/clippy/tests/ui/manual_float_methods.rs
index f3e95d6807d..80781ecda72 100644
--- a/src/tools/clippy/tests/ui/manual_float_methods.rs
+++ b/src/tools/clippy/tests/ui/manual_float_methods.rs
@@ -2,7 +2,6 @@
//@aux-build:proc_macros.rs
#![allow(clippy::needless_if, unused)]
#![warn(clippy::manual_is_infinite, clippy::manual_is_finite)]
-#![feature(inline_const)]
#[macro_use]
extern crate proc_macros;
diff --git a/src/tools/clippy/tests/ui/manual_float_methods.stderr b/src/tools/clippy/tests/ui/manual_float_methods.stderr
index dae96839262..930df0b97cb 100644
--- a/src/tools/clippy/tests/ui/manual_float_methods.stderr
+++ b/src/tools/clippy/tests/ui/manual_float_methods.stderr
@@ -1,5 +1,5 @@
error: manually checking if a float is infinite
- --> tests/ui/manual_float_methods.rs:23:8
+ --> tests/ui/manual_float_methods.rs:22:8
|
LL | if x == f32::INFINITY || x == f32::NEG_INFINITY {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the dedicated method instead: `x.is_infinite()`
@@ -8,7 +8,7 @@ LL | if x == f32::INFINITY || x == f32::NEG_INFINITY {}
= help: to override `-D warnings` add `#[allow(clippy::manual_is_infinite)]`
error: manually checking if a float is finite
- --> tests/ui/manual_float_methods.rs:24:8
+ --> tests/ui/manual_float_methods.rs:23:8
|
LL | if x != f32::INFINITY && x != f32::NEG_INFINITY {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -29,13 +29,13 @@ LL | if !x.is_infinite() {}
| ~~~~~~~~~~~~~~~~
error: manually checking if a float is infinite
- --> tests/ui/manual_float_methods.rs:25:8
+ --> tests/ui/manual_float_methods.rs:24:8
|
LL | if x == INFINITE || x == NEG_INFINITE {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the dedicated method instead: `x.is_infinite()`
error: manually checking if a float is finite
- --> tests/ui/manual_float_methods.rs:26:8
+ --> tests/ui/manual_float_methods.rs:25:8
|
LL | if x != INFINITE && x != NEG_INFINITE {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -54,13 +54,13 @@ LL | if !x.is_infinite() {}
| ~~~~~~~~~~~~~~~~
error: manually checking if a float is infinite
- --> tests/ui/manual_float_methods.rs:28:8
+ --> tests/ui/manual_float_methods.rs:27:8
|
LL | if x == f64::INFINITY || x == f64::NEG_INFINITY {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use the dedicated method instead: `x.is_infinite()`
error: manually checking if a float is finite
- --> tests/ui/manual_float_methods.rs:29:8
+ --> tests/ui/manual_float_methods.rs:28:8
|
LL | if x != f64::INFINITY && x != f64::NEG_INFINITY {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
diff --git a/src/tools/clippy/tests/ui/never_loop.rs b/src/tools/clippy/tests/ui/never_loop.rs
index 92f173d9db4..93c69209c69 100644
--- a/src/tools/clippy/tests/ui/never_loop.rs
+++ b/src/tools/clippy/tests/ui/never_loop.rs
@@ -1,4 +1,4 @@
-#![feature(inline_const, try_blocks)]
+#![feature(try_blocks)]
#![allow(
clippy::eq_op,
clippy::single_match,
diff --git a/src/tools/clippy/tests/ui/panicking_macros.rs b/src/tools/clippy/tests/ui/panicking_macros.rs
index dccfbd409e5..2bbf5792ec4 100644
--- a/src/tools/clippy/tests/ui/panicking_macros.rs
+++ b/src/tools/clippy/tests/ui/panicking_macros.rs
@@ -1,5 +1,4 @@
#![allow(clippy::assertions_on_constants, clippy::eq_op, clippy::let_unit_value)]
-#![feature(inline_const)]
#![warn(clippy::unimplemented, clippy::unreachable, clippy::todo, clippy::panic)]
extern crate core;
diff --git a/src/tools/clippy/tests/ui/panicking_macros.stderr b/src/tools/clippy/tests/ui/panicking_macros.stderr
index 06025859c0c..7c0f0a7d376 100644
--- a/src/tools/clippy/tests/ui/panicking_macros.stderr
+++ b/src/tools/clippy/tests/ui/panicking_macros.stderr
@@ -1,5 +1,5 @@
error: `panic` should not be present in production code
- --> tests/ui/panicking_macros.rs:23:5
+ --> tests/ui/panicking_macros.rs:22:5
|
LL | panic!();
| ^^^^^^^^
@@ -8,19 +8,19 @@ LL | panic!();
= help: to override `-D warnings` add `#[allow(clippy::panic)]`
error: `panic` should not be present in production code
- --> tests/ui/panicking_macros.rs:26:5
+ --> tests/ui/panicking_macros.rs:25:5
|
LL | panic!("message");
| ^^^^^^^^^^^^^^^^^
error: `panic` should not be present in production code
- --> tests/ui/panicking_macros.rs:28:5
+ --> tests/ui/panicking_macros.rs:27:5
|
LL | panic!("{} {}", "panic with", "multiple arguments");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: `todo` should not be present in production code
- --> tests/ui/panicking_macros.rs:35:5
+ --> tests/ui/panicking_macros.rs:34:5
|
LL | todo!();
| ^^^^^^^
@@ -29,19 +29,19 @@ LL | todo!();
= help: to override `-D warnings` add `#[allow(clippy::todo)]`
error: `todo` should not be present in production code
- --> tests/ui/panicking_macros.rs:38:5
+ --> tests/ui/panicking_macros.rs:37:5
|
LL | todo!("message");
| ^^^^^^^^^^^^^^^^
error: `todo` should not be present in production code
- --> tests/ui/panicking_macros.rs:40:5
+ --> tests/ui/panicking_macros.rs:39:5
|
LL | todo!("{} {}", "panic with", "multiple arguments");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: `unimplemented` should not be present in production code
- --> tests/ui/panicking_macros.rs:47:5
+ --> tests/ui/panicking_macros.rs:46:5
|
LL | unimplemented!();
| ^^^^^^^^^^^^^^^^
@@ -50,19 +50,19 @@ LL | unimplemented!();
= help: to override `-D warnings` add `#[allow(clippy::unimplemented)]`
error: `unimplemented` should not be present in production code
- --> tests/ui/panicking_macros.rs:50:5
+ --> tests/ui/panicking_macros.rs:49:5
|
LL | unimplemented!("message");
| ^^^^^^^^^^^^^^^^^^^^^^^^^
error: `unimplemented` should not be present in production code
- --> tests/ui/panicking_macros.rs:52:5
+ --> tests/ui/panicking_macros.rs:51:5
|
LL | unimplemented!("{} {}", "panic with", "multiple arguments");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: usage of the `unreachable!` macro
- --> tests/ui/panicking_macros.rs:59:5
+ --> tests/ui/panicking_macros.rs:58:5
|
LL | unreachable!();
| ^^^^^^^^^^^^^^
@@ -71,37 +71,37 @@ LL | unreachable!();
= help: to override `-D warnings` add `#[allow(clippy::unreachable)]`
error: usage of the `unreachable!` macro
- --> tests/ui/panicking_macros.rs:62:5
+ --> tests/ui/panicking_macros.rs:61:5
|
LL | unreachable!("message");
| ^^^^^^^^^^^^^^^^^^^^^^^
error: usage of the `unreachable!` macro
- --> tests/ui/panicking_macros.rs:64:5
+ --> tests/ui/panicking_macros.rs:63:5
|
LL | unreachable!("{} {}", "panic with", "multiple arguments");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: `panic` should not be present in production code
- --> tests/ui/panicking_macros.rs:71:5
+ --> tests/ui/panicking_macros.rs:70:5
|
LL | panic!();
| ^^^^^^^^
error: `todo` should not be present in production code
- --> tests/ui/panicking_macros.rs:73:5
+ --> tests/ui/panicking_macros.rs:72:5
|
LL | todo!();
| ^^^^^^^
error: `unimplemented` should not be present in production code
- --> tests/ui/panicking_macros.rs:75:5
+ --> tests/ui/panicking_macros.rs:74:5
|
LL | unimplemented!();
| ^^^^^^^^^^^^^^^^
error: usage of the `unreachable!` macro
- --> tests/ui/panicking_macros.rs:77:5
+ --> tests/ui/panicking_macros.rs:76:5
|
LL | unreachable!();
| ^^^^^^^^^^^^^^
diff --git a/src/tools/clippy/tests/ui/redundant_locals.rs b/src/tools/clippy/tests/ui/redundant_locals.rs
index f6909828aa9..e9d77182a91 100644
--- a/src/tools/clippy/tests/ui/redundant_locals.rs
+++ b/src/tools/clippy/tests/ui/redundant_locals.rs
@@ -1,7 +1,7 @@
//@aux-build:proc_macros.rs
#![allow(unused, clippy::no_effect, clippy::needless_pass_by_ref_mut)]
#![warn(clippy::redundant_locals)]
-#![feature(async_closure, coroutines)]
+#![feature(async_closure, coroutines, stmt_expr_attributes)]
extern crate proc_macros;
use proc_macros::{external, with_span};
@@ -191,11 +191,11 @@ fn issue12225() {
let v4 = v4;
dbg!(&v4);
});
- assert_static(static || {
+ assert_static(#[coroutine] static || {
let v5 = v5;
yield;
});
- assert_static(|| {
+ assert_static(#[coroutine] || {
let v6 = v6;
yield;
});
diff --git a/src/tools/miri/src/lib.rs b/src/tools/miri/src/lib.rs
index e1c0da9118d..44727e01ea2 100644
--- a/src/tools/miri/src/lib.rs
+++ b/src/tools/miri/src/lib.rs
@@ -12,7 +12,6 @@
#![feature(let_chains)]
#![feature(lint_reasons)]
#![feature(trait_upcasting)]
-#![feature(absolute_path)]
// Configure clippy and other lints
#![allow(
clippy::collapsible_else_if,
diff --git a/src/tools/miri/tests/fail/coroutine-pinned-moved.rs b/src/tools/miri/tests/fail/coroutine-pinned-moved.rs
index 005ae7e9132..8648be2a264 100644
--- a/src/tools/miri/tests/fail/coroutine-pinned-moved.rs
+++ b/src/tools/miri/tests/fail/coroutine-pinned-moved.rs
@@ -1,5 +1,5 @@
//@compile-flags: -Zmiri-disable-validation -Zmiri-disable-stacked-borrows
-#![feature(coroutines, coroutine_trait)]
+#![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
use std::{
ops::{Coroutine, CoroutineState},
@@ -7,7 +7,7 @@ use std::{
};
fn firstn() -> impl Coroutine<Yield = u64, Return = ()> {
- static move || {
+ #[coroutine] static move || {
let mut num = 0;
let num = &mut num;
*num += 0;
diff --git a/src/tools/miri/tests/pass/coroutine.rs b/src/tools/miri/tests/pass/coroutine.rs
index 7e1f64df04d..e76abfc4185 100644
--- a/src/tools/miri/tests/pass/coroutine.rs
+++ b/src/tools/miri/tests/pass/coroutine.rs
@@ -1,6 +1,6 @@
//@revisions: stack tree
//@[tree]compile-flags: -Zmiri-tree-borrows
-#![feature(coroutines, coroutine_trait, never_type)]
+#![feature(coroutines, coroutine_trait, never_type, stmt_expr_attributes)]
use std::fmt::Debug;
use std::mem::ManuallyDrop;
@@ -43,9 +43,9 @@ fn basic() {
panic!()
}
- finish(1, false, || yield 1);
+ finish(1, false, #[coroutine] || yield 1);
- finish(3, false, || {
+ finish(3, false, #[coroutine] || {
let mut x = 0;
yield 1;
x += 1;
@@ -55,27 +55,27 @@ fn basic() {
assert_eq!(x, 2);
});
- finish(7 * 8 / 2, false, || {
+ finish(7 * 8 / 2, false, #[coroutine] || {
for i in 0..8 {
yield i;
}
});
- finish(1, false, || {
+ finish(1, false, #[coroutine] || {
if true {
yield 1;
} else {
}
});
- finish(1, false, || {
+ finish(1, false, #[coroutine] || {
if false {
} else {
yield 1;
}
});
- finish(2, false, || {
+ finish(2, false, #[coroutine] || {
if {
yield 1;
false
@@ -88,7 +88,7 @@ fn basic() {
// also test self-referential coroutines
assert_eq!(
- finish(5, true, static || {
+ finish(5, true, #[coroutine] static || {
let mut x = 5;
let y = &mut x;
*y = 5;
@@ -99,7 +99,7 @@ fn basic() {
10
);
assert_eq!(
- finish(5, true, || {
+ finish(5, true, #[coroutine] || {
let mut x = Box::new(5);
let y = &mut *x;
*y = 5;
@@ -111,7 +111,7 @@ fn basic() {
);
let b = true;
- finish(1, false, || {
+ finish(1, false, #[coroutine] || {
yield 1;
if b {
return;
@@ -123,7 +123,7 @@ fn basic() {
drop(x);
});
- finish(3, false, || {
+ finish(3, false, #[coroutine] || {
yield 1;
#[allow(unreachable_code)]
let _x: (String, !) = (String::new(), {
@@ -172,7 +172,7 @@ fn smoke_resume_arg() {
}
drain(
- &mut |mut b| {
+ &mut #[coroutine] |mut b| {
while b != 0 {
b = yield (b + 1);
}
@@ -181,21 +181,21 @@ fn smoke_resume_arg() {
vec![(1, Yielded(2)), (-45, Yielded(-44)), (500, Yielded(501)), (0, Complete(-1))],
);
- expect_drops(2, || drain(&mut |a| yield a, vec![(DropMe, Yielded(DropMe))]));
+ expect_drops(2, || drain(&mut #[coroutine] |a| yield a, vec![(DropMe, Yielded(DropMe))]));
expect_drops(6, || {
drain(
- &mut |a| yield yield a,
+ &mut #[coroutine] |a| yield yield a,
vec![(DropMe, Yielded(DropMe)), (DropMe, Yielded(DropMe)), (DropMe, Complete(DropMe))],
)
});
#[allow(unreachable_code)]
- expect_drops(2, || drain(&mut |a| yield return a, vec![(DropMe, Complete(DropMe))]));
+ expect_drops(2, || drain(&mut #[coroutine] |a| yield return a, vec![(DropMe, Complete(DropMe))]));
expect_drops(2, || {
drain(
- &mut |a: DropMe| {
+ &mut #[coroutine] |a: DropMe| {
if false { yield () } else { a }
},
vec![(DropMe, Complete(DropMe))],
@@ -205,7 +205,7 @@ fn smoke_resume_arg() {
expect_drops(4, || {
drain(
#[allow(unused_assignments, unused_variables)]
- &mut |mut a: DropMe| {
+ &mut #[coroutine] |mut a: DropMe| {
a = yield;
a = yield;
a = yield;
@@ -228,7 +228,7 @@ fn uninit_fields() {
}
fn run<T>(x: bool, y: bool) {
- let mut c = || {
+ let mut c = #[coroutine] || {
if x {
let _a: T;
if y {
diff --git a/src/tools/miri/tests/pass/portable-simd.rs b/src/tools/miri/tests/pass/portable-simd.rs
index cdb441b450b..1fc713d48dc 100644
--- a/src/tools/miri/tests/pass/portable-simd.rs
+++ b/src/tools/miri/tests/pass/portable-simd.rs
@@ -1,5 +1,5 @@
//@compile-flags: -Zmiri-strict-provenance
-#![feature(portable_simd, adt_const_params, inline_const, core_intrinsics)]
+#![feature(portable_simd, adt_const_params, core_intrinsics)]
#![allow(incomplete_features, internal_features)]
use std::intrinsics::simd as intrinsics;
use std::ptr;
diff --git a/src/tools/miri/tests/pass/shims/path.rs b/src/tools/miri/tests/pass/shims/path.rs
index 9fc6e7faefb..cadbeb476bd 100644
--- a/src/tools/miri/tests/pass/shims/path.rs
+++ b/src/tools/miri/tests/pass/shims/path.rs
@@ -1,5 +1,4 @@
//@compile-flags: -Zmiri-disable-isolation
-#![feature(absolute_path)]
use std::path::{absolute, Path};
#[track_caller]
diff --git a/src/tools/miri/tests/pass/stacked-borrows/coroutine-self-referential.rs b/src/tools/miri/tests/pass/stacked-borrows/coroutine-self-referential.rs
index c4b15c8758b..bb98e024a0a 100644
--- a/src/tools/miri/tests/pass/stacked-borrows/coroutine-self-referential.rs
+++ b/src/tools/miri/tests/pass/stacked-borrows/coroutine-self-referential.rs
@@ -1,6 +1,6 @@
// See https://github.com/rust-lang/unsafe-code-guidelines/issues/148:
// this fails when Stacked Borrows is strictly applied even to `!Unpin` types.
-#![feature(coroutines, coroutine_trait)]
+#![feature(coroutines, coroutine_trait, stmt_expr_attributes)]
use std::{
ops::{Coroutine, CoroutineState},
@@ -8,7 +8,7 @@ use std::{
};
fn firstn() -> impl Coroutine<Yield = u64, Return = ()> {
- static move || {
+ #[coroutine] static move || {
let mut num = 0;
let num = &mut num;
diff --git a/src/tools/miri/tests/pass/track-caller-attribute.rs b/src/tools/miri/tests/pass/track-caller-attribute.rs
index d88bcc98858..c3803af3cc8 100644
--- a/src/tools/miri/tests/pass/track-caller-attribute.rs
+++ b/src/tools/miri/tests/pass/track-caller-attribute.rs
@@ -232,7 +232,7 @@ fn test_coroutine() {
}
#[rustfmt::skip]
- let coroutine = #[track_caller] |arg: String| {
+ let coroutine = #[track_caller] #[coroutine] |arg: String| {
yield ("first", arg.clone(), Location::caller());
yield ("second", arg.clone(), Location::caller());
};
@@ -255,7 +255,7 @@ fn test_coroutine() {
assert_eq!(mono_loc.column(), 42);
#[rustfmt::skip]
- let non_tracked_coroutine = || { yield Location::caller(); };
+ let non_tracked_coroutine = #[coroutine] || { yield Location::caller(); };
let non_tracked_line = line!() - 1; // This is the line of the coroutine, not its caller
let non_tracked_loc = match Box::pin(non_tracked_coroutine).as_mut().resume(()) {
CoroutineState::Yielded(val) => val,
@@ -263,7 +263,7 @@ fn test_coroutine() {
};
assert_eq!(non_tracked_loc.file(), file!());
assert_eq!(non_tracked_loc.line(), non_tracked_line);
- assert_eq!(non_tracked_loc.column(), 44);
+ assert_eq!(non_tracked_loc.column(), 57);
}
fn main() {
diff --git a/src/tools/rust-analyzer/crates/ide-db/src/generated/lints.rs b/src/tools/rust-analyzer/crates/ide-db/src/generated/lints.rs
index d50088e6cf1..c92d4e78ffa 100644
--- a/src/tools/rust-analyzer/crates/ide-db/src/generated/lints.rs
+++ b/src/tools/rust-analyzer/crates/ide-db/src/generated/lints.rs
@@ -3869,7 +3869,7 @@ use std::ops::{Coroutine, CoroutineState};
use std::pin::Pin;
fn main() {
- let mut coroutine = || {
+ let mut coroutine = #[coroutine] || {
yield 1;
return "foo"
};
@@ -3901,7 +3901,7 @@ use std::ops::Coroutine;
use std::pin::Pin;
fn main() {
- let mut coroutine = || {
+ let mut coroutine = #[coroutine] || {
println!("2");
yield;
println!("4");
@@ -4007,7 +4007,7 @@ use std::pin::Pin;
fn main() {
let ret = "foo";
- let mut coroutine = move || {
+ let mut coroutine = #[coroutine] move || {
yield 1;
return ret
};
diff --git a/src/tools/rustfmt/tests/source/immovable_coroutines.rs b/src/tools/rustfmt/tests/source/immovable_coroutines.rs
index 3b94af0c96c..539049577a0 100644
--- a/src/tools/rustfmt/tests/source/immovable_coroutines.rs
+++ b/src/tools/rustfmt/tests/source/immovable_coroutines.rs
@@ -1,7 +1,8 @@
#![feature(coroutines)]
unsafe fn foo() {
- let mut ga = static || {
+ let mut ga = #[coroutine]
+ static || {
yield 1;
};
}
diff --git a/src/tools/rustfmt/tests/target/immovable_coroutines.rs b/src/tools/rustfmt/tests/target/immovable_coroutines.rs
index f52cfa00f97..539049577a0 100644
--- a/src/tools/rustfmt/tests/target/immovable_coroutines.rs
+++ b/src/tools/rustfmt/tests/target/immovable_coroutines.rs
@@ -1,7 +1,8 @@
#![feature(coroutines)]
unsafe fn foo() {
- let mut ga = static || {
+ let mut ga = #[coroutine]
+ static || {
yield 1;
};
}
diff --git a/src/tools/tidy/src/allowed_run_make_makefiles.txt b/src/tools/tidy/src/allowed_run_make_makefiles.txt
index f0ed0ae806f..93188b4fbae 100644
--- a/src/tools/tidy/src/allowed_run_make_makefiles.txt
+++ b/src/tools/tidy/src/allowed_run_make_makefiles.txt
@@ -317,7 +317,6 @@ run-make/unstable-flag-required/Makefile
run-make/use-suggestions-rust-2018/Makefile
run-make/used-cdylib-macos/Makefile
run-make/used/Makefile
-run-make/valid-print-requests/Makefile
run-make/volatile-intrinsics/Makefile
run-make/wasm-exceptions-nostd/Makefile
run-make/wasm-override-linker/Makefile