mirror of https://github.com/rust-lang/rust.git
Rollup merge of #127948 - surechen:fix_127915, r=compiler-errors
fixes panic error `index out of bounds` in conflicting error fixes #127915
This commit is contained in:
commit
767b3cb54b
|
@ -456,10 +456,15 @@ impl<'infcx, 'tcx> MirBorrowckCtxt<'_, '_, 'infcx, 'tcx> {
|
||||||
if let Some(def_id) = def_id
|
if let Some(def_id) = def_id
|
||||||
&& self.infcx.tcx.def_kind(def_id).is_fn_like()
|
&& self.infcx.tcx.def_kind(def_id).is_fn_like()
|
||||||
&& let Some(pos) = args.iter().position(|arg| arg.hir_id == expr.hir_id)
|
&& let Some(pos) = args.iter().position(|arg| arg.hir_id == expr.hir_id)
|
||||||
&& let ty::Param(_) =
|
&& let Some(arg) = self
|
||||||
self.infcx.tcx.fn_sig(def_id).skip_binder().skip_binder().inputs()
|
.infcx
|
||||||
[pos + offset]
|
.tcx
|
||||||
.kind()
|
.fn_sig(def_id)
|
||||||
|
.skip_binder()
|
||||||
|
.skip_binder()
|
||||||
|
.inputs()
|
||||||
|
.get(pos + offset)
|
||||||
|
&& let ty::Param(_) = arg.kind()
|
||||||
{
|
{
|
||||||
let place = &self.move_data.move_paths[mpi].place;
|
let place = &self.move_data.move_paths[mpi].place;
|
||||||
let ty = place.ty(self.body, self.infcx.tcx).ty;
|
let ty = place.ty(self.body, self.infcx.tcx).ty;
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
fn rust_interesting_average(_: i64, ...) -> f64;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test<T, U>(a: i64, b: i64, c: i64, d: i64, e: i64, f: T, g: U) -> i64 {
|
||||||
|
unsafe {
|
||||||
|
rust_interesting_average(
|
||||||
|
6, a as f64, b, b as f64, f, c as f64, d, d as f64, e, e as f64, f, g, //~ ERROR use of moved value: `f` [E0382]
|
||||||
|
) as i64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
|
@ -0,0 +1,25 @@
|
||||||
|
error[E0382]: use of moved value: `f`
|
||||||
|
--> $DIR/move-error-suggest-clone-panic-issue-127915.rs:10:78
|
||||||
|
|
|
||||||
|
LL | fn test<T, U>(a: i64, b: i64, c: i64, d: i64, e: i64, f: T, g: U) -> i64 {
|
||||||
|
| - move occurs because `f` has type `T`, which does not implement the `Copy` trait
|
||||||
|
...
|
||||||
|
LL | 6, a as f64, b, b as f64, f, c as f64, d, d as f64, e, e as f64, f, g,
|
||||||
|
| - value moved here ^ value used here after move
|
||||||
|
|
|
||||||
|
help: if `T` implemented `Clone`, you could clone the value
|
||||||
|
--> $DIR/move-error-suggest-clone-panic-issue-127915.rs:7:9
|
||||||
|
|
|
||||||
|
LL | fn test<T, U>(a: i64, b: i64, c: i64, d: i64, e: i64, f: T, g: U) -> i64 {
|
||||||
|
| ^ consider constraining this type parameter with `Clone`
|
||||||
|
...
|
||||||
|
LL | 6, a as f64, b, b as f64, f, c as f64, d, d as f64, e, e as f64, f, g,
|
||||||
|
| - you could clone this value
|
||||||
|
help: consider restricting type parameter `T`
|
||||||
|
|
|
||||||
|
LL | fn test<T: Copy, U>(a: i64, b: i64, c: i64, d: i64, e: i64, f: T, g: U) -> i64 {
|
||||||
|
| ++++++
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0382`.
|
Loading…
Reference in New Issue