mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-23 20:34:58 +00:00
PR16995: DebugInfo: Don't overwrite existing member lists when adding template arguments
With the added debug assertions this fix is covered by existing Clang tests. (& found some other issues, also fixed) llvm-svn: 189495
This commit is contained in:
parent
05af844a7a
commit
d1a2f9ab60
@ -655,7 +655,24 @@ void DICompositeType::setTypeArray(DIArray Elements, DIArray TParams) {
|
||||
"If you're setting the template parameters this should include a slot "
|
||||
"for that!");
|
||||
TrackingVH<MDNode> N(*this);
|
||||
N->replaceOperandWith(10, Elements);
|
||||
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");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
N->replaceOperandWith(10, Elements);
|
||||
}
|
||||
if (TParams)
|
||||
N->replaceOperandWith(13, TParams);
|
||||
DbgNode = N;
|
||||
|
Loading…
x
Reference in New Issue
Block a user