diff options
| author | Jubilee <46493976+workingjubilee@users.noreply.github.com> | 2023-07-30 17:50:48 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-30 17:50:48 -0700 |
| commit | 126d809287e2247e1a4d4efc43ec782e9768da84 (patch) | |
| tree | 9065b7f9089f58455cbd55e8278c5a0c5bc1b445 /tests/ui/impl-trait | |
| parent | 0ad8d6adc5727d5a6f22ca3805df00335edd6ba2 (diff) | |
| parent | 0f0ab89feb4d668cb989aefe08f27af45cb10bed (diff) | |
| download | rust-126d809287e2247e1a4d4efc43ec782e9768da84.tar.gz rust-126d809287e2247e1a4d4efc43ec782e9768da84.zip | |
Rollup merge of #113741 - compiler-errors:rpitit-projects-to-missing-opaque, r=spastorino
Don't install default projection bound for return-position `impl Trait` in trait methods with no body This ensures that we never try to project to an opaque type in a trait method that has no body to infer its hidden type, which means we never later call `type_of` on that opaque. This is because opaque types try to reveal their hidden type when proving auto traits. I thought about this a lot, and I think this is a fix that's less likely to introduce other strange downstream ICEs than #113461. Fixes #113434 r? `@spastorino`
Diffstat (limited to 'tests/ui/impl-trait')
| -rw-r--r-- | tests/ui/impl-trait/in-trait/check-wf-on-non-defaulted-rpitit.rs | 10 | ||||
| -rw-r--r-- | tests/ui/impl-trait/in-trait/check-wf-on-non-defaulted-rpitit.stderr | 16 |
2 files changed, 26 insertions, 0 deletions
diff --git a/tests/ui/impl-trait/in-trait/check-wf-on-non-defaulted-rpitit.rs b/tests/ui/impl-trait/in-trait/check-wf-on-non-defaulted-rpitit.rs new file mode 100644 index 00000000000..742537ffcc4 --- /dev/null +++ b/tests/ui/impl-trait/in-trait/check-wf-on-non-defaulted-rpitit.rs @@ -0,0 +1,10 @@ +#![feature(return_position_impl_trait_in_trait)] + +struct Wrapper<G: Send>(G); + +trait Foo { + fn bar() -> Wrapper<impl Sized>; + //~^ ERROR `impl Sized` cannot be sent between threads safely +} + +fn main() {} diff --git a/tests/ui/impl-trait/in-trait/check-wf-on-non-defaulted-rpitit.stderr b/tests/ui/impl-trait/in-trait/check-wf-on-non-defaulted-rpitit.stderr new file mode 100644 index 00000000000..dee87d08238 --- /dev/null +++ b/tests/ui/impl-trait/in-trait/check-wf-on-non-defaulted-rpitit.stderr @@ -0,0 +1,16 @@ +error[E0277]: `impl Sized` cannot be sent between threads safely + --> $DIR/check-wf-on-non-defaulted-rpitit.rs:6:17 + | +LL | fn bar() -> Wrapper<impl Sized>; + | ^^^^^^^^^^^^^^^^^^^ `impl Sized` cannot be sent between threads safely + | + = help: the trait `Send` is not implemented for `impl Sized` +note: required by a bound in `Wrapper` + --> $DIR/check-wf-on-non-defaulted-rpitit.rs:3:19 + | +LL | struct Wrapper<G: Send>(G); + | ^^^^ required by this bound in `Wrapper` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0277`. |
