about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMadhav Madhusoodanan <f20200049@pilani.bits-pilani.ac.in>2025-04-19 23:19:07 +0530
committerAmanieu d'Antras <amanieu@gmail.com>2025-05-27 23:27:38 +0000
commit8d0141ee198560f4409e9274341a3277a0897336 (patch)
treef67160ad1f80a3a1c31659d88aadd2f0cbda9b2e
parent587d8cebda4a7d5a3e8863d6aa5a523311639e79 (diff)
downloadrust-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.rs6
-rw-r--r--library/stdarch/crates/intrinsic-test/src/common/mod.rs4
-rw-r--r--library/stdarch/crates/intrinsic-test/src/main.rs19
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);