Update DebugInfoFinder to match recent debug info encoding changes.
authorDevang Patel <dpatel@apple.com>
Mon, 17 Oct 2011 22:30:34 +0000 (22:30 +0000)
committerDevang Patel <dpatel@apple.com>
Mon, 17 Oct 2011 22:30:34 +0000 (22:30 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142295 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/DebugInfo.cpp

index 44457d3c3de9d4e82674c2335d33b167e92384d1..640ad95e5ccde4ce104af87d46049cc3570f7e2c 100644 (file)
@@ -927,9 +927,30 @@ DIVariable llvm::cleanseInlinedVariable(MDNode *DV, LLVMContext &VMContext) {
 
 /// processModule - Process entire module and collect debug info.
 void DebugInfoFinder::processModule(Module &M) {
-  if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu"))
-    for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i)
-      addCompileUnit(DICompileUnit(CU_Nodes->getOperand(i)));
+  if (NamedMDNode *CU_Nodes = M.getNamedMetadata("llvm.dbg.cu")) {
+    for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
+      DICompileUnit CU(CU_Nodes->getOperand(i));
+      addCompileUnit(CU);
+      if (CU.getVersion() > LLVMDebugVersion10) {
+       DIArray GVs = CU.getGlobalVariables();
+       for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i) {
+         DIGlobalVariable DIG(GVs.getElement(i));
+         if (addGlobalVariable(DIG))
+           processType(DIG.getType());
+       }
+       DIArray SPs = CU.getSubprograms();
+       for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
+         processSubprogram(DISubprogram(SPs.getElement(i)));
+       DIArray EnumTypes = CU.getEnumTypes();
+       for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
+         processType(DIType(EnumTypes.getElement(i)));
+       DIArray RetainedTypes = CU.getRetainedTypes();
+       for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
+         processType(DIType(RetainedTypes.getElement(i)));
+       return;
+      }
+    }
+  }
 
   for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I)
     for (Function::iterator FI = (*I).begin(), FE = (*I).end(); FI != FE; ++FI)