// #target: macos-x64
module test;
const FOO_SIZE = 500;

alias Foo = char[FOO_SIZE];

fn int main(String[] args)
{
    const NUM = 10;

    Foo* x = calloc(Foo.sizeof * NUM);
    for (int i = 0; i < 10; i++)
    {
        ++x;
    }
    return 0;
}

/* #expect: test.ll


define i32 @test.main(ptr %0, i64 %1) #0 {
entry:
  %args = alloca %"char[][]", align 8
  %x = alloca ptr, align 8
  %i = alloca i32, align 4
  store ptr %0, ptr %args, align 8
  %ptradd = getelementptr inbounds i8, ptr %args, i64 8
  store i64 %1, ptr %ptradd, align 8
  %2 = call ptr @std.core.mem.calloc(i64 5000) #4
  store ptr %2, ptr %x, align 8
  store i32 0, ptr %i, align 4
  br label %loop.cond

loop.cond:                                        ; preds = %loop.body, %entry
  %3 = load i32, ptr %i, align 4
  %lt = icmp slt i32 %3, 10
  br i1 %lt, label %loop.body, label %loop.exit

loop.body:                                        ; preds = %loop.cond
  %4 = load ptr, ptr %x, align 8
  %ptradd_any = getelementptr i8, ptr %4, i64 500
  store ptr %ptradd_any, ptr %x, align 8
  %5 = load i32, ptr %i, align 4
  %add = add i32 %5, 1
  store i32 %add, ptr %i, align 4
  br label %loop.cond

loop.exit:                                        ; preds = %loop.cond
  ret i32 0
}
