Initial support for auto traits with default bounds
Summary: https://github.com/rust-lang/rust/pull/120706#issuecomment-1934006762
r? @petrochenkov
@rustbot author
The job mingw-check-tidy failed! Check out the build log: (web) (plain)
Click to see the possible cause of the failure (guessed by this bot)
Prepare all required actions
Getting action download info
Download action repository 'actions/checkout@v4' (SHA:b4ffde65f46336ab88eb53be808477a3936bae11)
Download action repository 'actions/upload-artifact@v3' (SHA:a8a3f3ad30e3422c9c7b888a15615d19a852ae32)
Complete job name: PR - mingw-check-tidy
git config --global core.autocrlf false
shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
---
GITHUB_ACTION=__run_7
GITHUB_ACTIONS=true
GITHUB_ACTION_REF=
GITHUB_ACTION_REPOSITORY=
GITHUB_ACTOR=Bryanskiy
GITHUB_API_URL=https://api.github.com
GITHUB_BASE_REF=master
GITHUB_ENV=/home/runner/work/_temp/_runner_file_commands/set_env_df260c29-c239-4601-8e3f-534f55fa884b
GITHUB_EVENT_NAME=pull_request
---
GITHUB_SERVER_URL=https://github.com
GITHUB_SHA=0dccfbd189e35c58e19868efed9d4cbf1922961d
GITHUB_STATE=/home/runner/work/_temp/_runner_file_commands/save_state_df260c29-c239-4601-8e3f-534f55fa884b
GITHUB_STEP_SUMMARY=/home/runner/work/_temp/_runner_file_commands/step_summary_df260c29-c239-4601-8e3f-534f55fa884b
GITHUB_TRIGGERING_ACTOR=Bryanskiy
GITHUB_WORKFLOW_REF=rust-lang/rust/.github/workflows/ci.yml@refs/pull/120706/merge
GITHUB_WORKFLOW_SHA=0dccfbd189e35c58e19868efed9d4cbf1922961d
GITHUB_WORKSPACE=/home/runner/work/rust/rust
GOROOT_1_19_X64=/opt/hostedtoolcache/go/1.19.13/x64
---
COPY scripts/sccache.sh /scripts/
RUN sh /scripts/sccache.sh
COPY host-x86_64/mingw-check/reuse-requirements.txt /tmp/
RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-requirements.txt \
&& pip3 install virtualenv
COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
COPY host-x86_64/mingw-check/validate-error-codes.sh /scripts/
# NOTE: intentionally uses python2 for x.py so we can test it still works.
# NOTE: intentionally uses python2 for x.py so we can test it still works.
# validate-toolstate only runs in our CI, so it's ok for it to only support python3.
ENV SCRIPT TIDY_PRINT_DIFF=1 python2.7 ../x.py test \
--stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
# pip-compile --allow-unsafe --generate-hashes reuse-requirements.in
---
#10 [5/8] COPY host-x86_64/mingw-check/reuse-requirements.txt /tmp/
#10 DONE 0.0s
#11 [6/8] RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-requirements.txt && pip3 install virtualenv
#11 0.646 Downloading binaryornot-0.4.4-py2.py3-none-any.whl (9.0 kB)
#11 0.657 Collecting boolean-py==4.0
#11 0.660 Downloading boolean.py-4.0-py3-none-any.whl (25 kB)
#11 0.675 Collecting chardet==5.1.0
---
#11 3.617 Building wheels for collected packages: reuse
#11 3.618 Building wheel for reuse (pyproject.toml): started
#11 3.948 Building wheel for reuse (pyproject.toml): finished with status 'done'
#11 3.949 Created wheel for reuse: filename=reuse-1.1.0-cp310-cp310-manylinux_2_35_x86_64.whl size=181117 sha256=f5f58750481f69515c2c0d1d503daf565e2565c370d07fc6aeb95fe3498b4269
#11 3.949 Stored in directory: /tmp/pip-ephem-wheel-cache-uv4wc069/wheels/c2/3c/b9/1120c2ab4bd82694f7e6f0537dc5b9a085c13e2c69a8d0c76d
#11 3.952 Installing collected packages: boolean-py, binaryornot, setuptools, reuse, python-debian, markupsafe, license-expression, jinja2, chardet
#11 3.974 Attempting uninstall: setuptools
#11 3.974 Found existing installation: setuptools 59.6.0
#11 3.975 Not uninstalling setuptools at /usr/lib/python3/dist-packages, outside environment /usr
#11 3.975 Not uninstalling setuptools at /usr/lib/python3/dist-packages, outside environment /usr
#11 3.976 Can't uninstall 'setuptools'. No files were found to uninstall.
#11 4.646 Successfully installed binaryornot-0.4.4 boolean-py-4.0 chardet-5.1.0 jinja2-3.1.2 license-expression-30.0.0 markupsafe-2.1.1 python-debian-0.1.49 reuse-1.1.0 setuptools-66.0.0
#11 4.647 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
#11 5.151 Collecting virtualenv
#11 5.188 Downloading virtualenv-20.25.0-py3-none-any.whl (3.8 MB)
#11 5.247 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8/3.8 MB 66.6 MB/s eta 0:00:00
#11 5.293 Collecting platformdirs<5,>=3.9.1
#11 5.296 Downloading platformdirs-4.2.0-py3-none-any.whl (17 kB)
#11 5.312 Collecting distlib<1,>=0.3.7
#11 5.316 Downloading distlib-0.3.8-py2.py3-none-any.whl (468 kB)
#11 5.350 Collecting filelock<4,>=3.12.2
#11 5.353 Downloading filelock-3.13.1-py3-none-any.whl (11 kB)
#11 5.353 Downloading filelock-3.13.1-py3-none-any.whl (11 kB)
#11 5.437 Installing collected packages: distlib, platformdirs, filelock, virtualenv
#11 5.599 Successfully installed distlib-0.3.8 filelock-3.13.1 platformdirs-4.2.0 virtualenv-20.25.0
#11 DONE 5.7s
#12 [7/8] COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
#12 DONE 0.0s
---
DirectMap4k: 206784 kB
DirectMap2M: 7133184 kB
DirectMap1G: 11534336 kB
##[endgroup]
Executing TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
+ TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
Finished dev [unoptimized] target(s) in 0.03s
##[endgroup]
downloading https://ci-artifacts.rust-lang.org/rustc-builds-alt/037f515caf46846d2bffae55883eebc6c1ccb861/rust-dev-nightly-x86_64-unknown-linux-gnu.tar.xz
extracting /checkout/obj/build/cache/llvm-037f515caf46846d2bffae55883eebc6c1ccb861-true/rust-dev-nightly-x86_64-unknown-linux-gnu.tar.xz to /checkout/obj/build/x86_64-unknown-linux-gnu/ci-llvm
---
Compiling tidy v0.1.0 (/checkout/src/tools/tidy)
Finished release [optimized] target(s) in 25.75s
##[endgroup]
fmt check
##[error]Diff in /checkout/compiler/rustc_hir_analysis/src/astconv/bounds.rs at line 86:
}
hir::TraitBoundModifier::None => {
hir::TraitBoundModifier::None => {
- if ptr.trait_ref.path.res == Res::Def(DefKind::Trait, trait_def_id)
- {
+ if ptr.trait_ref.path.res == Res::Def(DefKind::Trait, trait_def_id) {
}
}
}
Running `"/checkout/obj/build/x86_64-unknown-linux-gnu/rustfmt/bin/rustfmt" "--config-path" "/checkout" "--edition" "2021" "--unstable-features" "--skip-children" "--check" "/checkout/library/std/src/sys/personality/mod.rs" "/checkout/compiler/rustc_hir_analysis/src/astconv/mod.rs" "/checkout/compiler/rustc_hir_analysis/src/astconv/lint.rs" "/checkout/compiler/rustc_hir_analysis/src/astconv/generics.rs" "/checkout/compiler/rustc_hir_analysis/src/astconv/errors.rs" "/checkout/compiler/rustc_hir_analysis/src/astconv/bounds.rs" "/checkout/compiler/rustc_hir_analysis/src/astconv/object_safety.rs" "/checkout/library/std/src/sys/personality/emcc.rs"` failed.
If you're running `tidy`, try again with `--bless`. Or, if you just want to format code, run `./x.py fmt` instead.
local time: Tue Feb 6 16:13:36 UTC 2024
network time: Tue, 06 Feb 2024 16:13:36 GMT
##[error]Process completed with exit code 1.
Post job cleanup.
The job x86_64-gnu-llvm-16 failed! Check out the build log: (web) (plain)
Click to see the possible cause of the failure (guessed by this bot)
GITHUB_ACTION=__run_7
GITHUB_ACTIONS=true
GITHUB_ACTION_REF=
GITHUB_ACTION_REPOSITORY=
GITHUB_ACTOR=Bryanskiy
GITHUB_API_URL=https://api.github.com
GITHUB_BASE_REF=master
GITHUB_ENV=/home/runner/work/_temp/_runner_file_commands/set_env_776359b0-3d8e-430b-91ea-ac33de74212c
GITHUB_EVENT_NAME=pull_request
---
GITHUB_SERVER_URL=https://github.com
GITHUB_SHA=4fcc7d472c47195547c3711b2cb2b79e61808e8e
GITHUB_STATE=/home/runner/work/_temp/_runner_file_commands/save_state_776359b0-3d8e-430b-91ea-ac33de74212c
GITHUB_STEP_SUMMARY=/home/runner/work/_temp/_runner_file_commands/step_summary_776359b0-3d8e-430b-91ea-ac33de74212c
GITHUB_TRIGGERING_ACTOR=Bryanskiy
GITHUB_WORKFLOW_REF=rust-lang/rust/.github/workflows/ci.yml@refs/pull/120706/merge
GITHUB_WORKFLOW_SHA=4fcc7d472c47195547c3711b2cb2b79e61808e8e
GITHUB_WORKSPACE=/home/runner/work/rust/rust
GOROOT_1_19_X64=/opt/hostedtoolcache/go/1.19.13/x64
---
#12 writing image sha256:ff9be915967f62dec9b8e7e86c735051d8994bcbf6254116a7be0011645d6089 done
#12 naming to docker.io/library/rust-ci done
#12 DONE 9.9s
##[endgroup]
Setting extra environment values for docker: --env ENABLE_GCC_CODEGEN=1 --env GCC_EXEC_PREFIX=/usr/lib/gcc/
[CI_JOB_NAME=x86_64-gnu-llvm-16]
##[group]Clock drift check
local time: Tue Feb 6 16:23:42 UTC 2024
network time: Tue, 06 Feb 2024 16:23:42 GMT
network time: Tue, 06 Feb 2024 16:23:42 GMT
##[endgroup]
sccache: Starting the server...
##[group]Configure the build
configure: processing command line
configure:
configure: build.configure-args := ['--build=x86_64-unknown-linux-gnu', '--llvm-root=/usr/lib/llvm-16', '--enable-llvm-link-shared', '--set', 'rust.thin-lto-import-instr-limit=10', '--set', 'change-id=99999999', '--enable-verbose-configure', '--enable-sccache', '--disable-manage-submodules', '--enable-locked-deps', '--enable-cargo-native-static', '--set', 'rust.codegen-units-std=1', '--set', 'dist.compression-profile=balanced', '--dist-compression-formats=xz', '--set', 'build.optimized-compiler-builtins', '--disable-dist-src', '--release-channel=nightly', '--enable-debug-assertions', '--enable-overflow-checks', '--enable-llvm-assertions', '--set', 'rust.verify-llvm-ir', '--set', 'rust.codegen-backends=llvm,cranelift,gcc', '--set', 'llvm.static-libstdcpp', '--enable-new-symbol-mangling']
configure: target.x86_64-unknown-linux-gnu.llvm-config := /usr/lib/llvm-16/bin/llvm-config
configure: llvm.link-shared := True
configure: rust.thin-lto-import-instr-limit := 10
configure: change-id := 99999999
---
|
578 | #[cfg(feature = "default_auto_traits")]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: expected values for `feature` are: `rustc-rayon`, `rustc-rayon-core`, `rustc_use_parallel_compiler`
= help: consider adding `default_auto_traits` as a feature in `Cargo.toml`
= note: see <https://doc.rust-lang.org/nightly/cargo/reference/unstable.html#check-cfg> for more information about checking conditional configuration
= note: `-D unexpected-cfgs` implied by `-D warnings`
= help: to override `-D warnings` add `#[allow(unexpected_cfgs)]`
Compiling rustc_ast_passes v0.0.0 (/checkout/compiler/rustc_ast_passes)
Compiling rustc_expand v0.0.0 (/checkout/compiler/rustc_expand)
Compiling rustc_builtin_macros v0.0.0 (/checkout/compiler/rustc_builtin_macros)
error: could not compile `rustc_middle` (lib) due to 1 previous error
The job x86_64-gnu-llvm-16 failed! Check out the build log: (web) (plain)
Click to see the possible cause of the failure (guessed by this bot)
GITHUB_ACTION=__run_7
GITHUB_ACTIONS=true
GITHUB_ACTION_REF=
GITHUB_ACTION_REPOSITORY=
GITHUB_ACTOR=Bryanskiy
GITHUB_API_URL=https://api.github.com
GITHUB_BASE_REF=master
GITHUB_ENV=/home/runner/work/_temp/_runner_file_commands/set_env_aa6de92f-ff5e-492f-9d06-39f971801505
GITHUB_EVENT_NAME=pull_request
---
GITHUB_SERVER_URL=https://github.com
GITHUB_SHA=a7ee34451293220182b3e73bdcac8536a09f87e8
GITHUB_STATE=/home/runner/work/_temp/_runner_file_commands/save_state_aa6de92f-ff5e-492f-9d06-39f971801505
GITHUB_STEP_SUMMARY=/home/runner/work/_temp/_runner_file_commands/step_summary_aa6de92f-ff5e-492f-9d06-39f971801505
GITHUB_TRIGGERING_ACTOR=Bryanskiy
GITHUB_WORKFLOW_REF=rust-lang/rust/.github/workflows/ci.yml@refs/pull/120706/merge
GITHUB_WORKFLOW_SHA=a7ee34451293220182b3e73bdcac8536a09f87e8
GITHUB_WORKSPACE=/home/runner/work/rust/rust
GOROOT_1_19_X64=/opt/hostedtoolcache/go/1.19.13/x64
---
#12 writing image sha256:a81ab19dc480cc658e9bc6b640e91627545265d72519778bdc41440875b9a979 done
#12 naming to docker.io/library/rust-ci done
#12 DONE 10.0s
##[endgroup]
Setting extra environment values for docker: --env ENABLE_GCC_CODEGEN=1 --env GCC_EXEC_PREFIX=/usr/lib/gcc/
[CI_JOB_NAME=x86_64-gnu-llvm-16]
##[group]Clock drift check
local time: Tue Feb 6 16:50:50 UTC 2024
network time: Tue, 06 Feb 2024 16:50:50 GMT
network time: Tue, 06 Feb 2024 16:50:50 GMT
##[endgroup]
sccache: Starting the server...
##[group]Configure the build
configure: processing command line
configure:
configure: build.configure-args := ['--build=x86_64-unknown-linux-gnu', '--llvm-root=/usr/lib/llvm-16', '--enable-llvm-link-shared', '--set', 'rust.thin-lto-import-instr-limit=10', '--set', 'change-id=99999999', '--enable-verbose-configure', '--enable-sccache', '--disable-manage-submodules', '--enable-locked-deps', '--enable-cargo-native-static', '--set', 'rust.codegen-units-std=1', '--set', 'dist.compression-profile=balanced', '--dist-compression-formats=xz', '--set', 'build.optimized-compiler-builtins', '--disable-dist-src', '--release-channel=nightly', '--enable-debug-assertions', '--enable-overflow-checks', '--enable-llvm-assertions', '--set', 'rust.verify-llvm-ir', '--set', 'rust.codegen-backends=llvm,cranelift,gcc', '--set', 'llvm.static-libstdcpp', '--enable-new-symbol-mangling']
configure: target.x86_64-unknown-linux-gnu.llvm-config := /usr/lib/llvm-16/bin/llvm-config
configure: llvm.link-shared := True
configure: rust.thin-lto-import-instr-limit := 10
configure: change-id := 99999999
---
##[endgroup]
Testing GCC stage1 (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
Compiling y v0.1.0 (/checkout/compiler/rustc_codegen_gcc/build_system)
Finished release [optimized] target(s) in 1.36s
Running `/checkout/obj/build/x86_64-unknown-linux-gnu/stage1-codegen/x86_64-unknown-linux-gnu/release/y test --use-system-gcc --use-backend gcc --out-dir /checkout/obj/build/x86_64-unknown-linux-gnu/stage1-tools/cg_gcc --release --no-default-features --mini-tests --std-tests`
Using system GCC
Using system GCC
[BUILD] example
[AOT] mini_core_hello_world
/checkout/obj/build/x86_64-unknown-linux-gnu/stage1-tools/cg_gcc/mini_core_hello_world
abc
---
##[group]Testing stage2 error-index (x86_64-unknown-linux-gnu)
##[endgroup]
command did not execute successfully: CFG_RELEASE_CHANNEL="nightly" RUSTC_BOOTSTRAP="1" RUSTC_STAGE="2" RUSTC_SYSROOT="/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" RUSTDOC_LIBDIR="/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib" RUSTDOC_REAL="/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustdoc" RUST_TEST_THREADS="16" "/checkout/obj/build/bootstrap/debug/rustdoc" "-Wrustdoc::invalid_codeblock_attributes" "-Dwarnings" "-Znormalize-docs" "-Z" "unstable-options" "--test" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/error-index.md" "--test-args" ""
stdout ----
running 1094 tests
---
test /checkout/obj/build/x86_64-unknown-linux-gnu/test/error-index.md - Rust_Compiler_Error_Index::E0797 (line 17996) ... ok
failures:
---- /checkout/obj/build/x86_64-unknown-linux-gnu/test/error-index.md - Rust_Compiler_Error_Index::E0203 (line 3513) stdout ----
warning: relaxing a default bound only does something for `?Sized` and `default_auto_traits`; all other traits are not bound by default
|
|
3 | struct Bad<T: ?Sized + ?Send>{
warning: 1 warning emitted
Test compiled successfully, but it's marked `compile_fail`.
The job mingw-check-tidy failed! Check out the build log: (web) (plain)
Click to see the possible cause of the failure (guessed by this bot)
Prepare all required actions
Getting action download info
Download action repository 'actions/checkout@v4' (SHA:b4ffde65f46336ab88eb53be808477a3936bae11)
Download action repository 'actions/upload-artifact@v3' (SHA:a8a3f3ad30e3422c9c7b888a15615d19a852ae32)
Complete job name: PR - mingw-check-tidy
git config --global core.autocrlf false
shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
---
GITHUB_ACTION=__run_7
GITHUB_ACTIONS=true
GITHUB_ACTION_REF=
GITHUB_ACTION_REPOSITORY=
GITHUB_ACTOR=Bryanskiy
GITHUB_API_URL=https://api.github.com
GITHUB_BASE_REF=master
GITHUB_ENV=/home/runner/work/_temp/_runner_file_commands/set_env_6a08dd5b-f03a-4c1e-9f60-46cbb86acc19
GITHUB_EVENT_NAME=pull_request
---
GITHUB_SERVER_URL=https://github.com
GITHUB_SHA=4079d80d41fb350ecb06a6a525ee4e007a866fe2
GITHUB_STATE=/home/runner/work/_temp/_runner_file_commands/save_state_6a08dd5b-f03a-4c1e-9f60-46cbb86acc19
GITHUB_STEP_SUMMARY=/home/runner/work/_temp/_runner_file_commands/step_summary_6a08dd5b-f03a-4c1e-9f60-46cbb86acc19
GITHUB_TRIGGERING_ACTOR=Bryanskiy
GITHUB_WORKFLOW_REF=rust-lang/rust/.github/workflows/ci.yml@refs/pull/120706/merge
GITHUB_WORKFLOW_SHA=4079d80d41fb350ecb06a6a525ee4e007a866fe2
GITHUB_WORKSPACE=/home/runner/work/rust/rust
GOROOT_1_19_X64=/opt/hostedtoolcache/go/1.19.13/x64
---
COPY scripts/sccache.sh /scripts/
RUN sh /scripts/sccache.sh
COPY host-x86_64/mingw-check/reuse-requirements.txt /tmp/
RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-requirements.txt \
&& pip3 install virtualenv
COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
COPY host-x86_64/mingw-check/validate-error-codes.sh /scripts/
# NOTE: intentionally uses python2 for x.py so we can test it still works.
# NOTE: intentionally uses python2 for x.py so we can test it still works.
# validate-toolstate only runs in our CI, so it's ok for it to only support python3.
ENV SCRIPT TIDY_PRINT_DIFF=1 python2.7 ../x.py test \
--stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
# pip-compile --allow-unsafe --generate-hashes reuse-requirements.in
---
#10 [5/8] COPY host-x86_64/mingw-check/reuse-requirements.txt /tmp/
#10 DONE 0.0s
#11 [6/8] RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-requirements.txt && pip3 install virtualenv
#11 0.624 Downloading binaryornot-0.4.4-py2.py3-none-any.whl (9.0 kB)
#11 0.640 Collecting boolean-py==4.0
#11 0.646 Downloading boolean.py-4.0-py3-none-any.whl (25 kB)
#11 0.664 Collecting chardet==5.1.0
---
#11 3.750 Building wheels for collected packages: reuse
#11 3.751 Building wheel for reuse (pyproject.toml): started
#11 4.075 Building wheel for reuse (pyproject.toml): finished with status 'done'
#11 4.076 Created wheel for reuse: filename=reuse-1.1.0-cp310-cp310-manylinux_2_35_x86_64.whl size=181117 sha256=f5f58750481f69515c2c0d1d503daf565e2565c370d07fc6aeb95fe3498b4269
#11 4.076 Stored in directory: /tmp/pip-ephem-wheel-cache-y6mge77h/wheels/c2/3c/b9/1120c2ab4bd82694f7e6f0537dc5b9a085c13e2c69a8d0c76d
#11 4.079 Installing collected packages: boolean-py, binaryornot, setuptools, reuse, python-debian, markupsafe, license-expression, jinja2, chardet
#11 4.100 Attempting uninstall: setuptools
#11 4.101 Found existing installation: setuptools 59.6.0
#11 4.102 Not uninstalling setuptools at /usr/lib/python3/dist-packages, outside environment /usr
---
#11 5.366 Downloading virtualenv-20.25.0-py3-none-any.whl (3.8 MB)
#11 5.539 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8/3.8 MB 22.1 MB/s eta 0:00:00
#11 5.590 Collecting filelock<4,>=3.12.2
#11 5.597 Downloading filelock-3.13.1-py3-none-any.whl (11 kB)
#11 5.616 Collecting distlib<1,>=0.3.7
#11 5.623 Downloading distlib-0.3.8-py2.py3-none-any.whl (468 kB)
#11 5.635 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 468.9/468.9 KB 47.1 MB/s eta 0:00:00
#11 5.672 Collecting platformdirs<5,>=3.9.1
#11 5.681 Downloading platformdirs-4.2.0-py3-none-any.whl (17 kB)
#11 5.765 Installing collected packages: distlib, platformdirs, filelock, virtualenv
#11 5.926 Successfully installed distlib-0.3.8 filelock-3.13.1 platformdirs-4.2.0 virtualenv-20.25.0
#11 DONE 6.0s
#12 [7/8] COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
#12 DONE 0.0s
---
DirectMap4k: 200640 kB
DirectMap2M: 8187904 kB
DirectMap1G: 10485760 kB
##[endgroup]
Executing TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
+ TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
Finished dev [unoptimized] target(s) in 0.03s
##[endgroup]
downloading https://ci-artifacts.rust-lang.org/rustc-builds-alt/81bef0b0ba78f9b7bb08beb0575e245fbe18674a/rust-dev-nightly-x86_64-unknown-linux-gnu.tar.xz
extracting /checkout/obj/build/cache/llvm-81bef0b0ba78f9b7bb08beb0575e245fbe18674a-true/rust-dev-nightly-x86_64-unknown-linux-gnu.tar.xz to /checkout/obj/build/x86_64-unknown-linux-gnu/ci-llvm
---
Finished release [optimized] target(s) in 24.49s
##[endgroup]
fmt check
tidy check
tidy error: `ISSUES_ENTRY_LIMIT` is too high (is 1819, should be 1816)
removing old virtual environment
removing old virtual environment
creating virtual environment at '/checkout/obj/build/venv' using 'python3.10'
Requirement already satisfied: pip in ./build/venv/lib/python3.10/site-packages (23.3.1)
Collecting pip
Downloading pip-24.0-py3-none-any.whl.metadata (3.6 kB)
Downloading pip-24.0-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 23.3.1
Uninstalling pip-23.3.1:
Uninstalling pip-23.3.1:
Successfully uninstalled pip-23.3.1
Successfully installed pip-24.0
Collecting black==23.3.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 7))
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 10.4 MB/s eta 0:00:00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 10.4 MB/s eta 0:00:00
Collecting click==8.1.3 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 34))
Downloading click-8.1.3-py3-none-any.whl (96 kB)
Collecting importlib-metadata==6.7.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 38))
Downloading importlib_metadata-6.7.0-py3-none-any.whl (22 kB)
Downloading importlib_metadata-6.7.0-py3-none-any.whl (22 kB)
Collecting mypy-extensions==1.0.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 42))
Downloading mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)
Collecting packaging==23.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 46))
Downloading packaging-23.1-py3-none-any.whl (48 kB)
Collecting pathspec==0.11.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 50))
Downloading pathspec-0.11.1-py3-none-any.whl (29 kB)
Downloading pathspec-0.11.1-py3-none-any.whl (29 kB)
Collecting platformdirs==3.6.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 54))
Downloading platformdirs-3.6.0-py3-none-any.whl (16 kB)
Collecting ruff==0.0.272 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 58))
Downloading ruff-0.0.272-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB)
Collecting tomli==2.0.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 77))
Downloading tomli-2.0.1-py3-none-any.whl (12 kB)
Collecting typed-ast==1.5.4 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 81))
Downloading typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (877 kB)
Downloading typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (877 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 877.7/877.7 kB 9.0 MB/s eta 0:00:00
Collecting typing-extensions==4.6.3 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 107))
Downloading typing_extensions-4.6.3-py3-none-any.whl (31 kB)
Collecting zipp==3.15.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 114))
Downloading zipp-3.15.0-py3-none-any.whl (6.8 kB)
Installing collected packages: zipp, typing-extensions, typed-ast, tomli, ruff, platformdirs, pathspec, packaging, mypy-extensions, click, importlib-metadata, black
Successfully installed black-23.3.0 click-8.1.3 importlib-metadata-6.7.0 mypy-extensions-1.0.0 packaging-23.1 pathspec-0.11.1 platformdirs-3.6.0 ruff-0.0.272 tomli-2.0.1 typed-ast-1.5.4 typing-extensions-4.6.3 zipp-3.15.0
some tidy checks failed
Build completed unsuccessfully in 0:01:02
local time: Thu Feb 8 12:12:35 UTC 2024
network time: Thu, 08 Feb 2024 12:12:35 GMT
So, what are the goals here:
- We want to have a possibility to add new auto traits that are added to all bound lists by default on the current edition. The examples of such traits could be
Leak,Move,SyncDropor something else, it doesn't matter much right now. The desired behavior is similar to the currentSizedtrait. Such behavior is required for introducing!Leakor!SyncDroptypes in a backward compatible way. (BothLeakandSyncDropare likely necessary for properly supporting libraries for scoped async tasks and structured concurrency.) - It's not clear whether it can be done backward compatibly and without significant perf regressions, but that's exactly what we want to find out. Right now we encounter some cycle errors and exponential blow ups in the trait solver, but there's a chance that they are fixable with the new solver.
- Then we want to land the change into rustc under an option, so it becomes available in bootstrap compiler. Then we'll be able to do standard library experiments with the aforementioned traits without adding hundreds of
#[cfg(not(bootstrap))]s. - Based on the experiments, we can come up with some scheme for the next edition, in which such bounds are added more conservatively.
- Relevant blog posts - https://without.boats/blog/changing-the-rules-of-rust/, https://without.boats/blog/follow-up-to-changing-the-rules-of-rust/ and https://without.boats/blog/generic-trait-methods-and-new-auto-traits/, https://without.boats/blog/the-scoped-task-trilemma/
- Larger compiler team MCP including this feature - https://github.com/rust-lang/compiler-team/issues/727, it gives some more context
The issue right now is that there are regressions, some previously passing code now fails due to cycles in trait solver or something similar, @Bryanskiy has been trying to investigate it, but without success.
@lcnr, this is the work I've been talking about today. (Maybe it makes sense to ping some other types team members as well?)
The job x86_64-gnu-tools failed! Check out the build log: (web) (plain)
Click to see the possible cause of the failure (guessed by this bot)
GITHUB_ACTION=__run_7
GITHUB_ACTIONS=true
GITHUB_ACTION_REF=
GITHUB_ACTION_REPOSITORY=
GITHUB_ACTOR=Bryanskiy
GITHUB_API_URL=https://api.github.com
GITHUB_BASE_REF=master
GITHUB_ENV=/home/runner/work/_temp/_runner_file_commands/set_env_76215f50-6c26-49e0-946f-540d4972c81e
GITHUB_EVENT_NAME=pull_request
---
GITHUB_SERVER_URL=https://github.com
GITHUB_SHA=abcc93900a739d380c9e0720ccdcee16df106169
GITHUB_STATE=/home/runner/work/_temp/_runner_file_commands/save_state_76215f50-6c26-49e0-946f-540d4972c81e
GITHUB_STEP_SUMMARY=/home/runner/work/_temp/_runner_file_commands/step_summary_76215f50-6c26-49e0-946f-540d4972c81e
GITHUB_TRIGGERING_ACTOR=Bryanskiy
GITHUB_WORKFLOW_REF=rust-lang/rust/.github/workflows/ci.yml@refs/pull/120706/merge
GITHUB_WORKFLOW_SHA=abcc93900a739d380c9e0720ccdcee16df106169
GITHUB_WORKSPACE=/home/runner/work/rust/rust
GOROOT_1_19_X64=/opt/hostedtoolcache/go/1.19.13/x64
---
Compiling thorin-dwp v0.7.0
Compiling rustc_type_ir v0.0.0 (/checkout/compiler/rustc_type_ir)
Compiling rustc_ast v0.0.0 (/checkout/compiler/rustc_ast)
Compiling rustc_next_trait_solver v0.0.0 (/checkout/compiler/rustc_next_trait_solver)
error[E0275]: overflow evaluating the requirement `UnsafeCell<usize>: Leak`
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`rustc_ast`)
note: required because it appears within the type `AtomicUsize`
--> /checkout/library/core/src/sync/atomic.rs:3228:19
|
|
3192 | / macro_rules! atomic_int_ptr_sized {
3193 | | ( $($target_pointer_width:literal $align:literal)* ) => { $(
3194 | | #[cfg(target_pointer_width = $target_pointer_width)]
3195 | | atomic_int! {
3228 | | usize AtomicUsize
| | ^^^^^^^^^^^
... |
3250 | | )* };
3250 | | )* };
3251 | | }
| |_- in this expansion of `atomic_int_ptr_sized!`
...
3254 | / atomic_int_ptr_sized! {
3256 | | "32" 4
3257 | | "64" 8
3258 | | }
| |_- in this macro invocation
| |_- in this macro invocation
note: required because it appears within the type `smallvec::alloc::sync::ArcInner<Box<(dyn tokenstream::ToAttrTokenStream + 'static)>>`
|
|
356 | struct ArcInner<T: ?Sized> {
| ^^^^^^^^
= note: required because it appears within the type `*const smallvec::alloc::sync::ArcInner<Box<(dyn tokenstream::ToAttrTokenStream + 'static)>>`
note: required because it appears within the type `NonNull<smallvec::alloc::sync::ArcInner<Box<(dyn tokenstream::ToAttrTokenStream + 'static)>>>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Arc<Box<(dyn tokenstream::ToAttrTokenStream + 'static)>>`
|
248 | pub struct Arc<
| ^^^
note: required because it appears within the type `tokenstream::LazyAttrTokenStream`
note: required because it appears within the type `tokenstream::LazyAttrTokenStream`
--> compiler/rustc_ast/src/tokenstream.rs:135:12
|
135 | pub struct LazyAttrTokenStream(Lrc<Box<dyn ToAttrTokenStream>>);
| ^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `Option<tokenstream::LazyAttrTokenStream>`
|
570 | pub enum Option<T> {
| ^^^^^^
note: required because it appears within the type `ast::Local`
note: required because it appears within the type `ast::Local`
--> compiler/rustc_ast/src/ast.rs:1049:12
|
1049 | pub struct Local {
| ^^^^^
= note: required because it appears within the type `*const ast::Local`
note: required because it appears within the type `NonNull<ast::Local>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Unique<ast::Local>`
|
|
36 | pub struct Unique<T: ?Sized> {
| ^^^^^^
note: required because it appears within the type `Box<ast::Local>`
|
195 | pub struct Box<
| ^^^
| ^^^
note: required because it appears within the type `P<ast::Local>`
|
|
32 | pub struct P<T: ?Sized> {
| ^
note: required because it appears within the type `ast::StmtKind`
|
1011 | pub enum StmtKind {
| ^^^^^^^^
note: required because it appears within the type `ast::Stmt`
note: required because it appears within the type `ast::Stmt`
--> compiler/rustc_ast/src/ast.rs:964:12
|
964 | pub struct Stmt {
| ^^^^
note: required because it appears within the type `PhantomData<ast::Stmt>`
|
|
811 | pub struct PhantomData<T: ?Sized>;
note: required because it appears within the type `ThinVec<ast::Stmt>`
--> /cargo/registry/src/index.crates.io-6f17d22bba15001f/thin-vec-0.2.13/src/lib.rs:437:12
|
437 | pub struct ThinVec<T> {
---
= note: required because it appears within the type `*const ast::Block`
note: required because it appears within the type `NonNull<ast::Block>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::Block>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::Block>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::Block>`
|
|
32 | pub struct P<T: ?Sized> {
| ^
note: required because it appears within the type `Option<P<ast::Block>>`
|
570 | pub enum Option<T> {
| ^^^^^^
note: required because it appears within the type `ast::Fn`
note: required because it appears within the type `ast::Fn`
--> compiler/rustc_ast/src/ast.rs:3044:12
|
3044 | pub struct Fn {
| ^^
= note: required because it appears within the type `*const ast::Fn`
note: required because it appears within the type `NonNull<ast::Fn>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Unique<ast::Fn>`
|
|
36 | pub struct Unique<T: ?Sized> {
| ^^^^^^
note: required because it appears within the type `Box<ast::Fn>`
|
195 | pub struct Box<
| ^^^
note: required because it appears within the type `ast::ItemKind`
note: required because it appears within the type `ast::ItemKind`
--> compiler/rustc_ast/src/ast.rs:3077:10
|
3077 | pub enum ItemKind {
| ^^^^^^^^
note: required because it appears within the type `ast::Item`
--> compiler/rustc_ast/src/ast.rs:2869:12
|
2869 | pub struct Item<K = ItemKind> {
= note: required because it appears within the type `*const ast::Item`
note: required because it appears within the type `NonNull<ast::Item>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::Item>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::Item>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::Item>`
|
|
32 | pub struct P<T: ?Sized> {
note: required because it appears within the type `token::Nonterminal`
--> compiler/rustc_ast/src/token.rs:832:10
|
832 | pub enum Nonterminal {
832 | pub enum Nonterminal {
| ^^^^^^^^^^^
= note: required because it appears within the type `(token::Nonterminal, rustc_span::Span)`
note: required because it appears within the type `smallvec::alloc::sync::ArcInner<(token::Nonterminal, rustc_span::Span)>`
|
|
356 | struct ArcInner<T: ?Sized> {
| ^^^^^^^^
= note: required because it appears within the type `*const smallvec::alloc::sync::ArcInner<(token::Nonterminal, rustc_span::Span)>`
note: required because it appears within the type `NonNull<smallvec::alloc::sync::ArcInner<(token::Nonterminal, rustc_span::Span)>>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Arc<(token::Nonterminal, rustc_span::Span)>`
|
248 | pub struct Arc<
| ^^^
note: required because it appears within the type `token::TokenKind`
---
= note: required because it appears within the type `*const tokenstream::TokenTree`
note: required because it appears within the type `NonNull<tokenstream::TokenTree>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<tokenstream::TokenTree>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `smallvec::alloc::raw_vec::RawVec<tokenstream::TokenTree>`
--> /checkout/library/alloc/src/raw_vec.rs:61:19
|
|
61 | pub(crate) struct RawVec<T, A: Allocator = Global> {
note: required because it appears within the type `Vec<tokenstream::TokenTree>`
--> /checkout/library/alloc/src/vec/mod.rs:398:12
|
|
398 | pub struct Vec<T, #[unstable(feature = "allocator_api", issue = "32838")] A: Allocator = Global> {
| ^^^
note: required because it appears within the type `smallvec::alloc::sync::ArcInner<Vec<tokenstream::TokenTree>>`
|
|
356 | struct ArcInner<T: ?Sized> {
| ^^^^^^^^
= note: required because it appears within the type `*const smallvec::alloc::sync::ArcInner<Vec<tokenstream::TokenTree>>`
note: required because it appears within the type `NonNull<smallvec::alloc::sync::ArcInner<Vec<tokenstream::TokenTree>>>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Arc<Vec<tokenstream::TokenTree>>`
|
248 | pub struct Arc<
| ^^^
note: required because it appears within the type `tokenstream::TokenStream`
note: required because it appears within the type `tokenstream::TokenStream`
--> compiler/rustc_ast/src/tokenstream.rs:306:12
|
306 | pub struct TokenStream(pub(crate) Lrc<Vec<TokenTree>>);
| ^^^^^^^^^^^
note: required because it appears within the type `ast::DelimArgs`
|
1717 | pub struct DelimArgs {
| ^^^^^^^^^
| ^^^^^^^^^
= note: required because it appears within the type `*const ast::DelimArgs`
note: required because it appears within the type `NonNull<ast::DelimArgs>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Unique<ast::DelimArgs>`
|
|
36 | pub struct Unique<T: ?Sized> {
| ^^^^^^
note: required because it appears within the type `Box<ast::DelimArgs>`
|
195 | pub struct Box<
| ^^^
| ^^^
note: required because it appears within the type `P<ast::DelimArgs>`
|
|
32 | pub struct P<T: ?Sized> {
note: required because it appears within the type `ast::MacCall`
--> compiler/rustc_ast/src/ast.rs:1633:12
|
1633 | pub struct MacCall {
1633 | pub struct MacCall {
| ^^^^^^^
= note: required because it appears within the type `*const ast::MacCall`
note: required because it appears within the type `NonNull<ast::MacCall>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::MacCall>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::MacCall>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::MacCall>`
|
|
32 | pub struct P<T: ?Sized> {
note: required because it appears within the type `ast::PatKind`
--> compiler/rustc_ast/src/ast.rs:752:10
|
752 | pub enum PatKind {
---
= note: required because it appears within the type `*const ast::Pat`
note: required because it appears within the type `NonNull<ast::Pat>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::Pat>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::Pat>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::Pat>`
|
|
32 | pub struct P<T: ?Sized> {
note: required because it appears within the type `ast::ExprKind`
--> compiler/rustc_ast/src/ast.rs:1390:10
|
1390 | pub enum ExprKind {
---
= note: required because it appears within the type `*const ast::Expr`
note: required because it appears within the type `NonNull<ast::Expr>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::Expr>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::Expr>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::Expr>`
|
|
32 | pub struct P<T: ?Sized> {
note: required because it appears within the type `ast::AnonConst`
--> compiler/rustc_ast/src/ast.rs:1143:12
|
1143 | pub struct AnonConst {
---
= note: required because it appears within the type `*const ast::Ty`
note: required because it appears within the type `NonNull<ast::Ty>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::Ty>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::Ty>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::Ty>`
|
|
32 | pub struct P<T: ?Sized> {
note: required because it appears within the type `ast::GenericArg`
--> compiler/rustc_ast/src/ast.rs:195:10
|
195 | pub enum GenericArg {
195 | pub enum GenericArg {
| ^^^^^^^^^^
note: required because it appears within the type `ast::AngleBracketedArg`
--> compiler/rustc_ast/src/ast.rs:226:10
|
226 | pub enum AngleBracketedArg {
| ^^^^^^^^^^^^^^^^^
note: required because it appears within the type `PhantomData<ast::AngleBracketedArg>`
|
|
811 | pub struct PhantomData<T: ?Sized>;
note: required because it appears within the type `ThinVec<ast::AngleBracketedArg>`
--> /cargo/registry/src/index.crates.io-6f17d22bba15001f/thin-vec-0.2.13/src/lib.rs:437:12
|
437 | pub struct ThinVec<T> {
---
= note: required because it appears within the type `*const ast::GenericArgs`
note: required because it appears within the type `NonNull<ast::GenericArgs>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::GenericArgs>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::GenericArgs>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::GenericArgs>`
|
|
32 | pub struct P<T: ?Sized> {
| ^
note: required because it appears within the type `Option<P<ast::GenericArgs>>`
|
570 | pub enum Option<T> {
| ^^^^^^
note: required because it appears within the type `ast::PathSegment`
note: required because it appears within the type `ast::PathSegment`
--> compiler/rustc_ast/src/ast.rs:137:12
|
137 | pub struct PathSegment {
| ^^^^^^^^^^^
note: required because it appears within the type `PhantomData<ast::PathSegment>`
|
|
811 | pub struct PhantomData<T: ?Sized>;
note: required because it appears within the type `ThinVec<ast::PathSegment>`
--> /cargo/registry/src/index.crates.io-6f17d22bba15001f/thin-vec-0.2.13/src/lib.rs:437:12
|
437 | pub struct ThinVec<T> {
---
= note: required because it appears within the type `*const ast::NormalAttr`
note: required because it appears within the type `NonNull<ast::NormalAttr>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::NormalAttr>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::NormalAttr>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::NormalAttr>`
|
|
32 | pub struct P<T: ?Sized> {
note: required because it appears within the type `ast::AttrKind`
--> compiler/rustc_ast/src/ast.rs:2728:10
|
2728 | pub enum AttrKind {
2728 | pub enum AttrKind {
| ^^^^^^^^
note: required because it appears within the type `ast::Attribute`
--> compiler/rustc_ast/src/ast.rs:2718:12
|
2718 | pub struct Attribute {
| ^^^^^^^^^
note: required because it appears within the type `PhantomData<ast::Attribute>`
|
|
811 | pub struct PhantomData<T: ?Sized>;
note: required because it appears within the type `ThinVec<ast::Attribute>`
--> /cargo/registry/src/index.crates.io-6f17d22bba15001f/thin-vec-0.2.13/src/lib.rs:437:12
|
437 | pub struct ThinVec<T> {
437 | pub struct ThinVec<T> {
| ^^^^^^^
note: required because it appears within the type `ast::GenericParam`
--> compiler/rustc_ast/src/ast.rs:362:12
|
362 | pub struct GenericParam {
| ^^^^^^^^^^^^
note: required because it appears within the type `PhantomData<ast::GenericParam>`
|
|
811 | pub struct PhantomData<T: ?Sized>;
| ^^^^^^^^^^^
note: required because it appears within the type `ThinVec<ast::GenericParam>`
--> /cargo/registry/src/index.crates.io-6f17d22bba15001f/thin-vec-0.2.13/src/lib.rs:437:12
437 | pub struct ThinVec<T> {
| ^^^^^^^
note: required because it appears within the type `ast::PolyTraitRef`
--> compiler/rustc_ast/src/ast.rs:2773:12
--> compiler/rustc_ast/src/ast.rs:2773:12
|
2773 | pub struct PolyTraitRef {
| ^^^^^^^^^^^^
note: required because it appears within the type `ast::GenericBound`
|
311 | pub enum GenericBound {
| ^^^^^^^^^^^^
| ^^^^^^^^^^^^
= note: required because it appears within the type `*const ast::GenericBound`
note: required because it appears within the type `NonNull<ast::GenericBound>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Unique<ast::GenericBound>`
|
|
36 | pub struct Unique<T: ?Sized> {
| ^^^^^^
note: required because it appears within the type `smallvec::alloc::raw_vec::RawVec<ast::GenericBound>`
|
|
61 | pub(crate) struct RawVec<T, A: Allocator = Global> {
| ^^^^^^
note: required because it appears within the type `Vec<ast::GenericBound>`
|
|
398 | pub struct Vec<T, #[unstable(feature = "allocator_api", issue = "32838")] A: Allocator = Global> {
note: required because it appears within the type `ast::WhereRegionPredicate`
--> compiler/rustc_ast/src/ast.rs:459:12
|
459 | pub struct WhereRegionPredicate {
459 | pub struct WhereRegionPredicate {
| ^^^^^^^^^^^^^^^^^^^^
error[E0275]: overflow evaluating the requirement `UnsafeCell<usize>: Leak`
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`rustc_ast`)
note: required because it appears within the type `AtomicUsize`
--> /checkout/library/core/src/sync/atomic.rs:3228:19
|
|
3192 | / macro_rules! atomic_int_ptr_sized {
3193 | | ( $($target_pointer_width:literal $align:literal)* ) => { $(
3194 | | #[cfg(target_pointer_width = $target_pointer_width)]
3195 | | atomic_int! {
3228 | | usize AtomicUsize
| | ^^^^^^^^^^^
... |
3250 | | )* };
3250 | | )* };
3251 | | }
| |_- in this expansion of `atomic_int_ptr_sized!`
...
3254 | / atomic_int_ptr_sized! {
3256 | | "32" 4
3257 | | "64" 8
3258 | | }
| |_- in this macro invocation
| |_- in this macro invocation
note: required because it appears within the type `smallvec::alloc::sync::ArcInner<Box<(dyn tokenstream::ToAttrTokenStream + 'static)>>`
|
|
356 | struct ArcInner<T: ?Sized> {
| ^^^^^^^^
= note: required because it appears within the type `*const smallvec::alloc::sync::ArcInner<Box<(dyn tokenstream::ToAttrTokenStream + 'static)>>`
note: required because it appears within the type `NonNull<smallvec::alloc::sync::ArcInner<Box<(dyn tokenstream::ToAttrTokenStream + 'static)>>>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Arc<Box<(dyn tokenstream::ToAttrTokenStream + 'static)>>`
|
248 | pub struct Arc<
| ^^^
note: required because it appears within the type `tokenstream::LazyAttrTokenStream`
note: required because it appears within the type `tokenstream::LazyAttrTokenStream`
--> compiler/rustc_ast/src/tokenstream.rs:135:12
|
135 | pub struct LazyAttrTokenStream(Lrc<Box<dyn ToAttrTokenStream>>);
| ^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `Option<tokenstream::LazyAttrTokenStream>`
|
570 | pub enum Option<T> {
| ^^^^^^
note: required because it appears within the type `ast::Local`
note: required because it appears within the type `ast::Local`
--> compiler/rustc_ast/src/ast.rs:1049:12
|
1049 | pub struct Local {
| ^^^^^
= note: required because it appears within the type `*const ast::Local`
note: required because it appears within the type `NonNull<ast::Local>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Unique<ast::Local>`
|
|
36 | pub struct Unique<T: ?Sized> {
| ^^^^^^
note: required because it appears within the type `Box<ast::Local>`
|
195 | pub struct Box<
| ^^^
| ^^^
note: required because it appears within the type `P<ast::Local>`
|
|
32 | pub struct P<T: ?Sized> {
| ^
note: required because it appears within the type `ast::StmtKind`
|
1011 | pub enum StmtKind {
| ^^^^^^^^
note: required because it appears within the type `ast::Stmt`
note: required because it appears within the type `ast::Stmt`
--> compiler/rustc_ast/src/ast.rs:964:12
|
964 | pub struct Stmt {
| ^^^^
note: required because it appears within the type `PhantomData<ast::Stmt>`
|
|
811 | pub struct PhantomData<T: ?Sized>;
note: required because it appears within the type `ThinVec<ast::Stmt>`
--> /cargo/registry/src/index.crates.io-6f17d22bba15001f/thin-vec-0.2.13/src/lib.rs:437:12
|
437 | pub struct ThinVec<T> {
---
= note: required because it appears within the type `*const ast::Block`
note: required because it appears within the type `NonNull<ast::Block>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::Block>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::Block>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::Block>`
|
|
32 | pub struct P<T: ?Sized> {
| ^
note: required because it appears within the type `Option<P<ast::Block>>`
|
570 | pub enum Option<T> {
| ^^^^^^
note: required because it appears within the type `ast::Fn`
note: required because it appears within the type `ast::Fn`
--> compiler/rustc_ast/src/ast.rs:3044:12
|
3044 | pub struct Fn {
| ^^
= note: required because it appears within the type `*const ast::Fn`
note: required because it appears within the type `NonNull<ast::Fn>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Unique<ast::Fn>`
|
|
36 | pub struct Unique<T: ?Sized> {
| ^^^^^^
note: required because it appears within the type `Box<ast::Fn>`
|
195 | pub struct Box<
| ^^^
note: required because it appears within the type `ast::ItemKind`
note: required because it appears within the type `ast::ItemKind`
--> compiler/rustc_ast/src/ast.rs:3077:10
|
3077 | pub enum ItemKind {
| ^^^^^^^^
note: required because it appears within the type `ast::Item`
--> compiler/rustc_ast/src/ast.rs:2869:12
|
2869 | pub struct Item<K = ItemKind> {
= note: required because it appears within the type `*const ast::Item`
note: required because it appears within the type `NonNull<ast::Item>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::Item>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::Item>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::Item>`
|
|
32 | pub struct P<T: ?Sized> {
note: required because it appears within the type `token::Nonterminal`
--> compiler/rustc_ast/src/token.rs:832:10
|
832 | pub enum Nonterminal {
832 | pub enum Nonterminal {
| ^^^^^^^^^^^
= note: required because it appears within the type `(token::Nonterminal, rustc_span::Span)`
note: required because it appears within the type `smallvec::alloc::sync::ArcInner<(token::Nonterminal, rustc_span::Span)>`
|
|
356 | struct ArcInner<T: ?Sized> {
| ^^^^^^^^
= note: required because it appears within the type `*const smallvec::alloc::sync::ArcInner<(token::Nonterminal, rustc_span::Span)>`
note: required because it appears within the type `NonNull<smallvec::alloc::sync::ArcInner<(token::Nonterminal, rustc_span::Span)>>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Arc<(token::Nonterminal, rustc_span::Span)>`
|
248 | pub struct Arc<
| ^^^
note: required because it appears within the type `token::TokenKind`
---
= note: required because it appears within the type `*const tokenstream::TokenTree`
note: required because it appears within the type `NonNull<tokenstream::TokenTree>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<tokenstream::TokenTree>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `smallvec::alloc::raw_vec::RawVec<tokenstream::TokenTree>`
--> /checkout/library/alloc/src/raw_vec.rs:61:19
|
|
61 | pub(crate) struct RawVec<T, A: Allocator = Global> {
note: required because it appears within the type `Vec<tokenstream::TokenTree>`
--> /checkout/library/alloc/src/vec/mod.rs:398:12
|
|
398 | pub struct Vec<T, #[unstable(feature = "allocator_api", issue = "32838")] A: Allocator = Global> {
| ^^^
note: required because it appears within the type `smallvec::alloc::sync::ArcInner<Vec<tokenstream::TokenTree>>`
|
|
356 | struct ArcInner<T: ?Sized> {
| ^^^^^^^^
= note: required because it appears within the type `*const smallvec::alloc::sync::ArcInner<Vec<tokenstream::TokenTree>>`
note: required because it appears within the type `NonNull<smallvec::alloc::sync::ArcInner<Vec<tokenstream::TokenTree>>>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Arc<Vec<tokenstream::TokenTree>>`
|
248 | pub struct Arc<
| ^^^
note: required because it appears within the type `tokenstream::TokenStream`
note: required because it appears within the type `tokenstream::TokenStream`
--> compiler/rustc_ast/src/tokenstream.rs:306:12
|
306 | pub struct TokenStream(pub(crate) Lrc<Vec<TokenTree>>);
| ^^^^^^^^^^^
note: required because it appears within the type `ast::DelimArgs`
|
1717 | pub struct DelimArgs {
| ^^^^^^^^^
| ^^^^^^^^^
note: required because it appears within the type `ast::AttrArgs`
|
|
1646 | pub enum AttrArgs {
note: required because it appears within the type `ast::AttrItem`
--> compiler/rustc_ast/src/ast.rs:2754:12
|
2754 | pub struct AttrItem {
---
= note: required because it appears within the type `*const ast::NormalAttr`
note: required because it appears within the type `NonNull<ast::NormalAttr>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::NormalAttr>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::NormalAttr>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::NormalAttr>`
|
|
32 | pub struct P<T: ?Sized> {
note: required because it appears within the type `ast::AttrKind`
--> compiler/rustc_ast/src/ast.rs:2728:10
|
2728 | pub enum AttrKind {
2728 | pub enum AttrKind {
| ^^^^^^^^
note: required because it appears within the type `ast::Attribute`
--> compiler/rustc_ast/src/ast.rs:2718:12
|
2718 | pub struct Attribute {
| ^^^^^^^^^
note: required because it appears within the type `PhantomData<ast::Attribute>`
|
|
811 | pub struct PhantomData<T: ?Sized>;
note: required because it appears within the type `ThinVec<ast::Attribute>`
--> /cargo/registry/src/index.crates.io-6f17d22bba15001f/thin-vec-0.2.13/src/lib.rs:437:12
|
437 | pub struct ThinVec<T> {
437 | pub struct ThinVec<T> {
| ^^^^^^^
note: required because it appears within the type `ast::GenericParam`
--> compiler/rustc_ast/src/ast.rs:362:12
|
362 | pub struct GenericParam {
| ^^^^^^^^^^^^
note: required because it appears within the type `PhantomData<ast::GenericParam>`
|
|
811 | pub struct PhantomData<T: ?Sized>;
| ^^^^^^^^^^^
note: required because it appears within the type `ThinVec<ast::GenericParam>`
--> /cargo/registry/src/index.crates.io-6f17d22bba15001f/thin-vec-0.2.13/src/lib.rs:437:12
437 | pub struct ThinVec<T> {
| ^^^^^^^
note: required because it appears within the type `ast::PolyTraitRef`
--> compiler/rustc_ast/src/ast.rs:2773:12
--> compiler/rustc_ast/src/ast.rs:2773:12
|
2773 | pub struct PolyTraitRef {
| ^^^^^^^^^^^^
note: required because it appears within the type `ast::GenericBound`
|
311 | pub enum GenericBound {
| ^^^^^^^^^^^^
| ^^^^^^^^^^^^
= note: required because it appears within the type `*const ast::GenericBound`
note: required because it appears within the type `NonNull<ast::GenericBound>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Unique<ast::GenericBound>`
|
|
36 | pub struct Unique<T: ?Sized> {
| ^^^^^^
note: required because it appears within the type `smallvec::alloc::raw_vec::RawVec<ast::GenericBound>`
|
|
61 | pub(crate) struct RawVec<T, A: Allocator = Global> {
| ^^^^^^
note: required because it appears within the type `Vec<ast::GenericBound>`
|
|
398 | pub struct Vec<T, #[unstable(feature = "allocator_api", issue = "32838")] A: Allocator = Global> {
| ^^^
note: required because it appears within the type `ast::AssocConstraintKind`
|
|
2043 | pub enum AssocConstraintKind {
| ^^^^^^^^^^^^^^^^^^^
note: required because it appears within the type `ast::AssocConstraint`
|
2014 | pub struct AssocConstraint {
| ^^^^^^^^^^^^^^^
note: required because it appears within the type `ast::AngleBracketedArg`
note: required because it appears within the type `ast::AngleBracketedArg`
--> compiler/rustc_ast/src/ast.rs:226:10
|
226 | pub enum AngleBracketedArg {
| ^^^^^^^^^^^^^^^^^
note: required because it appears within the type `PhantomData<ast::AngleBracketedArg>`
|
|
811 | pub struct PhantomData<T: ?Sized>;
note: required because it appears within the type `ThinVec<ast::AngleBracketedArg>`
--> /cargo/registry/src/index.crates.io-6f17d22bba15001f/thin-vec-0.2.13/src/lib.rs:437:12
|
437 | pub struct ThinVec<T> {
---
= note: required because it appears within the type `*const ast::GenericArgs`
note: required because it appears within the type `NonNull<ast::GenericArgs>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::GenericArgs>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::GenericArgs>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::GenericArgs>`
|
|
32 | pub struct P<T: ?Sized> {
| ^
note: required because it appears within the type `Option<P<ast::GenericArgs>>`
|
570 | pub enum Option<T> {
| ^^^^^^
note: required because it appears within the type `ast::PathSegment`
---
= note: required because it appears within the type `*const ast::MethodCall`
note: required because it appears within the type `NonNull<ast::MethodCall>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::MethodCall>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::MethodCall>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
---
= note: required because it appears within the type `*const ast::Expr`
note: required because it appears within the type `NonNull<ast::Expr>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::Expr>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::Expr>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::Expr>`
|
|
32 | pub struct P<T: ?Sized> {
note: required because it appears within the type `ast::AnonConst`
--> compiler/rustc_ast/src/ast.rs:1143:12
|
1143 | pub struct AnonConst {
---
= note: required because it appears within the type `*const ast::Ty`
note: required because it appears within the type `NonNull<ast::Ty>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::Ty>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::Ty>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::Ty>`
|
|
32 | pub struct P<T: ?Sized> {
note: required because it appears within the type `ast::QSelf`
--> compiler/rustc_ast/src/ast.rs:1583:12
|
1583 | pub struct QSelf {
1583 | pub struct QSelf {
| ^^^^^
= note: required because it appears within the type `*const ast::QSelf`
note: required because it appears within the type `NonNull<ast::QSelf>`
|
|
74 | pub struct NonNull<T: ?Sized> {
| ^^^^^^^
note: required because it appears within the type `Unique<ast::QSelf>`
|
|
36 | pub struct Unique<T: ?Sized> {
| ^^^^^^
note: required because it appears within the type `Box<ast::QSelf>`
|
195 | pub struct Box<
| ^^^
| ^^^
note: required because it appears within the type `P<ast::QSelf>`
|
|
32 | pub struct P<T: ?Sized> {
| ^
note: required because it appears within the type `Option<P<ast::QSelf>>`
|
570 | pub enum Option<T> {
| ^^^^^^
note: required because it appears within the type `ast::PatKind`
---
= note: required because it appears within the type `*const ast::Pat`
note: required because it appears within the type `NonNull<ast::Pat>`
--> /checkout/library/core/src/ptr/non_null.rs:74:12
|
74 | pub struct NonNull<T: ?Sized> {
note: required because it appears within the type `Unique<ast::Pat>`
--> /checkout/library/core/src/ptr/unique.rs:36:12
|
|
36 | pub struct Unique<T: ?Sized> {
note: required because it appears within the type `Box<ast::Pat>`
--> /checkout/library/alloc/src/boxed.rs:195:12
|
195 | pub struct Box<
195 | pub struct Box<
| ^^^
note: required because it appears within the type `P<ast::Pat>`
|
|
32 | pub struct P<T: ?Sized> {
note: required because it appears within the type `ast::PatField`
--> compiler/rustc_ast/src/ast.rs:681:12
|
681 | pub struct PatField {
I want to reproduce regressions in CI
@rustbot author
it would be good to get an MVCE for the new cycles, otherwise debugging this without fully going through the PR is hard
@lcnr From what I know the cycles appear in some tests in the ui test suite, those are sufficiently minimized. They should be visible in this PR when it's updated.
@lcnr could you take a look at regressions in CI logs? Note that logs contain noise due to overflow diagnostic. Also, there are several hanging tests:
tests/ui/traits/next-solver/cycles/coinduction/fixpoint-exponential-growth.rs tests/ui/issues/issue-29147-rpass.rs tests/ui/issues/issue-29147.rs
@rustbot ready
many tests just have changed error messages. T: Trait was previously T: Sized + Trait and is now T: Leak + Sized + Trait, so while they previously overflowed computing Sized they now overflow computing Leak. Alternatively we just get additional errors for each of the added auto traits.
afaict issue-29147.rs hangs because checking whether the Foo impls overlap now checks whether S5<u64>: Leak does not hold. As leak is an auto trait, this recurses into S5 which results in exponential (but cachable) blowup. However, we don't cache trait solving in intercrate mode (which is used by coherence) https://github.com/rust-lang/rust/blob/972452c4473b2d8f6f6415614f915296bfc34f12/compiler/rustc_trait_selection/src/traits/select/mod.rs#L1506-L1527 this understandably causes this hang. The new solver does cache during coherence as well, so the below minimization works with -Znext-solver but hangs with the old solver
#![feature(auto_traits)]
#![recursion_limit="1024"]
#![allow(dead_code)]
auto trait New {}
pub struct S0<T>(T,T);
pub struct S1<T>(Option<Box<S0<S0<T>>>>,Option<Box<S0<S0<T>>>>);
pub struct S2<T>(Option<Box<S1<S1<T>>>>,Option<Box<S1<S1<T>>>>);
pub struct S3<T>(Option<Box<S2<S2<T>>>>,Option<Box<S2<S2<T>>>>);
pub struct S4<T>(Option<Box<S3<S3<T>>>>,Option<Box<S3<S3<T>>>>);
pub struct S5<T>(Option<Box<S4<S4<T>>>>,Option<Box<S4<S4<T>>>>,Option<T>);
trait Foo { fn xxx(&self); }
trait Bar {}
impl<T> Foo for T where T: New, T: Bar {
fn xxx(&self) {}
}
impl Foo for S5<u32> { fn xxx(&self) {} }
impl Foo for S5<u64> { fn xxx(&self) {} }
fn main() {}
In general: any hangs/issues in the trait solver with your PR can be reproduced by manually adding the where-bounds everywhere and then testing on master. Your changes to the trait system itself are correct.
The hang in tests/ui/traits/next-solver/cycles/coinduction/fixpoint-exponential-growth.rs is expected as we now both recursively grow types until we hit the recursion limit but at each step also separately shrink the type while trying to prove the auto trait bounds. You can ignore this test for now, the hang feels very difficult to avoid.
If there are any tests which you believe don't fall into the above categories, feel free to ask.
@lcnr thanks for your response. Unfortunately, there are still some tests that I don't understand:
- Query cycles in next solver: tests/ui/higher-ranked/trait-bounds/future.rs#next (there are similar tests)
- tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs#next
- async closures: tests/ui/async-await/async-fn/sugar.rs (there are similar tests)
- tests/ui/coherence/negative-coherence-placeholder-region-constraints-on-unification.rs#implicit
- non-lifetime binders: tests/ui/traits/non_lifetime_binders/on-rpit.rs(there are similar tests)
:umbrella: The latest upstream changes (presumably #120594) made this pull request unmergeable. Please resolve the merge conflicts.
@lcnr thanks for your response. Unfortunately, there are still some tests that I don't understand:
1. Query cycles in next solver: tests/ui/higher-ranked/trait-bounds/future.rs#next (there are similar tests)
you now trigger https://github.com/rust-lang/trait-system-refactor-initiative/issues/82, can ignore
2. tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs#next
probably caused by
#![feature(auto_traits)]
#![feature(object_safe_for_dispatch)]
auto trait Leak {}
// you add a `Leak` bound here
trait Trait: Leak {
fn not_object_safe() {}
}
// But not to `dyn Trait`
impl<'a> Trait for dyn Trait + 'a {
fn not_object_safe() {}
}
please try to desugar your issues manually, and then test using the nightly compiler to check whether you get the same error. This makes it often clear why something errors
3. async closures: tests/ui/async-await/async-fn/sugar.rs (there are similar tests)
unsure, would have to figure out how the desugaring works for this test, pretty sure it's generally caused by https://github.com/rust-lang/rust/issues/110338
4. tests/ui/coherence/negative-coherence-placeholder-region-constraints-on-unification.rs#implicit
Using the !Marker impl now always has an Leak bound. negative_coherence checks whether &T: !Marker holds with a T: Leak assumption. idk why exactly this fails but also don't care, so feel free to break this, changing this to a // known-bug test instead
5. non-lifetime binders: tests/ui/traits/non_lifetime_binders/on-rpit.rs(there are similar tests)
we don't have where-bounds on non-lifetime binders, so for<T> Whatever literally asks: "for any T without any bounds, does Whatever hold". If proving that requires T: Leak, this fails. Unavoidable, feel free to break non-lifetime binder tests
probably caused by
#![feature(auto_traits)] #![feature(object_safe_for_dispatch)] auto trait Leak {} // you add a `Leak` bound here trait Trait: Leak { fn not_object_safe() {} } // But not to `dyn Trait` impl<'a> Trait for dyn Trait + 'a { fn not_object_safe() {} }
Leak bound is added for trait objects. The problem here is that test doesn't work with -Znext-solver. Same for nightly compiler.
fun, this is a divergence between the old and new solver then, you can mark it as known-bug https://github.com/rust-lang/trait-system-refactor-initiative/issues/91
The job mingw-check-tidy failed! Check out the build log: (web) (plain)
Click to see the possible cause of the failure (guessed by this bot)
Prepare all required actions
Getting action download info
Download action repository 'actions/checkout@v4' (SHA:b4ffde65f46336ab88eb53be808477a3936bae11)
Download action repository 'actions/upload-artifact@v3' (SHA:a8a3f3ad30e3422c9c7b888a15615d19a852ae32)
Complete job name: PR - mingw-check-tidy
git config --global core.autocrlf false
shell: /usr/bin/bash --noprofile --norc -e -o pipefail {0}
---
GITHUB_ACTION=__run_7
GITHUB_ACTIONS=true
GITHUB_ACTION_REF=
GITHUB_ACTION_REPOSITORY=
GITHUB_ACTOR=Bryanskiy
GITHUB_API_URL=https://api.github.com
GITHUB_BASE_REF=master
GITHUB_ENV=/home/runner/work/_temp/_runner_file_commands/set_env_e563681a-2ab7-422a-a7fc-ba375628218d
GITHUB_EVENT_NAME=pull_request
---
GITHUB_SERVER_URL=https://github.com
GITHUB_SHA=24bf958c950ff48e00280a16a0ca9e84ba5816d9
GITHUB_STATE=/home/runner/work/_temp/_runner_file_commands/save_state_e563681a-2ab7-422a-a7fc-ba375628218d
GITHUB_STEP_SUMMARY=/home/runner/work/_temp/_runner_file_commands/step_summary_e563681a-2ab7-422a-a7fc-ba375628218d
GITHUB_TRIGGERING_ACTOR=Bryanskiy
GITHUB_WORKFLOW_REF=rust-lang/rust/.github/workflows/ci.yml@refs/pull/120706/merge
GITHUB_WORKFLOW_SHA=24bf958c950ff48e00280a16a0ca9e84ba5816d9
GITHUB_WORKSPACE=/home/runner/work/rust/rust
GOROOT_1_19_X64=/opt/hostedtoolcache/go/1.19.13/x64
---
COPY scripts/sccache.sh /scripts/
RUN sh /scripts/sccache.sh
COPY host-x86_64/mingw-check/reuse-requirements.txt /tmp/
RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-requirements.txt \
&& pip3 install virtualenv
COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
COPY host-x86_64/mingw-check/validate-error-codes.sh /scripts/
# NOTE: intentionally uses python2 for x.py so we can test it still works.
# NOTE: intentionally uses python2 for x.py so we can test it still works.
# validate-toolstate only runs in our CI, so it's ok for it to only support python3.
ENV SCRIPT TIDY_PRINT_DIFF=1 python2.7 ../x.py test \
--stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
# pip-compile --allow-unsafe --generate-hashes reuse-requirements.in
---
#10 [5/8] COPY host-x86_64/mingw-check/reuse-requirements.txt /tmp/
#10 DONE 0.0s
#11 [6/8] RUN pip3 install --no-deps --no-cache-dir --require-hashes -r /tmp/reuse-requirements.txt && pip3 install virtualenv
#11 0.576 Downloading binaryornot-0.4.4-py2.py3-none-any.whl (9.0 kB)
#11 0.591 Collecting boolean-py==4.0
#11 0.598 Downloading boolean.py-4.0-py3-none-any.whl (25 kB)
#11 0.616 Collecting chardet==5.1.0
---
#11 3.691 Building wheels for collected packages: reuse
#11 3.691 Building wheel for reuse (pyproject.toml): started
#11 4.018 Building wheel for reuse (pyproject.toml): finished with status 'done'
#11 4.018 Created wheel for reuse: filename=reuse-1.1.0-cp310-cp310-manylinux_2_35_x86_64.whl size=181117 sha256=f5f58750481f69515c2c0d1d503daf565e2565c370d07fc6aeb95fe3498b4269
#11 4.019 Stored in directory: /tmp/pip-ephem-wheel-cache-n9gq0mg0/wheels/c2/3c/b9/1120c2ab4bd82694f7e6f0537dc5b9a085c13e2c69a8d0c76d
#11 4.021 Installing collected packages: boolean-py, binaryornot, setuptools, reuse, python-debian, markupsafe, license-expression, jinja2, chardet
#11 4.044 Attempting uninstall: setuptools
#11 4.044 Found existing installation: setuptools 59.6.0
#11 4.045 Not uninstalling setuptools at /usr/lib/python3/dist-packages, outside environment /usr
---
#11 5.289 Downloading virtualenv-20.25.0-py3-none-any.whl (3.8 MB)
#11 5.462 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 3.8/3.8 MB 22.1 MB/s eta 0:00:00
#11 5.513 Collecting filelock<4,>=3.12.2
#11 5.520 Downloading filelock-3.13.1-py3-none-any.whl (11 kB)
#11 5.540 Collecting distlib<1,>=0.3.7
#11 5.547 Downloading distlib-0.3.8-py2.py3-none-any.whl (468 kB)
#11 5.559 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 468.9/468.9 KB 45.0 MB/s eta 0:00:00
#11 5.590 Collecting platformdirs<5,>=3.9.1
#11 5.597 Downloading platformdirs-4.2.0-py3-none-any.whl (17 kB)
#11 5.682 Installing collected packages: distlib, platformdirs, filelock, virtualenv
#11 5.845 Successfully installed distlib-0.3.8 filelock-3.13.1 platformdirs-4.2.0 virtualenv-20.25.0
#11 DONE 5.9s
#12 [7/8] COPY host-x86_64/mingw-check/validate-toolstate.sh /scripts/
#12 DONE 0.0s
---
DirectMap4k: 161728 kB
DirectMap2M: 6129664 kB
DirectMap1G: 12582912 kB
##[endgroup]
Executing TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
+ TIDY_PRINT_DIFF=1 python2.7 ../x.py test --stage 0 src/tools/tidy tidyselftest --extra-checks=py:lint
Finished dev [unoptimized] target(s) in 0.03s
##[endgroup]
downloading https://ci-artifacts.rust-lang.org/rustc-builds-alt/fd9bb7fddedddc2ab48665214efae780dc64af2d/rust-dev-nightly-x86_64-unknown-linux-gnu.tar.xz
extracting /checkout/obj/build/cache/llvm-fd9bb7fddedddc2ab48665214efae780dc64af2d-true/rust-dev-nightly-x86_64-unknown-linux-gnu.tar.xz to /checkout/obj/build/x86_64-unknown-linux-gnu/ci-llvm
---
Finished release [optimized] target(s) in 24.67s
##[endgroup]
fmt check
tidy check
tidy error: `ISSUES_ENTRY_LIMIT` is too high (is 1794, should be 1791)
removing old virtual environment
removing old virtual environment
creating virtual environment at '/checkout/obj/build/venv' using 'python3.10'
Requirement already satisfied: pip in ./build/venv/lib/python3.10/site-packages (23.3.1)
Collecting pip
Downloading pip-24.0-py3-none-any.whl.metadata (3.6 kB)
Downloading pip-24.0-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 23.3.1
Uninstalling pip-23.3.1:
Uninstalling pip-23.3.1:
Successfully uninstalled pip-23.3.1
Successfully installed pip-24.0
Collecting black==23.3.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 7))
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 7.7 MB/s eta 0:00:00
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.7/1.7 MB 7.7 MB/s eta 0:00:00
Collecting click==8.1.3 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 34))
Downloading click-8.1.3-py3-none-any.whl (96 kB)
Collecting importlib-metadata==6.7.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 38))
Downloading importlib_metadata-6.7.0-py3-none-any.whl (22 kB)
Downloading importlib_metadata-6.7.0-py3-none-any.whl (22 kB)
Collecting mypy-extensions==1.0.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 42))
Downloading mypy_extensions-1.0.0-py3-none-any.whl (4.7 kB)
Collecting packaging==23.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 46))
Downloading packaging-23.1-py3-none-any.whl (48 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 48.9/48.9 kB 615.3 kB/s eta 0:00:00
Collecting pathspec==0.11.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 50))
Downloading pathspec-0.11.1-py3-none-any.whl (29 kB)
Collecting platformdirs==3.6.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 54))
Downloading platformdirs-3.6.0-py3-none-any.whl (16 kB)
Collecting ruff==0.0.272 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 58))
Downloading ruff-0.0.272-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.9 MB)
Collecting tomli==2.0.1 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 77))
Downloading tomli-2.0.1-py3-none-any.whl (12 kB)
Collecting typed-ast==1.5.4 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 81))
Downloading typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (877 kB)
Downloading typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (877 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 877.7/877.7 kB 20.3 MB/s eta 0:00:00
Collecting typing-extensions==4.6.3 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 107))
Downloading typing_extensions-4.6.3-py3-none-any.whl (31 kB)
Collecting zipp==3.15.0 (from -r /checkout/src/tools/tidy/config/requirements.txt (line 114))
Downloading zipp-3.15.0-py3-none-any.whl (6.8 kB)
Installing collected packages: zipp, typing-extensions, typed-ast, tomli, ruff, platformdirs, pathspec, packaging, mypy-extensions, click, importlib-metadata, black
Successfully installed black-23.3.0 click-8.1.3 importlib-metadata-6.7.0 mypy-extensions-1.0.0 packaging-23.1 pathspec-0.11.1 platformdirs-3.6.0 ruff-0.0.272 tomli-2.0.1 typed-ast-1.5.4 typing-extensions-4.6.3 zipp-3.15.0
some tidy checks failed
Build completed unsuccessfully in 0:01:02
local time: Tue Feb 13 10:31:52 UTC 2024
network time: Tue, 13 Feb 2024 10:31:52 GMT
@bors try @rust-timer queue
Awaiting bors try build completion.
@rustbot label: +S-waiting-on-perf
:hourglass: Trying commit cb7935e6961cb232d59b1c7af255dbb26d94e585 with merge 80671ae98b92cfd0921bca8f60af237d8a341c73...
I'm still going to run crater on this, even if there will clearly be regressions due to cycles, just to estimate the scale of their effect.
:broken_heart: Test failed - checks-actions
:umbrella: The latest upstream changes (presumably #120454) made this pull request unmergeable. Please resolve the merge conflicts.
@lcnr I have one more question. I tried to build a stage 2 compiler with new default bounds and got an overflow error:
error[E0275]: overflow evaluating the requirement `rustc_type_ir::Canonical<context::TyCtxt<'hir>, ty::ParamEnvAnd<'hir, AliasTy<'hir>>>: std::cmp::Eq`
--> compiler/rustc_middle/src/hir/map/mod.rs:540:55
|
540 | pub fn parent_id_iter(self, current_id: HirId) -> impl Iterator<Item = HirId> + 'hir {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: required for `DefaultCacheSelector<rustc_type_ir::Canonical<context::TyCtxt<'hir>, ty::ParamEnvAnd<'hir, AliasTy<'hir>>>>` to implement `rustc_query_system::query::CacheSelector<'hir, Erased<query::erase::Erase<Result<&'hir rustc_type_ir::Canonical<context::TyCtxt<'hir>, QueryResponse<'hir, traits::query::NormalizationResult<'hir>>>, traits::query::NoSolution>>::{opaque#0}>>`
note: required because it appears within the type `QueryCaches<'hir>`
The error doesn't depend on the recursion limit and arose in this condition:
https://github.com/rust-lang/rust/blob/81b757c670483604c5ad04370bc505ba3d21356a/compiler/rustc_trait_selection/src/traits/fulfill.rs#L678-L684
The cycle consist of Eq predicate and group of Leak predicates. Finally, it was fixed by explicit impl
unsafe impl core::marker::Leak for TyCtxt<'_> {}
unsafe impl core::marker::SyncDrop for TyCtxt<'_> {}
How is it possible for Eq goal to appear in Leak proof tree? Is this behavior some kind of fundamental restriction related to a large number of predicates? Could it be a bug in the compiler?
given that canonical is generic over the TyCtxt, impls on it add the implicit TyCtxt: Leak bound.
Then proving TyCtxt: Leak requires normalizing associated types contained in the TyCtxt, e.g. of TyKind<TyCtxt<'tcx>>. This requires proving TyCtxt<'tcx>: Interner and maybe Eq somewhere :thinking: a bit unsure where the Eq bound comes from, you'd have to look at the whole cycle to figure out what causes the Eq bound
Silly question - why doesn't Sized have similar issues with cycles?
Can we make the new traits more like Sized and less like Send?
Silly question - why doesn't
Sizedhave similar issues with cycles? Can we make the new traits more likeSizedand less likeSend?
Because Sized does not recurse into indirection and types tend to often use indirection for nested fields. E.g. TyCtxt mostly has variably sized tables, whose Sized-ness does not depend on the stored type, so checking Sized never recurses into them
Might be worth a mention wrt to these cycles: they should be fixed once we switch to coinductive trait semantics: I thought niko wrote a blogpost about them somewhere :sweat_smile: can't find it rn. Anyways, the idea would be that cycles would be coinductive (i.e. they are considered to hold) if there's at least one step where we're proving impl where-clauses. There are some easy ways in which that can result in unsoundness if you're not careful, but we do intend to land this as it's also necessary to fully fix implied region bounds. This is blocked on the new solver being stable everywhere however