[lld] r226883 - Make access to LinkingContext::getNode safe.
Rui Ueyama
ruiu at google.com
Thu Jan 22 16:09:05 PST 2015
Author: ruiu
Date: Thu Jan 22 18:09:05 2015
New Revision: 226883
URL: http://llvm.org/viewvc/llvm-project?rev=226883&view=rev
Log:
Make access to LinkingContext::getNode safe.
Modified:
lld/trunk/lib/Driver/Driver.cpp
Modified: lld/trunk/lib/Driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/Driver.cpp?rev=226883&r1=226882&r2=226883&view=diff
==============================================================================
--- lld/trunk/lib/Driver/Driver.cpp (original)
+++ lld/trunk/lib/Driver/Driver.cpp Thu Jan 22 18:09:05 2015
@@ -77,8 +77,11 @@ bool Driver::link(LinkingContext &contex
if (context.getNodes().empty())
return false;
- for (std::unique_ptr<Node> &ie : context.getNodes())
- if (FileNode *node = dyn_cast<FileNode>(ie.get()))
+ // File::parse may add items to the node list which may invalidate
+ // existing iterators. Avoid using iterator to access elements.
+ std::vector<std::unique_ptr<Node>> &nodes = context.getNodes();
+ for (size_t i = 0; i < nodes.size(); ++i)
+ if (FileNode *node = dyn_cast<FileNode>(nodes[i].get()))
context.getTaskGroup().spawn([node] { node->getFile()->parse(); });
std::vector<std::unique_ptr<File>> internalFiles;
More information about the llvm-commits
mailing list