[llvm-commits] [llvm] r107027 - in /llvm/trunk: lib/CodeGen/AsmPrinter/DwarfDebug.cpp lib/CodeGen/AsmPrinter/DwarfDebug.h test/FrontendC/2010-06-28-DbgLocalVar.c

Devang Patel dpatel at apple.com
Mon Aug 2 10:32:23 PDT 2010


On Jul 29, 2010, at 9:51 AM, Benjamin Kramer wrote:

> 
> On 28.06.2010, at 20:25, Devang Patel wrote:
> 
>> Author: dpatel
>> Date: Mon Jun 28 13:25:03 2010
>> New Revision: 107027
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=107027&view=rev
>> Log:
>> Preserve deleted function's local variables' debug info.
>> Radar 8122864.
>> 
>> Added:
>>   llvm/trunk/test/FrontendC/2010-06-28-DbgLocalVar.c
>> Modified:
>>   llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>>   llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
>> 
>> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=107027&r1=107026&r2=107027&view=diff
>> ==============================================================================
>> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Mon Jun 28 13:25:03 2010
>> @@ -1386,6 +1386,7 @@
>> /// If there are global variables in this scope then create and insert
>> /// DIEs for these variables.
>> DIE *DwarfDebug::updateSubprogramScopeDIE(const MDNode *SPNode) {
>> +  ProcessedSPNodes.insert(SPNode);
>>  CompileUnit *SPCU = getCompileUnit(SPNode);
>>  DIE *SPDie = SPCU->getDIE(SPNode);
>>  assert(SPDie && "Unable to find subprogram DIE!");
>> @@ -2005,6 +2006,40 @@
>> ///
>> void DwarfDebug::endModule() {
>>  if (!FirstCU) return;
>> +  const Module *M = MMI->getModule();
>> +  if (NamedMDNode *AllSPs = M->getNamedMetadata("llvm.dbg.sp")) {
>> +    for (unsigned SI = 0, SE = AllSPs->getNumOperands(); SI != SE; ++SI) {
>> +      if (ProcessedSPNodes.count(AllSPs->getOperand(SI)) != 0) continue;
>> +      DISubprogram SP(AllSPs->getOperand(SI));
>> +      if (!SP.Verify()) continue;
>> +
>> +      // Collect info for variables that were optimized out.
>> +      StringRef FName = SP.getLinkageName();
>> +      if (FName.empty())
>> +        FName = SP.getName();
>> +      NamedMDNode *NMD = 
>> +        M->getNamedMetadata(Twine("llvm.dbg.lv.", getRealLinkageName(FName)));
>> +      if (!NMD) continue;
>> +      unsigned E = NMD->getNumOperands();
>> +      if (!E) continue;
>> +      DbgScope *Scope = new DbgScope(NULL, DIDescriptor(SP), NULL);
> 
> Hi Devang,
> 
> valgrind says those DbgScopes are leaked:

Indeed. Fixed.
-
Devang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20100802/10cd8e50/attachment.html>


More information about the llvm-commits mailing list