Skip to content

Commit

Permalink
Rollup merge of rust-lang#108949 - Urgau:check-cfg-target-json, r=oli…
Browse files Browse the repository at this point in the history
…-obk

Honor current target when checking conditional compilation values

This is fixed by simply using the currently registered target in the current session. We need to use it because of target json that are not by design included in the rustc list of targets.

Fixes rust-lang#108941
  • Loading branch information
matthiaskrgr authored Mar 11, 2023
2 parents 0b900cb + 3455d66 commit 5dd7770
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 4 deletions.
2 changes: 1 addition & 1 deletion compiler/rustc_interface/src/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ pub fn create_session(
add_configuration(&mut cfg, &mut sess, &*codegen_backend);

let mut check_cfg = config::to_crate_check_config(check_cfg);
check_cfg.fill_well_known();
check_cfg.fill_well_known(&sess.target);

sess.parse_sess.config = cfg;
sess.parse_sess.check_config = check_cfg;
Expand Down
7 changes: 4 additions & 3 deletions compiler/rustc_session/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1137,7 +1137,7 @@ impl CrateCheckConfig {
}

/// Fills a `CrateCheckConfig` with well-known configuration values.
fn fill_well_known_values(&mut self) {
fn fill_well_known_values(&mut self, current_target: &Target) {
if !self.well_known_values {
return;
}
Expand Down Expand Up @@ -1229,6 +1229,7 @@ impl CrateCheckConfig {
for target in TARGETS
.iter()
.map(|target| Target::expect_builtin(&TargetTriple::from_triple(target)))
.chain(iter::once(current_target.clone()))
{
values_target_os.insert(Symbol::intern(&target.options.os));
values_target_family
Expand All @@ -1243,9 +1244,9 @@ impl CrateCheckConfig {
}
}

pub fn fill_well_known(&mut self) {
pub fn fill_well_known(&mut self, current_target: &Target) {
self.fill_well_known_names();
self.fill_well_known_values();
self.fill_well_known_values(current_target);
}
}

Expand Down
12 changes: 12 additions & 0 deletions tests/ui/check-cfg/my-awesome-platform.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"llvm-target": "x86_64-unknown-none-gnu",
"data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128",
"arch": "x86_64",
"target-endian": "little",
"target-pointer-width": "64",
"target-c-int-width": "32",
"os": "ericos",
"linker-flavor": "ld.lld",
"linker": "rust-lld",
"executables": true
}
21 changes: 21 additions & 0 deletions tests/ui/check-cfg/values-target-json.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// This test checks that we don't lint values defined by a custom target (target json)
//
// check-pass
// needs-llvm-components: x86
// compile-flags: --crate-type=lib --check-cfg=values() --target={{src-base}}/check-cfg/my-awesome-platform.json -Z unstable-options

#![feature(lang_items, no_core, auto_traits)]
#![no_core]

#[lang = "sized"]
trait Sized {}

#[cfg(target_os = "linuz")]
//~^ WARNING unexpected `cfg` condition value
fn target_os_linux_misspell() {}

#[cfg(target_os = "linux")]
fn target_os_linux() {}

#[cfg(target_os = "ericos")]
fn target_os_ericos() {}
13 changes: 13 additions & 0 deletions tests/ui/check-cfg/values-target-json.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
warning: unexpected `cfg` condition value
--> $DIR/values-target-json.rs:13:7
|
LL | #[cfg(target_os = "linuz")]
| ^^^^^^^^^^^^-------
| |
| help: did you mean: `"linux"`
|
= note: expected values for `target_os` are: aix, android, cuda, dragonfly, emscripten, ericos, espidf, freebsd, fuchsia, haiku, hermit, horizon, illumos, ios, l4re, linux, macos, netbsd, none, nto, openbsd, psp, redox, solaris, solid_asp3, tvos, uefi, unknown, vita, vxworks, wasi, watchos, windows, xous
= note: `#[warn(unexpected_cfgs)]` on by default

warning: 1 warning emitted

0 comments on commit 5dd7770

Please sign in to comment.