From 8d0141ee198560f4409e9274341a3277a0897336 Mon Sep 17 00:00:00 2001 From: Madhav Madhusoodanan Date: Sat, 19 Apr 2025 23:19:07 +0530 Subject: [PATCH] Added dynamic dispatch for easier management of `ArchitectureTest` structs --- .../crates/intrinsic-test/src/arm/mod.rs | 6 +++--- .../crates/intrinsic-test/src/common/mod.rs | 4 +++- .../stdarch/crates/intrinsic-test/src/main.rs | 17 +++++++++-------- 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/library/stdarch/crates/intrinsic-test/src/arm/mod.rs b/library/stdarch/crates/intrinsic-test/src/arm/mod.rs index 6a7c5d5a3900..9bee5a1d7bf1 100644 --- a/library/stdarch/crates/intrinsic-test/src/arm/mod.rs +++ b/library/stdarch/crates/intrinsic-test/src/arm/mod.rs @@ -21,7 +21,7 @@ pub struct ArmArchitectureTest { } impl SupportedArchitectureTest for ArmArchitectureTest { - fn create(cli_options: ProcessedCli) -> Self { + fn create(cli_options: ProcessedCli) -> Box { let a32 = cli_options.target.contains("v7"); let mut intrinsics = get_neon_intrinsics(&cli_options.filename, &cli_options.target) .expect("Error parsing input file"); @@ -43,10 +43,10 @@ impl SupportedArchitectureTest for ArmArchitectureTest { .collect::>(); intrinsics.dedup(); - Self { + Box::new(Self { intrinsics: intrinsics, cli_options: cli_options, - } + }) } fn build_c_file(&self) -> bool { diff --git a/library/stdarch/crates/intrinsic-test/src/common/mod.rs b/library/stdarch/crates/intrinsic-test/src/common/mod.rs index ae44eb06b2d5..606ab4fdf3b8 100644 --- a/library/stdarch/crates/intrinsic-test/src/common/mod.rs +++ b/library/stdarch/crates/intrinsic-test/src/common/mod.rs @@ -16,7 +16,9 @@ pub mod values; /// Architectures must support this trait /// to be successfully tested. pub trait SupportedArchitectureTest { - fn create(cli_options: ProcessedCli) -> Self; + fn create(cli_options: ProcessedCli) -> Box + where + Self: Sized; fn build_c_file(&self) -> bool; fn build_rust_file(&self) -> bool; fn compare_outputs(&self) -> bool; diff --git a/library/stdarch/crates/intrinsic-test/src/main.rs b/library/stdarch/crates/intrinsic-test/src/main.rs index 0816c6c39c44..0e168a53f5da 100644 --- a/library/stdarch/crates/intrinsic-test/src/main.rs +++ b/library/stdarch/crates/intrinsic-test/src/main.rs @@ -14,15 +14,16 @@ fn main() { let args: Cli = clap::Parser::parse(); let processed_cli_options = ProcessedCli::new(args); - let test_environment_result = match processed_cli_options.target.as_str() { - "aarch64-unknown-linux-gnu" - | "armv7-unknown-linux-gnueabihf" - | "aarch64_be-unknown-linux-gnu" => { - Some(ArmArchitectureTest::create(processed_cli_options)) - } + let test_environment_result: Option> = + match processed_cli_options.target.as_str() { + "aarch64-unknown-linux-gnu" + | "armv7-unknown-linux-gnueabihf" + | "aarch64_be-unknown-linux-gnu" => { + Some(ArmArchitectureTest::create(processed_cli_options)) + } - _ => None, - }; + _ => None, + }; if test_environment_result.is_none() { std::process::exit(0);