From 4866363304bdde4ad6204b1aa312395c6cc8221e Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Thu, 26 Apr 2012 00:38:42 +0000 Subject: [PATCH] Don't forget to reset 'first operand' flag when we're setting the MDNodeOperand value. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@155599 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/VMCore/Metadata.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/VMCore/Metadata.cpp b/lib/VMCore/Metadata.cpp index 090b09a4ccd..f018f44d0ba 100644 --- a/lib/VMCore/Metadata.cpp +++ b/lib/VMCore/Metadata.cpp @@ -66,7 +66,11 @@ public: MDNodeOperand(Value *V) : CallbackVH(V) {} ~MDNodeOperand() {} - void set(Value *V) { this->setValPtr(V); } + void set(Value *V) { + unsigned IsFirst = this->getValPtrInt(); + this->setValPtr(V); + this->setAsFirstOperand(IsFirst); + } /// setAsFirstOperand - Accessor method to mark the operand as the first in /// the list. @@ -95,7 +99,7 @@ void MDNodeOperand::allUsesReplacedWith(Value *NV) { static MDNodeOperand *getOperandPtr(MDNode *N, unsigned Op) { // Use <= instead of < to permit a one-past-the-end address. assert(Op <= N->getNumOperands() && "Invalid operand number"); - return reinterpret_cast(N+1)+Op; + return reinterpret_cast(N + 1) + Op; } void MDNode::replaceOperandWith(unsigned i, Value *Val) { @@ -122,7 +126,6 @@ MDNode::MDNode(LLVMContext &C, ArrayRef Vals, bool isFunctionLocal) } } - /// ~MDNode - Destroy MDNode. MDNode::~MDNode() { assert((getSubclassDataFromValue() & DestroyFlag) != 0 && @@ -247,7 +250,7 @@ MDNode *MDNode::getMDNode(LLVMContext &Context, ArrayRef Vals, } // Coallocate space for the node and Operands together, then placement new. - void *Ptr = malloc(sizeof(MDNode)+Vals.size()*sizeof(MDNodeOperand)); + void *Ptr = malloc(sizeof(MDNode) + Vals.size() * sizeof(MDNodeOperand)); N = new (Ptr) MDNode(Context, Vals, isFunctionLocal); // Cache the operand hash. @@ -275,7 +278,7 @@ MDNode *MDNode::getIfExists(LLVMContext &Context, ArrayRef Vals) { MDNode *MDNode::getTemporary(LLVMContext &Context, ArrayRef Vals) { MDNode *N = - (MDNode *)malloc(sizeof(MDNode)+Vals.size()*sizeof(MDNodeOperand)); + (MDNode *)malloc(sizeof(MDNode) + Vals.size() * sizeof(MDNodeOperand)); N = new (N) MDNode(Context, Vals, FL_No); N->setValueSubclassData(N->getSubclassDataFromValue() | NotUniquedBit);