Skip to content

Commit 3099d0b

Browse files
authored
Merge pull request #4609 from RalfJung/genmc-targets
genmc: bail out for non-64bit-little-endian targets
2 parents ae776ff + 9700f2b commit 3099d0b

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

src/bin/miri.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,11 @@ impl rustc_driver::Callbacks for MiriCompilerCalls {
188188

189189
// Run in GenMC mode if enabled.
190190
if config.genmc_config.is_some() {
191+
// Validate GenMC settings.
192+
if let Err(err) = GenmcConfig::validate(&mut config, tcx) {
193+
fatal_error!("Invalid settings: {err}");
194+
}
195+
191196
// This is the entry point used in GenMC mode.
192197
// This closure will be called multiple times to explore the concurrent execution space of the program.
193198
let eval_entry_once = |genmc_ctx: Rc<GenmcCtx>| {
@@ -745,11 +750,6 @@ fn main() {
745750
let many_seeds =
746751
many_seeds.map(|seeds| ManySeedsConfig { seeds, keep_going: many_seeds_keep_going });
747752

748-
// Validate settings for data race detection and GenMC mode.
749-
if let Err(err) = GenmcConfig::validate_genmc_mode_settings(&mut miri_config) {
750-
fatal_error!("Invalid settings: {err}");
751-
}
752-
753753
if miri_config.weak_memory_emulation && !miri_config.data_race_detector {
754754
fatal_error!(
755755
"Weak memory emulation cannot be enabled when the data race detector is disabled"

src/concurrency/genmc/config.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
use genmc_sys::LogLevel;
2+
use rustc_abi::Endian;
3+
use rustc_middle::ty::TyCtxt;
24

35
use super::GenmcParams;
46
use crate::{IsolatedOp, MiriConfig, RejectOpWith};
@@ -32,8 +34,6 @@ impl GenmcConfig {
3234
genmc_config: &mut Option<GenmcConfig>,
3335
trimmed_arg: &str,
3436
) -> Result<(), String> {
35-
// FIXME(genmc): Ensure host == target somewhere.
36-
3737
if genmc_config.is_none() {
3838
*genmc_config = Some(Default::default());
3939
}
@@ -86,11 +86,16 @@ impl GenmcConfig {
8686
///
8787
/// Unsupported configurations return an error.
8888
/// Adjusts Miri settings where required, printing a warnings if the change might be unexpected for the user.
89-
pub fn validate_genmc_mode_settings(miri_config: &mut MiriConfig) -> Result<(), &'static str> {
89+
pub fn validate(miri_config: &mut MiriConfig, tcx: TyCtxt<'_>) -> Result<(), &'static str> {
9090
let Some(genmc_config) = miri_config.genmc_config.as_mut() else {
9191
return Ok(());
9292
};
9393

94+
// Check for supported target.
95+
if tcx.data_layout.endian != Endian::Little || tcx.data_layout.pointer_size().bits() != 64 {
96+
return Err("GenMC only supports 64bit little-endian targets");
97+
}
98+
9499
// Check for disallowed configurations.
95100
if !miri_config.data_race_detector {
96101
return Err("Cannot disable data race detection in GenMC mode");

src/concurrency/genmc/dummy.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use rustc_abi::{Align, Size};
22
use rustc_const_eval::interpret::{AllocId, InterpCx, InterpResult};
3+
use rustc_middle::ty::TyCtxt;
34

45
pub use self::intercept::EvalContextExt as GenmcEvalContextExt;
56
pub use self::run::run_genmc_mode;
@@ -230,8 +231,9 @@ impl GenmcConfig {
230231
}
231232
}
232233

233-
pub fn validate_genmc_mode_settings(
234+
pub fn validate(
234235
_miri_config: &mut crate::MiriConfig,
236+
_tcx: TyCtxt<'_>,
235237
) -> Result<(), &'static str> {
236238
Ok(())
237239
}

0 commit comments

Comments
 (0)