diff --git a/crates/block2/src/concrete_block.rs b/crates/block2/src/concrete_block.rs
index d2884e342..87dc7e11f 100644
--- a/crates/block2/src/concrete_block.rs
+++ b/crates/block2/src/concrete_block.rs
@@ -215,7 +215,7 @@ impl ConcreteBlock {
/// correct arguments.
unsafe fn with_invoke(invoke: unsafe extern "C" fn(), closure: F) -> Self {
let layout = abi::Block_layout {
- isa: unsafe { &ffi::_NSConcreteStackBlock },
+ isa: unsafe { ptr::addr_of!(ffi::_NSConcreteStackBlock) },
flags: Self::FLAGS,
reserved: 0,
invoke: Some(invoke),
diff --git a/crates/block2/src/debug.rs b/crates/block2/src/debug.rs
index 430a87d98..212dc5c46 100644
--- a/crates/block2/src/debug.rs
+++ b/crates/block2/src/debug.rs
@@ -11,11 +11,14 @@ struct Isa(*const ffi::Class);
impl Isa {
fn is_global(self) -> bool {
- ptr::eq(unsafe { &ffi::_NSConcreteGlobalBlock }, self.0)
+ ptr::eq(
+ unsafe { ptr::addr_of!(ffi::_NSConcreteGlobalBlock) },
+ self.0,
+ )
}
fn is_stack(self) -> bool {
- ptr::eq(unsafe { &ffi::_NSConcreteStackBlock }, self.0)
+ ptr::eq(unsafe { ptr::addr_of!(ffi::_NSConcreteStackBlock) }, self.0)
}
}
@@ -216,13 +219,13 @@ mod tests {
#[test]
fn test_isa() {
- let isa = Isa(unsafe { &ffi::_NSConcreteGlobalBlock });
+ let isa = Isa(unsafe { ptr::addr_of!(ffi::_NSConcreteGlobalBlock) });
assert!(isa.is_global());
assert!(!isa.is_stack());
- let isa = Isa(unsafe { &ffi::_NSConcreteStackBlock });
+ let isa = Isa(unsafe { ptr::addr_of!(ffi::_NSConcreteStackBlock) });
assert!(!isa.is_global());
assert!(isa.is_stack());
- let isa = Isa(unsafe { &ffi::private::_NSConcreteMallocBlock });
+ let isa = Isa(unsafe { ptr::addr_of!(ffi::private::_NSConcreteMallocBlock) });
assert!(!isa.is_global());
assert!(!isa.is_stack());
let isa = Isa(ptr::null());
diff --git a/crates/block2/src/ffi.rs b/crates/block2/src/ffi.rs
index a8776d177..92477a613 100644
--- a/crates/block2/src/ffi.rs
+++ b/crates/block2/src/ffi.rs
@@ -153,9 +153,11 @@ mod tests {
#[test]
fn test_linkable() {
- println!("{:p}", unsafe { &_NSConcreteGlobalBlock });
- println!("{:p}", unsafe { &_NSConcreteStackBlock });
- println!("{:p}", unsafe { &private::_NSConcreteMallocBlock });
+ println!("{:?}", unsafe { ptr::addr_of!(_NSConcreteGlobalBlock) });
+ println!("{:?}", unsafe { ptr::addr_of!(_NSConcreteStackBlock) });
+ println!("{:?}", unsafe {
+ ptr::addr_of!(private::_NSConcreteMallocBlock)
+ });
println!("{:p}", _Block_copy as unsafe extern "C" fn(_) -> _);
println!(
"{:p}",
diff --git a/crates/block2/src/global.rs b/crates/block2/src/global.rs
index 47c409b24..adca770d4 100644
--- a/crates/block2/src/global.rs
+++ b/crates/block2/src/global.rs
@@ -171,7 +171,7 @@ macro_rules! global_block {
#[allow(unused_unsafe)]
$vis static $name: $crate::GlobalBlock<($($t,)*) $(, $r)?> = unsafe {
let mut layout = $crate::GlobalBlock::<($($t,)*) $(, $r)?>::__DEFAULT_LAYOUT;
- layout.isa = &$crate::ffi::_NSConcreteGlobalBlock;
+ layout.isa = ::core::ptr::addr_of!($crate::ffi::_NSConcreteGlobalBlock);
layout.invoke = ::core::option::Option::Some({
unsafe extern "C" fn inner(_: *mut $crate::__Block_layout, $($a: $t),*) $(-> $r)? {
$body