about summary refs log tree commit diff
path: root/tests/codegen/iter-repeat-n-trivial-drop.rs
diff options
context:
space:
mode:
authorScott McMurray <scottmcm@users.noreply.github.com>2024-08-01 21:58:34 -0700
committerScott McMurray <scottmcm@users.noreply.github.com>2024-08-01 21:58:34 -0700
commit77ca30f1950a062e9eb1caeff790618488058057 (patch)
treee5115e6c568f80d6d3afcc53b912c148ad188035 /tests/codegen/iter-repeat-n-trivial-drop.rs
parent425ae69588182ae140bc3392bab53391f72d91a9 (diff)
downloadrust-77ca30f1950a062e9eb1caeff790618488058057.tar.gz
rust-77ca30f1950a062e9eb1caeff790618488058057.zip
Implement `UncheckedIterator` directly for `RepeatN`
Diffstat (limited to 'tests/codegen/iter-repeat-n-trivial-drop.rs')
-rw-r--r--tests/codegen/iter-repeat-n-trivial-drop.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/tests/codegen/iter-repeat-n-trivial-drop.rs b/tests/codegen/iter-repeat-n-trivial-drop.rs
index 31020b77984..7de224b92d8 100644
--- a/tests/codegen/iter-repeat-n-trivial-drop.rs
+++ b/tests/codegen/iter-repeat-n-trivial-drop.rs
@@ -1,8 +1,9 @@
-//@ compile-flags: -O
+//@ compile-flags: -C opt-level=3
 //@ only-x86_64
 
 #![crate_type = "lib"]
 #![feature(iter_repeat_n)]
+#![feature(array_repeat)]
 
 #[derive(Clone)]
 pub struct NotCopy(u16);
@@ -54,3 +55,15 @@ pub fn vec_extend_via_iter_repeat_n() -> Vec<u8> {
     v.extend(std::iter::repeat_n(42_u8, n));
     v
 }
+
+// Array repeat uses `RepeatN::next_unchecked` internally,
+// so also check that the distinction disappears there.
+
+#[no_mangle]
+// CHECK-LABEL: @array_repeat_not_copy
+pub unsafe fn array_repeat_not_copy(item: NotCopy) -> [NotCopy; 8] {
+    // CHECK: insertelement {{.+}} i16 %item
+    // CHECK: shufflevector <8 x i16> {{.+}} zeroinitializer
+    // CHECK: store <8 x i16>
+    std::array::repeat(item)
+}