From: Chris Lattner Date: Tue, 5 May 2009 04:55:56 +0000 (+0000) Subject: Do not require variable debug info nodes to have a compile unit. X-Git-Url: http://plrg.eecs.uci.edu/git/?p=oota-llvm.git;a=commitdiff_plain;h=e3f6cea9e9fc65e3429a28812460841c93fd75a5 Do not require variable debug info nodes to have a compile unit. For implicit decls like "self" and "_cmd" in ObjC, these decls should not have a location. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70964 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/DebugInfo.cpp b/lib/Analysis/DebugInfo.cpp index 61e8a1086b3..5d1f7cba161 100644 --- a/lib/Analysis/DebugInfo.cpp +++ b/lib/Analysis/DebugInfo.cpp @@ -295,7 +295,7 @@ bool DIGlobalVariable::Verify() const { return false; DICompileUnit CU = getCompileUnit(); - if (!CU.Verify()) + if (!CU.isNull() && !CU.Verify()) return false; DIType Ty = getType(); @@ -320,7 +320,6 @@ bool DIVariable::Verify() const { if (!Ty.Verify()) return false; - return true; } diff --git a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp index 8ccd38072c6..75686e10c5d 100644 --- a/lib/CodeGen/AsmPrinter/DwarfWriter.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfWriter.cpp @@ -1524,11 +1524,13 @@ private: /// AddSourceLine - Add location information to specified debug information /// entry. void AddSourceLine(DIE *Die, const DIVariable *V) { - unsigned FileID = 0; + // If there is no compile unit specified, don't add a line #. + if (V->getCompileUnit().isNull()) + return; + unsigned Line = V->getLineNumber(); - CompileUnit *Unit = FindCompileUnit(V->getCompileUnit()); - FileID = Unit->getID(); - assert (FileID && "Invalid file id"); + unsigned FileID = FindCompileUnit(V->getCompileUnit()).getID(); + assert(FileID && "Invalid file id"); AddUInt(Die, DW_AT_decl_file, 0, FileID); AddUInt(Die, DW_AT_decl_line, 0, Line); } @@ -1536,24 +1538,25 @@ private: /// AddSourceLine - Add location information to specified debug information /// entry. void AddSourceLine(DIE *Die, const DIGlobal *G) { - unsigned FileID = 0; + // If there is no compile unit specified, don't add a line #. + if (G->getCompileUnit().isNull()) + return; unsigned Line = G->getLineNumber(); - CompileUnit *Unit = FindCompileUnit(G->getCompileUnit()); - FileID = Unit->getID(); - assert (FileID && "Invalid file id"); + unsigned FileID = FindCompileUnit(G->getCompileUnit()).getID(); + assert(FileID && "Invalid file id"); AddUInt(Die, DW_AT_decl_file, 0, FileID); AddUInt(Die, DW_AT_decl_line, 0, Line); } void AddSourceLine(DIE *Die, const DIType *Ty) { - unsigned FileID = 0; - unsigned Line = Ty->getLineNumber(); + // If there is no compile unit specified, don't add a line #. DICompileUnit CU = Ty->getCompileUnit(); if (CU.isNull()) return; - CompileUnit *Unit = FindCompileUnit(CU); - FileID = Unit->getID(); - assert (FileID && "Invalid file id"); + + unsigned Line = Ty->getLineNumber(); + unsigned FileID = FindCompileUnit(CU).getID(); + assert(FileID && "Invalid file id"); AddUInt(Die, DW_AT_decl_file, 0, FileID); AddUInt(Die, DW_AT_decl_line, 0, Line); } @@ -1953,10 +1956,11 @@ private: /// FindCompileUnit - Get the compile unit for the given descriptor. /// - CompileUnit *FindCompileUnit(DICompileUnit Unit) { - CompileUnit *DW_Unit = CompileUnitMap[Unit.getGV()]; - assert(DW_Unit && "Missing compile unit."); - return DW_Unit; + CompileUnit &FindCompileUnit(DICompileUnit Unit) const { + DenseMap::const_iterator I = + CompileUnitMap.find(Unit.getGV()); + assert(I != CompileUnitMap.end() && "Missing compile unit."); + return *I->second; } /// NewDbgScopeVariable - Create a new scope variable. @@ -2118,7 +2122,7 @@ private: // Get the compile unit context. CompileUnit *Unit = MainCU; if (!Unit) - Unit = FindCompileUnit(SPD.getCompileUnit()); + Unit = &FindCompileUnit(SPD.getCompileUnit()); // Get the subprogram die. DIE *SPDie = Unit->getDieMapSlotFor(SPD.getGV()); @@ -2984,7 +2988,7 @@ private: DIGlobalVariable DI_GV(GV); CompileUnit *DW_Unit = MainCU; if (!DW_Unit) - DW_Unit = FindCompileUnit(DI_GV.getCompileUnit()); + DW_Unit = &FindCompileUnit(DI_GV.getCompileUnit()); // Check for pre-existence. DIE *&Slot = DW_Unit->getDieMapSlotFor(DI_GV.getGV()); @@ -3040,7 +3044,7 @@ private: DISubprogram SP(GV); CompileUnit *Unit = MainCU; if (!Unit) - Unit = FindCompileUnit(SP.getCompileUnit()); + Unit = &FindCompileUnit(SP.getCompileUnit()); // Check for pre-existence. DIE *&Slot = Unit->getDieMapSlotFor(GV);