Auto merge of #109165 - aliemjay:fix-ice-annotation, r=davidtwco

allow ReError in CanonicalUserTypeAnnotation

Why not? we already allow `TyKind::Error`.

Fixes #109072.
This commit is contained in:
bors 2023-03-31 23:15:52 +00:00
commit fadf164d8d
3 changed files with 42 additions and 2 deletions

View File

@ -230,9 +230,9 @@ impl CanonicalizeMode for CanonicalizeUserTypeAnnotation {
r: ty::Region<'tcx>,
) -> ty::Region<'tcx> {
match *r {
ty::ReEarlyBound(_) | ty::ReFree(_) | ty::ReErased | ty::ReStatic => r,
ty::ReEarlyBound(_) | ty::ReFree(_) | ty::ReErased | ty::ReStatic | ty::ReError(_) => r,
ty::ReVar(_) => canonicalizer.canonical_var_for_region_in_root_universe(r),
_ => {
ty::RePlaceholder(..) | ty::ReLateBound(..) => {
// We only expect region names that the user can type.
bug!("unexpected region in query response: `{:?}`", r)
}

View File

@ -0,0 +1,14 @@
// Regression test for #109072.
// Check that we don't ICE when canonicalizing user annotation.
trait Lt<'a> {
type T;
}
impl Lt<'missing> for () { //~ ERROR undeclared lifetime
type T = &'missing (); //~ ERROR undeclared lifetime
}
fn main() {
let _: <() as Lt<'_>>::T = &();
}

View File

@ -0,0 +1,26 @@
error[E0261]: use of undeclared lifetime name `'missing`
--> $DIR/region-error-ice-109072.rs:8:9
|
LL | impl Lt<'missing> for () {
| - ^^^^^^^^ undeclared lifetime
| |
| help: consider introducing lifetime `'missing` here: `<'missing>`
error[E0261]: use of undeclared lifetime name `'missing`
--> $DIR/region-error-ice-109072.rs:9:15
|
LL | type T = &'missing ();
| ^^^^^^^^ undeclared lifetime
|
help: consider introducing lifetime `'missing` here
|
LL | type T<'missing> = &'missing ();
| ++++++++++
help: consider introducing lifetime `'missing` here
|
LL | impl<'missing> Lt<'missing> for () {
| ++++++++++
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0261`.