2015-05-14 36 views

回答

0

簡單地調用的ErrorOrget方法:

ErrorOr<Module *> ModuleOrErr = parseBitcodeFile(Buffer, Context); 
std::unique_ptr<Module> M(ModuleOrErr.get()); 

注意由於parseBitcodeFile爲您提供新的Module,因此使用std::unique_ptr來承擔它的所有權很重要。

有關如何在這個「現實生活」做一個例子,看到llvm::parseIR功能(在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); 
} 
相關問題