Skip to content

Commit a6ca4f5

Browse files
committed
Move warning reporting from flag_to_backend_features to cfg_target_feature
This way warnings are emitted even in a check build.
1 parent 0f5c80a commit a6ca4f5

File tree

2 files changed

+34
-39
lines changed

2 files changed

+34
-39
lines changed

src/gcc_util.rs

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ fn gcc_features_by_flags(sess: &Session, features: &mut Vec<String>) {
1111

1212
/// The list of GCC features computed from CLI flags (`-Ctarget-cpu`, `-Ctarget-feature`,
1313
/// `--target` and similar).
14-
pub(crate) fn global_gcc_features(sess: &Session, diagnostics: bool) -> Vec<String> {
14+
pub(crate) fn global_gcc_features(sess: &Session) -> Vec<String> {
1515
// Features that come earlier are overridden by conflicting features later in the string.
1616
// Typically we'll want more explicit settings to override the implicit ones, so:
1717
//
@@ -36,27 +36,18 @@ pub(crate) fn global_gcc_features(sess: &Session, diagnostics: bool) -> Vec<Stri
3636
features.extend(sess.target.features.split(',').filter(|v| !v.is_empty()).map(String::from));
3737

3838
// -Ctarget-features
39-
target_features::flag_to_backend_features(
40-
sess,
41-
diagnostics,
42-
|feature| to_gcc_features(sess, feature),
43-
|feature, enable| {
44-
// We run through `to_gcc_features` when
45-
// passing requests down to GCC. This means that all in-language
46-
// features also work on the command line instead of having two
47-
// different names when the GCC name and the Rust name differ.
48-
features.extend(
49-
to_gcc_features(sess, feature)
50-
.iter()
51-
.flat_map(|feat| to_gcc_features(sess, feat).into_iter())
52-
.map(
53-
|feature| {
54-
if !enable { format!("-{}", feature) } else { feature.to_string() }
55-
},
56-
),
57-
);
58-
},
59-
);
39+
target_features::flag_to_backend_features(sess, |feature, enable| {
40+
// We run through `to_gcc_features` when
41+
// passing requests down to GCC. This means that all in-language
42+
// features also work on the command line instead of having two
43+
// different names when the GCC name and the Rust name differ.
44+
features.extend(
45+
to_gcc_features(sess, feature)
46+
.iter()
47+
.flat_map(|feat| to_gcc_features(sess, feat).into_iter())
48+
.map(|feature| if !enable { format!("-{}", feature) } else { feature.to_string() }),
49+
);
50+
});
6051

6152
gcc_features_by_flags(sess, &mut features);
6253

src/lib.rs

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ use rustc_target::spec::RelocModel;
107107
use tempfile::TempDir;
108108

109109
use crate::back::lto::ModuleBuffer;
110-
use crate::gcc_util::target_cpu;
110+
use crate::gcc_util::{target_cpu, to_gcc_features};
111111

112112
rustc_fluent_macro::fluent_messages! { "../messages.ftl" }
113113

@@ -220,7 +220,7 @@ impl CodegenBackend for GccCodegenBackend {
220220
}
221221

222222
fn provide(&self, providers: &mut Providers) {
223-
providers.global_backend_features = |tcx, ()| gcc_util::global_gcc_features(tcx.sess, true)
223+
providers.global_backend_features = |tcx, ()| gcc_util::global_gcc_features(tcx.sess)
224224
}
225225

226226
fn codegen_crate(&self, tcx: TyCtxt<'_>) -> Box<dyn Any> {
@@ -446,21 +446,25 @@ fn to_gcc_opt_level(optlevel: Option<OptLevel>) -> OptimizationLevel {
446446

447447
/// Returns the features that should be set in `cfg(target_feature)`.
448448
fn target_config(sess: &Session, target_info: &LockedTargetInfo) -> TargetConfig {
449-
let (unstable_target_features, target_features) = cfg_target_feature(sess, |feature| {
450-
// TODO: we disable Neon for now since we don't support the LLVM intrinsics for it.
451-
if feature == "neon" {
452-
return false;
453-
}
454-
target_info.cpu_supports(feature)
455-
// cSpell:disable
456-
/*
457-
adx, aes, avx, avx2, avx512bf16, avx512bitalg, avx512bw, avx512cd, avx512dq, avx512er, avx512f, avx512fp16, avx512ifma,
458-
avx512pf, avx512vbmi, avx512vbmi2, avx512vl, avx512vnni, avx512vp2intersect, avx512vpopcntdq,
459-
bmi1, bmi2, cmpxchg16b, ermsb, f16c, fma, fxsr, gfni, lzcnt, movbe, pclmulqdq, popcnt, rdrand, rdseed, rtm,
460-
sha, sse, sse2, sse3, sse4.1, sse4.2, sse4a, ssse3, tbm, vaes, vpclmulqdq, xsave, xsavec, xsaveopt, xsaves
461-
*/
462-
// cSpell:enable
463-
});
449+
let (unstable_target_features, target_features) = cfg_target_feature(
450+
sess,
451+
|feature| to_gcc_features(sess, feature),
452+
|feature| {
453+
// TODO: we disable Neon for now since we don't support the LLVM intrinsics for it.
454+
if feature == "neon" {
455+
return false;
456+
}
457+
target_info.cpu_supports(feature)
458+
// cSpell:disable
459+
/*
460+
adx, aes, avx, avx2, avx512bf16, avx512bitalg, avx512bw, avx512cd, avx512dq, avx512er, avx512f, avx512fp16, avx512ifma,
461+
avx512pf, avx512vbmi, avx512vbmi2, avx512vl, avx512vnni, avx512vp2intersect, avx512vpopcntdq,
462+
bmi1, bmi2, cmpxchg16b, ermsb, f16c, fma, fxsr, gfni, lzcnt, movbe, pclmulqdq, popcnt, rdrand, rdseed, rtm,
463+
sha, sse, sse2, sse3, sse4.1, sse4.2, sse4a, ssse3, tbm, vaes, vpclmulqdq, xsave, xsavec, xsaveopt, xsaves
464+
*/
465+
// cSpell:enable
466+
},
467+
);
464468

465469
let has_reliable_f16 = target_info.supports_target_dependent_type(CType::Float16);
466470
let has_reliable_f128 = target_info.supports_target_dependent_type(CType::Float128);

0 commit comments

Comments
 (0)