llvm - Can I cast parseBitcodeFile return value to a Module*? -
its return type erroror<module*>. looking @ old code , directly assign return value module* compiler complains no conversion exists erroror<module*> module*
simply invoke get method of erroror:
erroror<module *> moduleorerr = parsebitcodefile(buffer, context); std::unique_ptr<module> m(moduleorerr.get()); note since parsebitcodefile gives new module, it's important assume ownership of using std::unique_ptr.
for example of how done in "real life", see llvm::parseir function (in lib/irreader/irreader.cpp):
std::unique_ptr<module> llvm::parseir(memorybufferref buffer, smdiagnostic &err, llvmcontext &context) { namedregiontimer t(timeirparsingname, timeirparsinggroupname, timepassesisenabled); if (isbitcode((const unsigned char *)buffer.getbufferstart(), (const unsigned char *)buffer.getbufferend())) { erroror<module *> moduleorerr = parsebitcodefile(buffer, context); if (std::error_code ec = moduleorerr.geterror()) { err = smdiagnostic(buffer.getbufferidentifier(), sourcemgr::dk_error, ec.message()); return nullptr; } return std::unique_ptr<module>(moduleorerr.get()); } return parseassembly(buffer, err, context); }
Comments
Post a Comment