Closed
Description
Check this out:
% cat src/main.rs
use std::ffi::c_char;
extern "C" {
fn printf(fmt: *const c_char, ...);
}
fn main() {
dbg!(std::env::args().skip(1).take(1).collect::<String>());
let fmt = b"Hello, world!\n\0".as_ptr() as *const c_char;
unsafe {
printf(fmt);
}
}
You'd expect miri run ...
to error on the above code.
But:
% cargo +nightly miri run whoa
Preparing a sysroot for Miri (target: x86_64-unknown-linux-gnu)... done
Finished dev [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/hello whoa --target-dir /local/home/pnkfelix/Dev/Rust/hello/target/miri --target x86_64-unknown-linux-gnu --config 'target.'\''cfg(all())'\''.runner=["/local/home/pnkfelix/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/cargo-miri", '\''runner'\'']' --`
[src/main.rs:8] std::env::args().skip(1).take(1).collect::<String>() = "whoa"
Hello, world!
Now, if someone is reading the above output properly, they might get a hint as to what's actually happening here: it's building and running a debug binary, rather than running cargo-miri itself.
(I.e., you need to pass inputs with an intervening --
, like so: cargo +nightly miri run -- whoa
, which does what you expect and issues a error at the point where printf
is called.)
But what is the scenario where you want the current behavior when --
is omitted? Should miri run
provide an error or warning when --
is omitted and the extra arguments are not recognized by miri's argument processor?