rust icon indicating copy to clipboard operation
rust copied to clipboard

Initial support for auto traits with default bounds

Open Bryanskiy opened this issue 2 years ago • 53 comments

Summary: https://github.com/rust-lang/rust/pull/120706#issuecomment-1934006762

r? @petrochenkov

Bryanskiy avatar Feb 06 '24 16:02 Bryanskiy

@rustbot author

Bryanskiy avatar Feb 06 '24 16:02 Bryanskiy

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.

rust-log-analyzer avatar Feb 06 '24 16:02 rust-log-analyzer

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

rust-log-analyzer avatar Feb 06 '24 16:02 rust-log-analyzer

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`.

rust-log-analyzer avatar Feb 06 '24 17:02 rust-log-analyzer

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

rust-log-analyzer avatar Feb 08 '24 12:02 rust-log-analyzer

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, SyncDrop or something else, it doesn't matter much right now. The desired behavior is similar to the current Sized trait. Such behavior is required for introducing !Leak or !SyncDrop types in a backward compatible way. (Both Leak and SyncDrop are 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

petrochenkov avatar Feb 08 '24 12:02 petrochenkov

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?)

petrochenkov avatar Feb 08 '24 12:02 petrochenkov

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 {

rust-log-analyzer avatar Feb 08 '24 12:02 rust-log-analyzer

I want to reproduce regressions in CI

@rustbot author

Bryanskiy avatar Feb 08 '24 12:02 Bryanskiy

it would be good to get an MVCE for the new cycles, otherwise debugging this without fully going through the PR is hard

lcnr avatar Feb 08 '24 13:02 lcnr

@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.

petrochenkov avatar Feb 08 '24 13:02 petrochenkov

@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

Bryanskiy avatar Feb 09 '24 13:02 Bryanskiy

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 avatar Feb 09 '24 13:02 lcnr

@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)
  2. tests/ui/rfcs/rfc-2027-object-safe-for-dispatch/manual-self-impl-for-unsafe-obj.rs#next
  3. async closures: tests/ui/async-await/async-fn/sugar.rs (there are similar tests)
  4. tests/ui/coherence/negative-coherence-placeholder-region-constraints-on-unification.rs#implicit
  5. non-lifetime binders: tests/ui/traits/non_lifetime_binders/on-rpit.rs(there are similar tests)

Bryanskiy avatar Feb 09 '24 15:02 Bryanskiy

:umbrella: The latest upstream changes (presumably #120594) made this pull request unmergeable. Please resolve the merge conflicts.

bors avatar Feb 09 '24 16:02 bors

@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

lcnr avatar Feb 12 '24 12:02 lcnr

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.

Bryanskiy avatar Feb 12 '24 17:02 Bryanskiy

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

lcnr avatar Feb 12 '24 17:02 lcnr

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

rust-log-analyzer avatar Feb 13 '24 10:02 rust-log-analyzer

@bors try @rust-timer queue

petrochenkov avatar Feb 13 '24 11:02 petrochenkov

Awaiting bors try build completion.

@rustbot label: +S-waiting-on-perf

rust-timer avatar Feb 13 '24 11:02 rust-timer

:hourglass: Trying commit cb7935e6961cb232d59b1c7af255dbb26d94e585 with merge 80671ae98b92cfd0921bca8f60af237d8a341c73...

bors avatar Feb 13 '24 11:02 bors

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.

petrochenkov avatar Feb 13 '24 11:02 petrochenkov

:broken_heart: Test failed - checks-actions

bors avatar Feb 13 '24 12:02 bors

:umbrella: The latest upstream changes (presumably #120454) made this pull request unmergeable. Please resolve the merge conflicts.

bors avatar Feb 14 '24 07:02 bors

@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?

Bryanskiy avatar Feb 14 '24 14:02 Bryanskiy

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

lcnr avatar Feb 15 '24 11:02 lcnr

Silly question - why doesn't Sized have similar issues with cycles? Can we make the new traits more like Sized and less like Send?

petrochenkov avatar Feb 15 '24 20:02 petrochenkov

Silly question - why doesn't Sized have similar issues with cycles? Can we make the new traits more like Sized and less like Send?

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

lcnr avatar Feb 16 '24 22:02 lcnr

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

lcnr avatar Feb 19 '24 22:02 lcnr