diff options
| author | Lzu Tao <taolzu@gmail.com> | 2024-05-20 17:53:07 +0000 |
|---|---|---|
| committer | Lzu Tao <taolzu@gmail.com> | 2024-06-09 07:35:23 +0000 |
| commit | 36e1414b10af7ca487d6f84165e1f23a80375fd4 (patch) | |
| tree | 4b8aa743db9f0a0e4191f920afd8f3d6f42931d7 | |
| parent | 13423befc40fffe23ccc6dd06868142cff9428fe (diff) | |
| download | rust-36e1414b10af7ca487d6f84165e1f23a80375fd4.tar.gz rust-36e1414b10af7ca487d6f84165e1f23a80375fd4.zip | |
add codegen test for #120440
| -rw-r--r-- | tests/codegen/slice-pointer-nonnull-unwrap.rs | 19 |
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() + } +} |
