mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-29 11:37:39 +00:00

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)
47 lines
2.6 KiB
Rust
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
|