Closed
Description
I tried this code:
fn main() {
extern "C" fn bye() {
print!("hello, world!");
}
unsafe { libc::atexit(bye) };
}
I expected to see this happen:
The code should print "hello, world!", which it does if any print
statement occurred before it (see the test).
Instead, this happened:
Nothing is printed to standard output.
The bug is in the cleanup function that disables buffering during shutdown:
rust/library/std/src/io/stdio.rs
Lines 613 to 625 in 9208625
If the buffer has not been initialized yet, that will not occur, so the
print
statement will initialize the buffer in the normal fashion and it will not be flushed.
Meta
rustc --version --verbose
:
rustc 1.63.0 (4b91a6ea7 2022-08-08)
binary: rustc
commit-hash: 4b91a6ea7258a947e59c6522cd5898e7c0a6a88f
commit-date: 2022-08-08
host: aarch64-apple-darwin
release: 1.63.0
LLVM version: 14.0.5