n2
n2 copied to clipboard
mutable reference to mutable static detected bu rustc
Thanks for the great project.
I am using rustc 1.77.2, when I run cargo test, it warnning:
warning: creating a mutable reference to mutable static is discouraged
--> src/trace.rs:104:15
|
104 | match &mut TRACE {
| ^^^^^^^^^^ mutable reference to mutable static
|
= note: for more information, see issue #114447 <https://github.com/rust-lang/rust/issues/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
the code could be refactor to:
use std::ptr::addr_of_mut;
match *addr_of_mut!(TRACE) {
None => {}
Some(ref mut t) => f(t),
}
if it's ok with you, I'd like to make a PR
Thanks for filing this!
Looking at the bug in the error message, they mention how you can't just then dereference the pointer and need to"[make] sure that the reference stops being used before a second reference is created". In reviewing this code, I think we do not do this, because multiple trace::scope()s will be nested.
I think the proper fix would be to remove the callbacks from if_enabled and scope so that it's impossible to use incorrectly.