Closed
Description
I tried to make the MRE shorter, but this code is very sensitive to changes.
I tried this code under Miri (playground):
#![forbid(unsafe_code)]
use std::ptr::NonNull;
trait Trace {}
impl Trace for Box<i32> {}
struct GcNode<T: ?Sized> {
refcount: u64,
next: Option<NonNull<GcNode<dyn Trace>>>,
value: T,
}
fn main() {
let node: Box<GcNode<dyn Trace>> = Box::new(GcNode {
refcount: 0,
next: None,
value: Box::new(0),
});
dbg!(node.refcount);
}
I expected to see this happen: no error.
Instead, this happened:
error: Undefined Behavior: using uninitialized data, but this operation requires initialized memory
--> src/main.rs:20:3
|
20 | dbg!(node.refcount);
| ^^^^^^^^^^^^^^^^^^^ using uninitialized data, but this operation requires initialized memory
|
= help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
= help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information
= note: BACKTRACE:
= note: inside `main` at /playground/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/macros.rs:352:13: 352:16
= note: this error originates in the macro `dbg` (in Nightly builds, run with -Z macro-backtrace for more info)
Meta
rustc --version --verbose
:
❯ rustc -Vv
rustc 1.71.0-nightly (cca7ee581 2023-05-27)
binary: rustc
commit-hash: cca7ee58110726983951a19d5fb7316d9243925d
commit-date: 2023-05-27
host: x86_64-unknown-linux-gnu
release: 1.71.0-nightly
LLVM version: 16.0.4