Skip to content

Commit d07a1ab

Browse files
authored
use raw references instead of addr_of! / addr_of_mut! (#5879)
1 parent 7aa6163 commit d07a1ab

36 files changed

Lines changed: 93 additions & 133 deletions

pyo3-ffi/README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ static mut MODULE_DEF: PyModuleDef = PyModuleDef {
7878
m_name: c"string_sum".as_ptr(),
7979
m_doc: c"A Python module written in Rust.".as_ptr(),
8080
m_size: 0,
81-
m_methods: std::ptr::addr_of_mut!(METHODS).cast(),
82-
m_slots: std::ptr::addr_of_mut!(SLOTS).cast(),
81+
m_methods: (&raw mut METHODS).cast(),
82+
m_slots: (&raw mut SLOTS).cast(),
8383
m_traverse: None,
8484
m_clear: None,
8585
m_free: None,
@@ -107,7 +107,7 @@ static mut SLOTS: [PyModuleDef_Slot; SLOTS_LEN] = [
107107
#[cfg(Py_3_15)]
108108
PyModuleDef_Slot {
109109
slot: Py_mod_abi,
110-
value: std::ptr::addr_of_mut!(ABI_INFO).cast(),
110+
value: (&raw mut ABI_INFO).cast(),
111111
},
112112
#[cfg(Py_3_15)]
113113
PyModuleDef_Slot {
@@ -124,7 +124,7 @@ static mut SLOTS: [PyModuleDef_Slot; SLOTS_LEN] = [
124124
#[cfg(Py_3_15)]
125125
PyModuleDef_Slot {
126126
slot: Py_mod_methods,
127-
value: std::ptr::addr_of_mut!(METHODS).cast(),
127+
value: (&raw mut METHODS).cast(),
128128
},
129129
#[cfg(Py_3_12)]
130130
PyModuleDef_Slot {
@@ -147,14 +147,14 @@ static mut SLOTS: [PyModuleDef_Slot; SLOTS_LEN] = [
147147
#[allow(non_snake_case, reason = "must be named `PyInit_<your_module>`")]
148148
#[no_mangle]
149149
pub unsafe extern "C" fn PyInit_string_sum() -> *mut PyObject {
150-
PyModuleDef_Init(ptr::addr_of_mut!(MODULE_DEF))
150+
PyModuleDef_Init(&raw mut MODULE_DEF)
151151
}
152152
153153
#[cfg(Py_3_15)]
154154
#[allow(non_snake_case, reason = "must be named `PyModExport_<your_module>`")]
155155
#[no_mangle]
156156
pub unsafe extern "C" fn PyModExport_string_sum() -> *mut PyModuleDef_Slot {
157-
std::ptr::addr_of_mut!(SLOTS).cast()
157+
(&raw mut SLOTS).cast()
158158
}
159159
160160
/// A helper to parse function arguments

pyo3-ffi/examples/sequential/src/id.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ unsafe extern "C" fn id_new(
4343
} else {
4444
let id = Id::new();
4545
let slf = slf.cast::<PyId>();
46-
ptr::addr_of_mut!((*slf).id).write(id);
46+
(&raw mut (*slf).id).write(id);
4747
}
4848

4949
slf
@@ -131,5 +131,5 @@ pub static mut ID_SPEC: PyType_Spec = PyType_Spec {
131131
basicsize: mem::size_of::<PyId>() as c_int,
132132
itemsize: 0,
133133
flags: (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_IMMUTABLETYPE) as c_uint,
134-
slots: ptr::addr_of_mut!(SLOTS).cast(),
134+
slots: (&raw mut SLOTS).cast(),
135135
};

pyo3-ffi/examples/sequential/src/lib.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::ptr;
2-
31
use pyo3_ffi::*;
42

53
mod id;
@@ -13,12 +11,12 @@ use crate::module::SEQUENTIAL_SLOTS;
1311
#[allow(non_snake_case, reason = "must be named `PyInit_<your_module>`")]
1412
#[no_mangle]
1513
pub unsafe extern "C" fn PyInit_sequential() -> *mut PyObject {
16-
PyModuleDef_Init(ptr::addr_of_mut!(MODULE_DEF))
14+
PyModuleDef_Init(&raw mut MODULE_DEF)
1715
}
1816

1917
#[cfg(Py_3_15)]
2018
#[allow(non_snake_case, reason = "must be named `PyModExport_<your_module>`")]
2119
#[no_mangle]
2220
pub unsafe extern "C" fn PyModExport_sequential() -> *mut PyModuleDef_Slot {
23-
ptr::addr_of_mut!(SEQUENTIAL_SLOTS).cast()
21+
(&raw mut SEQUENTIAL_SLOTS).cast()
2422
}

pyo3-ffi/examples/sequential/src/module.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ pub static mut MODULE_DEF: PyModuleDef = PyModuleDef {
99
m_doc: c"A library for generating sequential ids, written in Rust.".as_ptr(),
1010
m_size: mem::size_of::<sequential_state>() as Py_ssize_t,
1111
m_methods: std::ptr::null_mut(),
12-
m_slots: std::ptr::addr_of_mut!(SEQUENTIAL_SLOTS).cast(),
12+
m_slots: (&raw mut SEQUENTIAL_SLOTS).cast(),
1313
m_traverse: Some(sequential_traverse),
1414
m_clear: Some(sequential_clear),
1515
m_free: Some(sequential_free),
@@ -24,7 +24,7 @@ pub static mut SEQUENTIAL_SLOTS: [PyModuleDef_Slot; SEQUENTIAL_SLOTS_LEN] = [
2424
#[cfg(Py_3_15)]
2525
PyModuleDef_Slot {
2626
slot: Py_mod_abi,
27-
value: std::ptr::addr_of_mut!(ABI_INFO).cast(),
27+
value: (&raw mut ABI_INFO).cast(),
2828
},
2929
#[cfg(Py_3_15)]
3030
PyModuleDef_Slot {
@@ -81,11 +81,7 @@ pub static mut SEQUENTIAL_SLOTS: [PyModuleDef_Slot; SEQUENTIAL_SLOTS_LEN] = [
8181
unsafe extern "C" fn sequential_exec(module: *mut PyObject) -> c_int {
8282
let state: *mut sequential_state = PyModule_GetState(module).cast();
8383

84-
let id_type = PyType_FromModuleAndSpec(
85-
module,
86-
ptr::addr_of_mut!(crate::id::ID_SPEC),
87-
ptr::null_mut(),
88-
);
84+
let id_type = PyType_FromModuleAndSpec(module, &raw mut crate::id::ID_SPEC, ptr::null_mut());
8985
if id_type.is_null() {
9086
PyErr_SetString(PyExc_SystemError, c"cannot locate type object".as_ptr());
9187
return -1;
@@ -112,7 +108,7 @@ unsafe extern "C" fn sequential_traverse(
112108

113109
unsafe extern "C" fn sequential_clear(module: *mut PyObject) -> c_int {
114110
let state: *mut sequential_state = PyModule_GetState(module.cast()).cast();
115-
Py_CLEAR(ptr::addr_of_mut!((*state).id_type).cast());
111+
Py_CLEAR((&raw mut (*state).id_type).cast());
116112
0
117113
}
118114

pyo3-ffi/examples/string-sum/src/lib.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ static mut MODULE_DEF: PyModuleDef = PyModuleDef {
1111
m_name: c"string_sum".as_ptr(),
1212
m_doc: c"A Python module written in Rust.".as_ptr(),
1313
m_size: 0,
14-
m_methods: std::ptr::addr_of_mut!(METHODS).cast(),
15-
m_slots: std::ptr::addr_of_mut!(SLOTS).cast(),
14+
m_methods: (&raw mut METHODS).cast(),
15+
m_slots: (&raw mut SLOTS).cast(),
1616
m_traverse: None,
1717
m_clear: None,
1818
m_free: None,
@@ -40,7 +40,7 @@ static mut SLOTS: [PyModuleDef_Slot; SLOTS_LEN] = [
4040
#[cfg(Py_3_15)]
4141
PyModuleDef_Slot {
4242
slot: Py_mod_abi,
43-
value: std::ptr::addr_of_mut!(ABI_INFO).cast(),
43+
value: (&raw mut ABI_INFO).cast(),
4444
},
4545
#[cfg(Py_3_15)]
4646
PyModuleDef_Slot {
@@ -57,7 +57,7 @@ static mut SLOTS: [PyModuleDef_Slot; SLOTS_LEN] = [
5757
#[cfg(Py_3_15)]
5858
PyModuleDef_Slot {
5959
slot: Py_mod_methods,
60-
value: std::ptr::addr_of_mut!(METHODS).cast(),
60+
value: (&raw mut METHODS).cast(),
6161
},
6262
#[cfg(Py_3_12)]
6363
PyModuleDef_Slot {
@@ -80,14 +80,14 @@ static mut SLOTS: [PyModuleDef_Slot; SLOTS_LEN] = [
8080
#[allow(non_snake_case, reason = "must be named `PyInit_<your_module>`")]
8181
#[no_mangle]
8282
pub unsafe extern "C" fn PyInit_string_sum() -> *mut PyObject {
83-
PyModuleDef_Init(ptr::addr_of_mut!(MODULE_DEF))
83+
PyModuleDef_Init(&raw mut MODULE_DEF)
8484
}
8585

8686
#[cfg(Py_3_15)]
8787
#[allow(non_snake_case, reason = "must be named `PyModExport_<your_module>`")]
8888
#[no_mangle]
8989
pub unsafe extern "C" fn PyModExport_string_sum() -> *mut PyModuleDef_Slot {
90-
std::ptr::addr_of_mut!(SLOTS).cast()
90+
(&raw mut SLOTS).cast()
9191
}
9292

9393
/// A helper to parse function arguments

pyo3-ffi/src/boolobject.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22
use crate::longobject::PyLongObject;
33
use crate::object::*;
44
use std::ffi::{c_int, c_long};
5-
use std::ptr::addr_of_mut;
65

76
#[inline]
87
pub unsafe fn PyBool_Check(op: *mut PyObject) -> c_int {
9-
(Py_TYPE(op) == addr_of_mut!(PyBool_Type)) as c_int
8+
(Py_TYPE(op) == &raw mut PyBool_Type) as c_int
109
}
1110

1211
extern_libpython! {
@@ -26,15 +25,15 @@ extern_libpython! {
2625
#[inline]
2726
pub unsafe fn Py_False() -> *mut PyObject {
2827
#[cfg(not(GraalPy))]
29-
return addr_of_mut!(_Py_FalseStruct) as *mut PyObject;
28+
return (&raw mut _Py_FalseStruct).cast();
3029
#[cfg(GraalPy)]
3130
return _Py_FalseStructReference;
3231
}
3332

3433
#[inline]
3534
pub unsafe fn Py_True() -> *mut PyObject {
3635
#[cfg(not(GraalPy))]
37-
return addr_of_mut!(_Py_TrueStruct) as *mut PyObject;
36+
return (&raw mut _Py_TrueStruct).cast();
3837
#[cfg(GraalPy)]
3938
return _Py_TrueStructReference;
4039
}

pyo3-ffi/src/bytearrayobject.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use crate::object::*;
22
use crate::pyport::Py_ssize_t;
33
use std::ffi::{c_char, c_int};
4-
use std::ptr::addr_of_mut;
54

65
#[cfg(not(any(PyPy, GraalPy, Py_LIMITED_API)))]
76
#[repr(C)]
@@ -30,12 +29,12 @@ extern_libpython! {
3029

3130
#[inline]
3231
pub unsafe fn PyByteArray_Check(op: *mut PyObject) -> c_int {
33-
PyObject_TypeCheck(op, addr_of_mut!(PyByteArray_Type))
32+
PyObject_TypeCheck(op, &raw mut PyByteArray_Type)
3433
}
3534

3635
#[inline]
3736
pub unsafe fn PyByteArray_CheckExact(op: *mut PyObject) -> c_int {
38-
(Py_TYPE(op) == addr_of_mut!(PyByteArray_Type)) as c_int
37+
(Py_TYPE(op) == &raw mut PyByteArray_Type) as c_int
3938
}
4039

4140
extern_libpython! {

pyo3-ffi/src/bytesobject.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use crate::object::*;
22
use crate::pyport::Py_ssize_t;
33
use std::ffi::{c_char, c_int};
4-
use std::ptr::addr_of_mut;
54

65
extern_libpython! {
76
#[cfg_attr(PyPy, link_name = "PyPyBytes_Type")]
@@ -16,7 +15,7 @@ pub unsafe fn PyBytes_Check(op: *mut PyObject) -> c_int {
1615

1716
#[inline]
1817
pub unsafe fn PyBytes_CheckExact(op: *mut PyObject) -> c_int {
19-
(Py_TYPE(op) == addr_of_mut!(PyBytes_Type)) as c_int
18+
(Py_TYPE(op) == &raw mut PyBytes_Type) as c_int
2019
}
2120

2221
extern_libpython! {

pyo3-ffi/src/complexobject.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use crate::object::*;
22
use std::ffi::{c_double, c_int};
3-
use std::ptr::addr_of_mut;
43

54
extern_libpython! {
65
#[cfg_attr(PyPy, link_name = "PyPyComplex_Type")]
@@ -9,12 +8,12 @@ extern_libpython! {
98

109
#[inline]
1110
pub unsafe fn PyComplex_Check(op: *mut PyObject) -> c_int {
12-
PyObject_TypeCheck(op, addr_of_mut!(PyComplex_Type))
11+
PyObject_TypeCheck(op, &raw mut PyComplex_Type)
1312
}
1413

1514
#[inline]
1615
pub unsafe fn PyComplex_CheckExact(op: *mut PyObject) -> c_int {
17-
Py_IS_TYPE(op, addr_of_mut!(PyComplex_Type))
16+
Py_IS_TYPE(op, &raw mut PyComplex_Type)
1817
}
1918

2019
extern_libpython! {

pyo3-ffi/src/context.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use crate::object::{PyObject, PyTypeObject, Py_TYPE};
22
use std::ffi::{c_char, c_int};
3-
use std::ptr::addr_of_mut;
43

54
extern_libpython! {
65
pub static mut PyContext_Type: PyTypeObject;
@@ -13,17 +12,17 @@ extern_libpython! {
1312

1413
#[inline]
1514
pub unsafe fn PyContext_CheckExact(op: *mut PyObject) -> c_int {
16-
(Py_TYPE(op) == addr_of_mut!(PyContext_Type)) as c_int
15+
(Py_TYPE(op) == &raw mut PyContext_Type) as c_int
1716
}
1817

1918
#[inline]
2019
pub unsafe fn PyContextVar_CheckExact(op: *mut PyObject) -> c_int {
21-
(Py_TYPE(op) == addr_of_mut!(PyContextVar_Type)) as c_int
20+
(Py_TYPE(op) == &raw mut PyContextVar_Type) as c_int
2221
}
2322

2423
#[inline]
2524
pub unsafe fn PyContextToken_CheckExact(op: *mut PyObject) -> c_int {
26-
(Py_TYPE(op) == addr_of_mut!(PyContextToken_Type)) as c_int
25+
(Py_TYPE(op) == &raw mut PyContextToken_Type) as c_int
2726
}
2827

2928
extern_libpython! {

0 commit comments

Comments
 (0)