Re-commit r223330: Rewrite InputGraph's Group
llvm-svn: 223867
diff --git a/lld/lib/Driver/Driver.cpp b/lld/lib/Driver/Driver.cpp
index 148d100..b26ab25 100644
--- a/lld/lib/Driver/Driver.cpp
+++ b/lld/lib/Driver/Driver.cpp
@@ -62,9 +62,6 @@
if (std::error_code ec = ie->parse(context, stream)) {
if (FileNode *fileNode = dyn_cast<FileNode>(ie.get()))
stream << fileNode->errStr(ec) << "\n";
- else if (dyn_cast<Group>(ie.get()))
- // FIXME: We need a better diagnostics here
- stream << "Cannot parse group input element\n";
else
llvm_unreachable("Unknown type of input element");
fail = true;
@@ -83,21 +80,24 @@
if (fail)
return false;
- std::unique_ptr<SimpleFileNode> fileNode(
- new SimpleFileNode("Internal Files"));
-
InputGraph::FileVectorT internalFiles;
context.createInternalFiles(internalFiles);
-
- if (internalFiles.size())
- fileNode->addFiles(std::move(internalFiles));
+ for (auto i = internalFiles.rbegin(), e = internalFiles.rend(); i != e; ++i) {
+ context.getInputGraph().addInputElementFront(
+ llvm::make_unique<SimpleFileNode>("internal", std::move(*i)));
+ }
// Give target a chance to add files.
InputGraph::FileVectorT implicitFiles;
context.createImplicitFiles(implicitFiles);
- if (implicitFiles.size())
- fileNode->addFiles(std::move(implicitFiles));
- context.getInputGraph().addInputElementFront(std::move(fileNode));
+ for (auto i = implicitFiles.rbegin(), e = implicitFiles.rend(); i != e; ++i) {
+ context.getInputGraph().addInputElementFront(
+ llvm::make_unique<SimpleFileNode>("implicit", std::move(*i)));
+ }
+
+ // Give target a chance to sort the input files.
+ // Mach-O uses this chance to move all object files before library files.
+ context.maybeSortInputFiles();
// Do core linking.
ScopedTask resolveTask(getDefaultDomain(), "Resolve");