Index: include/lld/Core/InputGraph.h =================================================================== --- include/lld/Core/InputGraph.h +++ include/lld/Core/InputGraph.h @@ -202,6 +202,14 @@ elem->resetNextIndex(); } + /// \brief Parse the group members. + error_code parse(const LinkingContext &ctx, raw_ostream &diag) override { + for (auto &ei : _elements) + if (error_code ec = ei->parse(ctx, diag)) + return ec; + return error_code::success(); + } + uint32_t getResolveState() const override; void setResolveState(uint32_t) override; ErrorOr getNextFile() override; Index: include/lld/Driver/GnuLdInputGraph.h =================================================================== --- include/lld/Driver/GnuLdInputGraph.h +++ include/lld/Driver/GnuLdInputGraph.h @@ -92,21 +92,6 @@ std::unique_ptr _archiveFile; }; -/// \brief Represents a ELF control node -class ELFGroup : public Group { -public: - ELFGroup(const ELFLinkingContext &, int64_t ordinal) - : Group(ordinal) {} - - /// \brief Parse the group members. - error_code parse(const LinkingContext &ctx, raw_ostream &diagnostics) override { - for (auto &ei : _elements) - if (error_code ec = ei->parse(ctx, diagnostics)) - return ec; - return error_code::success(); - } -}; - /// \brief Parse GNU Linker scripts. class GNULdScript : public FileNode { public: Index: include/lld/Driver/WinLinkInputGraph.h =================================================================== --- include/lld/Driver/WinLinkInputGraph.h +++ include/lld/Driver/WinLinkInputGraph.h @@ -61,12 +61,9 @@ PECOFFGroup(PECOFFLinkingContext &ctx) : Group(0), _ctx(ctx) {} /// \brief Parse the group members. - error_code parse(const LinkingContext &ctx, raw_ostream &diagnostics) override { + error_code parse(const LinkingContext &ctx, raw_ostream &diag) override { std::lock_guard lock(_ctx.getMutex()); - for (auto &elem : _elements) - if (error_code ec = elem->parse(ctx, diagnostics)) - return ec; - return error_code::success(); + return Group::parse(ctx, diag); } private: Index: lib/Driver/GnuLdDriver.cpp =================================================================== --- lib/Driver/GnuLdDriver.cpp +++ lib/Driver/GnuLdDriver.cpp @@ -430,7 +430,7 @@ } case OPT_start_group: { - std::unique_ptr group(new ELFGroup(*ctx, index++)); + std::unique_ptr group(new Group(index++)); groupStack.push(group.get()); inputGraph->addInputElement(std::move(group)); break; Index: lib/Driver/GnuLdInputGraph.cpp =================================================================== --- lib/Driver/GnuLdInputGraph.cpp +++ lib/Driver/GnuLdInputGraph.cpp @@ -79,8 +79,7 @@ return ec; for (const auto &c : _linkerScript->_commands) { if (auto group = dyn_cast(c)) { - std::unique_ptr groupStart( - new ELFGroup(_elfLinkingContext, index++)); + std::unique_ptr groupStart(new Group(index++)); for (auto &path : group->getPaths()) { // TODO : Propagate Set WholeArchive/dashlPrefix auto inputNode = new ELFFileNode( Index: unittests/DriverTests/InputGraphTest.cpp =================================================================== --- unittests/DriverTests/InputGraphTest.cpp +++ unittests/DriverTests/InputGraphTest.cpp @@ -46,15 +46,6 @@ } }; -class MyGroupNode : public Group { -public: - MyGroupNode(int64_t ordinal) : Group(ordinal) {} - - error_code parse(const LinkingContext &, raw_ostream &) override { - return error_code::success(); - } -}; - class MyExpandFileNode : public FileNode { public: MyExpandFileNode(StringRef path, int64_t ordinal) @@ -182,7 +173,7 @@ // Create a group node with two elements // an file node which looks like an archive and // two file nodes - std::unique_ptr mygroup(new MyGroupNode(1)); + std::unique_ptr mygroup(new Group(1)); std::unique_ptr myarchive(new MyFileNode("archive_file", 2)); std::vector > objfiles_group; std::unique_ptr obj_1(new SimpleFile("objfile_1")); @@ -271,7 +262,7 @@ // Create a group node with two elements // an file node which looks like an archive and // two file nodes - std::unique_ptr mygroup(new MyGroupNode(1)); + std::unique_ptr mygroup(new Group(1)); std::unique_ptr myarchive(new MyFileNode("archive_file", 2)); std::vector > objfiles_group; std::unique_ptr obj_1(new SimpleFile("objfile_1"));