]> granicus.if.org Git - clang/commitdiff
Debug Info: Comment changes in r181393 by request of echristo
authorDavid Blaikie <dblaikie@gmail.com>
Sun, 12 May 2013 18:05:52 +0000 (18:05 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Sun, 12 May 2013 18:05:52 +0000 (18:05 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181672 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGDebugInfo.cpp
lib/CodeGen/CGDebugInfo.h

index 7d5d26030475191f968aa178070dc5a22c64db52..13b681edc9e6958751f8e09a0f909c5a424efcb1 100644 (file)
@@ -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())
index e61a50eeb41daf93c4cfce40dd9294f8ee0215be..f221a0cd3eb885b47feae4e5cfc1b09c38f8896c 100644 (file)
@@ -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;