From d92d6f6f57bac7c45db490c8998a7e9068fb286a Mon Sep 17 00:00:00 2001 From: Michael Cuevas Date: Wed, 30 Oct 2024 14:18:29 -0700 Subject: [PATCH] fix addrOfMut warning Summary: Fixes the following warning by following the advice given: ``` warning: creating a mutable reference to mutable static is discouraged --> fbcode/eden/scm/lib/cpython-ext/src/bytesobject.rs:37:13 | 37 | &mut PyBytes_Type as *mut PyTypeObject, | ^^^^^^^^^^^^^^^^^ mutable reference to mutable static | = note: for more information, see issue #114447 = note: this will be a hard error in the 2024 edition = note: this mutable reference has lifetime `'static`, but if the static gets accessed (read or written) by any other means, or any other reference is created, then any further use of this mutable reference is Undefined Behavior = note: `#[warn(static_mut_refs)]` on by default help: use `addr_of_mut!` instead to create a raw pointer | 37 | addr_of_mut!(PyBytes_Type) as *mut PyTypeObject, | ~~~~~~~~~~~~~ + ``` Reviewed By: quark-zju Differential Revision: D65218834 fbshipit-source-id: 8298cdf8089b6d8516e0cb59a811b30465eb1f8c --- eden/scm/lib/cpython-ext/src/bytesobject.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eden/scm/lib/cpython-ext/src/bytesobject.rs b/eden/scm/lib/cpython-ext/src/bytesobject.rs index c16268ba4c290..8b77157373c76 100644 --- a/eden/scm/lib/cpython-ext/src/bytesobject.rs +++ b/eden/scm/lib/cpython-ext/src/bytesobject.rs @@ -7,13 +7,13 @@ use std::mem; use std::os::raw::c_char; +use std::ptr::addr_of_mut; use std::slice; use cpython::PyObject as RustPyObject; use cpython::Python as RustPythonGILGuard; use ffi::PyBytes_Type; use ffi::PyObject; -use ffi::PyTypeObject; use ffi::PyVarObject; use ffi::Py_hash_t; use ffi::Py_ssize_t; @@ -34,7 +34,7 @@ struct PyBytesObject { pub fn allocate_pybytes(py: RustPythonGILGuard<'_>, size: usize) -> (RustPyObject, &mut [u8]) { unsafe { let ptr: *mut PyVarObject = _PyObject_NewVar( - &mut PyBytes_Type as *mut PyTypeObject, + addr_of_mut!(PyBytes_Type), (size + mem::size_of::()) as Py_ssize_t, ); let mut ptr: *mut PyObject = mem::transmute(ptr);