From 86cb5730aea078e616de2a9ae0a5755f7ff0e80c Mon Sep 17 00:00:00 2001 From: Jacob Bramley Date: Thu, 28 Sep 2023 15:14:37 +0100 Subject: [PATCH] Report missing features when skipping tests. --- .../stdarch/crates/simd-test-macro/src/lib.rs | 16 +++++++++------- library/stdarch/crates/stdarch-test/src/lib.rs | 12 ++++++++---- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/library/stdarch/crates/simd-test-macro/src/lib.rs b/library/stdarch/crates/simd-test-macro/src/lib.rs index 9e089f86bf2e..73be684c474b 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)] diff --git a/library/stdarch/crates/stdarch-test/src/lib.rs b/library/stdarch/crates/stdarch-test/src/lib.rs index 05298d8c644c..40128c0ad226 100644 --- a/library/stdarch/crates/stdarch-test/src/lib.rs +++ b/library/stdarch/crates/stdarch-test/src/lib.rs @@ -173,11 +173,15 @@ pub fn assert(shim_addr: usize, fnname: &str, expected: &str) { } } -pub fn assert_skip_test_ok(name: &str) { - if env::var("STDARCH_TEST_EVERYTHING").is_err() { - return; +pub fn assert_skip_test_ok(name: &str, missing_features: &[&str]) { + println!("Skipping test `{name}` due to missing target features:"); + for feature in missing_features { + println!(" - {feature}"); + } + match env::var("STDARCH_TEST_EVERYTHING") { + Ok(_) => panic!("skipped test `{name}` when it shouldn't be skipped"), + Err(_) => println!("Set STDARCH_TEST_EVERYTHING to make this an error."), } - panic!("skipped test `{name}` when it shouldn't be skipped"); } // See comment in `assert-instr-macro` crate for why this exists