Don't trigger ICE for ReError when the other region is empty.

This commit is contained in:
Lenko Donchev 2023-02-26 12:51:49 -06:00
parent 58136ffa92
commit 65e56616fc
3 changed files with 50 additions and 2 deletions

View File

@ -438,7 +438,11 @@ impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx> {
}
(VarValue::Value(a), VarValue::Empty(_)) => {
match *a {
ReLateBound(..) | ReErased | ReError(_) => {
// this is always on an error path,
// so it doesn't really matter if it's shorter or longer than an empty region
ReError(_) => false,
ReLateBound(..) | ReErased => {
bug!("cannot relate region: {:?}", a);
}
@ -467,7 +471,11 @@ impl<'cx, 'tcx> LexicalResolver<'cx, 'tcx> {
}
(VarValue::Empty(a_ui), VarValue::Value(b)) => {
match *b {
ReLateBound(..) | ReErased | ReError(_) => {
// this is always on an error path,
// so it doesn't really matter if it's shorter or longer than an empty region
ReError(_) => false,
ReLateBound(..) | ReErased => {
bug!("cannot relate region: {:?}", b);
}

View File

@ -0,0 +1,13 @@
pub trait TraitEngine<'tcx>: 'tcx {}
pub trait TraitEngineExt<'tcx> {
fn register_predicate_obligations(&mut self);
}
impl<T: ?Sized + TraitEngine<'tcx>> TraitEngineExt<'tcx> for T {
//~^ ERROR use of undeclared lifetime name `'tcx`
//~| ERROR use of undeclared lifetime name `'tcx`
fn register_predicate_obligations(&mut self) {}
}
fn main() {}

View File

@ -0,0 +1,27 @@
error[E0261]: use of undeclared lifetime name `'tcx`
--> $DIR/issue-107988.rs:7:52
|
LL | impl<T: ?Sized + TraitEngine<'tcx>> TraitEngineExt<'tcx> for T {
| - ^^^^ undeclared lifetime
| |
| help: consider introducing lifetime `'tcx` here: `'tcx,`
error[E0261]: use of undeclared lifetime name `'tcx`
--> $DIR/issue-107988.rs:7:30
|
LL | impl<T: ?Sized + TraitEngine<'tcx>> TraitEngineExt<'tcx> for T {
| ^^^^ undeclared lifetime
|
= note: for more information on higher-ranked polymorphism, visit https://doc.rust-lang.org/nomicon/hrtb.html
help: consider making the bound lifetime-generic with a new `'tcx` lifetime
|
LL | impl<T: ?Sized + for<'tcx> TraitEngine<'tcx>> TraitEngineExt<'tcx> for T {
| +++++++++
help: consider introducing lifetime `'tcx` here
|
LL | impl<'tcx, T: ?Sized + TraitEngine<'tcx>> TraitEngineExt<'tcx> for T {
| +++++
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0261`.