0
其返回類型是ErrorOr<Module*>
。我一直在尋找一些舊的代碼,他們直接返回值分配給Module*
但我的編譯器抱怨說,沒有轉換存在從ErrorOr<Module*>
到Module*
我可以將parseBitcodeFile返回值轉換爲模塊*嗎?
其返回類型是ErrorOr<Module*>
。我一直在尋找一些舊的代碼,他們直接返回值分配給Module*
但我的編譯器抱怨說,沒有轉換存在從ErrorOr<Module*>
到Module*
我可以將parseBitcodeFile返回值轉換爲模塊*嗎?
簡單地調用的ErrorOr
的get
方法:
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);
}