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

Popular posts from this blog

apache - PHP Soap issue while content length is larger -

asynchronous - Python asyncio task got bad yield -

javascript - Complete OpenIDConnect auth when requesting via Ajax -