Rollup merge of #110984 - cjgillot:const-infer-lifetime, r=compiler-errors
Do not resolve anonymous lifetimes in consts to be static. Fixes https://github.com/rust-lang/rust/issues/110931
This commit is contained in:
commit
a656a2019a
@ -656,7 +656,7 @@ impl<'a: 'ast, 'ast, 'tcx> Visitor<'ast> for LateResolutionVisitor<'a, '_, 'ast,
|
|||||||
fn visit_anon_const(&mut self, constant: &'ast AnonConst) {
|
fn visit_anon_const(&mut self, constant: &'ast AnonConst) {
|
||||||
// We deal with repeat expressions explicitly in `resolve_expr`.
|
// We deal with repeat expressions explicitly in `resolve_expr`.
|
||||||
self.with_lifetime_rib(LifetimeRibKind::AnonConst, |this| {
|
self.with_lifetime_rib(LifetimeRibKind::AnonConst, |this| {
|
||||||
this.with_lifetime_rib(LifetimeRibKind::Elided(LifetimeRes::Static), |this| {
|
this.with_lifetime_rib(LifetimeRibKind::Elided(LifetimeRes::Infer), |this| {
|
||||||
this.resolve_anon_const(constant, IsRepeatExpr::No);
|
this.resolve_anon_const(constant, IsRepeatExpr::No);
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
@ -4126,7 +4126,7 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
|
|||||||
ExprKind::Repeat(ref elem, ref ct) => {
|
ExprKind::Repeat(ref elem, ref ct) => {
|
||||||
self.visit_expr(elem);
|
self.visit_expr(elem);
|
||||||
self.with_lifetime_rib(LifetimeRibKind::AnonConst, |this| {
|
self.with_lifetime_rib(LifetimeRibKind::AnonConst, |this| {
|
||||||
this.with_lifetime_rib(LifetimeRibKind::Elided(LifetimeRes::Static), |this| {
|
this.with_lifetime_rib(LifetimeRibKind::Elided(LifetimeRes::Infer), |this| {
|
||||||
this.resolve_anon_const(ct, IsRepeatExpr::Yes)
|
this.resolve_anon_const(ct, IsRepeatExpr::Yes)
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
20
tests/ui/lifetimes/elided-lifetime-in-anon-const.rs
Normal file
20
tests/ui/lifetimes/elided-lifetime-in-anon-const.rs
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// Verify that elided lifetimes inside anonymous constants are not forced to be `'static`.
|
||||||
|
// check-pass
|
||||||
|
|
||||||
|
fn foo() -> [(); {
|
||||||
|
let a = 10_usize;
|
||||||
|
let b: &'_ usize = &a;
|
||||||
|
*b
|
||||||
|
}] {
|
||||||
|
[(); 10]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn bar() -> [(); 10] {
|
||||||
|
[(); {
|
||||||
|
let a = 10_usize;
|
||||||
|
let b: &'_ usize = &a;
|
||||||
|
*b
|
||||||
|
}]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
Loading…
x
Reference in New Issue
Block a user