Skip to content

Commit

Permalink
Rollup merge of rust-lang#109222 - chenyukang:yukang/fix-109143, r=pe…
Browse files Browse the repository at this point in the history
…trochenkov

Do not ICE for unexpected lifetime with ConstGeneric rib

Fixes rust-lang#109143
r? `@petrochenkov`

Combining this test with the previous test will affect the previous diagnostics, so I added a separate test case.
  • Loading branch information
matthiaskrgr authored Mar 17, 2023
2 parents 92a2ab9 + 827a990 commit f369855
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 4 deletions.
5 changes: 3 additions & 2 deletions compiler/rustc_resolve/src/late.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1478,8 +1478,9 @@ impl<'a: 'ast, 'b, 'ast, 'tcx> LateResolutionVisitor<'a, 'b, 'ast, 'tcx> {
} else {
LifetimeUseSet::Many
}),
LifetimeRibKind::Generics { .. } => None,
LifetimeRibKind::ConstGeneric | LifetimeRibKind::AnonConst => {
LifetimeRibKind::Generics { .. }
| LifetimeRibKind::ConstGeneric => None,
LifetimeRibKind::AnonConst => {
span_bug!(ident.span, "unexpected rib kind: {:?}", rib.kind)
}
})
Expand Down
5 changes: 5 additions & 0 deletions tests/ui/lifetimes/unusual-rib-combinations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,9 @@ fn d<const C: S>() {}
//~^ ERROR missing lifetime specifier
//~| ERROR `S<'_>` is forbidden as the type of a const generic parameter

trait Foo<'a> {}
struct Bar<const N: &'a (dyn for<'a> Foo<'a>)>;
//~^ ERROR use of non-static lifetime `'a` in const generic
//~| ERROR `&dyn for<'a> Foo<'a>` is forbidden as the type of a const generic parameter

fn main() {}
21 changes: 19 additions & 2 deletions tests/ui/lifetimes/unusual-rib-combinations.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@ help: consider introducing a named lifetime parameter
LL | fn d<'a, const C: S<'a>>() {}
| +++ ++++

error[E0771]: use of non-static lifetime `'a` in const generic
--> $DIR/unusual-rib-combinations.rs:29:22
|
LL | struct Bar<const N: &'a (dyn for<'a> Foo<'a>)>;
| ^^
|
= note: for more information, see issue #74052 <https://github.com/rust-lang/rust/issues/74052>

error[E0214]: parenthesized type parameters may only be used with a `Fn` trait
--> $DIR/unusual-rib-combinations.rs:7:16
|
Expand Down Expand Up @@ -55,7 +63,16 @@ LL | fn d<const C: S>() {}
= 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 7 previous errors
error: `&dyn for<'a> Foo<'a>` is forbidden as the type of a const generic parameter
--> $DIR/unusual-rib-combinations.rs:29:21
|
LL | struct Bar<const N: &'a (dyn for<'a> Foo<'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 9 previous errors

Some errors have detailed explanations: E0106, E0214, E0308.
Some errors have detailed explanations: E0106, E0214, E0308, E0771.
For more information about an error, try `rustc --explain E0106`.

0 comments on commit f369855

Please sign in to comment.