Auto merge of #67004 - estebank:issue-66958, r=eddyb
Do not ICE on async fn with non-Copy infered type arg Fix #66958.
This commit is contained in:
commit
dbbe4f10fa
|
@ -240,15 +240,16 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
|
||||||
let tcx = self.infcx.tcx;
|
let tcx = self.infcx.tcx;
|
||||||
let generics = tcx.generics_of(self.mir_def_id);
|
let generics = tcx.generics_of(self.mir_def_id);
|
||||||
let param = generics.type_param(¶m_ty, tcx);
|
let param = generics.type_param(¶m_ty, tcx);
|
||||||
let generics = tcx.hir().get_generics(self.mir_def_id).unwrap();
|
if let Some(generics) = tcx.hir().get_generics(self.mir_def_id) {
|
||||||
suggest_constraining_type_param(
|
suggest_constraining_type_param(
|
||||||
generics,
|
generics,
|
||||||
&mut err,
|
&mut err,
|
||||||
¶m.name.as_str(),
|
¶m.name.as_str(),
|
||||||
"Copy",
|
"Copy",
|
||||||
tcx.sess.source_map(),
|
tcx.sess.source_map(),
|
||||||
span,
|
span,
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let span = if let Some(local) = place.as_local() {
|
let span = if let Some(local) = place.as_local() {
|
||||||
let decl = &self.body.local_decls[local];
|
let decl = &self.body.local_decls[local];
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
// edition:2018
|
||||||
|
|
||||||
|
struct Ia<S>(S);
|
||||||
|
|
||||||
|
impl<S> Ia<S> {
|
||||||
|
fn partial(_: S) {}
|
||||||
|
fn full(self) {}
|
||||||
|
|
||||||
|
async fn crash(self) {
|
||||||
|
Self::partial(self.0);
|
||||||
|
Self::full(self); //~ ERROR use of moved value: `self`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
|
@ -0,0 +1,13 @@
|
||||||
|
error[E0382]: use of moved value: `self`
|
||||||
|
--> $DIR/issue-66958-non-copy-infered-type-arg.rs:11:20
|
||||||
|
|
|
||||||
|
LL | Self::partial(self.0);
|
||||||
|
| ------ value moved here
|
||||||
|
LL | Self::full(self);
|
||||||
|
| ^^^^ value used here after partial move
|
||||||
|
|
|
||||||
|
= note: move occurs because `self.0` has type `S`, which does not implement the `Copy` trait
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0382`.
|
Loading…
Reference in New Issue