Auto merge of #107688 - lukas-code:projection-with-lifetime, r=jackh726
ReErased regions are local fix https://github.com/rust-lang/rust/issues/107678 fix https://github.com/rust-lang/rust/issues/107684 fix https://github.com/rust-lang/rust/issues/107686 fix https://github.com/rust-lang/rust/issues/107691 fix https://github.com/rust-lang/rust/issues/107730
This commit is contained in:
commit
b082e80e20
4 changed files with 67 additions and 2 deletions
|
@ -220,7 +220,8 @@ bitflags! {
|
||||||
// which is different from how types/const are freshened.
|
// which is different from how types/const are freshened.
|
||||||
| TypeFlags::HAS_TY_FRESH.bits
|
| TypeFlags::HAS_TY_FRESH.bits
|
||||||
| TypeFlags::HAS_CT_FRESH.bits
|
| TypeFlags::HAS_CT_FRESH.bits
|
||||||
| TypeFlags::HAS_FREE_LOCAL_REGIONS.bits;
|
| TypeFlags::HAS_FREE_LOCAL_REGIONS.bits
|
||||||
|
| TypeFlags::HAS_RE_ERASED.bits;
|
||||||
|
|
||||||
/// Does this have `Projection`?
|
/// Does this have `Projection`?
|
||||||
const HAS_TY_PROJECTION = 1 << 10;
|
const HAS_TY_PROJECTION = 1 << 10;
|
||||||
|
|
20
tests/ui/mir/issue-107678-projection-with-lifetime.rs
Normal file
20
tests/ui/mir/issue-107678-projection-with-lifetime.rs
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
// build-pass
|
||||||
|
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
pub trait StreamOnce {
|
||||||
|
type Error;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub trait ResetStream: StreamOnce {
|
||||||
|
fn reset(&mut self) -> Result<(), Self::Error>;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> ResetStream for &'a str
|
||||||
|
where Self: StreamOnce
|
||||||
|
{
|
||||||
|
#[inline]
|
||||||
|
fn reset(&mut self) -> Result<(), Self::Error> {
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
42
tests/ui/mir/issue-107691.rs
Normal file
42
tests/ui/mir/issue-107691.rs
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// build-pass
|
||||||
|
// compile-flags: -C opt-level=3
|
||||||
|
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
pub trait Archive {
|
||||||
|
type Archived;
|
||||||
|
type Resolver;
|
||||||
|
|
||||||
|
fn resolve(resolver: Self::Resolver, out: *mut Self::Archived);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub type Archived<T> = <T as Archive>::Archived;
|
||||||
|
pub type Resolver<T> = <T as Archive>::Resolver;
|
||||||
|
|
||||||
|
pub struct Record<'a> {
|
||||||
|
_payload: &'a [u8],
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct ArchivedRecord<'a>
|
||||||
|
where
|
||||||
|
&'a [u8]: Archive,
|
||||||
|
{
|
||||||
|
_payload: Archived<&'a [u8]>,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct RecordResolver<'a>
|
||||||
|
where
|
||||||
|
&'a [u8]: Archive,
|
||||||
|
{
|
||||||
|
_payload: Resolver<&'a [u8]>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> Archive for Record<'a>
|
||||||
|
where
|
||||||
|
&'a [u8]: Archive,
|
||||||
|
{
|
||||||
|
type Archived = ArchivedRecord<'a>;
|
||||||
|
type Resolver = RecordResolver<'a>;
|
||||||
|
|
||||||
|
fn resolve(_resolver: Self::Resolver, _out: *mut Self::Archived) {}
|
||||||
|
}
|
|
@ -9,9 +9,11 @@ LL | func(&mut iter.map(|x| x + 1))
|
||||||
= help: a `loop` may express intention better if this is on purpose
|
= help: a `loop` may express intention better if this is on purpose
|
||||||
= note: `#[warn(unconditional_recursion)]` on by default
|
= note: `#[warn(unconditional_recursion)]` on by default
|
||||||
|
|
||||||
error[E0275]: overflow evaluating the requirement `Map<&mut Map<&mut Map<&mut Map<..., ...>, ...>, ...>, ...>: Iterator`
|
error[E0275]: overflow evaluating the requirement `Map<&mut std::ops::Range<u8>, [closure@$DIR/issue-83150.rs:12:24: 12:27]>: Iterator`
|
||||||
|
|
|
|
||||||
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`issue_83150`)
|
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "256"]` attribute to your crate (`issue_83150`)
|
||||||
|
= note: required for `&mut Map<&mut std::ops::Range<u8>, [closure@$DIR/issue-83150.rs:12:24: 12:27]>` to implement `Iterator`
|
||||||
|
= note: 65 redundant requirements hidden
|
||||||
= note: required for `&mut Map<&mut Map<&mut Map<&mut Map<&mut Map<&mut Map<&mut Map<..., ...>, ...>, ...>, ...>, ...>, ...>, ...>` to implement `Iterator`
|
= note: required for `&mut Map<&mut Map<&mut Map<&mut Map<&mut Map<&mut Map<&mut Map<..., ...>, ...>, ...>, ...>, ...>, ...>, ...>` to implement `Iterator`
|
||||||
= note: the full type name has been written to '$TEST_BUILD_DIR/recursion/issue-83150/issue-83150.long-type-hash.txt'
|
= note: the full type name has been written to '$TEST_BUILD_DIR/recursion/issue-83150/issue-83150.long-type-hash.txt'
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue