From 92fb392786d0982adc76c954b14c91d9333bce9b Mon Sep 17 00:00:00 2001 From: Rui Ueyama Date: Fri, 23 Jan 2015 00:09:05 +0000 Subject: [PATCH] Make access to LinkingContext::getNode safe. llvm-svn: 226883 --- lld/lib/Driver/Driver.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lld/lib/Driver/Driver.cpp b/lld/lib/Driver/Driver.cpp index 4dc0418..137caee 100644 --- a/lld/lib/Driver/Driver.cpp +++ b/lld/lib/Driver/Driver.cpp @@ -77,8 +77,11 @@ bool Driver::link(LinkingContext &context, raw_ostream &diagnostics) { if (context.getNodes().empty()) return false; - for (std::unique_ptr &ie : context.getNodes()) - if (FileNode *node = dyn_cast(ie.get())) + // File::parse may add items to the node list which may invalidate + // existing iterators. Avoid using iterator to access elements. + std::vector> &nodes = context.getNodes(); + for (size_t i = 0; i < nodes.size(); ++i) + if (FileNode *node = dyn_cast(nodes[i].get())) context.getTaskGroup().spawn([node] { node->getFile()->parse(); }); std::vector> internalFiles; -- 2.7.4