summaryrefslogtreecommitdiff
path: root/lib/AsmParser/LLParser.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-12-29 21:43:58 +0000
committerChris Lattner <sabre@nondot.org>2009-12-29 21:43:58 +0000
commite80250ec84e6e3aa916a66acc507241e7bde89c9 (patch)
treed034f36f69538836ecea5b158ec334d3d01c20dc /lib/AsmParser/LLParser.cpp
parent3f3a0f6b498e80ffaeb83f03c8697e5d54fd9337 (diff)
downloadllvm-e80250ec84e6e3aa916a66acc507241e7bde89c9.tar.gz
llvm-e80250ec84e6e3aa916a66acc507241e7bde89c9.tar.bz2
llvm-e80250ec84e6e3aa916a66acc507241e7bde89c9.tar.xz
switch to TrackingVH instead of WeakVH, since these can never
be RAUW'd and go to null. This also gets us some sorely lacking type safety. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92272 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AsmParser/LLParser.cpp')
-rw-r--r--lib/AsmParser/LLParser.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/lib/AsmParser/LLParser.cpp b/lib/AsmParser/LLParser.cpp
index 3a2d24440d..0030617fe5 100644
--- a/lib/AsmParser/LLParser.cpp
+++ b/lib/AsmParser/LLParser.cpp
@@ -472,29 +472,30 @@ bool LLParser::ParseMDString(MetadataBase *&MDS) {
// MDNode:
// ::= '!' MDNodeNumber
+// FIXME: Take an MDNode*&.
bool LLParser::ParseMDNode(MetadataBase *&Node) {
// !{ ..., !42, ... }
unsigned MID = 0;
- if (ParseUInt32(MID)) return true;
+ if (ParseUInt32(MID)) return true;
// Check existing MDNode.
- std::map<unsigned, WeakVH>::iterator I = MetadataCache.find(MID);
+ std::map<unsigned, TrackingVH<MDNode> >::iterator I = MetadataCache.find(MID);
if (I != MetadataCache.end()) {
- Node = cast<MetadataBase>(I->second);
+ Node = I->second;
return false;
}
// Check known forward references.
- std::map<unsigned, std::pair<WeakVH, LocTy> >::iterator
+ std::map<unsigned, std::pair<TrackingVH<MDNode>, LocTy> >::iterator
FI = ForwardRefMDNodes.find(MID);
if (FI != ForwardRefMDNodes.end()) {
- Node = cast<MetadataBase>(FI->second.first);
+ Node = FI->second.first;
return false;
}
// Create MDNode forward reference
- SmallVector<Value *, 1> Elts;
std::string FwdRefName = "llvm.mdnode.fwdref." + utostr(MID);
+ SmallVector<Value *, 1> Elts;
Elts.push_back(MDString::get(Context, FwdRefName));
MDNode *FwdNode = MDNode::get(Context, Elts.data(), Elts.size());
ForwardRefMDNodes[MID] = std::make_pair(FwdNode, Lex.getLoc());
@@ -544,7 +545,7 @@ bool LLParser::ParseStandaloneMetadata() {
unsigned MetadataID = 0;
if (ParseUInt32(MetadataID))
return true;
- if (MetadataCache.find(MetadataID) != MetadataCache.end())
+ if (MetadataCache.count(MetadataID))
return TokError("Metadata id is already used");
if (ParseToken(lltok::equal, "expected '=' here"))
return true;
@@ -568,11 +569,10 @@ bool LLParser::ParseStandaloneMetadata() {
MDNode *Init = MDNode::get(Context, Elts.data(), Elts.size());
MetadataCache[MetadataID] = Init;
- std::map<unsigned, std::pair<WeakVH, LocTy> >::iterator
+ std::map<unsigned, std::pair<TrackingVH<MDNode>, LocTy> >::iterator
FI = ForwardRefMDNodes.find(MetadataID);
if (FI != ForwardRefMDNodes.end()) {
- MDNode *FwdNode = cast<MDNode>(FI->second.first);
- FwdNode->replaceAllUsesWith(Init);
+ FI->second.first->replaceAllUsesWith(Init);
ForwardRefMDNodes.erase(FI);
}