summary refs log tree commit diff
path: root/src/tools/rustfmt/tests/source/issue-2917
diff options
context:
space:
mode:
authorCaleb Cartwright <caleb.cartwright@outlook.com>2021-05-14 21:53:36 -0500
committerCaleb Cartwright <caleb.cartwright@outlook.com>2021-05-14 21:53:36 -0500
commitb2d45c0d4b2d44789000ebec6d702cc27db19782 (patch)
treec3accc00616767e5de0f89f69ce87519f02de6d5 /src/tools/rustfmt/tests/source/issue-2917
parente659b6de9170c055b6f2d16e2679b22d67297b13 (diff)
parent7872306edf2e11a69aaffb9434088fd66b46a863 (diff)
downloadrust-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.rs63
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);
+        )*
+    }
+}