CGDebugInfo.h revision 0086a5b44af6384b369f8660da69cf2775d09733
1c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner//===--- CGDebugInfo.h - DebugInfo for LLVM CodeGen -------------*- C++ -*-===// 2c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner// 3c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner// The LLVM Compiler Infrastructure 4c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner// 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner// This file is distributed under the University of Illinois Open Source 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner// License. See LICENSE.TXT for details. 7c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner// 8c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner//===----------------------------------------------------------------------===// 9c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner// 10c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner// This is the source level debug info generator for llvm translation. 11c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner// 12c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner//===----------------------------------------------------------------------===// 13c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner 14e7e7d0d7e39d0c7c659d26b97e8081fce0fcd749Dale Johannesen#ifndef CLANG_CODEGEN_CGDEBUGINFO_H 15c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner#define CLANG_CODEGEN_CGDEBUGINFO_H 16c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner 1788d211f82304e53694ece666d4a2507b170e4582Chris Lattner#include "clang/AST/Type.h" 18fc54c552963545a81e4ea38e60460590afb2d5aeDan Gohman#include "clang/AST/Expr.h" 19c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner#include "clang/Basic/SourceLocation.h" 20c25e7581b9b8088910da31702d4ca21c4734c6d7Torok Edwin#include "llvm/ADT/DenseMap.h" 21893e1c90a03a53cf13f73849324e83612688428aChris Lattner#include "llvm/Analysis/DebugInfo.h" 22c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner#include "llvm/Analysis/DIBuilder.h" 23c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner#include "llvm/Support/ValueHandle.h" 24c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner#include "llvm/Support/Allocator.h" 25c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner 26c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner#include "CGBuilder.h" 277ce64852e8fc260f8a7434217c1b57b85a70a1c8Chris Lattner 2888d211f82304e53694ece666d4a2507b170e4582Chris Lattnernamespace llvm { 296e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick class MDNode; 3088d211f82304e53694ece666d4a2507b170e4582Chris Lattner} 317ce64852e8fc260f8a7434217c1b57b85a70a1c8Chris Lattner 3288d211f82304e53694ece666d4a2507b170e4582Chris Lattnernamespace clang { 3388d211f82304e53694ece666d4a2507b170e4582Chris Lattner class VarDecl; 3488d211f82304e53694ece666d4a2507b170e4582Chris Lattner class ObjCInterfaceDecl; 3588d211f82304e53694ece666d4a2507b170e4582Chris Lattner class ClassTemplateSpecializationDecl; 367ce64852e8fc260f8a7434217c1b57b85a70a1c8Chris Lattner class GlobalDecl; 377ce64852e8fc260f8a7434217c1b57b85a70a1c8Chris Lattner 387ce64852e8fc260f8a7434217c1b57b85a70a1c8Chris Lattnernamespace CodeGen { 397ce64852e8fc260f8a7434217c1b57b85a70a1c8Chris Lattner class CodeGenModule; 407ce64852e8fc260f8a7434217c1b57b85a70a1c8Chris Lattner class CodeGenFunction; 417ce64852e8fc260f8a7434217c1b57b85a70a1c8Chris Lattner class CGBlockInfo; 427ce64852e8fc260f8a7434217c1b57b85a70a1c8Chris Lattner 437ce64852e8fc260f8a7434217c1b57b85a70a1c8Chris Lattner/// CGDebugInfo - This class gathers all debug information during compilation 44c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner/// and is responsible for emitting to llvm globals or pass directly to 45c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner/// the backend. 463faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattnerclass CGDebugInfo { 473faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner CodeGenModule &CGM; 48c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner llvm::DIBuilder DBuilder; 49c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner llvm::DICompileUnit TheCU; 5088d211f82304e53694ece666d4a2507b170e4582Chris Lattner SourceLocation CurLoc, PrevLoc; 5188d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType VTablePtrType; 52b0d21ef20c29f4ea46d21b488f17feaa6a8760e1Chris Lattner 53b0d21ef20c29f4ea46d21b488f17feaa6a8760e1Chris Lattner /// TypeCache - Cache of previously constructed Types. 54b0d21ef20c29f4ea46d21b488f17feaa6a8760e1Chris Lattner llvm::DenseMap<void *, llvm::WeakVH> TypeCache; 55c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner 56893e1c90a03a53cf13f73849324e83612688428aChris Lattner bool BlockLiteralGenericSet; 57c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner llvm::DIType BlockLiteralGeneric; 586e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick 59c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner // LexicalBlockStack - Keep track of our current nested lexical block. 60c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner std::vector<llvm::TrackingVH<llvm::MDNode> > LexicalBlockStack; 6188d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DenseMap<const Decl *, llvm::WeakVH> RegionMap; 62c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner // FnBeginRegionCount - Keep track of LexicalBlockStack counter at the 63c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner // beginning of a function. This is used to pop unbalanced regions at 64c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner // the end of a function. 656e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick std::vector<unsigned> FnBeginRegionCount; 6688d211f82304e53694ece666d4a2507b170e4582Chris Lattner 6788d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// DebugInfoNames - This is a storage for names that are 683faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner /// constructed on demand. For example, C++ destructors, C++ operators etc.. 693faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner llvm::BumpPtrAllocator DebugInfoNames; 70e8be6c63915e0389f1eef6b53c64300d13b2ce99Dan Gohman StringRef CWDName; 713faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner 7288d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DenseMap<const char *, llvm::WeakVH> DIFileCache; 7388d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DenseMap<const FunctionDecl *, llvm::WeakVH> SPCache; 74e8be6c63915e0389f1eef6b53c64300d13b2ce99Dan Gohman llvm::DenseMap<const NamespaceDecl *, llvm::WeakVH> NameSpaceCache; 756e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick 76749c6f6b5ed301c84aac562e414486549d7b98ebChris Lattner /// Helper functions for getOrCreateLimitedType. 776e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick llvm::DIType CreateLimitedType(const RecordType *Ty); 7841474baac839da410302950305722cb0e026a094Dan Gohman 79c17d69fa1e084668d6bb27441dbb505e2024f579Chris Lattner /// Helper functions for getOrCreateType. 806e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick llvm::DIType CreateType(const BuiltinType *Ty); 8199405df044f2c584242e711cc9023ec90356da82Bruno Cardoso Lopes llvm::DIType CreateType(const ComplexType *Ty); 826e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick llvm::DIType CreateQualifiedType(QualType Ty, llvm::DIFile F); 833faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner llvm::DIType CreateType(const TypedefType *Ty, llvm::DIFile F); 843faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner llvm::DIType CreateType(const ObjCObjectPointerType *Ty, 853faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner llvm::DIFile F); 8688d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType CreateType(const PointerType *Ty, llvm::DIFile F); 87c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner llvm::DIType CreateType(const BlockPointerType *Ty, llvm::DIFile F); 88c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner llvm::DIType CreateType(const FunctionType *Ty, llvm::DIFile F); 89c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner llvm::DIType CreateType(const RecordType *Ty); 90c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner llvm::DIType CreateType(const ObjCInterfaceType *Ty, llvm::DIFile F); 91c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner llvm::DIType CreateType(const ObjCObjectType *Ty, llvm::DIFile F); 92475871a144eb604ddaf37503397ba0941442e5fbDan Gohman llvm::DIType CreateType(const VectorType *Ty, llvm::DIFile F); 9388d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType CreateType(const ArrayType *Ty, llvm::DIFile F); 9488d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType CreateType(const LValueReferenceType *Ty, llvm::DIFile F); 9588d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType CreateType(const RValueReferenceType *Ty, llvm::DIFile Unit); 9688d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType CreateType(const MemberPointerType *Ty, llvm::DIFile F); 9788d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType CreateType(const AtomicType *Ty, llvm::DIFile F); 9888d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType CreateEnumType(const EnumDecl *ED); 996e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick llvm::DIType getTypeOrNull(const QualType); 10088d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType getOrCreateMethodType(const CXXMethodDecl *Method, 10188d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIFile F); 10288d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType getOrCreateFunctionType(const Decl *D, QualType FnType, 10388d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIFile F); 10488d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType getOrCreateVTablePtrType(llvm::DIFile F); 10588d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DINameSpace getOrCreateNameSpace(const NamespaceDecl *N); 10688d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType CreatePointeeType(QualType PointeeTy, llvm::DIFile F); 107f5aeb1a8e4cf272c7348376d185ef8d8267653e0Dan Gohman llvm::DIType CreatePointerLikeType(unsigned Tag, 108f5aeb1a8e4cf272c7348376d185ef8d8267653e0Dan Gohman const Type *Ty, QualType PointeeTy, 10988d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIFile F); 11064ce964673ca5c71f46933d8699aa557fbc5f15aChris Lattner 11188d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DISubprogram CreateCXXMemberFunction(const CXXMethodDecl *Method, 11288d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIFile F, 11388d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType RecordTy); 114c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner 11588d211f82304e53694ece666d4a2507b170e4582Chris Lattner void CollectCXXMemberFunctions(const CXXRecordDecl *Decl, 116c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner llvm::DIFile F, 117c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner SmallVectorImpl<llvm::Value *> &E, 118c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner llvm::DIType T); 119c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner 120c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner void CollectCXXFriends(const CXXRecordDecl *Decl, 121f451cb870efcf9e0302d25ed05f4cac6bb494e42Dan Gohman llvm::DIFile F, 122c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner SmallVectorImpl<llvm::Value *> &EltTys, 123c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner llvm::DIType RecordTy); 124fc54c552963545a81e4ea38e60460590afb2d5aeDan Gohman 1252da8bc8a5f7705ac131184cd247f48500da0d74eAndrew Trick void CollectCXXBases(const CXXRecordDecl *Decl, 1262da8bc8a5f7705ac131184cd247f48500da0d74eAndrew Trick llvm::DIFile F, 1272da8bc8a5f7705ac131184cd247f48500da0d74eAndrew Trick SmallVectorImpl<llvm::Value *> &EltTys, 12829d8f0cae425f1bba583565227eaebf58f26ce73Chris Lattner llvm::DIType RecordTy); 1293faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner 1306e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick llvm::DIArray 1313faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner CollectTemplateParams(const TemplateParameterList *TPList, 1323faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner const TemplateArgumentList &TAList, 1336e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick llvm::DIFile Unit); 134e8be6c63915e0389f1eef6b53c64300d13b2ce99Dan Gohman llvm::DIArray 135c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner CollectFunctionTemplateParams(const FunctionDecl *FD, llvm::DIFile Unit); 13688d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIArray 13788d211f82304e53694ece666d4a2507b170e4582Chris Lattner CollectCXXTemplateParams(const ClassTemplateSpecializationDecl *TS, 1383faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner llvm::DIFile F); 13988d211f82304e53694ece666d4a2507b170e4582Chris Lattner 1406e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick llvm::DIType createFieldType(StringRef name, QualType type, 1413faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner uint64_t sizeInBitsOverride, SourceLocation loc, 1423faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner AccessSpecifier AS, uint64_t offsetInBits, 1433faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner llvm::DIFile tunit, 1443faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner llvm::DIDescriptor scope); 1453faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner void CollectRecordStaticVars(const RecordDecl *, llvm::DIType); 1466e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick void CollectRecordFields(const RecordDecl *Decl, llvm::DIFile F, 147c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner SmallVectorImpl<llvm::Value *> &E, 148c23197a26f34f559ea9797de51e187087c039c42Torok Edwin llvm::DIType RecordTy); 14988d211f82304e53694ece666d4a2507b170e4582Chris Lattner 15088d211f82304e53694ece666d4a2507b170e4582Chris Lattner void CollectVTableInfo(const CXXRecordDecl *Decl, 15188d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIFile F, 15288d211f82304e53694ece666d4a2507b170e4582Chris Lattner SmallVectorImpl<llvm::Value *> &EltTys); 15388d211f82304e53694ece666d4a2507b170e4582Chris Lattner 15488d211f82304e53694ece666d4a2507b170e4582Chris Lattner // CreateLexicalBlock - Create a new lexical block node and push it on 15588d211f82304e53694ece666d4a2507b170e4582Chris Lattner // the stack. 15688d211f82304e53694ece666d4a2507b170e4582Chris Lattner void CreateLexicalBlock(SourceLocation Loc); 15788d211f82304e53694ece666d4a2507b170e4582Chris Lattner 15888d211f82304e53694ece666d4a2507b170e4582Chris Lattnerpublic: 15988d211f82304e53694ece666d4a2507b170e4582Chris Lattner CGDebugInfo(CodeGenModule &CGM); 16088d211f82304e53694ece666d4a2507b170e4582Chris Lattner ~CGDebugInfo(); 16188d211f82304e53694ece666d4a2507b170e4582Chris Lattner void finalize() { DBuilder.finalize(); } 16288d211f82304e53694ece666d4a2507b170e4582Chris Lattner 163c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner /// setLocation - Update the current source location. If \arg loc is 1646e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick /// invalid it is ignored. 165c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner void setLocation(SourceLocation Loc); 1662a9ddfb903ae3baede7282348afae1f750905248Tilmann Scheller 167c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner /// EmitLocation - Emit metadata to indicate a change in line/column 1686e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick /// information in the source file. 169c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner void EmitLocation(CGBuilderTy &Builder, SourceLocation Loc); 170c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner 17164ce964673ca5c71f46933d8699aa557fbc5f15aChris Lattner /// EmitFunctionStart - Emit a call to llvm.dbg.function.start to indicate 172c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner /// start of a new function. 173c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner void EmitFunctionStart(GlobalDecl GD, QualType FnType, 174c23197a26f34f559ea9797de51e187087c039c42Torok Edwin llvm::Function *Fn, CGBuilderTy &Builder); 175c9dcf289557017742fb507f985b3bf9f44982031Chris Lattner 17688d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// EmitFunctionEnd - Constructs the debug code for exiting a function. 177c9dcf289557017742fb507f985b3bf9f44982031Chris Lattner void EmitFunctionEnd(CGBuilderTy &Builder); 178518f9c7ad0566a69886a4db1b76e995df22bca0fChris Lattner 17988d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// UpdateCompletedType - Update type cache because the type is now 18088d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// translated. 18188d211f82304e53694ece666d4a2507b170e4582Chris Lattner void UpdateCompletedType(const TagDecl *TD); 182c9dcf289557017742fb507f985b3bf9f44982031Chris Lattner 18388d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// EmitLexicalBlockStart - Emit metadata to indicate the beginning of a 184c9dcf289557017742fb507f985b3bf9f44982031Chris Lattner /// new lexical block and push the block onto the stack. 18588d211f82304e53694ece666d4a2507b170e4582Chris Lattner void EmitLexicalBlockStart(CGBuilderTy &Builder, SourceLocation Loc); 18688d211f82304e53694ece666d4a2507b170e4582Chris Lattner 187d9989384592a3bd9dd374470a723ca8303071a2dChris Lattner /// EmitLexicalBlockEnd - Emit metadata to indicate the end of a new lexical 188c9dcf289557017742fb507f985b3bf9f44982031Chris Lattner /// block and pop the current block. 189518f9c7ad0566a69886a4db1b76e995df22bca0fChris Lattner void EmitLexicalBlockEnd(CGBuilderTy &Builder, SourceLocation Loc); 190c9dcf289557017742fb507f985b3bf9f44982031Chris Lattner 191518f9c7ad0566a69886a4db1b76e995df22bca0fChris Lattner /// EmitDeclareOfAutoVariable - Emit call to llvm.dbg.declare for an automatic 19288d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// variable declaration. 19388d211f82304e53694ece666d4a2507b170e4582Chris Lattner void EmitDeclareOfAutoVariable(const VarDecl *Decl, llvm::Value *AI, 194c9dcf289557017742fb507f985b3bf9f44982031Chris Lattner CGBuilderTy &Builder); 19588d211f82304e53694ece666d4a2507b170e4582Chris Lattner 196c9dcf289557017742fb507f985b3bf9f44982031Chris Lattner /// EmitDeclareOfBlockDeclRefVariable - Emit call to llvm.dbg.declare for an 1972046371e70e90d4435fcdf1b2ebeb64a2e5b2626Chris Lattner /// imported variable declaration in a block. 19888d211f82304e53694ece666d4a2507b170e4582Chris Lattner void EmitDeclareOfBlockDeclRefVariable(const VarDecl *variable, 19988d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::Value *storage, 20088d211f82304e53694ece666d4a2507b170e4582Chris Lattner CGBuilderTy &Builder, 201d9989384592a3bd9dd374470a723ca8303071a2dChris Lattner const CGBlockInfo &blockInfo); 202518f9c7ad0566a69886a4db1b76e995df22bca0fChris Lattner 203518f9c7ad0566a69886a4db1b76e995df22bca0fChris Lattner /// EmitDeclareOfArgVariable - Emit call to llvm.dbg.declare for an argument 20488d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// variable declaration. 20588d211f82304e53694ece666d4a2507b170e4582Chris Lattner void EmitDeclareOfArgVariable(const VarDecl *Decl, llvm::Value *AI, 206c9dcf289557017742fb507f985b3bf9f44982031Chris Lattner unsigned ArgNo, CGBuilderTy &Builder); 20788d211f82304e53694ece666d4a2507b170e4582Chris Lattner 208c9dcf289557017742fb507f985b3bf9f44982031Chris Lattner /// EmitDeclareOfBlockLiteralArgVariable - Emit call to 20988d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// llvm.dbg.declare for the block-literal argument to a block 21088d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// invocation function. 21188d211f82304e53694ece666d4a2507b170e4582Chris Lattner void EmitDeclareOfBlockLiteralArgVariable(const CGBlockInfo &block, 21288d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::Value *addr, 213399ea50dc3321b4cc16e0a5ea7c41495c55a01baBill Wendling CGBuilderTy &Builder); 21488d211f82304e53694ece666d4a2507b170e4582Chris Lattner 21588d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// EmitGlobalVariable - Emit information about a global variable. 216c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner void EmitGlobalVariable(llvm::GlobalVariable *GV, const VarDecl *Decl); 2176e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick 2186e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick /// EmitGlobalVariable - Emit information about an objective-c interface. 219c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner void EmitGlobalVariable(llvm::GlobalVariable *GV, ObjCInterfaceDecl *Decl); 220c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner 221c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner /// EmitGlobalVariable - Emit global variable's debug info. 2226e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick void EmitGlobalVariable(const ValueDecl *VD, llvm::Constant *Init); 223c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner 224c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner /// getOrCreateRecordType - Emit record type's standalone debug info. 225c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner llvm::DIType getOrCreateRecordType(QualType Ty, SourceLocation L); 226fc54c552963545a81e4ea38e60460590afb2d5aeDan Gohmanprivate: 22729d8f0cae425f1bba583565227eaebf58f26ce73Chris Lattner /// EmitDeclare - Emit call to llvm.dbg.declare for a variable declaration. 2283faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner void EmitDeclare(const VarDecl *decl, unsigned Tag, llvm::Value *AI, 2296e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick unsigned ArgNo, CGBuilderTy &Builder); 2303faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner 2313faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner // EmitTypeForVarWithBlocksAttr - Build up structure info for the byref. 2326e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick // See BuildByRefType. 233e8be6c63915e0389f1eef6b53c64300d13b2ce99Dan Gohman llvm::DIType EmitTypeForVarWithBlocksAttr(const ValueDecl *VD, 234c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner uint64_t *OffSet); 235c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner 2360c9b559bfd0b476c2dde787285a1195f3142c423Roman Divacky /// getContextDescriptor - Get context info for the decl. 2376e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick llvm::DIDescriptor getContextDescriptor(const Decl *Decl); 238c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner 23988d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// createRecordFwdDecl - Create a forward decl for a RecordType in a given 24088d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// context. 241c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner llvm::DIType createRecordFwdDecl(const RecordDecl *, llvm::DIDescriptor); 242c23197a26f34f559ea9797de51e187087c039c42Torok Edwin 24380df01d2cf68b680b1c90eb0d3b0f2defcdf202bChris Lattner /// createContextChain - Create a set of decls for the context chain. 24480df01d2cf68b680b1c90eb0d3b0f2defcdf202bChris Lattner llvm::DIDescriptor createContextChain(const Decl *Decl); 24580df01d2cf68b680b1c90eb0d3b0f2defcdf202bChris Lattner 24688d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// getCurrentDirname - Return current directory name. 24788d211f82304e53694ece666d4a2507b170e4582Chris Lattner StringRef getCurrentDirname(); 24888d211f82304e53694ece666d4a2507b170e4582Chris Lattner 24980df01d2cf68b680b1c90eb0d3b0f2defcdf202bChris Lattner /// CreateCompileUnit - Create new compile unit. 25080df01d2cf68b680b1c90eb0d3b0f2defcdf202bChris Lattner void CreateCompileUnit(); 25180df01d2cf68b680b1c90eb0d3b0f2defcdf202bChris Lattner 25288d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// getOrCreateFile - Get the file debug info descriptor for the input 253d9989384592a3bd9dd374470a723ca8303071a2dChris Lattner /// location. 25488d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIFile getOrCreateFile(SourceLocation Loc); 25588d211f82304e53694ece666d4a2507b170e4582Chris Lattner 25680df01d2cf68b680b1c90eb0d3b0f2defcdf202bChris Lattner /// getOrCreateMainFile - Get the file info for main compile unit. 25780df01d2cf68b680b1c90eb0d3b0f2defcdf202bChris Lattner llvm::DIFile getOrCreateMainFile(); 25888d211f82304e53694ece666d4a2507b170e4582Chris Lattner 25980df01d2cf68b680b1c90eb0d3b0f2defcdf202bChris Lattner /// getOrCreateType - Get the type from the cache or create a new type if 26088d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// necessary. 26180df01d2cf68b680b1c90eb0d3b0f2defcdf202bChris Lattner llvm::DIType getOrCreateType(QualType Ty, llvm::DIFile F); 2629fa200d2a2360412465bbd6cfb485af2e9d5b1b4Chris Lattner 26388d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// getOrCreateLimitedType - Get the type from the cache or create a flat 26488d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// limited type. 265d9989384592a3bd9dd374470a723ca8303071a2dChris Lattner llvm::DIType getOrCreateLimitedType(QualType Ty, llvm::DIFile F); 26688d211f82304e53694ece666d4a2507b170e4582Chris Lattner 26788d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// CreateTypeNode - Create type metadata for a source language type. 268ecfe55e65b6a72fddd543c42f2e2df4c96c647baChris Lattner llvm::DIType CreateTypeNode(QualType Ty, llvm::DIFile F); 269ecfe55e65b6a72fddd543c42f2e2df4c96c647baChris Lattner 27080df01d2cf68b680b1c90eb0d3b0f2defcdf202bChris Lattner /// CreateLimitedTypeNode - Create type metadata for a source language type, 27180df01d2cf68b680b1c90eb0d3b0f2defcdf202bChris Lattner /// but create as little as possible. 27288d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType CreateLimitedTypeNode(QualType Ty, llvm::DIFile F); 27388d211f82304e53694ece666d4a2507b170e4582Chris Lattner 27488d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// CreateMemberType - Create new member and increase Offset by FType's size. 27588d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DIType CreateMemberType(llvm::DIFile Unit, QualType FType, 27688d211f82304e53694ece666d4a2507b170e4582Chris Lattner StringRef Name, uint64_t *Offset); 27788d211f82304e53694ece666d4a2507b170e4582Chris Lattner 27888d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// getFunctionDeclaration - Return debug info descriptor to describe method 279399ea50dc3321b4cc16e0a5ea7c41495c55a01baBill Wendling /// declaration for the given method definition. 28088d211f82304e53694ece666d4a2507b170e4582Chris Lattner llvm::DISubprogram getFunctionDeclaration(const Decl *D); 28188d211f82304e53694ece666d4a2507b170e4582Chris Lattner 282c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner /// getFunctionName - Get function name for the given FunctionDecl. If the 2836e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick /// name is constructred on demand (e.g. C++ destructor) then the name 28488d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// is stored on the side. 28588d211f82304e53694ece666d4a2507b170e4582Chris Lattner StringRef getFunctionName(const FunctionDecl *FD); 28688d211f82304e53694ece666d4a2507b170e4582Chris Lattner 28788d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// getObjCMethodName - Returns the unmangled name of an Objective-C method. 288c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner /// This is the display name for the debugging info. 2896e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick StringRef getObjCMethodName(const ObjCMethodDecl *FD); 29088d211f82304e53694ece666d4a2507b170e4582Chris Lattner 29188d211f82304e53694ece666d4a2507b170e4582Chris Lattner /// getSelectorName - Return selector name. This is used for debugging 292c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner /// info. 2936e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick StringRef getSelectorName(Selector S); 2943faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner 2953faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner /// getClassName - Get class name including template argument list. 2963faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner StringRef getClassName(RecordDecl *RD); 2973faad495bc5c23de4852e7a3a13c25203cabfc3eChris Lattner 2986e8f4c404825b79f9b9176483653f1aa927dfbdeAndrew Trick /// getVTableName - Get vtable name for the given Class. 299c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner StringRef getVTableName(const CXXRecordDecl *Decl); 300c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner 301c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner /// getLineNumber - Get line number for the location. If location is invalid 302c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner /// then use current location. 303c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner unsigned getLineNumber(SourceLocation Loc); 304c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner 305c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner /// getColumnNumber - Get column number for the location. If location is 306c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner /// invalid then use current location. 307c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner unsigned getColumnNumber(SourceLocation Loc); 308c6644188208d4aee9a9d6c428710ec1f69837944Chris Lattner}; 309} // namespace CodeGen 310} // namespace clang 311 312 313#endif 314