summaryrefslogtreecommitdiffstats
path: root/lld/lib/Driver/Driver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lld/lib/Driver/Driver.cpp')
-rw-r--r--lld/lib/Driver/Driver.cpp39
1 files changed, 3 insertions, 36 deletions
diff --git a/lld/lib/Driver/Driver.cpp b/lld/lib/Driver/Driver.cpp
index 85c2bd9d402..dc4b49132d0 100644
--- a/lld/lib/Driver/Driver.cpp
+++ b/lld/lib/Driver/Driver.cpp
@@ -77,42 +77,9 @@ bool Driver::link(LinkingContext &context, raw_ostream &diagnostics) {
if (context.getNodes().empty())
return false;
- bool fail = false;
-
- // Read inputs
- ScopedTask readTask(getDefaultDomain(), "Read Args");
- TaskGroup tg;
- std::mutex diagnosticsMutex;
- for (std::unique_ptr<Node> &ie : context.getNodes()) {
- tg.spawn([&] {
- // Writes to the same output stream is not guaranteed to be thread-safe.
- // We buffer the diagnostics output to a separate string-backed output
- // stream, acquire the lock, and then print it out.
- std::string buf;
- llvm::raw_string_ostream stream(buf);
-
- if (FileNode *node = dyn_cast<FileNode>(ie.get())) {
- if (File *file = node->getFile()) {
- if (std::error_code ec = file->parse()) {
- stream << "Cannot open " + file->path()
- << ": " << ec.message() << "\n";
- fail = true;
- }
- }
- }
-
- stream.flush();
- if (!buf.empty()) {
- std::lock_guard<std::mutex> lock(diagnosticsMutex);
- diagnostics << buf;
- }
- });
- }
- tg.sync();
- readTask.end();
-
- if (fail)
- return false;
+ for (std::unique_ptr<Node> &ie : context.getNodes())
+ if (FileNode *node = dyn_cast<FileNode>(ie.get()))
+ context.getTaskGroup().spawn([node] { node->getFile()->parse(); });
std::vector<std::unique_ptr<File>> internalFiles;
context.createInternalFiles(internalFiles);
OpenPOWER on IntegriCloud