[llvm-commits] [llvm] r70964 - in /llvm/trunk/lib: Analysis/DebugInfo.cpp CodeGen/AsmPrinter/DwarfWriter.cpp

Chris Lattner sabre at nondot.org
Mon May 4 21:55:57 PDT 2009


Author: lattner
Date: Mon May  4 23:55:56 2009
New Revision: 70964

URL: http://llvm.org/viewvc/llvm-project?rev=70964&view=rev
Log:
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.

Modified:
    llvm/trunk/lib/Analysis/DebugInfo.cpp
    llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp

Modified: llvm/trunk/lib/Analysis/DebugInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/DebugInfo.cpp?rev=70964&r1=70963&r2=70964&view=diff

==============================================================================
--- llvm/trunk/lib/Analysis/DebugInfo.cpp (original)
+++ llvm/trunk/lib/Analysis/DebugInfo.cpp Mon May  4 23:55:56 2009
@@ -295,7 +295,7 @@
     return false;
 
   DICompileUnit CU = getCompileUnit();
-  if (!CU.Verify()) 
+  if (!CU.isNull() && !CU.Verify()) 
     return false;
 
   DIType Ty = getType();
@@ -320,7 +320,6 @@
   if (!Ty.Verify())
     return false;
 
-
   return true;
 }
 

Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp?rev=70964&r1=70963&r2=70964&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp (original)
+++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfWriter.cpp Mon May  4 23:55:56 2009
@@ -1524,11 +1524,13 @@
   /// 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 @@
   /// 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 @@
 
   /// 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<Value *, CompileUnit *>::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 @@
     // 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 @@
     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 @@
     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);





More information about the llvm-commits mailing list