module LLVM.Wrapper.Analysis where
import qualified LLVM.FFI.Analysis as FFI
import qualified LLVM.FFI.Core as FFI
import LLVM.Wrapper.Core
import LLVM.Wrapper.Internal
import Foreign.C.String (peekCString)
import Foreign.Marshal.Alloc (alloca)
import Foreign.Storable (peek)
import Foreign.ForeignPtr.Safe (withForeignPtr)
verifyFunction :: Value -> IO Bool
verifyFunction f = FFI.verifyFunction f 2
verifyModule :: Module -> IO (Maybe String)
verifyModule (MkModule m _) =
alloca $ \msgPtr -> do
result <- withForeignPtr m (\m' -> FFI.verifyModule m' 2 msgPtr)
msg <- peek msgPtr
if not result
then return Nothing
else do str <- peekCString msg
FFI.disposeMessage msg
return $ Just str