Skip to content

Commit 14a8451

Browse files
authored
[clang][DebugInfo] Fix iterator invalidation during EmitGlobalVariable (#72415)
1 parent aa54851 commit 14a8451

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

clang/lib/CodeGen/CGDebugInfo.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5833,8 +5833,13 @@ void CGDebugInfo::setDwoId(uint64_t Signature) {
58335833
}
58345834

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

58395844
if (DeclCache.contains(VD))
58405845
continue;

0 commit comments

Comments
 (0)