mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-01 07:30:31 +00:00
Add an assertion about the integrity of the iterator.
Broken parent scope pointers in inlined DIVariables can cause ensureAbstractVariableIsCreated to insert new abstract scopes, thus invalidating the iterator in this loop and leading to hard-to-debug crashes. Useful when manually reducing IR for testcases. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@219628 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2400ba69d5
commit
2273ca1302
@ -1365,6 +1365,9 @@ void DwarfDebug::endFunction(const MachineFunction *MF) {
|
||||
return;
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
size_t NumAbstractScopes = LScopes.getAbstractScopesList().size();
|
||||
#endif
|
||||
// Construct abstract scopes.
|
||||
for (LexicalScope *AScope : LScopes.getAbstractScopesList()) {
|
||||
DISubprogram SP(AScope->getScopeNode());
|
||||
@ -1377,6 +1380,8 @@ void DwarfDebug::endFunction(const MachineFunction *MF) {
|
||||
if (!ProcessedVars.insert(DV))
|
||||
continue;
|
||||
ensureAbstractVariableIsCreated(DV, DV.getContext());
|
||||
assert(LScopes.getAbstractScopesList().size() == NumAbstractScopes
|
||||
&& "ensureAbstractVariableIsCreated inserted abstract scopes");
|
||||
}
|
||||
constructAbstractSubprogramScopeDIE(AScope);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user