forked from OSchip/llvm-project
Support: Use Expected<T>::moveInto() in a few places
These are some usage examples for `Expected<T>::moveInto()`. Differential Revision: https://reviews.llvm.org/D112280
This commit is contained in:
parent
c4ba1108dd
commit
2410fb4616
|
@ -1657,16 +1657,17 @@ void clang::EmitBackendOutput(DiagnosticsEngine &Diags,
|
|||
// If we are performing a ThinLTO importing compile, load the function index
|
||||
// into memory and pass it into runThinLTOBackend, which will run the
|
||||
// function importer and invoke LTO passes.
|
||||
Expected<std::unique_ptr<ModuleSummaryIndex>> IndexOrErr =
|
||||
llvm::getModuleSummaryIndexForFile(CGOpts.ThinLTOIndexFile,
|
||||
/*IgnoreEmptyThinLTOIndexFile*/true);
|
||||
if (!IndexOrErr) {
|
||||
logAllUnhandledErrors(IndexOrErr.takeError(), errs(),
|
||||
std::unique_ptr<ModuleSummaryIndex> CombinedIndex;
|
||||
if (Error E = llvm::getModuleSummaryIndexForFile(
|
||||
CGOpts.ThinLTOIndexFile,
|
||||
/*IgnoreEmptyThinLTOIndexFile*/ true)
|
||||
.moveInto(CombinedIndex)) {
|
||||
logAllUnhandledErrors(std::move(E), errs(),
|
||||
"Error loading index file '" +
|
||||
CGOpts.ThinLTOIndexFile + "': ");
|
||||
return;
|
||||
}
|
||||
std::unique_ptr<ModuleSummaryIndex> CombinedIndex = std::move(*IndexOrErr);
|
||||
|
||||
// A null CombinedIndex means we should skip ThinLTO compilation
|
||||
// (LLVM will optionally ignore empty index files, returning null instead
|
||||
// of an error).
|
||||
|
|
|
@ -179,10 +179,8 @@ static Expected<std::string> readIdentificationBlock(BitstreamCursor &Stream) {
|
|||
|
||||
while (true) {
|
||||
BitstreamEntry Entry;
|
||||
if (Expected<BitstreamEntry> Res = Stream.advance())
|
||||
Entry = Res.get();
|
||||
else
|
||||
return Res.takeError();
|
||||
if (Error E = Stream.advance().moveInto(Entry))
|
||||
return std::move(E);
|
||||
|
||||
switch (Entry.Kind) {
|
||||
default:
|
||||
|
@ -226,10 +224,8 @@ static Expected<std::string> readIdentificationCode(BitstreamCursor &Stream) {
|
|||
return "";
|
||||
|
||||
BitstreamEntry Entry;
|
||||
if (Expected<BitstreamEntry> Res = Stream.advance())
|
||||
Entry = std::move(Res.get());
|
||||
else
|
||||
return Res.takeError();
|
||||
if (Error E = Stream.advance().moveInto(Entry))
|
||||
return std::move(E);
|
||||
|
||||
switch (Entry.Kind) {
|
||||
case BitstreamEntry::EndBlock:
|
||||
|
@ -305,10 +301,8 @@ static Expected<bool> hasObjCCategory(BitstreamCursor &Stream) {
|
|||
// need to understand them all.
|
||||
while (true) {
|
||||
BitstreamEntry Entry;
|
||||
if (Expected<BitstreamEntry> Res = Stream.advance())
|
||||
Entry = std::move(Res.get());
|
||||
else
|
||||
return Res.takeError();
|
||||
if (Error E = Stream.advance().moveInto(Entry))
|
||||
return std::move(E);
|
||||
|
||||
switch (Entry.Kind) {
|
||||
case BitstreamEntry::Error:
|
||||
|
|
|
@ -280,10 +280,7 @@ bool getGNUDebuglinkContents(const ObjectFile *Obj, std::string &DebugName,
|
|||
return false;
|
||||
for (const SectionRef &Section : Obj->sections()) {
|
||||
StringRef Name;
|
||||
if (Expected<StringRef> NameOrErr = Section.getName())
|
||||
Name = *NameOrErr;
|
||||
else
|
||||
consumeError(NameOrErr.takeError());
|
||||
consumeError(Section.getName().moveInto(Name));
|
||||
|
||||
Name = Name.substr(Name.find_first_not_of("._"));
|
||||
if (Name == "gnu_debuglink") {
|
||||
|
|
|
@ -55,14 +55,15 @@ bool SectionRef::containsSymbol(SymbolRef S) const {
|
|||
}
|
||||
|
||||
Expected<uint64_t> ObjectFile::getSymbolValue(DataRefImpl Ref) const {
|
||||
if (Expected<uint32_t> FlagsOrErr = getSymbolFlags(Ref)) {
|
||||
if (*FlagsOrErr & SymbolRef::SF_Undefined)
|
||||
return 0;
|
||||
if (*FlagsOrErr & SymbolRef::SF_Common)
|
||||
return getCommonSymbolSize(Ref);
|
||||
} else
|
||||
uint32_t Flags;
|
||||
if (Error E = getSymbolFlags(Ref).moveInto(Flags))
|
||||
// TODO: Test this error.
|
||||
return FlagsOrErr.takeError();
|
||||
return std::move(E);
|
||||
|
||||
if (Flags & SymbolRef::SF_Undefined)
|
||||
return 0;
|
||||
if (Flags & SymbolRef::SF_Common)
|
||||
return getCommonSymbolSize(Ref);
|
||||
return getSymbolValueImpl(Ref);
|
||||
}
|
||||
|
||||
|
|
|
@ -86,10 +86,8 @@ loadObj(StringRef Filename, object::OwningBinary<object::ObjectFile> &ObjFile,
|
|||
"Failed to find XRay instrumentation map.",
|
||||
std::make_error_code(std::errc::executable_format_error));
|
||||
|
||||
if (Expected<StringRef> E = I->getContents())
|
||||
Contents = *E;
|
||||
else
|
||||
return E.takeError();
|
||||
if (Error E = I->getContents().moveInto(Contents))
|
||||
return E;
|
||||
|
||||
RelocMap Relocs;
|
||||
if (ObjFile.getBinary()->isELF()) {
|
||||
|
|
Loading…
Reference in New Issue