rust/tests/ui/cfg/disallowed-cli-cfgs.rs
Trevor Gross 6ceeb0849e Implement the internal feature cfg_target_has_reliable_f16_f128
Support for `f16` and `f128` is varied across targets, backends, and
backend versions. Eventually we would like to reach a point where all
backends support these approximately equally, but until then we have to
work around some of these nuances of support being observable.

Introduce the `cfg_target_has_reliable_f16_f128` internal feature, which
provides the following new configuration gates:

* `cfg(target_has_reliable_f16)`
* `cfg(target_has_reliable_f16_math)`
* `cfg(target_has_reliable_f128)`
* `cfg(target_has_reliable_f128_math)`

`reliable_f16` and `reliable_f128` indicate that basic arithmetic for
the type works correctly. The `_math` versions indicate that anything
relying on `libm` works correctly, since sometimes this hits a separate
class of codegen bugs.

These options match configuration set by the build script at [1]. The
logic for LLVM support is duplicated as-is from the same script. There
are a few possible updates that will come as a follow up.

The config introduced here is not planned to ever become stable, it is
only intended to replace the build scripts for `std` tests and
`compiler-builtins` that don't have any way to configure based on the
codegen backend.

MCP: https://github.com/rust-lang/compiler-team/issues/866
Closes: https://github.com/rust-lang/compiler-team/issues/866

[1]: 555e1d0386/library/std/build.rs (L84-L186)
2025-04-27 19:58:44 +00:00

47 lines
2.6 KiB
Rust

//@ check-fail
//@ revisions: overflow_checks_ debug_assertions_ ub_checks_ sanitize_
//@ revisions: sanitizer_cfi_generalize_pointers_ sanitizer_cfi_normalize_integers_
//@ revisions: proc_macro_ panic_ target_feature_ unix_ windows_ target_abi_
//@ revisions: target_arch_ target_endian_ target_env_ target_family_ target_os_
//@ revisions: target_pointer_width_ target_vendor_ target_has_atomic_
//@ revisions: target_has_atomic_equal_alignment_ target_has_atomic_load_store_
//@ revisions: target_thread_local_ relocation_model_
//@ revisions: fmt_debug_
//@ revisions: emscripten_wasm_eh_
//@ revisions: reliable_f16_ reliable_f16_math_ reliable_f128_ reliable_f128_math_
//@ [overflow_checks_]compile-flags: --cfg overflow_checks
//@ [debug_assertions_]compile-flags: --cfg debug_assertions
//@ [ub_checks_]compile-flags: --cfg ub_checks
//@ [sanitize_]compile-flags: --cfg sanitize="cfi"
//@ [sanitizer_cfi_generalize_pointers_]compile-flags: --cfg sanitizer_cfi_generalize_pointers
//@ [sanitizer_cfi_normalize_integers_]compile-flags: --cfg sanitizer_cfi_normalize_integers
//@ [proc_macro_]compile-flags: --cfg proc_macro
//@ [panic_]compile-flags: --cfg panic="abort"
//@ [target_feature_]compile-flags: --cfg target_feature="sse3"
//@ [unix_]compile-flags: --cfg unix
//@ [windows_]compile-flags: --cfg windows
//@ [target_abi_]compile-flags: --cfg target_abi="gnu"
//@ [target_arch_]compile-flags: --cfg target_arch="arm"
//@ [target_endian_]compile-flags: --cfg target_endian="little"
//@ [target_env_]compile-flags: --cfg target_env
//@ [target_family_]compile-flags: --cfg target_family="unix"
//@ [target_os_]compile-flags: --cfg target_os="linux"
//@ [target_pointer_width_]compile-flags: --cfg target_pointer_width="32"
//@ [target_vendor_]compile-flags: --cfg target_vendor
//@ [target_has_atomic_]compile-flags: --cfg target_has_atomic="32"
//@ [target_has_atomic_equal_alignment_]compile-flags: --cfg target_has_atomic_equal_alignment="32"
//@ [target_has_atomic_load_store_]compile-flags: --cfg target_has_atomic_load_store="32"
//@ [target_thread_local_]compile-flags: --cfg target_thread_local
//@ [relocation_model_]compile-flags: --cfg relocation_model="a"
//@ [fmt_debug_]compile-flags: --cfg fmt_debug="shallow"
//@ [emscripten_wasm_eh_]compile-flags: --cfg emscripten_wasm_eh
//@ [reliable_f16_]compile-flags: --cfg target_has_reliable_f16
//@ [reliable_f16_math_]compile-flags: --cfg target_has_reliable_f16_math
//@ [reliable_f128_]compile-flags: --cfg target_has_reliable_f128
//@ [reliable_f128_math_]compile-flags: --cfg target_has_reliable_f128_math
fn main() {}
//~? ERROR unexpected `--cfg