summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLang Hames <lhames@gmail.com>2016-04-05 22:06:48 +0000
committerLang Hames <lhames@gmail.com>2016-04-05 22:06:48 +0000
commit24f5a3eb039a9feb84a9b02737b6c2172d2187e8 (patch)
tree360ac0dd6e37650c320fb5eae32a5e51c784b7eb
parentc8b1be0c71138fe43645112a17ae17330fb7fbf9 (diff)
downloadbcm5719-llvm-24f5a3eb039a9feb84a9b02737b6c2172d2187e8.tar.gz
bcm5719-llvm-24f5a3eb039a9feb84a9b02737b6c2172d2187e8.zip
[lld][MachO] Check Expected<T> for error prior to destruction.
This should fix the failures on the LLD bots caused by r265446. llvm-svn: 265477
-rw-r--r--lld/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp32
1 files changed, 17 insertions, 15 deletions
diff --git a/lld/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp b/lld/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp
index 0b1e91927a8..276857016ba 100644
--- a/lld/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp
+++ b/lld/lib/ReaderWriter/MachO/MachONormalizedFileYAML.cpp
@@ -767,22 +767,9 @@ bool MachOYamlIOTaggedDocumentHandler::handledDocTag(llvm::yaml::IO &io,
MappingTraits<NormalizedFile>::mapping(io, nf);
// Step 2: parse normalized mach-o struct into atoms.
auto fileOrError = normalizedToAtoms(nf, info->_path, true);
- if (nf.arch != _arch) {
- io.setError(Twine("file is wrong architecture. Expected ("
- + MachOLinkingContext::nameFromArch(_arch)
- + ") found ("
- + MachOLinkingContext::nameFromArch(nf.arch)
- + ")"));
- return false;
- }
- info->_normalizeMachOFile = nullptr;
- if (fileOrError) {
- // Transfer ownership to "out" File parameter.
- std::unique_ptr<lld::File> f = std::move(fileOrError.get());
- file = f.release();
- return true;
- } else {
+ // Check that we parsed successfully.
+ if (!fileOrError) {
std::string buffer;
llvm::raw_string_ostream stream(buffer);
handleAllErrors(fileOrError.takeError(),
@@ -793,6 +780,21 @@ bool MachOYamlIOTaggedDocumentHandler::handledDocTag(llvm::yaml::IO &io,
io.setError(stream.str());
return false;
}
+
+ if (nf.arch != _arch) {
+ io.setError(Twine("file is wrong architecture. Expected ("
+ + MachOLinkingContext::nameFromArch(_arch)
+ + ") found ("
+ + MachOLinkingContext::nameFromArch(nf.arch)
+ + ")"));
+ return false;
+ }
+ info->_normalizeMachOFile = nullptr;
+
+ // Transfer ownership to "out" File parameter.
+ std::unique_ptr<lld::File> f = std::move(*fileOrError);
+ file = f.release();
+ return true;
}
OpenPOWER on IntegriCloud