Skip to content

Commit

Permalink
[clang][DebugInfo] Fix iterator invalidation during EmitGlobalVariable (
Browse files Browse the repository at this point in the history
  • Loading branch information
Michael137 committed Nov 15, 2023
1 parent aa54851 commit 14a8451
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions clang/lib/CodeGen/CGDebugInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5833,8 +5833,13 @@ void CGDebugInfo::setDwoId(uint64_t Signature) {
}

void CGDebugInfo::finalize() {
for (auto const *VD : StaticDataMemberDefinitionsToEmit) {
assert(VD->isStaticDataMember());
// We can't use a for-each here because `EmitGlobalVariable`
// may push new decls into `StaticDataMemberDefinitionsToEmit`,
// which would invalidate any iterator.
for (size_t i = 0; i < StaticDataMemberDefinitionsToEmit.size(); ++i) {
auto const *VD = StaticDataMemberDefinitionsToEmit[i];

assert(VD && VD->isStaticDataMember());

if (DeclCache.contains(VD))
continue;
Expand Down

0 comments on commit 14a8451

Please sign in to comment.