diff options
Diffstat (limited to 'lib/CodeGen/CGDebugInfo.h')
-rw-r--r-- | lib/CodeGen/CGDebugInfo.h | 73 |
1 files changed, 37 insertions, 36 deletions
diff --git a/lib/CodeGen/CGDebugInfo.h b/lib/CodeGen/CGDebugInfo.h index 50f5759..47a4620 100644 --- a/lib/CodeGen/CGDebugInfo.h +++ b/lib/CodeGen/CGDebugInfo.h @@ -43,16 +43,14 @@ namespace CodeGen { /// the backend. class CGDebugInfo { CodeGenModule &CGM; - bool isMainCompileUnitCreated; llvm::DIFactory DebugFactory; - + llvm::DICompileUnit TheCU; SourceLocation CurLoc, PrevLoc; - llvm::DIType VTablePtrType; - - /// CompileUnitCache - Cache of previously constructed CompileUnits. - llvm::DenseMap<unsigned, llvm::DICompileUnit> CompileUnitCache; - + /// FwdDeclCount - This counter is used to ensure unique names for forward + /// record decls. + unsigned FwdDeclCount; + /// TypeCache - Cache of previously constructed Types. // FIXME: Eliminate this map. Be careful of iterator invalidation. std::map<void *, llvm::WeakVH> TypeCache; @@ -71,52 +69,52 @@ class CGDebugInfo { llvm::DenseMap<const NamespaceDecl *, llvm::WeakVH> NameSpaceCache; /// Helper functions for getOrCreateType. - llvm::DIType CreateType(const BuiltinType *Ty, llvm::DICompileUnit U); - llvm::DIType CreateType(const ComplexType *Ty, llvm::DICompileUnit U); - llvm::DIType CreateQualifiedType(QualType Ty, llvm::DICompileUnit U); - llvm::DIType CreateType(const TypedefType *Ty, llvm::DICompileUnit U); + llvm::DIType CreateType(const BuiltinType *Ty, llvm::DIFile F); + llvm::DIType CreateType(const ComplexType *Ty, llvm::DIFile F); + llvm::DIType CreateQualifiedType(QualType Ty, llvm::DIFile F); + llvm::DIType CreateType(const TypedefType *Ty, llvm::DIFile F); llvm::DIType CreateType(const ObjCObjectPointerType *Ty, - llvm::DICompileUnit Unit); - llvm::DIType CreateType(const PointerType *Ty, llvm::DICompileUnit U); - llvm::DIType CreateType(const BlockPointerType *Ty, llvm::DICompileUnit U); - llvm::DIType CreateType(const FunctionType *Ty, llvm::DICompileUnit U); - llvm::DIType CreateType(const TagType *Ty, llvm::DICompileUnit U); - llvm::DIType CreateType(const RecordType *Ty, llvm::DICompileUnit U); - llvm::DIType CreateType(const ObjCInterfaceType *Ty, llvm::DICompileUnit U); - llvm::DIType CreateType(const EnumType *Ty, llvm::DICompileUnit U); - llvm::DIType CreateType(const VectorType *Ty, llvm::DICompileUnit Unit); - llvm::DIType CreateType(const ArrayType *Ty, llvm::DICompileUnit U); - llvm::DIType CreateType(const LValueReferenceType *Ty, llvm::DICompileUnit U); - llvm::DIType CreateType(const MemberPointerType *Ty, llvm::DICompileUnit U); + llvm::DIFile F); + llvm::DIType CreateType(const PointerType *Ty, llvm::DIFile F); + llvm::DIType CreateType(const BlockPointerType *Ty, llvm::DIFile F); + llvm::DIType CreateType(const FunctionType *Ty, llvm::DIFile F); + llvm::DIType CreateType(const TagType *Ty, llvm::DIFile F); + llvm::DIType CreateType(const RecordType *Ty, llvm::DIFile F); + llvm::DIType CreateType(const ObjCInterfaceType *Ty, llvm::DIFile F); + llvm::DIType CreateType(const EnumType *Ty, llvm::DIFile F); + llvm::DIType CreateType(const VectorType *Ty, llvm::DIFile F); + llvm::DIType CreateType(const ArrayType *Ty, llvm::DIFile F); + llvm::DIType CreateType(const LValueReferenceType *Ty, llvm::DIFile F); + llvm::DIType CreateType(const MemberPointerType *Ty, llvm::DIFile F); llvm::DIType getOrCreateMethodType(const CXXMethodDecl *Method, - llvm::DICompileUnit Unit); - llvm::DIType getOrCreateVTablePtrType(llvm::DICompileUnit Unit); + llvm::DIFile F); + llvm::DIType getOrCreateVTablePtrType(llvm::DIFile F); llvm::DINameSpace getOrCreateNameSpace(const NamespaceDecl *N, llvm::DIDescriptor Unit); llvm::DIType CreatePointerLikeType(unsigned Tag, const Type *Ty, QualType PointeeTy, - llvm::DICompileUnit U); + llvm::DIFile F); llvm::DISubprogram CreateCXXMemberFunction(const CXXMethodDecl *Method, - llvm::DICompileUnit Unit, + llvm::DIFile F, llvm::DICompositeType &RecordTy); void CollectCXXMemberFunctions(const CXXRecordDecl *Decl, - llvm::DICompileUnit U, + llvm::DIFile F, llvm::SmallVectorImpl<llvm::DIDescriptor> &E, llvm::DICompositeType &T); void CollectCXXBases(const CXXRecordDecl *Decl, - llvm::DICompileUnit Unit, + llvm::DIFile F, llvm::SmallVectorImpl<llvm::DIDescriptor> &EltTys, llvm::DICompositeType &RecordTy); - void CollectRecordFields(const RecordDecl *Decl, llvm::DICompileUnit U, + void CollectRecordFields(const RecordDecl *Decl, llvm::DIFile F, llvm::SmallVectorImpl<llvm::DIDescriptor> &E); void CollectVtableInfo(const CXXRecordDecl *Decl, - llvm::DICompileUnit Unit, + llvm::DIFile F, llvm::SmallVectorImpl<llvm::DIDescriptor> &EltTys); public: @@ -185,16 +183,19 @@ private: llvm::DIDescriptor getContextDescriptor(const Decl *Decl, llvm::DIDescriptor &CU); - /// getOrCreateCompileUnit - Get the compile unit from the cache or create a - /// new one if necessary. - llvm::DICompileUnit getOrCreateCompileUnit(SourceLocation Loc); + /// CreateCompileUnit - Create new compile unit. + void CreateCompileUnit(); + + /// getOrCreateFile - Get the file debug info descriptor for the input + /// location. + llvm::DIFile getOrCreateFile(SourceLocation Loc); /// getOrCreateType - Get the type from the cache or create a new type if /// necessary. - llvm::DIType getOrCreateType(QualType Ty, llvm::DICompileUnit Unit); + llvm::DIType getOrCreateType(QualType Ty, llvm::DIFile F); /// CreateTypeNode - Create type metadata for a source language type. - llvm::DIType CreateTypeNode(QualType Ty, llvm::DICompileUnit Unit); + llvm::DIType CreateTypeNode(QualType Ty, llvm::DIFile F); /// getFunctionName - Get function name for the given FunctionDecl. If the /// name is constructred on demand (e.g. C++ destructor) then the name |