{-# OPTIONS_GHC -ffi #-}
module Main where

import Foreign.ForeignPtr
import Foreign.Ptr
import Foreign.Marshal.Alloc
import System.Posix.Unistd

--newForeignPtrEnv :: FinalizerEnvPtr env a -> Ptr env -> Ptr a -> IO (ForeignPtr a)

foreign import ccall "null.h fin_test" finalizerTest :: FunPtr (Ptr a -> Ptr a -> IO ())

main = do
  x <- mallocBytes 5
  xFP <- newForeignPtrEnv finalizerTest (nullPtr `plusPtr` 135) x
  putStrLn $ "(x,xFP)="++show(x,xFP)
  putStrLn $ "stuff="++show(sum $ take (10^6) [1..])
  putStrLn "done"
