Skip to content

Commit 6c2232d

Browse files
authored
Rollup merge of rust-lang#67004 - estebank:issue-66958, r=eddyb
Do not ICE on async fn with non-Copy infered type arg Fix rust-lang#66958.
2 parents b8ab423 + 7ed9066 commit 6c2232d

File tree

3 files changed

+38
-9
lines changed

3 files changed

+38
-9
lines changed

src/librustc_mir/borrow_check/diagnostics/conflict_errors.rs

+10-9
Original file line numberDiff line numberDiff line change
@@ -240,15 +240,16 @@ impl<'cx, 'tcx> MirBorrowckCtxt<'cx, 'tcx> {
240240
let tcx = self.infcx.tcx;
241241
let generics = tcx.generics_of(self.mir_def_id);
242242
let param = generics.type_param(&param_ty, tcx);
243-
let generics = tcx.hir().get_generics(self.mir_def_id).unwrap();
244-
suggest_constraining_type_param(
245-
generics,
246-
&mut err,
247-
&param.name.as_str(),
248-
"Copy",
249-
tcx.sess.source_map(),
250-
span,
251-
);
243+
if let Some(generics) = tcx.hir().get_generics(self.mir_def_id) {
244+
suggest_constraining_type_param(
245+
generics,
246+
&mut err,
247+
&param.name.as_str(),
248+
"Copy",
249+
tcx.sess.source_map(),
250+
span,
251+
);
252+
}
252253
}
253254
let span = if let Some(local) = place.as_local() {
254255
let decl = &self.body.local_decls[local];
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// edition:2018
2+
3+
struct Ia<S>(S);
4+
5+
impl<S> Ia<S> {
6+
fn partial(_: S) {}
7+
fn full(self) {}
8+
9+
async fn crash(self) {
10+
Self::partial(self.0);
11+
Self::full(self); //~ ERROR use of moved value: `self`
12+
}
13+
}
14+
15+
fn main() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
error[E0382]: use of moved value: `self`
2+
--> $DIR/issue-66958-non-copy-infered-type-arg.rs:11:20
3+
|
4+
LL | Self::partial(self.0);
5+
| ------ value moved here
6+
LL | Self::full(self);
7+
| ^^^^ value used here after partial move
8+
|
9+
= note: move occurs because `self.0` has type `S`, which does not implement the `Copy` trait
10+
11+
error: aborting due to previous error
12+
13+
For more information about this error, try `rustc --explain E0382`.

0 commit comments

Comments
 (0)