Auto merge of #86438 - FabianWolff:issue-83693, r=jackh726

Fix the ICE described in #83693

This pull request fixes #83693 and fixes #84768.
This commit is contained in:
bors 2021-07-25 16:17:58 +00:00
commit 478126c0f3
5 changed files with 89 additions and 3 deletions

View file

@ -2681,15 +2681,14 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
Scope::Binder { hir_id, .. } => {
break *hir_id;
}
Scope::Body { id, .. } => break id.hir_id,
Scope::ObjectLifetimeDefault { ref s, .. }
| Scope::Elision { ref s, .. }
| Scope::Supertrait { ref s, .. }
| Scope::TraitRefBoundary { ref s, .. } => {
scope = *s;
}
Scope::Root => {
// See issue #83907. Just bail out from looking inside.
Scope::Root | Scope::Body { .. } => {
// See issues #83907 and #83693. Just bail out from looking inside.
self.tcx.sess.delay_span_bug(
rustc_span::DUMMY_SP,
"In fn_like_elision without appropriate scope above",

View file

@ -0,0 +1,19 @@
// Regression test for the ICE described in #83693.
#![feature(fn_traits)]
#![crate_type="lib"]
impl F {
//~^ ERROR: cannot find type `F` in this scope [E0412]
fn call() {
<Self as Fn(&TestResult)>::call
//~^ ERROR: cannot find type `TestResult` in this scope [E0412]
//~| associated type bindings are not allowed here [E0229]
}
}
fn call() {
<x as Fn(&usize)>::call
//~^ ERROR: cannot find type `x` in this scope [E0412]
//~| ERROR: associated type bindings are not allowed here [E0229]
}

View file

@ -0,0 +1,39 @@
error[E0412]: cannot find type `F` in this scope
--> $DIR/issue-83693.rs:6:6
|
LL | impl F {
| ^ help: a trait with a similar name exists: `Fn`
|
::: $SRC_DIR/core/src/ops/function.rs:LL:COL
|
LL | pub trait Fn<Args>: FnMut<Args> {
| ------------------------------- similarly named trait `Fn` defined here
error[E0412]: cannot find type `TestResult` in this scope
--> $DIR/issue-83693.rs:9:22
|
LL | <Self as Fn(&TestResult)>::call
| ^^^^^^^^^^ not found in this scope
error[E0412]: cannot find type `x` in this scope
--> $DIR/issue-83693.rs:16:6
|
LL | <x as Fn(&usize)>::call
| ^ not found in this scope
error[E0229]: associated type bindings are not allowed here
--> $DIR/issue-83693.rs:9:18
|
LL | <Self as Fn(&TestResult)>::call
| ^^^^^^^^^^^^^^^ associated type not allowed here
error[E0229]: associated type bindings are not allowed here
--> $DIR/issue-83693.rs:16:11
|
LL | <x as Fn(&usize)>::call
| ^^^^^^^^^^ associated type not allowed here
error: aborting due to 5 previous errors
Some errors have detailed explanations: E0229, E0412.
For more information about an error, try `rustc --explain E0229`.

View file

@ -0,0 +1,10 @@
// Regression test for the ICE described in #84768.
#![feature(fn_traits)]
#![crate_type="lib"]
fn transform_mut<F>(f: F) where F: for<'b> FnOnce(&'b mut u8) {
<F as FnOnce(&mut u8)>::call_once(f, 1)
//~^ ERROR: associated type bindings are not allowed here [E0229]
//~| ERROR: mismatched types [E0308]
}

View file

@ -0,0 +1,19 @@
error[E0229]: associated type bindings are not allowed here
--> $DIR/issue-84768.rs:7:11
|
LL | <F as FnOnce(&mut u8)>::call_once(f, 1)
| ^^^^^^^^^^^^^^^ associated type not allowed here
error[E0308]: mismatched types
--> $DIR/issue-84768.rs:7:42
|
LL | <F as FnOnce(&mut u8)>::call_once(f, 1)
| ^ expected tuple, found integer
|
= note: expected tuple `(&mut u8,)`
found type `{integer}`
error: aborting due to 2 previous errors
Some errors have detailed explanations: E0229, E0308.
For more information about an error, try `rustc --explain E0229`.