about summary refs log tree commit diff
diff options
context:
space:
mode:
authorburlinchen <chenbeiliuhuo@gmail.com>2024-08-10 10:44:24 +0800
committerburlinchen <chenbeiliuhuo@gmail.com>2024-08-10 10:44:24 +0800
commit3dc083dfd80d0436560c34c41be815b88510ffdc (patch)
tree9def2a84affe5b099087aec65d3ab84dad206ab4
parentbca0c5f2a939999dcb8d83d06a793f39f4815736 (diff)
downloadrust-3dc083dfd80d0436560c34c41be815b88510ffdc.tar.gz
rust-3dc083dfd80d0436560c34c41be815b88510ffdc.zip
test(std): Add codegen test for array::from_fn optimization
This commit adds a new test file 'array-from_fn.rs' to the codegen test suite.
The test checks the behavior of std::array::from_fn under different optimization levels:

1. At opt-level=0 (debug build), it verifies that the core::array::Guard
   is present in the generated code.
2. At opt-level=s (size optimization), it ensures that the Guard is
   optimized out.

This test helps ensure that the compiler correctly optimizes array::from_fn
calls in release builds while maintaining safety checks in debug builds.
-rw-r--r--tests/codegen/array-from_fn.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/tests/codegen/array-from_fn.rs b/tests/codegen/array-from_fn.rs
new file mode 100644
index 00000000000..7202d0c67e6
--- /dev/null
+++ b/tests/codegen/array-from_fn.rs
@@ -0,0 +1,13 @@
+//@ revisions: NORMAL OPT
+//@ [NORMAL] compile-flags: -C opt-level=0 -C debuginfo=2
+//@ [OPT] compile-flags: -C opt-level=s -C debuginfo=0
+
+#![crate_type = "lib"]
+#![feature(array_from_fn)]
+
+#[no_mangle]
+pub fn iota() -> [u8; 16] {
+    // OPT-NOT: core..array..Guard
+    // NORMAL: core..array..Guard
+    std::array::from_fn(|i| i as _)
+}