diff options
| author | Caleb Cartwright <caleb.cartwright@outlook.com> | 2021-05-14 21:53:36 -0500 |
|---|---|---|
| committer | Caleb Cartwright <caleb.cartwright@outlook.com> | 2021-05-14 21:53:36 -0500 |
| commit | b2d45c0d4b2d44789000ebec6d702cc27db19782 (patch) | |
| tree | c3accc00616767e5de0f89f69ce87519f02de6d5 /src/tools/rustfmt/tests/source/issue-2917 | |
| parent | e659b6de9170c055b6f2d16e2679b22d67297b13 (diff) | |
| parent | 7872306edf2e11a69aaffb9434088fd66b46a863 (diff) | |
| download | rust-b2d45c0d4b2d44789000ebec6d702cc27db19782.tar.gz rust-b2d45c0d4b2d44789000ebec6d702cc27db19782.zip | |
Add 'src/tools/rustfmt/' from commit '7872306edf2e11a69aaffb9434088fd66b46a863'
git-subtree-dir: src/tools/rustfmt git-subtree-mainline: e659b6de9170c055b6f2d16e2679b22d67297b13 git-subtree-split: 7872306edf2e11a69aaffb9434088fd66b46a863
Diffstat (limited to 'src/tools/rustfmt/tests/source/issue-2917')
| -rw-r--r-- | src/tools/rustfmt/tests/source/issue-2917/packed_simd.rs | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/tools/rustfmt/tests/source/issue-2917/packed_simd.rs b/src/tools/rustfmt/tests/source/issue-2917/packed_simd.rs new file mode 100644 index 00000000000..afa9e67c8ab --- /dev/null +++ b/src/tools/rustfmt/tests/source/issue-2917/packed_simd.rs @@ -0,0 +1,63 @@ +// rustfmt-wrap_comments: true +//! Implements `From` and `Into` for vector types. + +macro_rules! impl_from_vector { + ([$elem_ty:ident; $elem_count:expr]: $id:ident | $test_tt:tt | $source:ident) => { + impl From<$source> for $id { + #[inline] + fn from(source: $source) -> Self { + fn static_assert_same_number_of_lanes<T, U>() + where + T: crate::sealed::Simd, + U: crate::sealed::Simd<LanesType = T::LanesType>, + { + } + use llvm::simd_cast; + static_assert_same_number_of_lanes::<$id, $source>(); + Simd(unsafe { simd_cast(source.0) }) + } + } + + // FIXME: `Into::into` is not inline, but due to + // the blanket impl in `std`, which is not + // marked `default`, we cannot override it here with + // specialization. + /* + impl Into<$id> for $source { + #[inline] + fn into(self) -> $id { + unsafe { simd_cast(self) } + } + } + */ + + test_if!{ + $test_tt: + interpolate_idents! { + mod [$id _from_ $source] { + use super::*; + #[test] + fn from() { + assert_eq!($id::lanes(), $source::lanes()); + let source: $source = Default::default(); + let vec: $id = Default::default(); + + let e = $id::from(source); + assert_eq!(e, vec); + + let e: $id = source.into(); + assert_eq!(e, vec); + } + } + } + } + }; +} + +macro_rules! impl_from_vectors { + ([$elem_ty:ident; $elem_count:expr]: $id:ident | $test_tt:tt | $($source:ident),*) => { + $( + impl_from_vector!([$elem_ty; $elem_count]: $id | $test_tt | $source); + )* + } +} |
