diff options
-rw-r--r-- | lld/include/lld/Driver/Driver.h | 2 | ||||
-rw-r--r-- | lld/lib/Driver/DarwinLdDriver.cpp | 4 | ||||
-rw-r--r-- | lld/lib/Driver/Driver.cpp | 21 |
3 files changed, 13 insertions, 14 deletions
diff --git a/lld/include/lld/Driver/Driver.h b/lld/include/lld/Driver/Driver.h index 300d2356d05..76963078da4 100644 --- a/lld/include/lld/Driver/Driver.h +++ b/lld/include/lld/Driver/Driver.h @@ -35,7 +35,7 @@ class ELFLinkingContext; typedef std::vector<std::unique_ptr<File>> FileVector; FileVector makeErrorFile(StringRef path, std::error_code ec); -FileVector parseMemberFiles(FileVector &files); +FileVector parseMemberFiles(std::unique_ptr<File> File); FileVector loadFile(LinkingContext &ctx, StringRef path, bool wholeArchive); /// Base class for all Drivers. diff --git a/lld/lib/Driver/DarwinLdDriver.cpp b/lld/lib/Driver/DarwinLdDriver.cpp index 86df20a4b79..e86731ee54f 100644 --- a/lld/lib/Driver/DarwinLdDriver.cpp +++ b/lld/lib/Driver/DarwinLdDriver.cpp @@ -93,10 +93,10 @@ loadFile(MachOLinkingContext &ctx, StringRef path, ctx.registerDylib(reinterpret_cast<mach_o::MachODylibFile *>(shl), upwardDylib); } + if (wholeArchive) + return parseMemberFiles(std::move(file)); 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/Driver/Driver.cpp b/lld/lib/Driver/Driver.cpp index 3a19456a42c..9f796dedaef 100644 --- a/lld/lib/Driver/Driver.cpp +++ b/lld/lib/Driver/Driver.cpp @@ -36,15 +36,13 @@ FileVector makeErrorFile(StringRef path, std::error_code ec) { return result; } -FileVector parseMemberFiles(FileVector &files) { +FileVector parseMemberFiles(std::unique_ptr<File> file) { std::vector<std::unique_ptr<File>> members; - for (std::unique_ptr<File> &file : files) { - if (auto *archive = dyn_cast<ArchiveLibraryFile>(file.get())) { - if (std::error_code ec = archive->parseAllMembers(members)) - return makeErrorFile(file->path(), ec); - } else { - members.push_back(std::move(file)); - } + if (auto *archive = dyn_cast<ArchiveLibraryFile>(file.get())) { + if (std::error_code ec = archive->parseAllMembers(members)) + return makeErrorFile(file->path(), ec); + } else { + members.push_back(std::move(file)); } return members; } @@ -58,10 +56,11 @@ FileVector loadFile(LinkingContext &ctx, StringRef path, bool wholeArchive) { ctx.registry().loadFile(std::move(mb.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())); + std::unique_ptr<File> &file = fileOrErr.get(); if (wholeArchive) - return parseMemberFiles(files); + return parseMemberFiles(std::move(file)); + std::vector<std::unique_ptr<File>> files; + files.push_back(std::move(file)); return files; } |