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) -- VerifierFailureAction 2 is 'no side effects' 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