}
void CGDebugInfo::finalize() {
+ // Creating types might create further types - invalidating the current
+ // element and the size(), so don't cache/reference them.
+ for (size_t i = 0; i != ObjCInterfaceCache.size(); ++i) {
+ ObjCInterfaceCacheEntry E = ObjCInterfaceCache[i];
+ E.Decl.replaceAllUsesWith(CGM.getLLVMContext(),
+ E.Type->getDecl()->getDefinition()
+ ? CreateTypeDefinition(E.Type, E.Unit)
+ : E.Decl);
+ }
+
for (auto p : ReplaceMap) {
assert(p.second);
llvm::DIType Ty(cast<llvm::MDNode>(p.second));
Ty.replaceAllUsesWith(CGM.getLLVMContext(), RepTy);
}
- // Creating types might create further types - invalidating the current
- // element and the size(), so don't cache/reference them.
- for (size_t i = 0; i != ObjCInterfaceCache.size(); ++i) {
- ObjCInterfaceCacheEntry E = ObjCInterfaceCache[i];
- E.Decl.replaceAllUsesWith(CGM.getLLVMContext(),
- E.Type->getDecl()->getDefinition()
- ? CreateTypeDefinition(E.Type, E.Unit)
- : E.Decl);
- }
-
// We keep our own list of retained types, because we need to look
// up the final type in the type cache.
for (std::vector<void *>::const_iterator RI = RetainedTypes.begin(),