// #target: macos-x64
// #safe: yes
module test;
import std::io;

fn int main()
{
    char[10] buf;

    int* i = (int*)(&buf[1]);
    int z = *i;
    int z2 = @unaligned_load(*i, 1);
    *i = 5;
    @unaligned_store(*i, 6, 1);
    int y = *i;

    return 0;
}

/* #expect: test.ll

  store ptr %ptradd9, ptr %i, align 8
  %0 = load ptr, ptr %i, align 8
  %checknull = icmp eq ptr %0, null
  %1 = call i1 @llvm.expect.i1(i1 %checknull, i1 false)
  br i1 %1, label %panic, label %checkok

checkok:                                          ; preds = %entry
  %2 = ptrtoint ptr %0 to i64
  %3 = urem i64 %2, 4
  %4 = icmp ne i64 %3, 0
  %5 = call i1 @llvm.expect.i1(i1 %4, i1 false)
  br i1 %5, label %panic10, label %checkok13

checkok13:                                        ; preds = %checkok
  %6 = load i32, ptr %0, align 4
  store i32 %6, ptr %z, align 4
  %7 = load ptr, ptr %i, align 8
  %checknull14 = icmp eq ptr %7, null
  %8 = call i1 @llvm.expect.i1(i1 %checknull14, i1 false)
  br i1 %8, label %panic15, label %checkok16

checkok16:                                        ; preds = %checkok13
  %9 = load i32, ptr %7, align 1
  store i32 %9, ptr %z2, align 4
  %10 = load ptr, ptr %i, align 8
  %checknull17 = icmp eq ptr %10, null
  %11 = call i1 @llvm.expect.i1(i1 %checknull17, i1 false)
  br i1 %11, label %panic18, label %checkok19

checkok19:                                        ; preds = %checkok16
  %12 = ptrtoint ptr %10 to i64
  %13 = urem i64 %12, 4
  %14 = icmp ne i64 %13, 0
  %15 = call i1 @llvm.expect.i1(i1 %14, i1 false)
  br i1 %15, label %panic20, label %checkok27

checkok27:                                        ; preds = %checkok19
  store i32 5, ptr %10, align 4
  %16 = load ptr, ptr %i, align 8
  %checknull28 = icmp eq ptr %16, null
  %17 = call i1 @llvm.expect.i1(i1 %checknull28, i1 false)
  br i1 %17, label %panic29, label %checkok30

checkok30:                                        ; preds = %checkok27
  store i32 6, ptr %16, align 1
  %18 = load ptr, ptr %i, align 8
  %checknull31 = icmp eq ptr %18, null
  %19 = call i1 @llvm.expect.i1(i1 %checknull31, i1 false)
  br i1 %19, label %panic32, label %checkok33

checkok33:                                        ; preds = %checkok30
  %20 = ptrtoint ptr %18 to i64
  %21 = urem i64 %20, 4
  %22 = icmp ne i64 %21, 0
  %23 = call i1 @llvm.expect.i1(i1 %22, i1 false)
  br i1 %23, label %panic34, label %checkok41

checkok41:                                        ; preds = %checkok33
  %24 = load i32, ptr %18, align 4
  store i32 %24, ptr %y, align 4
  ret i32 0
