diff options
| author | Scott McMurray <scottmcm@users.noreply.github.com> | 2023-04-25 22:41:34 -0700 |
|---|---|---|
| committer | Scott McMurray <scottmcm@users.noreply.github.com> | 2023-04-27 22:44:42 -0700 |
| commit | e1da77c76d63f442acadcfbda4e42701887d6324 (patch) | |
| tree | 6ea4d5c183b07a5c9f08cb891cb2f83bfdb4b797 /tests/codegen | |
| parent | 8bcfc0e597294f48549ed446f89415150516d030 (diff) | |
| download | rust-e1da77c76d63f442acadcfbda4e42701887d6324.tar.gz rust-e1da77c76d63f442acadcfbda4e42701887d6324.zip | |
Also use `mir::Offset` for pointer `add`
Diffstat (limited to 'tests/codegen')
| -rw-r--r-- | tests/codegen/intrinsics/offset.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/codegen/intrinsics/offset.rs b/tests/codegen/intrinsics/offset.rs new file mode 100644 index 00000000000..7fc4f4498d6 --- /dev/null +++ b/tests/codegen/intrinsics/offset.rs @@ -0,0 +1,34 @@ +// compile-flags: -O -C no-prepopulate-passes +// min-llvm-version: 15.0 (because we're using opaque pointers) + +#![crate_type = "lib"] +#![feature(core_intrinsics)] + +use std::intrinsics::offset; + +// CHECK-LABEL: ptr @offset_zst +// CHECK-SAME: (ptr noundef %p, [[SIZE:i[0-9]+]] noundef %d) +#[no_mangle] +pub unsafe fn offset_zst(p: *const (), d: usize) -> *const () { + // CHECK-NOT: getelementptr + // CHECK: ret ptr %p + offset(p, d) +} + +// CHECK-LABEL: ptr @offset_isize +// CHECK-SAME: (ptr noundef %p, [[SIZE]] noundef %d) +#[no_mangle] +pub unsafe fn offset_isize(p: *const u32, d: isize) -> *const u32 { + // CHECK: %[[R:.*]] = getelementptr inbounds i32, ptr %p, [[SIZE]] %d + // CHECK-NEXT: ret ptr %[[R]] + offset(p, d) +} + +// CHECK-LABEL: ptr @offset_usize +// CHECK-SAME: (ptr noundef %p, [[SIZE]] noundef %d) +#[no_mangle] +pub unsafe fn offset_usize(p: *const u64, d: usize) -> *const u64 { + // CHECK: %[[R:.*]] = getelementptr inbounds i64, ptr %p, [[SIZE]] %d + // CHECK-NEXT: ret ptr %[[R]] + offset(p, d) +} |
