forked from OSchip/llvm-project
Fix a temporary MDNode leak.
While emitting debug information for function forward decalrations, we create DISubprogram objects that aran't stored in the AllSubprograms list, and thus won't get finalized by the DIBuilder. During the DIBuilder finalize(), the temporary MDNode allocated for the DISubprogram Variables field gets RAUWd with a non temporary DIArray. For the forward declarations, simply delete that temporary node before we delete the parent node, so that it doesn't leak. llvm-svn: 222373
This commit is contained in:
parent
5d06474b29
commit
dce60a747c
|
@ -3398,6 +3398,13 @@ void CGDebugInfo::finalize() {
|
|||
VH = p.second;
|
||||
else
|
||||
VH = it->second;
|
||||
|
||||
// Functions have a fake temporary MDNode operand that is supposed
|
||||
// to get RAUWed upon DIBuilder finalization. Do not leak these
|
||||
// nodes for the temporary functions we are about to delete.
|
||||
if (FwdDecl.isSubprogram())
|
||||
llvm::MDNode::deleteTemporary(llvm::DISubprogram(FwdDecl).getVariablesNodes());
|
||||
|
||||
FwdDecl.replaceAllUsesWith(CGM.getLLVMContext(),
|
||||
llvm::DIDescriptor(cast<llvm::MDNode>(VH)));
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue