diff options
author | David Blaikie <dblaikie@gmail.com> | 2013-05-12 18:05:52 +0000 |
---|---|---|
committer | David Blaikie <dblaikie@gmail.com> | 2013-05-12 18:05:52 +0000 |
commit | 87360f2acd4e2fa706707135b95c64e5e2b63435 (patch) | |
tree | a3ac00bff689f177e5a4460c438a793824d1366d | |
parent | 284b3cbfd1cd5b6585437fbb8b95fe136f273efb (diff) | |
download | clang-87360f2acd4e2fa706707135b95c64e5e2b63435.tar.gz clang-87360f2acd4e2fa706707135b95c64e5e2b63435.tar.bz2 clang-87360f2acd4e2fa706707135b95c64e5e2b63435.tar.xz |
Debug Info: Comment changes in r181393 by request of echristo
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181672 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/CGDebugInfo.cpp | 11 | ||||
-rw-r--r-- | lib/CodeGen/CGDebugInfo.h | 2 |
2 files changed, 13 insertions, 0 deletions
diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 7d5d260304..13b681edc9 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -2172,8 +2172,19 @@ llvm::DIType CGDebugInfo::CreateMemberType(llvm::DIFile Unit, QualType FType, } llvm::DIDescriptor CGDebugInfo::getDeclarationOrDefinition(const Decl *D) { + // We only need a declaration (not a definition) of the type - so use whatever + // we would otherwise do to get a type for a pointee. (forward declarations in + // limited debug info, full definitions (if the type definition is available) + // in unlimited debug info) if (const TypeDecl *RD = dyn_cast<TypeDecl>(D)) return CreatePointeeType(QualType(RD->getTypeForDecl(), 0), llvm::DIFile()); + // Otherwise fall back to a fairly rudimentary cache of existing declarations. + // This doesn't handle providing declarations (for functions or variables) for + // entities without definitions in this TU, nor when the definition proceeds + // the call to this function. + // FIXME: This should be split out into more specific maps with support for + // emitting forward declarations and merging definitions with declarations, + // the same way as we do for types. llvm::DenseMap<const Decl *, llvm::WeakVH>::iterator I = DeclCache.find(D->getCanonicalDecl()); if (I == DeclCache.end()) diff --git a/lib/CodeGen/CGDebugInfo.h b/lib/CodeGen/CGDebugInfo.h index e61a50eeb4..f221a0cd3e 100644 --- a/lib/CodeGen/CGDebugInfo.h +++ b/lib/CodeGen/CGDebugInfo.h @@ -95,6 +95,8 @@ class CGDebugInfo { llvm::DenseMap<const char *, llvm::WeakVH> DIFileCache; llvm::DenseMap<const FunctionDecl *, llvm::WeakVH> SPCache; + /// \brief Cache declarations relevant to DW_TAG_imported_declarations (C++ + /// using declarations) that aren't covered by other more specific caches. llvm::DenseMap<const Decl *, llvm::WeakVH> DeclCache; llvm::DenseMap<const NamespaceDecl *, llvm::WeakVH> NameSpaceCache; llvm::DenseMap<const Decl *, llvm::WeakVH> StaticDataMemberCache; |