// This test check that we recognize all the well known config names // and that we correctly lint on unexpected values. // // This test also serve as an "anti-regression" for the well known // values since the suggestion shows them. // //@ check-pass //@ no-auto-check-cfg //@ compile-flags: --check-cfg=cfg() //@ compile-flags: -Zcheck-cfg-all-expected #![feature(cfg_overflow_checks)] #![feature(cfg_relocation_model)] #![feature(cfg_sanitize)] #![feature(cfg_target_has_atomic)] #![feature(cfg_target_has_atomic_equal_alignment)] #![feature(cfg_target_thread_local)] #![feature(cfg_ub_checks)] #![feature(fmt_debug)] // This part makes sure that none of the well known names are // unexpected. // // BUT to make sure that no expected values changes without // being noticed we pass them a obviously wrong value so the // diagnostic prints the list of expected values. #[cfg(any( // tidy-alphabetical-start clippy = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value debug_assertions = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value doc = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value doctest = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value fmt_debug = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value miri = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value overflow_checks = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value panic = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value proc_macro = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value relocation_model = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value rustfmt = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value sanitize = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value target_abi = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value target_arch = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value target_endian = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value target_env = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value target_family = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value target_feature = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value target_has_atomic = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value target_has_atomic_equal_alignment = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value target_has_atomic_load_store = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value target_os = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value target_pointer_width = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value target_thread_local = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value target_vendor = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value test = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value ub_checks = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value unix = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value windows = "_UNEXPECTED_VALUE", //~^ WARN unexpected `cfg` condition value // tidy-alphabetical-end ))] fn unexpected_values() {} #[cfg(target_os = "linuz")] // testing that we suggest `linux` //~^ WARNING unexpected `cfg` condition value fn target_os_linux_misspell() {} // The #[cfg]s below serve as a safeguard to make sure we // don't lint when using an expected well-known name and // value, only a small subset of all possible expected // configs are tested, since we already test the names // above and don't need to test all values, just different // combinations (without value, with value, both...). #[cfg(target_os = "linux")] fn target_os_linux() {} #[cfg(target_feature = "crt-static")] // pure rustc feature fn target_feature() {} #[cfg(target_has_atomic = "8")] fn target_has_atomic_8() {} #[cfg(target_has_atomic)] fn target_has_atomic() {} #[cfg(unix)] fn unix() {} #[cfg(doc)] fn doc() {} #[cfg(clippy)] fn clippy() {} #[cfg_attr(rustfmt, rustfmt::skip)] fn rustfmt() {} fn main() {}