fn main() {
let val = 0;
unsafe { foo(&val) }
}
extern \"C\" {
pub fn foo(val: *const u32);
}
Implementation in C:
I'd say undefined behavior:
Mutating non-mutable data — that is, data reached through a shared reference or data owned by a
let
binding), unless that data is contained within anUnsafeCell
.
And this might include:
val
after the FFI-call it might ignore the writes you did (e.g. cached the value in a register or due to constant propagation)