diff options
| -rw-r--r-- | lld/lib/Driver/DarwinLdDriver.cpp | 20 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/FileArchive.cpp | 5 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp | 10 |
3 files changed, 15 insertions, 20 deletions
diff --git a/lld/lib/Driver/DarwinLdDriver.cpp b/lld/lib/Driver/DarwinLdDriver.cpp index db097da9b61..86df20a4b79 100644 --- a/lld/lib/Driver/DarwinLdDriver.cpp +++ b/lld/lib/Driver/DarwinLdDriver.cpp @@ -84,17 +84,17 @@ loadFile(MachOLinkingContext &ctx, StringRef path, ctx.registry().loadFile(std::move(mbOrErr.get())); if (std::error_code ec = fileOrErr.getError()) return makeErrorFile(path, ec); - std::vector<std::unique_ptr<File>> files; - files.push_back(std::move(fileOrErr.get())); - for (std::unique_ptr<File> &pf : files) { - // If file is a dylib, inform LinkingContext about it. - if (SharedLibraryFile *shl = dyn_cast<SharedLibraryFile>(pf.get())) { - if (std::error_code ec = shl->parse()) - return makeErrorFile(path, ec); - ctx.registerDylib(reinterpret_cast<mach_o::MachODylibFile*>(shl), - upwardDylib); - } + std::unique_ptr<File> &file = fileOrErr.get(); + + // If file is a dylib, inform LinkingContext about it. + if (SharedLibraryFile *shl = dyn_cast<SharedLibraryFile>(file.get())) { + if (std::error_code ec = shl->parse()) + return makeErrorFile(path, ec); + ctx.registerDylib(reinterpret_cast<mach_o::MachODylibFile *>(shl), + upwardDylib); } + std::vector<std::unique_ptr<File>> files; + files.push_back(std::move(file)); if (wholeArchive) return parseMemberFiles(files); return files; diff --git a/lld/lib/ReaderWriter/FileArchive.cpp b/lld/lib/ReaderWriter/FileArchive.cpp index 2128d8586b4..b1ff13d98e4 100644 --- a/lld/lib/ReaderWriter/FileArchive.cpp +++ b/lld/lib/ReaderWriter/FileArchive.cpp @@ -177,10 +177,7 @@ private: _registry.loadFile(std::move(memberMB)); if (std::error_code ec = fileOrErr.getError()) return ec; - std::vector<std::unique_ptr<File>> files; - files.push_back(std::move(fileOrErr.get())); - assert(files.size() == 1); - result = std::move(files[0]); + result = std::move(fileOrErr.get()); if (std::error_code ec = result->parse()) return ec; result->setArchivePath(_archive->getFileName()); diff --git a/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp b/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp index 4408bea81de..c071f80d723 100644 --- a/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp +++ b/lld/lib/ReaderWriter/MachO/MachOLinkingContext.cpp @@ -627,13 +627,11 @@ MachODylibFile* MachOLinkingContext::loadIndirectDylib(StringRef path) { registry().loadFile(std::move(mbOrErr.get())); if (!fileOrErr) return nullptr; - std::vector<std::unique_ptr<File>> files; - files.push_back(std::move(fileOrErr.get())); - assert(files.size() == 1 && "expected one file in dylib"); - files[0]->parse(); - MachODylibFile* result = reinterpret_cast<MachODylibFile*>(files[0].get()); + std::unique_ptr<File> &file = fileOrErr.get(); + file->parse(); + MachODylibFile *result = reinterpret_cast<MachODylibFile *>(file.get()); // Node object now owned by _indirectDylibs vector. - _indirectDylibs.push_back(std::move(files[0])); + _indirectDylibs.push_back(std::move(file)); return result; } |

