Rollup merge of #129897 - RalfJung:soft-float-ignored, r=Urgau
deprecate -Csoft-float because it is unsound (and not fixable) See https://github.com/rust-lang/rust/issues/129893 for details. The general sentiment there seems to be that this flag has no use and sound alternatives exist, so let's add this warning and see if anyone out there disagrees. Also show a different warning on targets where it does nothing (as documented since https://github.com/rust-lang/rust/pull/36261): it seems to correspond to `-mfloat-abi` in GCC/clang, which is an ARM-specific option. To be really sure it does nothing, only forward the flag to LLVM for eabihf targets. This should not change behavior but makes me sleep better ;)
This commit is contained in:
commit
0daa636b93
@ -185,7 +185,13 @@ pub(crate) fn target_machine_factory(
|
||||
let reloc_model = to_llvm_relocation_model(sess.relocation_model());
|
||||
|
||||
let (opt_level, _) = to_llvm_opt_settings(optlvl);
|
||||
let use_softfp = sess.opts.cg.soft_float;
|
||||
let use_softfp = if sess.target.arch == "arm" && sess.target.abi == "eabihf" {
|
||||
sess.opts.cg.soft_float
|
||||
} else {
|
||||
// `validate_commandline_args_with_session_available` has already warned about this being ignored.
|
||||
// Let's make sure LLVM doesn't suddenly start using this flag on more targets.
|
||||
false
|
||||
};
|
||||
|
||||
let ffunction_sections =
|
||||
sess.opts.unstable_opts.function_sections.unwrap_or(sess.target.function_sections);
|
||||
|
@ -107,6 +107,16 @@ session_sanitizer_not_supported = {$us} sanitizer is not supported for this targ
|
||||
session_sanitizers_not_supported = {$us} sanitizers are not supported for this target
|
||||
|
||||
session_skipping_const_checks = skipping const checks
|
||||
|
||||
session_soft_float_deprecated =
|
||||
`-Csoft-float` is unsound and deprecated; use a corresponding *eabi target instead
|
||||
.note = it will be removed or ignored in a future version of Rust
|
||||
session_soft_float_deprecated_issue = see issue #129893 <https://github.com/rust-lang/rust/issues/129893> for more information
|
||||
|
||||
session_soft_float_ignored =
|
||||
`-Csoft-float` is ignored on this target; it only has an effect on *eabihf targets
|
||||
.note = this may become a hard error in a future version of Rust
|
||||
|
||||
session_split_debuginfo_unstable_platform = `-Csplit-debuginfo={$debuginfo}` is unstable on this platform
|
||||
|
||||
session_split_lto_unit_requires_lto = `-Zsplit-lto-unit` requires `-Clto`, `-Clto=thin`, or `-Clinker-plugin-lto`
|
||||
|
@ -490,3 +490,14 @@ pub(crate) struct IncompatibleLinkerFlavor {
|
||||
pub(crate) struct FailedToCreateProfiler {
|
||||
pub(crate) err: String,
|
||||
}
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(session_soft_float_ignored)]
|
||||
#[note]
|
||||
pub(crate) struct SoftFloatIgnored;
|
||||
|
||||
#[derive(Diagnostic)]
|
||||
#[diag(session_soft_float_deprecated)]
|
||||
#[note]
|
||||
#[note(session_soft_float_deprecated_issue)]
|
||||
pub(crate) struct SoftFloatDeprecated;
|
||||
|
@ -1515,6 +1515,7 @@ pub(crate) fn parse_mir_include_spans(slot: &mut MirIncludeSpans, v: Option<&str
|
||||
// - src/doc/rustc/src/codegen-options/index.md
|
||||
|
||||
// tidy-alphabetical-start
|
||||
#[rustc_lint_opt_deny_field_access("documented to do nothing")]
|
||||
ar: String = (String::new(), parse_string, [UNTRACKED],
|
||||
"this option is deprecated and does nothing"),
|
||||
#[rustc_lint_opt_deny_field_access("use `Session::code_model` instead of this field")]
|
||||
@ -1547,6 +1548,7 @@ pub(crate) fn parse_mir_include_spans(slot: &mut MirIncludeSpans, v: Option<&str
|
||||
"force use of unwind tables"),
|
||||
incremental: Option<String> = (None, parse_opt_string, [UNTRACKED],
|
||||
"enable incremental compilation"),
|
||||
#[rustc_lint_opt_deny_field_access("documented to do nothing")]
|
||||
inline_threshold: Option<u32> = (None, parse_opt_number, [TRACKED],
|
||||
"this option is deprecated and does nothing \
|
||||
(consider using `-Cllvm-args=--inline-threshold=...`)"),
|
||||
@ -1583,6 +1585,7 @@ pub(crate) fn parse_mir_include_spans(slot: &mut MirIncludeSpans, v: Option<&str
|
||||
"give an empty list of passes to the pass manager"),
|
||||
no_redzone: Option<bool> = (None, parse_opt_bool, [TRACKED],
|
||||
"disable the use of the redzone"),
|
||||
#[rustc_lint_opt_deny_field_access("documented to do nothing")]
|
||||
no_stack_check: bool = (false, parse_no_flag, [UNTRACKED],
|
||||
"this option is deprecated and does nothing"),
|
||||
no_vectorize_loops: bool = (false, parse_no_flag, [TRACKED],
|
||||
@ -1619,7 +1622,7 @@ pub(crate) fn parse_mir_include_spans(slot: &mut MirIncludeSpans, v: Option<&str
|
||||
save_temps: bool = (false, parse_bool, [UNTRACKED],
|
||||
"save all temporary output files during compilation (default: no)"),
|
||||
soft_float: bool = (false, parse_bool, [TRACKED],
|
||||
"use soft float ABI (*eabihf targets only) (default: no)"),
|
||||
"deprecated option: use soft float ABI (*eabihf targets only) (default: no)"),
|
||||
#[rustc_lint_opt_deny_field_access("use `Session::split_debuginfo` instead of this field")]
|
||||
split_debuginfo: Option<SplitDebuginfo> = (None, parse_split_debuginfo, [TRACKED],
|
||||
"how to handle split-debuginfo, a platform-specific option"),
|
||||
|
@ -1348,6 +1348,16 @@ fn validate_commandline_args_with_session_available(sess: &Session) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if sess.opts.cg.soft_float {
|
||||
if sess.target.arch == "arm" && sess.target.abi == "eabihf" {
|
||||
sess.dcx().emit_warn(errors::SoftFloatDeprecated);
|
||||
} else {
|
||||
// All `use_softfp` does is the equivalent of `-mfloat-abi` in GCC/clang, which only exists on ARM targets.
|
||||
// We document this flag to only affect `*eabihf` targets, so let's show a warning for all other targets.
|
||||
sess.dcx().emit_warn(errors::SoftFloatIgnored);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Holds data on the current incremental compilation session, if there is one.
|
||||
|
Loading…
Reference in New Issue
Block a user