-
Notifications
You must be signed in to change notification settings - Fork 12.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Don't ICE when RPITIT captures more method args than trait definition
- Loading branch information
1 parent
8c2c9a9
commit b53f5ce
Showing
4 changed files
with
73 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
tests/ui/impl-trait/precise-capturing/rpitit-captures-more-method-lifetimes.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// Make sure we don't ICE when an RPITIT captures more method args than the | ||
// trait definition, which is not allowed. Due to the default lifetime capture | ||
// rules of RPITITs, this is only doable if we use precise capturing. | ||
|
||
pub trait Foo { | ||
fn bar<'tr: 'tr>(&'tr mut self) -> impl Sized + use<Self>; | ||
//~^ ERROR `use<...>` precise capturing syntax is currently not allowed in return-position `impl Trait` in traits | ||
} | ||
|
||
impl Foo for () { | ||
fn bar<'im: 'im>(&'im mut self) -> impl Sized + 'im {} | ||
//~^ ERROR return type captures more lifetimes than trait definition | ||
//~| WARN impl trait in impl method signature does not match trait method signature | ||
} | ||
|
||
fn main() {} |
42 changes: 42 additions & 0 deletions
42
tests/ui/impl-trait/precise-capturing/rpitit-captures-more-method-lifetimes.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
error: `use<...>` precise capturing syntax is currently not allowed in return-position `impl Trait` in traits | ||
--> $DIR/rpitit-captures-more-method-lifetimes.rs:6:53 | ||
| | ||
LL | fn bar<'tr: 'tr>(&'tr mut self) -> impl Sized + use<Self>; | ||
| ^^^^^^^^^ | ||
| | ||
= note: currently, return-position `impl Trait` in traits and trait implementations capture all lifetimes in scope | ||
|
||
error: return type captures more lifetimes than trait definition | ||
--> $DIR/rpitit-captures-more-method-lifetimes.rs:11:40 | ||
| | ||
LL | fn bar<'im: 'im>(&'im mut self) -> impl Sized + 'im {} | ||
| --- ^^^^^^^^^^^^^^^^ | ||
| | | ||
| this lifetime was captured | ||
| | ||
note: hidden type must only reference lifetimes captured by this impl trait | ||
--> $DIR/rpitit-captures-more-method-lifetimes.rs:6:40 | ||
| | ||
LL | fn bar<'tr: 'tr>(&'tr mut self) -> impl Sized + use<Self>; | ||
| ^^^^^^^^^^^^^^^^^^^^^^ | ||
= note: hidden type inferred to be `impl Sized + 'im` | ||
|
||
warning: impl trait in impl method signature does not match trait method signature | ||
--> $DIR/rpitit-captures-more-method-lifetimes.rs:11:40 | ||
| | ||
LL | fn bar<'tr: 'tr>(&'tr mut self) -> impl Sized + use<Self>; | ||
| ---------------------- return type from trait method defined here | ||
... | ||
LL | fn bar<'im: 'im>(&'im mut self) -> impl Sized + 'im {} | ||
| ^^^^^^^^^^^^^^^^ | ||
| | ||
= note: add `#[allow(refining_impl_trait)]` if it is intended for this to be part of the public API of this crate | ||
= note: we are soliciting feedback, see issue #121718 <https://github.com/rust-lang/rust/issues/121718> for more information | ||
= note: `#[warn(refining_impl_trait_reachable)]` on by default | ||
help: replace the return type so that it matches the trait | ||
| | ||
LL | fn bar<'im: 'im>(&'im mut self) -> impl Sized {} | ||
| ~~~~~~~~~~ | ||
|
||
error: aborting due to 2 previous errors; 1 warning emitted | ||
|