Skip to content

forbid defining opaque types with regions in closures #134688

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from

Conversation

lcnr
Copy link
Contributor

@lcnr lcnr commented Dec 23, 2024

We currently only allow defining opaque types if their args are exclusively local to the closure. I would like to know whether we may change it.

r? @compiler-errors

@rustbot rustbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Dec 23, 2024
@lcnr lcnr changed the title disallow opaque types with regions in closures forbid defining opaque types with regions in closures Dec 23, 2024
@lcnr
Copy link
Contributor Author

lcnr commented Dec 23, 2024

@bors try @rust-timer queue

@rust-timer

This comment has been minimized.

@rustbot rustbot added the S-waiting-on-perf Status: Waiting on a perf run to be completed. label Dec 23, 2024
bors added a commit to rust-lang-ci/rust that referenced this pull request Dec 23, 2024
forbid defining opaque types with regions in closures

We currently only allow defining opaque types if their args are exclusively local to the closure. I would like to know whether we may change it.

r? `@compiler-errors`
@bors
Copy link
Collaborator

bors commented Dec 23, 2024

⌛ Trying commit 0728a03 with merge a0cd57e...

@rust-log-analyzer
Copy link
Collaborator

The job x86_64-gnu-llvm-18 failed! Check out the build log: (web) (plain)

Click to see the possible cause of the failure (guessed by this bot)
#22 exporting to docker image format
#22 sending tarball 27.6s done
#22 DONE 33.2s
##[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-18]
debug: `DISABLE_CI_RUSTC_IF_INCOMPATIBLE` configured.
---
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-18', '--enable-llvm-link-shared', '--set', 'rust.randomize-layout=true', '--set', 'rust.thin-lto-import-instr-limit=10', '--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', 'rust.lld=false', '--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-18/bin/llvm-config
configure: llvm.link-shared     := True
configure: rust.randomize-layout := True
configure: rust.thin-lto-import-instr-limit := 10
---
+    |
+ LL |     |x| x
+    |         ^
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
1 error: lifetime may not live long enough
2   --> $DIR/overwrite-anon-late-param-regions.rs:10:9
3    |

---
+    |
+ LL |     |x| x
+    |         ^
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: aborting due to 4 previous errors


The actual stderr differed from the expected stderr.
The actual stderr differed from the expected stderr.
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args borrowck/overwrite-anon-late-param-regions.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/borrowck/overwrite-anon-late-param-regions.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/borrowck/overwrite-anon-late-param-regions" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers"
--- stderr -------------------------------
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/borrowck/overwrite-anon-late-param-regions.rs:10:9
   |
---
   |
LL |     |x| x
   |         ^
   |
   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: lifetime may not live long enough
##[error]  --> /checkout/tests/ui/borrowck/overwrite-anon-late-param-regions.rs:10:9
   |
LL |     |x| x
LL |     |x| x
   |      -  ^ closure was supposed to return data with lifetime `'2` but it is returning data with lifetime `'1`
   |      has type `(&str, &'1 str)`
   |      has type `(&str, &'1 str)`
   |      has type `(&'2 str, &str)`
error[E0792]: expected generic lifetime parameter, found `'a`
##[error]  --> /checkout/tests/ui/borrowck/overwrite-anon-late-param-regions.rs:10:5
   |
LL | type Opaque2<'a> = impl Sized + 'a;
---
---- [ui] tests/ui/closures/supertrait-hint-cycle.rs stdout ----

error: test compilation failed although it shouldn't!
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/closures/supertrait-hint-cycle.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/closures/supertrait-hint-cycle" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--edition=2021"
--- stderr -------------------------------
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/closures/supertrait-hint-cycle.rs:43:9
   |
   |
