diff options
| author | Madhav Madhusoodanan <f20200049@pilani.bits-pilani.ac.in> | 2025-04-19 23:19:07 +0530 |
|---|---|---|
| committer | Amanieu d'Antras <amanieu@gmail.com> | 2025-05-27 23:27:38 +0000 |
| commit | 8d0141ee198560f4409e9274341a3277a0897336 (patch) | |
| tree | f67160ad1f80a3a1c31659d88aadd2f0cbda9b2e | |
| parent | 587d8cebda4a7d5a3e8863d6aa5a523311639e79 (diff) | |
| download | rust-8d0141ee198560f4409e9274341a3277a0897336.tar.gz rust-8d0141ee198560f4409e9274341a3277a0897336.zip | |
Added dynamic dispatch for easier management of `<arch>ArchitectureTest` structs
| -rw-r--r-- | library/stdarch/crates/intrinsic-test/src/arm/mod.rs | 6 | ||||
| -rw-r--r-- | library/stdarch/crates/intrinsic-test/src/common/mod.rs | 4 | ||||
| -rw-r--r-- | library/stdarch/crates/intrinsic-test/src/main.rs | 19 |
3 files changed, 16 insertions, 13 deletions
diff --git a/library/stdarch/crates/intrinsic-test/src/arm/mod.rs b/library/stdarch/crates/intrinsic-test/src/arm/mod.rs index 6a7c5d5a390..9bee5a1d7bf 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<Self> { 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::<Vec<_>>(); 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 ae44eb06b2d..606ab4fdf3b 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<Self> + 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 0816c6c39c4..0e168a53f5d 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)) - } - - _ => None, - }; + let test_environment_result: Option<Box<dyn SupportedArchitectureTest>> = + 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, + }; if test_environment_result.is_none() { std::process::exit(0); |
