about summary refs log tree commit diff
path: root/library/stdarch/crates/simd-test-macro/src/lib.rs
diff options
context:
space:
mode:
authorJacob Bramley <jacob.bramley@arm.com>2023-09-28 15:14:37 +0100
committerAmanieu d'Antras <amanieu@gmail.com>2023-11-30 07:48:46 +0000
commit86cb5730aea078e616de2a9ae0a5755f7ff0e80c (patch)
treef5bdc7f3363d1c57bfaa33959dc46a5007b415ed /library/stdarch/crates/simd-test-macro/src/lib.rs
parent4fe088329cb1c78484c57873e0b4770df9aa351c (diff)
downloadrust-86cb5730aea078e616de2a9ae0a5755f7ff0e80c.tar.gz
rust-86cb5730aea078e616de2a9ae0a5755f7ff0e80c.zip
Report missing features when skipping tests.
Diffstat (limited to 'library/stdarch/crates/simd-test-macro/src/lib.rs')
-rw-r--r--library/stdarch/crates/simd-test-macro/src/lib.rs16
1 files changed, 9 insertions, 7 deletions
diff --git a/library/stdarch/crates/simd-test-macro/src/lib.rs b/library/stdarch/crates/simd-test-macro/src/lib.rs
index 9e089f86bf2..73be684c474 100644
--- a/library/stdarch/crates/simd-test-macro/src/lib.rs
+++ b/library/stdarch/crates/simd-test-macro/src/lib.rs
@@ -82,16 +82,16 @@ pub fn simd_test(
     };
     let macro_test = Ident::new(macro_test, Span::call_site());
 
-    let mut cfg_target_features = TokenStream::new();
+    let mut detect_missing_features = TokenStream::new();
     for feature in target_features {
         let q = quote_spanned! {
             proc_macro2::Span::call_site() =>
-            #macro_test!(#feature) &&
+            if !#macro_test!(#feature) {
+                missing_features.push(#feature);
+            }
         };
-        q.to_tokens(&mut cfg_target_features);
+        q.to_tokens(&mut detect_missing_features);
     }
-    let q = quote! { true };
-    q.to_tokens(&mut cfg_target_features);
 
     let test_norun = std::env::var("STDSIMD_TEST_NORUN").is_ok();
     let maybe_ignore = if test_norun {
@@ -107,11 +107,13 @@ pub fn simd_test(
         #maybe_ignore
         #(#item_attrs)*
         fn #name() {
-            if #force_test | (#cfg_target_features) {
+            let mut missing_features = ::std::vec::Vec::new();
+            #detect_missing_features
+            if #force_test || missing_features.is_empty() {
                 let v = unsafe { #name() };
                 return v;
             } else {
-                ::stdarch_test::assert_skip_test_ok(stringify!(#name));
+                ::stdarch_test::assert_skip_test_ok(stringify!(#name), &missing_features);
             }
 
             #[target_feature(enable = #enable_feature)]