DOC: Add FFI example for slice::from_raw_parts() · model-checking/verify-rust-std@08f761f (original) (raw)

Original file line number Diff line number Diff line change
@@ -83,6 +83,27 @@ use crate::ub_checks;
83 83 /// }
84 84 /// ```
85 85 ///
86 +/// ### FFI: Handling null pointers
87 +///
88 +/// In languages such as C++, pointers to empty collections are not guaranteed to be non-null.
89 +/// When accepting such pointers, they have to be checked for null-ness to avoid undefined
90 +/// behavior.
91 +///
92 +/// ```
93 +/// use std::slice;
94 +///
95 +/// unsafe extern "C" fn handle_slice(ptr: *const f32, len: usize) {
96 +/// let data = if ptr.is_null() {
97 +/// // `len` is assumed to be 0.
98 +/// &[]
99 +/// } else {
100 +/// unsafe { slice::from_raw_parts(ptr, len) }
101 +/// };
102 +/// dbg!(data);
103 +/// // ...
104 +/// }
105 +/// ```
106 +///
86 107 /// [valid]: ptr#safety
87 108 /// [`NonNull::dangling()`]: ptr::NonNull::dangling
88 109 #[inline]