Skip to content

Commit

Permalink
Rollup merge of rust-lang#127948 - surechen:fix_127915, r=compiler-er…
Browse files Browse the repository at this point in the history
…rors

fixes panic error `index out of bounds` in conflicting error

fixes rust-lang#127915
  • Loading branch information
tgross35 authored Jul 19, 2024
2 parents 1ab7233 + 9747a2c commit 5dbe933
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 4 deletions.
13 changes: 9 additions & 4 deletions compiler/rustc_borrowck/src/diagnostics/conflict_errors.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
15 changes: 15 additions & 0 deletions tests/ui/borrowck/move-error-suggest-clone-panic-issue-127915.rs
Original file line number Diff line number Diff line change
@@ -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() {}
Original file line number Diff line number Diff line change
@@ -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`.

0 comments on commit 5dbe933

Please sign in to comment.