about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLzu Tao <taolzu@gmail.com>2024-05-20 17:53:07 +0000
committerLzu Tao <taolzu@gmail.com>2024-06-09 07:35:23 +0000
commit36e1414b10af7ca487d6f84165e1f23a80375fd4 (patch)
tree4b8aa743db9f0a0e4191f920afd8f3d6f42931d7
parent13423befc40fffe23ccc6dd06868142cff9428fe (diff)
downloadrust-36e1414b10af7ca487d6f84165e1f23a80375fd4.tar.gz
rust-36e1414b10af7ca487d6f84165e1f23a80375fd4.zip
add codegen test for #120440
-rw-r--r--tests/codegen/slice-pointer-nonnull-unwrap.rs19
1 files changed, 19 insertions, 0 deletions
diff --git a/tests/codegen/slice-pointer-nonnull-unwrap.rs b/tests/codegen/slice-pointer-nonnull-unwrap.rs
new file mode 100644
index 00000000000..51ea4a1f943
--- /dev/null
+++ b/tests/codegen/slice-pointer-nonnull-unwrap.rs
@@ -0,0 +1,19 @@
+//@ compile-flags: -O
+//@ min-llvm-version: 18
+#![crate_type = "lib"]
+
+use std::ptr::NonNull;
+
+// CHECK-LABEL: @slice_ptr_len_1
+// CHECK: {{.*}}:
+// CHECK-NEXT: ret i64 %ptr.1
+#[no_mangle]
+pub fn slice_ptr_len_1(ptr: *const [u8]) -> usize {
+  let ptr = ptr.cast_mut();
+  if let Some(ptr) = NonNull::new(ptr) {
+    ptr.len()
+  } else {
+    // We know ptr is null, so we know ptr.wrapping_byte_add(1) is not null.
+    NonNull::new(ptr.wrapping_byte_add(1)).unwrap().len()
+  }
+}