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