Add a resolve method on CompileUnit that forwards to DwarfDebug.
authorEric Christopher <echristo@gmail.com>
Sat, 5 Oct 2013 00:27:02 +0000 (00:27 +0000)
committerEric Christopher <echristo@gmail.com>
Sat, 5 Oct 2013 00:27:02 +0000 (00:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192014 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
lib/CodeGen/AsmPrinter/DwarfCompileUnit.h

index 5e31cba1c7f6f50134974effd6be3c1ab3f94dff..23e5641b9114b67f0fb67ef69b336533d70fe992 100644 (file)
@@ -807,7 +807,7 @@ DIE *CompileUnit::getOrCreateTypeDIE(const MDNode *TyNode) {
     addAccelType(Ty.getName(), std::make_pair(TyDIE, Flags));
   }
 
-  addToContextOwner(TyDIE, DD->resolve(Ty.getContext()));
+  addToContextOwner(TyDIE, resolve(Ty.getContext()));
   return TyDIE;
 }
 
@@ -872,7 +872,7 @@ void CompileUnit::addGlobalName(StringRef Name, DIE *Die) {
 /// addGlobalType - Add a new global type to the compile unit.
 ///
 void CompileUnit::addGlobalType(DIType Ty) {
-  DIScope Context = DD->resolve(Ty.getContext());
+  DIScope Context = resolve(Ty.getContext());
   if (!Ty.getName().empty() && !Ty.isForwardDecl() &&
       (!Context || Context.isCompileUnit() || Context.isFile() ||
        Context.isNameSpace()))
@@ -937,7 +937,7 @@ void CompileUnit::constructTypeDIE(DIE &Buffer, DIDerivedType DTy) {
 
   if (Tag == dwarf::DW_TAG_ptr_to_member_type)
       addDIEEntry(&Buffer, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4,
-                  getOrCreateTypeDIE(DD->resolve(DTy.getClassType())));
+                  getOrCreateTypeDIE(resolve(DTy.getClassType())));
   // Add source line info if available and TyDesc is not a forward declaration.
   if (!DTy.isForwardDecl())
     addSourceLine(&Buffer, DTy);
@@ -1113,7 +1113,7 @@ void CompileUnit::constructTypeDIE(DIE &Buffer, DICompositeType CTy) {
     if (CTy.isAppleBlockExtension())
       addFlag(&Buffer, dwarf::DW_AT_APPLE_block);
 
-    DICompositeType ContainingType(DD->resolve(CTy.getContainingType()));
+    DICompositeType ContainingType(resolve(CTy.getContainingType()));
     if (DIDescriptor(ContainingType).isCompositeType())
       addDIEEntry(&Buffer, dwarf::DW_AT_containing_type, dwarf::DW_FORM_ref4,
                   getOrCreateTypeDIE(DIType(ContainingType)));
@@ -1325,7 +1325,7 @@ DIE *CompileUnit::getOrCreateSubprogramDIE(DISubprogram SP) {
     addUInt(Block, 0, dwarf::DW_FORM_udata, SP.getVirtualIndex());
     addBlock(SPDie, dwarf::DW_AT_vtable_elem_location, 0, Block);
     ContainingTypeMap.insert(std::make_pair(SPDie,
-                                    DD->resolve(SP.getContainingType())));
+                                            resolve(SP.getContainingType())));
   }
 
   if (!SP.isDefinition()) {
@@ -1409,7 +1409,7 @@ void CompileUnit::createGlobalVariableDIE(const MDNode *N) {
     // We need the declaration DIE that is in the static member's class.
     // But that class might not exist in the DWARF yet.
     // Creating the class will create the static member decl DIE.
-    getOrCreateContextDIE(DD->resolve(SDMDecl.getContext()));
+    getOrCreateContextDIE(resolve(SDMDecl.getContext()));
     VariableDIE = getDIE(SDMDecl);
     assert(VariableDIE && "Static member decl has no context?");
     IsStaticMember = true;
index 4cdd8fcb56fc3dd945ad1b36b5a5e1f7753b251c..b3bf9bee73105f6f55d29b0b7620d734b4e72954 100644 (file)
@@ -15,6 +15,7 @@
 #define CODEGEN_ASMPRINTER_DWARFCOMPILEUNIT_H
 
 #include "DIE.h"
+#include "DwarfDebug.h"
 #include "llvm/ADT/DenseMap.h"
 #include "llvm/ADT/OwningPtr.h"
 #include "llvm/ADT/StringMap.h"
@@ -23,8 +24,6 @@
 
 namespace llvm {
 
-class DwarfDebug;
-class DwarfUnits;
 class MachineLocation;
 class MachineOperand;
 class ConstantInt;
@@ -353,6 +352,12 @@ private:
   /// information entry.
   DIEEntry *createDIEEntry(DIE *Entry);
 
+  /// resolve - Look in the DwarfDebug map for the MDNode that
+  /// corresponds to a scope reference.
+  template <typename T> T resolve(DIRef<T> Ref) const {
+    return DD->resolve(Ref);
+  }
+
 private:
 
   // DIEValueAllocator - All DIEValues are allocated through this allocator.