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
|
||||
&& self.infcx.tcx.def_kind(def_id).is_fn_like()
|
||||
&& let Some(pos) = args.iter().position(|arg| arg.hir_id == expr.hir_id)
|
||||
&& let ty::Param(_) =
|
||||
self.infcx.tcx.fn_sig(def_id).skip_binder().skip_binder().inputs()
|
||||
[pos + offset]
|
||||
.kind()
|
||||
&& let Some(arg) = self
|
||||
.infcx
|
||||
.tcx
|
||||
.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 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