Rollup merge of #114606 - bvanjoi:fix-113462, r=compiler-errors
fix: not insert missing lifetime for `ConstParamTy` Fixes #113462 We should ignore the missing lifetime, as it's illegal to include a lifetime in a const param. r? ``@compiler-errors``
This commit is contained in:
commit
41d26941d6
@ -2404,7 +2404,7 @@ fn suggest_introducing_lifetime(
|
|||||||
should_continue = suggest(err, false, span, message, sugg);
|
should_continue = suggest(err, false, span, message, sugg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LifetimeRibKind::Item => break,
|
LifetimeRibKind::Item | LifetimeRibKind::ConstParamTy => break,
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
if !should_continue {
|
if !should_continue {
|
||||||
@ -2510,7 +2510,9 @@ fn add_missing_lifetime_specifiers_label(
|
|||||||
.lifetime_ribs
|
.lifetime_ribs
|
||||||
.iter()
|
.iter()
|
||||||
.rev()
|
.rev()
|
||||||
.take_while(|rib| !matches!(rib.kind, LifetimeRibKind::Item))
|
.take_while(|rib| {
|
||||||
|
!matches!(rib.kind, LifetimeRibKind::Item | LifetimeRibKind::ConstParamTy)
|
||||||
|
})
|
||||||
.flat_map(|rib| rib.bindings.iter())
|
.flat_map(|rib| rib.bindings.iter())
|
||||||
.map(|(&ident, &res)| (ident, res))
|
.map(|(&ident, &res)| (ident, res))
|
||||||
.filter(|(ident, _)| ident.name != kw::UnderscoreLifetime)
|
.filter(|(ident, _)| ident.name != kw::UnderscoreLifetime)
|
||||||
|
9
tests/ui/const-generics/lifetime-in-const-param.rs
Normal file
9
tests/ui/const-generics/lifetime-in-const-param.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
// https://github.com/rust-lang/rust/issues/113462
|
||||||
|
|
||||||
|
struct S2<'b>(&'b ());
|
||||||
|
|
||||||
|
struct S<'a, const N: S2>(&'a ());
|
||||||
|
//~^ ERROR missing lifetime specifier [E0106]
|
||||||
|
//~| ERROR `S2<'_>` is forbidden as the type of a const generic parameter
|
||||||
|
|
||||||
|
fn main() {}
|
18
tests/ui/const-generics/lifetime-in-const-param.stderr
Normal file
18
tests/ui/const-generics/lifetime-in-const-param.stderr
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
error[E0106]: missing lifetime specifier
|
||||||
|
--> $DIR/lifetime-in-const-param.rs:5:23
|
||||||
|
|
|
||||||
|
LL | struct S<'a, const N: S2>(&'a ());
|
||||||
|
| ^^ expected named lifetime parameter
|
||||||
|
|
||||||
|
error: `S2<'_>` is forbidden as the type of a const generic parameter
|
||||||
|
--> $DIR/lifetime-in-const-param.rs:5:23
|
||||||
|
|
|
||||||
|
LL | struct S<'a, const N: S2>(&'a ());
|
||||||
|
| ^^
|
||||||
|
|
|
||||||
|
= note: the only supported types are integers, `bool` and `char`
|
||||||
|
= help: more complex types are supported with `#![feature(adt_const_params)]`
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0106`.
|
@ -3,11 +3,6 @@ error[E0106]: missing lifetime specifier
|
|||||||
|
|
|
|
||||||
LL | fn d<const C: S>() {}
|
LL | fn d<const C: S>() {}
|
||||||
| ^ expected named lifetime parameter
|
| ^ expected named lifetime parameter
|
||||||
|
|
|
||||||
help: consider introducing a named lifetime parameter
|
|
||||||
|
|
|
||||||
LL | fn d<'a, const C: S<'a>>() {}
|
|
||||||
| +++ ++++
|
|
||||||
|
|
||||||
error[E0770]: the type of const parameters must not depend on other generic parameters
|
error[E0770]: the type of const parameters must not depend on other generic parameters
|
||||||
--> $DIR/unusual-rib-combinations.rs:29:22
|
--> $DIR/unusual-rib-combinations.rs:29:22
|
||||||
|
Loading…
Reference in New Issue
Block a user