rust/test-cargo-miri/build.rs
2022-07-24 13:35:05 -04:00

41 lines
1.4 KiB
Rust

use std::env;
#[cfg(miri)]
compile_error!("`miri` cfg should not be set in build script");
fn not_in_miri() -> i32 {
// Inline assembly definitely does not work in Miri.
let mut dummy = 42;
unsafe {
std::arch::asm!("/* {} */", in(reg) &mut dummy);
}
return dummy;
}
fn main() {
not_in_miri();
// Cargo calls `miri --print=cfg` to populate the `CARGO_CFG_*` env vars.
// Make sure that the "miri" flag is set.
assert!(env::var_os("CARGO_CFG_MIRI").is_some(), "cargo failed to tell us about `--cfg miri`");
println!("cargo:rerun-if-changed=build.rs");
println!("cargo:rerun-if-env-changed=MIRITESTVAR");
println!("cargo:rustc-env=MIRITESTVAR=testval");
// Test that autocfg works. This invokes RUSTC.
let a = autocfg::new();
assert!(a.probe_sysroot_crate("std"));
assert!(!a.probe_sysroot_crate("doesnotexist"));
assert!(a.probe_rustc_version(1, 0));
assert!(!a.probe_rustc_version(2, 0));
assert!(a.probe_type("i128"));
assert!(!a.probe_type("doesnotexist"));
assert!(a.probe_trait("Send"));
assert!(!a.probe_trait("doesnotexist"));
assert!(a.probe_path("std::num"));
assert!(!a.probe_path("doesnotexist"));
assert!(a.probe_constant("i32::MAX"));
assert!(!a.probe_constant("doesnotexist"));
assert!(a.probe_expression("Box::new(0)"));
assert!(!a.probe_expression("doesnotexist"));
}