rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
97.86k stars 12.67k forks source link

rustc silently ignores invalid -C target-feature names #44815

Open johnthagen opened 7 years ago

johnthagen commented 7 years ago

Compiling a simple Hello, World program:

$ rustc -V
rustc 1.20.0 (f3d6973f4 2017-08-27)

# Note the trailing "zzzz"
$ RUSTFLAGS=-Ctarget-feature=+crt-staticzzzz cargo build -v
   Compiling rust-test v0.1.0 (rust-test)
     Running `rustc --crate-name rust_test src/main.rs --crate-type bin --emit=dep-info,link -C debuginfo=2 -C metadata=aafe1708c049ad76 -C extra-filename=-aafe1708c049ad76 --out-dir rust-test/target/debug/deps -L dependency=rust-test/target/debug/deps '-Ctarget-feature=+crt-staticzzzz'`
    Finished dev [unoptimized + debuginfo] target(s) in 0.25 secs

Should RUSTFLAGS=-Ctarget-feature=+crt-staticzzzz be silently accepted?

If I pass RUSTFLAGS=-Ctarget-feature=+batman, a warning is printed, as expected.

'+batman' is not a recognized feature for this target (ignoring feature)

Why is trailing misspelling silently allowed?

zackmdavis commented 7 years ago

This is happening inside LLVM and plausibly should be filed with that project.

hanna-kruppe commented 7 years ago

crt-static is not passed to LLVM (and shouldn't be). It seems as if rustc consumes not just crt-static but also other target features that have it as a prefix? This filtering looks suspicious:

https://github.com/rust-lang/rust/blob/ded38dbfc258f8e253ab61d1bca08b21efa2bf3d/src/librustc_trans/back/write.rs#L119-L121

petrochenkov commented 4 years ago

Also rustc: