summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/FileArchive.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lld/lib/ReaderWriter/FileArchive.cpp')
-rw-r--r--lld/lib/ReaderWriter/FileArchive.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/lld/lib/ReaderWriter/FileArchive.cpp b/lld/lib/ReaderWriter/FileArchive.cpp
index 5080c2a819d..a344fdf72a7 100644
--- a/lld/lib/ReaderWriter/FileArchive.cpp
+++ b/lld/lib/ReaderWriter/FileArchive.cpp
@@ -67,7 +67,9 @@ public:
/// \brief parse each member
std::error_code
- parseAllMembers(std::vector<std::unique_ptr<File>> &result) const override {
+ parseAllMembers(std::vector<std::unique_ptr<File>> &result) override {
+ if (std::error_code ec = parse())
+ return ec;
for (auto mf = _archive->child_begin(), me = _archive->child_end();
mf != me; ++mf) {
std::unique_ptr<File> file;
@@ -152,9 +154,12 @@ private:
mb.getBuffer(), memberPath, false));
std::vector<std::unique_ptr<File>> files;
- _registry.parseFile(std::move(memberMB), files);
+ if (std::error_code ec = _registry.loadFile(std::move(memberMB), files))
+ return ec;
assert(files.size() == 1);
result = std::move(files[0]);
+ if (std::error_code ec = result->parse())
+ return ec;
// The memory buffer is co-owned by the archive file and the children,
// so that the bufffer is deallocated when all the members are destructed.
@@ -232,8 +237,8 @@ public:
}
std::error_code
- parseFile(std::unique_ptr<MemoryBuffer> mb, const Registry &reg,
- std::vector<std::unique_ptr<File>> &result) const override {
+ loadFile(std::unique_ptr<MemoryBuffer> mb, const Registry &reg,
+ std::vector<std::unique_ptr<File>> &result) const override {
StringRef path = mb->getBufferIdentifier();
std::unique_ptr<FileArchive> file(
new FileArchive(std::move(mb), reg, path, _logLoading));
OpenPOWER on IntegriCloud