about summary refs log tree commit diff
path: root/compiler/rustc_mir_transform
diff options
context:
space:
mode:
authorMichael Goulet <michael@errs.io>2024-03-19 12:55:26 -0400
committerMichael Goulet <michael@errs.io>2024-03-19 16:59:24 -0400
commit541858ed787a66bbb00a4edd21f924ed0f208a9d (patch)
tree6c4e0bef4d7f271498bf198c47e33b340aff0840 /compiler/rustc_mir_transform
parentf1fef64e19909487ff2640bce58ce49fcfb4b85d (diff)
downloadrust-541858ed787a66bbb00a4edd21f924ed0f208a9d.tar.gz
rust-541858ed787a66bbb00a4edd21f924ed0f208a9d.zip
Add a few more comments
Diffstat (limited to 'compiler/rustc_mir_transform')
-rw-r--r--compiler/rustc_mir_transform/src/shim.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/compiler/rustc_mir_transform/src/shim.rs b/compiler/rustc_mir_transform/src/shim.rs
index 4b2243598dc..28b502e8cab 100644
--- a/compiler/rustc_mir_transform/src/shim.rs
+++ b/compiler/rustc_mir_transform/src/shim.rs
@@ -1023,7 +1023,16 @@ fn build_construct_coroutine_by_move_shim<'tcx>(
         bug!();
     };
 
+    // We use `*mut Self` here because we only need to emit an ABI-compatible shim body,
+    // rather than match the signature exactly.
+    //
+    // The self type here is a coroutine-closure, not a coroutine, and we never read from
+    // it because it never has any captures, because this is only true in the Fn/FnMut
+    // implementation, not the AsyncFn/AsyncFnMut implementation, which is implemented only
+    // if the coroutine-closure has no captures.
     if receiver_by_ref {
+        // Triple-check that there's no captures here.
+        assert_eq!(args.as_coroutine_closure().tupled_upvars_ty(), tcx.types.unit);
         self_ty = Ty::new_mut_ptr(tcx, self_ty);
     }