]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
rust: sync: document `PhantomData` in `Arc`
authorTamir Duberstein <tamird@gmail.com>
Thu, 7 Nov 2024 10:36:46 +0000 (05:36 -0500)
committerMiguel Ojeda <ojeda@kernel.org>
Tue, 17 Dec 2024 23:37:21 +0000 (00:37 +0100)
Add a comment explaining the relevant semantics of `PhantomData`. This
should help future readers who may, as I did, assume that this field is
redundant at first glance.

Signed-off-by: Tamir Duberstein <tamird@gmail.com>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Link: https://lore.kernel.org/r/20241107-simplify-arc-v2-1-7256e638aac1@gmail.com
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
rust/kernel/sync/arc.rs

index fa4509406ee909ca0677b78d5ece966089ce6366..9f0b04400e8e5f3c09a763f7bd7602b040b0dadc 100644 (file)
@@ -127,6 +127,14 @@ mod std_vendor;
 /// ```
 pub struct Arc<T: ?Sized> {
     ptr: NonNull<ArcInner<T>>,
+    // NB: this informs dropck that objects of type `ArcInner<T>` may be used in `<Arc<T> as
+    // Drop>::drop`. Note that dropck already assumes that objects of type `T` may be used in
+    // `<Arc<T> as Drop>::drop` and the distinction between `T` and `ArcInner<T>` is not presently
+    // meaningful with respect to dropck - but this may change in the future so this is left here
+    // out of an abundance of caution.
+    //
+    // See https://doc.rust-lang.org/nomicon/phantom-data.html#generic-parameters-and-drop-checking
+    // for more detail on the semantics of dropck in the presence of `PhantomData`.
     _p: PhantomData<ArcInner<T>>,
 }