//@ compile-flags: -Copt-level=3 -Z merge-functions=disabled

#![crate_type = "lib"]

// Ensure that various forms of reading pointers correctly annotate the `load`s
// with `!noundef` and `!range` metadata to enable extra optimization.

use std::mem::MaybeUninit;

// CHECK-LABEL: define {{(dso_local )?}}noundef i8 @copy_byte(
#[no_mangle]
pub unsafe fn copy_byte(p: *const u8) -> u8 {
    // CHECK-NOT: load
    // CHECK: load i8, ptr %p, align 1
    // CHECK-SAME: !noundef !
    // CHECK-NOT: load
    *p
}

// CHECK-LABEL: define {{(dso_local )?}}noundef i8 @read_byte(
#[no_mangle]
pub unsafe fn read_byte(p: *const u8) -> u8 {
    // CHECK-NOT: load
    // CHECK: load i8, ptr %p, align 1
    // CHECK-SAME: !noundef !
    // CHECK-NOT: load
    p.read()
}

// CHECK-LABEL: define {{(dso_local )?}}i8 @read_byte_maybe_uninit(
#[no_mangle]
pub unsafe fn read_byte_maybe_uninit(p: *const MaybeUninit<u8>) -> MaybeUninit<u8> {
    // CHECK-NOT: load
    // CHECK: load i8, ptr %p, align 1
    // CHECK-NOT: noundef
    // CHECK-NOT: load
    p.read()
}

// CHECK-LABEL: define {{(dso_local )?}}noundef i8 @read_byte_assume_init(
#[no_mangle]
pub unsafe fn read_byte_assume_init(p: &MaybeUninit<u8>) -> u8 {
    // CHECK-NOT: load
    // CHECK: load i8, ptr %p, align 1
    // CHECK-SAME: !noundef !
    // CHECK-NOT: load
    p.assume_init_read()
}

// CHECK-LABEL: define {{(dso_local )?}}noundef {{(range\(.*\) )?}}i32 @copy_char(
#[no_mangle]
pub unsafe fn copy_char(p: *const char) -> char {
    // CHECK-NOT: load
    // CHECK: load i32, ptr %p
    // CHECK-SAME: !range ![[RANGE:[0-9]+]]
    // CHECK-SAME: !noundef !
    // CHECK-NOT: load
    *p
}

// CHECK-LABEL: define {{(dso_local )?}}noundef {{(range\(.*\) )?}}i32 @read_char(
#[no_mangle]
pub unsafe fn read_char(p: *const char) -> char {
    // CHECK-NOT: load
    // CHECK: load i32, ptr %p
    // CHECK-SAME: !range ![[RANGE]]
    // CHECK-SAME: !noundef !
    // CHECK-NOT: load
    p.read()
}

// CHECK-LABEL: define {{(dso_local )?}}i32 @read_char_maybe_uninit(
#[no_mangle]
pub unsafe fn read_char_maybe_uninit(p: *const MaybeUninit<char>) -> MaybeUninit<char> {
    // CHECK-NOT: load
    // CHECK: load i32, ptr %p
    // CHECK-NOT: range
    // CHECK-NOT: noundef
    // CHECK-NOT: load
    p.read()
}

// CHECK-LABEL: define {{(dso_local )?}}noundef {{(range\(.*\) )?}}i32 @read_char_assume_init(
#[no_mangle]
pub unsafe fn read_char_assume_init(p: &MaybeUninit<char>) -> char {
    // CHECK-NOT: load
    // CHECK: load i32, ptr %p
    // CHECK-SAME: !range ![[RANGE]]
    // CHECK-SAME: !noundef !
    // CHECK-NOT: load
    p.assume_init_read()
}

// CHECK: ![[RANGE]] = !{i32 0, i32 1114112}
