Skip to content

Commit 73bc86c

Browse files
committed
consistency check for self-contained linking components CLI options
emit an error if components are both enabled and disabled on the CLI
1 parent 46865a0 commit 73bc86c

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

compiler/rustc_session/src/config.rs

+24
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,17 @@ impl LinkSelfContained {
306306
pub fn is_linker_disabled(&self) -> bool {
307307
self.disabled_components.contains(LinkSelfContainedComponents::LINKER)
308308
}
309+
310+
/// Returns CLI inconsistencies to emit errors: individual components were both enabled and
311+
/// disabled.
312+
fn check_consistency(&self) -> Option<LinkSelfContainedComponents> {
313+
if self.explicitly_set.is_some() {
314+
None
315+
} else {
316+
let common = self.enabled_components.intersection(self.disabled_components);
317+
if common.is_empty() { None } else { Some(common) }
318+
}
319+
}
309320
}
310321

311322
/// Used with `-Z assert-incr-state`.
@@ -2765,6 +2776,19 @@ pub fn build_session_options(
27652776
}
27662777
}
27672778

2779+
// Check `-C link-self-contained` for consistency: individual components cannot be both enabled
2780+
// and disabled at the same time.
2781+
if let Some(erroneous_components) = cg.link_self_contained.check_consistency() {
2782+
let names: String = erroneous_components
2783+
.into_iter()
2784+
.map(|c| c.as_str().unwrap())
2785+
.intersperse(", ")
2786+
.collect();
2787+
handler.early_error(format!(
2788+
"some `-C link-self-contained` components were both enabled and disabled: {names}"
2789+
));
2790+
}
2791+
27682792
let prints = collect_print_requests(handler, &mut cg, &mut unstable_opts, matches);
27692793

27702794
let cg = cg;

compiler/rustc_session/src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#![feature(option_get_or_insert_default)]
77
#![feature(rustc_attrs)]
88
#![feature(map_many_mut)]
9+
#![feature(iter_intersperse)]
910
#![recursion_limit = "256"]
1011
#![allow(rustc::potential_query_instability)]
1112
#![deny(rustc::untranslatable_diagnostic)]

0 commit comments

Comments
 (0)