local ffi = require("ffi")

do --- escaping global !private_G
  local x = 0ll
  for i=1,100 do x=x+1; g=x end
  assert(x == 100ll)
  assert(g == 100ll)
end

do --- preincrement escaping global !private_G
  local x = 0ll
  for i=1,100 do local y=x; x=x+1; g=y end
  assert(x == 100ll)
  assert(g == 99ll)
end

do --- escaping global and local !private_G
  local x = 0ll
  local z
  for i=1,100 do z=x+1; g=z end
  assert(z == 1ll)
  assert(g == 1ll)
end

do --- swapping
  local x,y = 0ll, 0ll
  for i=1,100 do y,x=x,x+1 end
  assert(x == 100ll)
  assert(y == 99ll)
end

do --- pointer to self
  local st = ffi.typeof("struct { void *p; }")
  local x
  for i=1,100 do x = st(); x.p = x end
  assert(x.p == ffi.cast("void *", x))
end

do --- strchr
  ffi.cdef[[char *strchr(char *, int);]]
  for i=1,100 do
    local p = ffi.new("char[2]");
    ffi.C.strchr(p, 32)
  end
end