diff options
author | David Blaikie <dblaikie@gmail.com> | 2013-08-28 20:42:43 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2013-08-28 20:42:43 +0000 |
commit | 02ae44f31c83117e9f08f5c40d4124da03e64234 (patch) | |
tree | d2bfab34ef2c819da41457c33080d23e1562bb84 /lib/IR/DebugInfo.cpp | |
parent | 1800b662a06767d295cfbd1d86394bf3d781f19b (diff) | |
download | external_llvm-02ae44f31c83117e9f08f5c40d4124da03e64234.zip external_llvm-02ae44f31c83117e9f08f5c40d4124da03e64234.tar.gz external_llvm-02ae44f31c83117e9f08f5c40d4124da03e64234.tar.bz2 |
r189495: Pull out some debug logic into a function for legibility
Code review feedback from Eric Christopher.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189512 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/IR/DebugInfo.cpp')
-rw-r--r-- | lib/IR/DebugInfo.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/lib/IR/DebugInfo.cpp b/lib/IR/DebugInfo.cpp index 8e062a0..416b7d1 100644 --- a/lib/IR/DebugInfo.cpp +++ b/lib/IR/DebugInfo.cpp @@ -649,6 +649,21 @@ MDString *DICompositeType::getIdentifier() const { return cast_or_null<MDString>(getField(DbgNode, 14)); } +#ifndef NDEBUG +static void VerifySubsetOf(const MDNode *LHS, const MDNode *RHS) { + for (unsigned i = 0; i != LHS->getNumOperands(); ++i) { + // Skip the 'empty' list (that's a single i32 0, rather than truly empty) + if (i == 0 && isa<ConstantInt>(LHS->getOperand(i))) + continue; + const MDNode *E = cast<MDNode>(LHS->getOperand(i)); + bool found = false; + for (unsigned j = 0; !found && j != RHS->getNumOperands(); ++j) + found = E == RHS->getOperand(j); + assert(found && "Losing a member during member list replacement"); + } +} +#endif + /// \brief Set the array of member DITypes. void DICompositeType::setTypeArray(DIArray Elements, DIArray TParams) { assert((!TParams || DbgNode->getNumOperands() == 15) && @@ -657,19 +672,9 @@ void DICompositeType::setTypeArray(DIArray Elements, DIArray TParams) { TrackingVH<MDNode> N(*this); if (Elements) { #ifndef NDEBUG - // Check that we're not dropping any elements on the floor here - if (const MDNode *El = cast_or_null<MDNode>(N->getOperand(10))) { - for (unsigned i = 0; i != El->getNumOperands(); ++i) { - if (i == 0 && isa<ConstantInt>(El->getOperand(i))) - continue; - const MDNode *E = cast<MDNode>(El->getOperand(i)); - bool found = false; - for (unsigned j = 0; !found && j != Elements.getNumElements(); ++j) { - found = E == Elements.getElement(j); - } - assert(found && "Losing a member during member list replacement"); - } - } + // Check that the new list of members contains all the old members as well + if (const MDNode *El = cast_or_null<MDNode>(N->getOperand(10))) + VerifySubsetOf(El, Elements); #endif N->replaceOperandWith(10, Elements); } |