Skip to content

Commit

Permalink
Test SVE2 includes NEON and not vice versa
Browse files Browse the repository at this point in the history
Required by rust-lang#95122
  • Loading branch information
workingjubilee committed Mar 22, 2022
1 parent 7d6415c commit 8fa4ae8
Showing 1 changed file with 58 additions and 0 deletions.
58 changes: 58 additions & 0 deletions src/test/ui/target-feature/feature-hierarchy.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
// revisions: aarch64-neon aarch64-sve2
// [aarch64-neon] compile-flags: -Ctarget-feature=+neon --target=aarch64-unknown-linux-gnu
// [aarch64-neon] needs-llvm-components: aarch64
// [aarch64-sve2] compile-flags: -Ctarget-feature=-neon,+sve2 --target=aarch64-unknown-linux-gnu
// [aarch64-sve2] needs-llvm-components: aarch64
// build-pass
#![no_core]
#![crate_type = "rlib"]
#![feature(intrinsics, rustc_attrs, no_core, lang_items, staged_api)]
#![stable(feature = "test", since = "1.0.0")]

// Tests vetting "feature hierarchies" in the cases where we impose them.

// Supporting minimal rust core code
#[lang = "sized"]
trait Sized {}
#[lang = "copy"]
trait Copy {}
impl Copy for bool {}

extern "rust-intrinsic" {
#[rustc_const_stable(feature = "test", since = "1.0.0")]
fn unreachable() -> !;
}

#[rustc_builtin_macro]
macro_rules! cfg {
($($cfg:tt)*) => {};
}

// Test code
const fn do_or_die(cond: bool) {
if cond {
} else {
unsafe { unreachable() }
}
}

macro_rules! assert {
($x:expr $(,)?) => {
const _: () = do_or_die($x);
};
}


#[cfg(aarch64_neon)]
fn check_neon_not_sve2() {
// This checks that a normal aarch64 target doesn't suddenly jump up the feature hierarchy.
assert!(cfg!(target_feature = "neon"));
assert!(cfg!(not(target_feature = "sve2")));
}

#[cfg(aarch64_sve2)]
fn check_sve2_includes_neon() {
// This checks that aarch64's sve2 includes neon
assert!(cfg!(target_feature = "neon"));
assert!(cfg!(target_feature = "sve2"));
}

0 comments on commit 8fa4ae8

Please sign in to comment.