Fix the ICE described in #83693
This commit is contained in:
parent
619c27a539
commit
6f0fe9b91b
@ -2688,15 +2688,14 @@ fn visit_fn_like_elision(
|
||||
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",
|
||||
|
19
src/test/ui/typeck/issue-83693.rs
Normal file
19
src/test/ui/typeck/issue-83693.rs
Normal 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]
|
||||
}
|
39
src/test/ui/typeck/issue-83693.stderr
Normal file
39
src/test/ui/typeck/issue-83693.stderr
Normal 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`.
|
10
src/test/ui/typeck/issue-84768.rs
Normal file
10
src/test/ui/typeck/issue-84768.rs
Normal 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]
|
||||
}
|
19
src/test/ui/typeck/issue-84768.stderr
Normal file
19
src/test/ui/typeck/issue-84768.stderr
Normal 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`.
|
Loading…
Reference in New Issue
Block a user