| // 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() {} |