Skip to content

Commit

Permalink
Auto merge of rust-lang#116325 - scottmcm:addr_eq, r=dtolnay
Browse files Browse the repository at this point in the history
Add `ptr::addr_eq`

Seconded ACP: rust-lang/libs-team#274 (comment)
Tracking issue: rust-lang#116324
cc `@dtolnay` rust-lang#106447
  • Loading branch information
bors committed Oct 2, 2023
2 parents 30ec747 + 1878791 commit 1578329
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions library/core/src/ptr/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1868,6 +1868,28 @@ pub fn eq<T: ?Sized>(a: *const T, b: *const T) -> bool {
a == b
}

/// Compares the *addresses* of the two pointers for equality,
/// ignoring any metadata in fat pointers.
///
/// If the arguments are thin pointers of the same type,
/// then this is the same as [`eq`].
///
/// # Examples
///
/// ```
/// #![feature(ptr_addr_eq)]
///
/// let whole: &[i32; 3] = &[1, 2, 3];
/// let first: &i32 = &whole[0];
/// assert!(std::ptr::addr_eq(whole, first));
/// assert!(!std::ptr::eq::<dyn std::fmt::Debug>(whole, first));
/// ```
#[unstable(feature = "ptr_addr_eq", issue = "116324")]
#[inline(always)]
pub fn addr_eq<T: ?Sized, U: ?Sized>(p: *const T, q: *const U) -> bool {
(p as *const ()) == (q as *const ())
}

/// Hash a raw pointer.
///
/// This can be used to hash a `&T` reference (which coerces to `*const T` implicitly)
Expand Down

0 comments on commit 1578329

Please sign in to comment.