LL | /         async move {
LL | |             let _c = c;
LL | |             Ok(1usize)
   | |_________^

error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/closures/supertrait-hint-cycle.rs:58:9
##[error]  --> /checkout/tests/ui/closures/supertrait-hint-cycle.rs:58:9
   |
LL | /         async move {
LL | |             let _c = c;
LL | |             Ok(1usize)
   | |_________^

error: aborting due to 2 previous errors
------------------------------------------
---
- error[E0792]: expected generic lifetime parameter, found `'_`
+ error: defining of opaque type in closure involving regions
10   --> $DIR/impl-fn-predefined-lifetimes.rs:7:9
11    |
- LL | fn a<'a>() -> impl Fn(&'a u8) -> (impl Debug + '_) {
-    |                                                -- this generic parameter must be used with a generic lifetime parameter
15 LL |     |x| x
16    |         ^
17 

---
To only update this specific test, also pass `--test-args impl-trait/impl-fn-predefined-lifetimes.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/impl-trait/impl-fn-predefined-lifetimes.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/impl-trait/impl-fn-predefined-lifetimes" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers"
--- stderr -------------------------------
warning: elided lifetime has a name
##[warning]  --> /checkout/tests/ui/impl-trait/impl-fn-predefined-lifetimes.rs:4:48
   |
   |
LL | fn a<'a>() -> impl Fn(&'a u8) -> (impl Debug + '_) {
   |
   = note: `#[warn(elided_named_lifetimes)]` on by default

error: defining of opaque type in closure involving regions
---

error[E0720]: cannot resolve opaque type
##[error]  --> /checkout/tests/ui/impl-trait/impl-fn-predefined-lifetimes.rs:4:35
   |
LL | fn a<'a>() -> impl Fn(&'a u8) -> (impl Debug + '_) {
   |                                   ^^^^^^^^^^^^^^^ recursive opaque type
LL |     |x| x
LL |     |x| x
   |     ----- returning here with type `{closure@/checkout/tests/ui/impl-trait/impl-fn-predefined-lifetimes.rs:7:5: 7:8}`
error: aborting due to 2 previous errors; 1 warning emitted

For more information about this error, try `rustc --explain E0720`.
------------------------------------------
---
- error[E0792]: expected generic lifetime parameter, found `'_`
+ error: defining of opaque type in closure involving regions
2   --> $DIR/early_bound.rs:7:17
3    |
- LL | fn test<'a: 'a>(n: bool) -> impl Sized + 'a {
-    |                                          -- this generic parameter must be used with a generic lifetime parameter
- ...
7 LL |         let _ = identity::<&'a ()>(test(false));
9 

21 
22 error: aborting due to 2 previous errors
---
To only update this specific test, also pass `--test-args impl-trait/rpit/early_bound.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/impl-trait/rpit/early_bound.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/impl-trait/rpit/early_bound" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers"
--- stderr -------------------------------
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/impl-trait/rpit/early_bound.rs:7:17
   |
   |
LL |         let _ = identity::<&'a ()>(test(false));

error: concrete type differs from previous defining opaque type use
##[error]  --> /checkout/tests/ui/impl-trait/rpit/early_bound.rs:3:29
   |
   |
LL | fn test<'a: 'a>(n: bool) -> impl Sized + 'a {
   |                             ^^^^^^^^^^^^^^^ expected `&()`, got `()`
note: previous use here
  --> /checkout/tests/ui/impl-trait/rpit/early_bound.rs:7:36
   |
   |
LL |         let _ = identity::<&'a ()>(test(false));

error: aborting due to 2 previous errors
------------------------------------------

---
- error[E0792]: expected generic lifetime parameter, found `'_`
+ error: defining of opaque type in closure involving regions
2   --> $DIR/defined-in-closure-external-lifetime.rs:6:29
3    |
- LL |     type Opaque<'x> = impl Sized + 'x;
-    |                 -- this generic parameter must be used with a generic lifetime parameter
- LL |     fn foo<'s>() -> Opaque<'s> {
7 LL |         let _ = || { let _: Opaque<'s> = (); };
9 

- error[E0792]: expected generic lifetime parameter, found `'_`
+ error: defining of opaque type in closure involving regions
+ error: defining of opaque type in closure involving regions
11   --> $DIR/defined-in-closure-external-lifetime.rs:14:34
12    |
- LL |     type Opaque<'x> = impl Sized + 'x;
-    |                 -- this generic parameter must be used with a generic lifetime parameter
- LL |     fn foo<'s>() -> Opaque<'s> {
16 LL |         let _ = || -> Opaque<'s> {};
18 

19 error: aborting due to 2 previous errors
20 
---
To only update this specific test, also pass `--test-args type-alias-impl-trait/defined-in-closure-external-lifetime.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/type-alias-impl-trait/defined-in-closure-external-lifetime.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/type-alias-impl-trait/defined-in-closure-external-lifetime" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers"
--- stderr -------------------------------
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/defined-in-closure-external-lifetime.rs:6:29
   |
   |
LL |         let _ = || { let _: Opaque<'s> = (); };

error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/defined-in-closure-external-lifetime.rs:14:34
   |
   |
LL |         let _ = || -> Opaque<'s> {};

error: aborting due to 2 previous errors
------------------------------------------

---
49 

Note: some mismatched output was normalized before being compared
-   --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden.rs:36:9
- LL |     |x| x //~ ERROR expected generic lifetime parameter, found `'a`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden.rs:36:9
+ LL |     |x| x
+    |         ^
+ 
+ error: aborting due to 6 previous errors
---
To only update this specific test, also pass `--test-args type-alias-impl-trait/hkl_forbidden.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/type-alias-impl-trait/hkl_forbidden.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/type-alias-impl-trait/hkl_forbidden" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers"
--- stderr -------------------------------
error[E0792]: expected generic lifetime parameter, found `'_`
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden.rs:10:5
   |
   |
LL | type Opaque<'a> = impl Sized + 'a;
   |             -- this generic parameter must be used with a generic lifetime parameter
...
LL |     (id, id) //~ ERROR expected generic lifetime parameter, found `'_`

error[E0792]: expected generic lifetime parameter, found `'a`
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden.rs:20:5
   |
   |
LL | type Opaque2<'a> = impl Sized + 'a;
   |              -- this generic parameter must be used with a generic lifetime parameter
...
LL |     id2 //~ ERROR expected generic lifetime parameter, found `'a`

error[E0792]: expected generic lifetime parameter, found `'_`
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden.rs:26:5
   |
   |
LL | type Opaque3<'a> = impl Sized + 'a;
   |              -- this generic parameter must be used with a generic lifetime parameter
...
LL |     (id, s) //~ ERROR expected generic lifetime parameter, found `'_`

error[E0792]: expected generic lifetime parameter, found `'_`
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden.rs:31:5
   |
   |
LL | type Opaque4<'a> = impl Sized + 'a;
   |              -- this generic parameter must be used with a generic lifetime parameter
LL | fn test4(s: &str) -> (Opaque4<'_>, impl Fn(&str) -> Opaque4<'_>) {
LL |     (s, id) //~ ERROR expected generic lifetime parameter, found `'_`

error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden.rs:36:9
   |
   |
LL |     |x| x //~ ERROR expected generic lifetime parameter, found `'a`

error[E0792]: expected generic lifetime parameter, found `'a`
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden.rs:36:5
   |
   |
LL | type Inner<'a> = impl Sized;
   |            -- this generic parameter must be used with a generic lifetime parameter
LL | fn outer_impl() -> impl for<'a> Fn(&'a ()) -> Inner<'a> {
LL |     |x| x //~ ERROR expected generic lifetime parameter, found `'a`

error: aborting due to 6 previous errors

For more information about this error, try `rustc --explain E0792`.
For more information about this error, try `rustc --explain E0792`.
------------------------------------------


---- [ui] tests/ui/type-alias-impl-trait/hkl_forbidden4.rs stdout ----
Saved the actual stderr to "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/type-alias-impl-trait/hkl_forbidden4/hkl_forbidden4.stderr"
diff of stderr:

26 LL | type FutNothing<'a> = impl 'a + Future<Output = ()>;
28 
28 
- error[E0792]: expected generic lifetime parameter, found `'any`
+ error: defining of opaque type in closure involving regions
30   --> $DIR/hkl_forbidden4.rs:14:5
- LL | async fn operation(_: &mut ()) -> () {
-    |                       - this generic parameter must be used with a generic lifetime parameter
- LL |
35 LL |     call(operation).await
35 LL |     call(operation).await
36    |     ^^^^^^^^^^^^^^^
37 

+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+ LL |     call(operation).await
+ 
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:5
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
38 error: concrete type differs from previous defining opaque type use
39   --> $DIR/hkl_forbidden4.rs:12:1
40    |

---
+ error: defining of opaque type in closure involving regions
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+ LL |     call(operation).await
+ 
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:5
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: defining of opaque type in closure involving regions
+   --> $DIR/hkl_forbidden4.rs:14:21
+    |
+    |
+ LL |     call(operation).await
+    |
+    |
+    = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
+ error: aborting due to 18 previous errors


The actual stderr differed from the expected stderr.
The actual stderr differed from the expected stderr.
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args type-alias-impl-trait/hkl_forbidden4.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/type-alias-impl-trait/hkl_forbidden4" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "--edition=2021"
--- stderr -------------------------------
--- stderr -------------------------------
error: item does not constrain `FutNothing::{opaque#0}`, but has it in its signature
   |
   |
LL | async fn call<F>(_f: F)
   |
   = note: consider moving the opaque type's declaration and defining uses into a separate module
note: this opaque type is in the signature
  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:10:23
  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:10:23
   |
LL | type FutNothing<'a> = impl 'a + Future<Output = ()>;


error: item does not constrain `FutNothing::{opaque#0}`, but has it in its signature
   |
LL | / {
...  |
LL | | }
LL | | }
   | |_^
   |
   = note: consider moving the opaque type's declaration and defining uses into a separate module
note: this opaque type is in the signature
  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:10:23
   |
LL | type FutNothing<'a> = impl 'a + Future<Output = ()>;

error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:14:5
   |
---
   |
LL |     call(operation).await
   |                     ^^^^^
   |
   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:14:21
   |
LL |     call(operation).await
LL |     call(operation).await
   |                     ^^^^^
   |
   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:14:5
   |
LL |     call(operation).await
LL |     call(operation).await
   |     ^^^^^^^^^^^^^^^
   |
   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:14:21
   |
LL |     call(operation).await
LL |     call(operation).await
   |                     ^^^^^
   |
   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:14:21
   |
LL |     call(operation).await
LL |     call(operation).await
   |                     ^^^^^
   |
   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:14:21
   |
LL |     call(operation).await
LL |     call(operation).await
   |                     ^^^^^
   |
   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:14:21
   |
LL |     call(operation).await
LL |     call(operation).await
   |                     ^^^^^
   |
   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:14:21
   |
LL |     call(operation).await
LL |     call(operation).await
   |                     ^^^^^
   |
   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:14:21
   |
LL |     call(operation).await
LL |     call(operation).await
   |                     ^^^^^
   |
   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:14:21
   |
LL |     call(operation).await
LL |     call(operation).await
   |                     ^^^^^
   |
   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:14:21
   |
LL |     call(operation).await
LL |     call(operation).await
   |                     ^^^^^
   |
   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:14:21
   |
LL |     call(operation).await
LL |     call(operation).await
   |                     ^^^^^
   |
   = note: duplicate diagnostic emitted due to `-Z deduplicate-diagnostics=no`
error: concrete type differs from previous defining opaque type use
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:12:1
   |
LL | async fn operation(_: &mut ()) -> () {
LL | async fn operation(_: &mut ()) -> () {
   | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `FutNothing<'_>`, got `{async fn body of operation()}`
note: previous use here
  --> /checkout/tests/ui/type-alias-impl-trait/hkl_forbidden4.rs:14:5
   |
LL |     call(operation).await
LL |     call(operation).await
   |     ^^^^^^^^^^^^^^^

error[E0792]: expected generic lifetime parameter, found `'any`
   |
   |
LL |   type FutNothing<'a> = impl 'a + Future<Output = ()>;
   |                   -- this generic parameter must be used with a generic lifetime parameter
LL | / {
...  |
LL | | }
   | |_^
---
+    |
+ LL |             let _: Self::Assoc<'a> = x;
+    |                    ^^^^^^^^^^^^^^^
+ 
1 error[E0700]: hidden type for `<() as Foo>::Assoc<'a>` captures lifetime that does not appear in bounds
3    |

17    |
18    = note: `Assoc` must be used in combination with a concrete type within the same impl
---
To only update this specific test, also pass `--test-args type-alias-impl-trait/in-assoc-ty-early-bound2.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/type-alias-impl-trait/in-assoc-ty-early-bound2.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/type-alias-impl-trait/in-assoc-ty-early-bound2" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers"
--- stderr -------------------------------
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/in-assoc-ty-early-bound2.rs:15:20
   |
   |
LL |             let _: Self::Assoc<'a> = x;
   |                    ^^^^^^^^^^^^^^^

error[E0700]: hidden type for `<() as Foo>::Assoc<'a>` captures lifetime that does not appear in bounds
   |
   |
LL |     type Assoc<'a> = impl Sized; //~ ERROR unconstrained opaque type
   |                      ---------- opaque type defined here
LL |     fn bar<'a: 'a>()
   |            -- hidden type `&'a ()` captures the lifetime `'a` as defined here
LL |             let _: Self::Assoc<'a> = x;
   |                    ^^^^^^^^^^^^^^^

error: unconstrained opaque type
error: unconstrained opaque type
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/in-assoc-ty-early-bound2.rs:9:22
   |
LL |     type Assoc<'a> = impl Sized; //~ ERROR unconstrained opaque type
   |
   = note: `Assoc` must be used in combination with a concrete type within the same impl

error: aborting due to 3 previous errors
---

+ error: defining of opaque type in closure involving regions
+   --> $DIR/in-assoc-ty-early-bound.rs:11:60
+    |
+ LL |         let closure = |x: &'a ()| -> Self::Assoc<'b, 'a> { x };
+ 
+ 
1 error[E0700]: hidden type for `<() as Foo>::Assoc<'b, 'a>` captures lifetime that does not appear in bounds
3    |


8 LL |         let closure = |x: &'a ()| -> Self::Assoc<'b, 'a> { x };
10 
- error: aborting due to 1 previous error
+ error: aborting due to 2 previous errors
12 
---
-   --> /checkout/tests/ui/type-alias-impl-trait/in-assoc-ty-early-bound.rs:11:60
+ error: defining of opaque type in closure involving regions
+   --> $DIR/in-assoc-ty-early-bound.rs:11:60
+    |
+ LL |         let closure = |x: &'a ()| -> Self::Assoc<'b, 'a> { x };
+ 
+ error: aborting due to 2 previous errors



The actual stderr differed from the expected stderr.
To update references, rerun the tests and pass the `--bless` flag
To only update this specific test, also pass `--test-args type-alias-impl-trait/in-assoc-ty-early-bound.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/type-alias-impl-trait/in-assoc-ty-early-bound.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/type-alias-impl-trait/in-assoc-ty-early-bound" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers"
--- stderr -------------------------------
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/in-assoc-ty-early-bound.rs:11:60
   |
   |
LL |         let closure = |x: &'a ()| -> Self::Assoc<'b, 'a> { x };


error[E0700]: hidden type for `<() as Foo>::Assoc<'b, 'a>` captures lifetime that does not appear in bounds
   |
LL |     type Assoc<'a, 'b> = impl Sized;
   |                          ---------- opaque type defined here
   |                          ---------- opaque type defined here
LL |     fn bar<'a: 'a, 'b: 'b>(x: &'a ()) -> Self::Assoc<'a, 'b> {
   |            -- hidden type `&'a ()` captures the lifetime `'a` as defined here
LL |         let closure = |x: &'a ()| -> Self::Assoc<'b, 'a> { x };

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0700`.
---
- error[E0792]: expected generic lifetime parameter, found `'_`
+ error: defining of opaque type in closure involving regions
2   --> $DIR/taint.rs:13:17
3    |
- LL | type Two<'a, 'b> = impl std::fmt::Debug;
-    |          -- this generic parameter must be used with a generic lifetime parameter
- ...
7 LL |     let c1 = || set(x);
9 

10 error: aborting due to 1 previous error
11 
---
To only update this specific test, also pass `--test-args type-alias-impl-trait/taint.rs`

error: 1 errors occurred comparing output.
status: exit status: 1
command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/type-alias-impl-trait/taint.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=x86_64-unknown-linux-gnu" "--check-cfg" "cfg(FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "--emit" "metadata" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/type-alias-impl-trait/taint" "-A" "unused" "-A" "internal_features" "-Crpath" "-Cdebuginfo=0" "-Lnative=/checkout/obj/build/x86_64-unknown-linux-gnu/native/rust-test-helpers" "-Zvalidate-mir" "-Zinline-mir=yes"
--- stderr -------------------------------
error: defining of opaque type in closure involving regions
##[error]  --> /checkout/tests/ui/type-alias-impl-trait/taint.rs:13:17
   |
   |
LL |     let c1 = || set(x); //~ ERROR: expected generic lifetime parameter, found `'_`

error: aborting due to 1 previous error
------------------------------------------

@bors
Copy link
Collaborator

bors commented Dec 23, 2024

☀️ Try build successful - checks-actions
Build commit: a0cd57e (a0cd57eba5d417638d3351ba13fc414ad1a24bec)

@rust-timer

This comment has been minimized.

@compiler-errors
Copy link
Member

presumably wanted a crater run so

@craterbot check

@craterbot
Copy link
Collaborator

👌 Experiment pr-134688 created and queued.
🤖 Automatically detected try build a0cd57e
🔍 You can check out the queue and this experiment's details.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot added S-waiting-on-crater Status: Waiting on a crater run to be completed. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. S-waiting-on-perf Status: Waiting on a perf run to be completed. labels Dec 23, 2024
@craterbot
Copy link
Collaborator

🚧 Experiment pr-134688 is now running

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@rust-timer
Copy link
Collaborator

Finished benchmarking commit (a0cd57e): comparison URL.

Overall result: no relevant changes - no action needed

Benchmarking this pull request likely means that it is perf-sensitive, so we're automatically marking it as not fit for rolling up. While you can manually mark this PR as fit for rollup, we strongly recommend not doing so since this PR may lead to changes in compiler perf.

@bors rollup=never
@rustbot label: -S-waiting-on-perf -perf-regression

Instruction count

This benchmark run did not return any relevant results for this metric.

Max RSS (memory usage)

Results (primary 3.1%, secondary -0.1%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
3.1% [3.1%, 3.1%] 1
Regressions ❌
(secondary)
4.3% [3.6%, 4.9%] 2
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-3.0% [-3.3%, -2.5%] 3
All ❌✅ (primary) 3.1% [3.1%, 3.1%] 1

Cycles

Results (secondary -1.9%)

This is a less reliable metric that may be of interest but was not used to determine the overall result at the top of this comment.

mean range count
Regressions ❌
(primary)
- - 0
Regressions ❌
(secondary)
- - 0
Improvements ✅
(primary)
- - 0
Improvements ✅
(secondary)
-1.9% [-2.3%, -1.4%] 3
All ❌✅ (primary) - - 0

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 763.753s -> 763.731s (-0.00%)
Artifact size: 330.55 MiB -> 330.56 MiB (0.00%)

@craterbot
Copy link
Collaborator

🎉 Experiment pr-134688 is completed!
📊 135 regressed and 40 fixed (558677 total)
📰 Open the full report.

⚠️ If you notice any spurious failure please add them to the denylist!
ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-crater Status: Waiting on a crater run to be completed. labels Dec 24, 2024
@lcnr
Copy link
Contributor Author

lcnr commented Jan 6, 2025

@craterbot
Copy link
Collaborator

👌 Experiment pr-134688-1 created and queued.
🤖 Automatically detected try build a0cd57e
🔍 You can check out the queue and this experiment's details.

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot added S-waiting-on-crater Status: Waiting on a crater run to be completed. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Jan 6, 2025
@craterbot
Copy link
Collaborator

🚧 Experiment pr-134688-1 is now running

ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot
Copy link
Collaborator

🎉 Experiment pr-134688-1 is completed!
📊 0 regressed and 0 fixed (2236 total)
📰 Open the full report.

⚠️ If you notice any spurious failure please add them to the denylist!
ℹ️ Crater is a tool to run experiments across parts of the Rust ecosystem. Learn more

@craterbot craterbot removed the S-waiting-on-crater Status: Waiting on a crater run to be completed. label Jan 6, 2025
@craterbot craterbot added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Jan 6, 2025
@aliemjay
Copy link
Member

aliemjay commented Jan 8, 2025

Could you please explain the reason behind this change? Is it a limitation of the new solver? If so, is it fundamental to new solver design and cannot be reasonably mitigated?

@lcnr
Copy link
Contributor Author

lcnr commented Jan 8, 2025

Could you please explain the reason behind this change? Is it a limitation of the new solver? If so, is it fundamental to new solver design and cannot be reasonably mitigated?

Working on https://rust-lang.zulipchat.com/#narrow/channel/364551-t-types.2Ftrait-system-refactor/topic/gll.20error

fn generate_parse_a<'a>() -> impl FnOnce() + 'a {
    || drop(generate_parse_a())
}

Old trait solver only normalizes opaque types in their defining scope when equating them with rigid types. The new solver (and imo any reasonable design) treats them the same as associated types and always normalizes them when structurally resolving.

This means we have existing code which opaquely opaque types in their defining scope inside of closures. These uses end up defining the opaque in the new solver and currently fail to prove member constraints for them.

I wanted to know whether people actually define opaques using the late-bound closure lifetimes as I had some ideas which would have always mapped opaque type args to free variables of the typeck root. I doubt that this will be part of the approach we'll actually be using, and regardless, the final approach will have a proper writeup of what is being done and why.

Was really surprising to see you react to this PR without even getting pinged while being otherwise unreachable. How did that happen?

@lcnr
Copy link
Contributor Author

lcnr commented Jan 15, 2025

jup, this (apparently unproblematic) breaking change will be necessary for #135445. Or at least it's not immediately obvious to me how you'd want to support it.

@lcnr lcnr closed this Jan 15, 2025
@aliemjay
Copy link
Member

Is it ordinary that the "error" crates in crater result is more than 100k?

Was really surprising to see you react to this PR without even getting pinged while being otherwise unreachable. How did that happen?

Occasionally, I scan t-types PRs and issues. Hopefully, I'll have some time for rust starting in April

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants