Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mutable reference to mutable static detected bu rustc #114

Open
Young-Flash opened this issue Apr 23, 2024 · 1 comment
Open

mutable reference to mutable static detected bu rustc #114

Young-Flash opened this issue Apr 23, 2024 · 1 comment

Comments

@Young-Flash
Copy link

Young-Flash commented Apr 23, 2024

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

@evmar
Copy link
Owner

evmar commented Apr 23, 2024

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants