Rollup merge of #99728 - cjgillot:ast-lifetimes-anon-clean, r=petrochenkov
Clean up HIR-based lifetime resolution Based on https://github.com/rust-lang/rust/pull/97313. Fixes #98932. r? `@petrochenkov`
This commit is contained in:
commit
c37ee1a7e0
15 changed files with 202 additions and 747 deletions
|
|
@ -0,0 +1,24 @@
|
|||
// check-pass
|
||||
// Verify that we do not ICE when anonymous lifetimes appear inside an AnonConst.
|
||||
|
||||
pub struct EntriesBuffer(Box<[[u8; HashesEntry::LEN]; 5]>);
|
||||
|
||||
impl EntriesBuffer {
|
||||
pub fn iter_child_buffers(&mut self) -> impl Iterator<Item = &mut [u8; HashesEntry::LEN]> {
|
||||
self.0.iter_mut()
|
||||
}
|
||||
|
||||
pub fn iter_child_buffers_explicit(
|
||||
&mut self,
|
||||
) -> impl Iterator<Item = &mut [u8; HashesEntry::<'_>::LEN]> {
|
||||
self.0.iter_mut()
|
||||
}
|
||||
}
|
||||
|
||||
pub struct HashesEntry<'a>(&'a [u8]);
|
||||
|
||||
impl HashesEntry<'_> {
|
||||
pub const LEN: usize = 1;
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
@ -615,7 +615,7 @@ struct BodyLifetimeChecker {
|
|||
impl<'tcx> Visitor<'tcx> for BodyLifetimeChecker {
|
||||
// for lifetimes as parameters of generics
|
||||
fn visit_lifetime(&mut self, lifetime: &'tcx Lifetime) {
|
||||
if lifetime.name.ident().name != kw::Empty && lifetime.name.ident().name != kw::StaticLifetime {
|
||||
if lifetime.name.ident().name != kw::UnderscoreLifetime && lifetime.name.ident().name != kw::StaticLifetime {
|
||||
self.lifetimes_used_in_body = true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -166,7 +166,7 @@ fn captures_all_lifetimes(inputs: &[Ty<'_>], output_lifetimes: &[LifetimeName])
|
|||
// - There's only one output lifetime bound using `+ '_`
|
||||
// - All input lifetimes are explicitly bound to the output
|
||||
input_lifetimes.is_empty()
|
||||
|| (output_lifetimes.len() == 1 && matches!(output_lifetimes[0], LifetimeName::Underscore))
|
||||
|| (output_lifetimes.len() == 1 && matches!(output_lifetimes[0], LifetimeName::Infer))
|
||||
|| input_lifetimes
|
||||
.iter()
|
||||
.all(|in_lt| output_lifetimes.iter().any(|out_lt| in_lt == out_lt))
|
||||
|
|
|
|||
|
|
@ -351,7 +351,7 @@ impl fmt::Display for RefPrefix {
|
|||
name.fmt(f)?;
|
||||
f.write_char(' ')?;
|
||||
},
|
||||
LifetimeName::Underscore => f.write_str("'_ ")?,
|
||||
LifetimeName::Infer => f.write_str("'_ ")?,
|
||||
LifetimeName::Static => f.write_str("'static ")?,
|
||||
_ => (),
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue