Avoid an ICE in diagnostics
This commit is contained in:
parent
09d73fab08
commit
d3a89cd214
3 changed files with 35 additions and 1 deletions
|
@ -698,7 +698,7 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
|
||||||
),
|
),
|
||||||
..
|
..
|
||||||
}) => {
|
}) => {
|
||||||
let hir::Ty { span, .. } = inputs[local.index() - 1];
|
let hir::Ty { span, .. } = *inputs.get(local.index() - 1)?;
|
||||||
Some(span)
|
Some(span)
|
||||||
}
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
|
|
15
tests/ui/borrowck/argument_number_mismatch_ice.rs
Normal file
15
tests/ui/borrowck/argument_number_mismatch_ice.rs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
trait Hello {
|
||||||
|
fn example(val: ());
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Test1(i32);
|
||||||
|
|
||||||
|
impl Hello for Test1 {
|
||||||
|
fn example(&self, input: &i32) {
|
||||||
|
//~^ ERROR `&self` declaration in the impl, but not in the trait
|
||||||
|
*input = self.0;
|
||||||
|
//~^ ERROR cannot assign to `*input`, which is behind a `&` reference
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
19
tests/ui/borrowck/argument_number_mismatch_ice.stderr
Normal file
19
tests/ui/borrowck/argument_number_mismatch_ice.stderr
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
error[E0185]: method `example` has a `&self` declaration in the impl, but not in the trait
|
||||||
|
--> $DIR/argument_number_mismatch_ice.rs:8:5
|
||||||
|
|
|
||||||
|
LL | fn example(val: ());
|
||||||
|
| -------------------- trait method declared without `&self`
|
||||||
|
...
|
||||||
|
LL | fn example(&self, input: &i32) {
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `&self` used in impl
|
||||||
|
|
||||||
|
error[E0594]: cannot assign to `*input`, which is behind a `&` reference
|
||||||
|
--> $DIR/argument_number_mismatch_ice.rs:10:9
|
||||||
|
|
|
||||||
|
LL | *input = self.0;
|
||||||
|
| ^^^^^^^^^^^^^^^ `input` is a `&` reference, so the data it refers to cannot be written
|
||||||
|
|
||||||
|
error: aborting due to 2 previous errors
|
||||||
|
|
||||||
|
Some errors have detailed explanations: E0185, E0594.
|
||||||
|
For more information about an error, try `rustc --explain E0185`.
|
Loading…
Add table
Add a link
Reference in a new issue