forked from OSchip/llvm-project
parent
72c60c73af
commit
973f2eb0cd
|
@ -57,6 +57,8 @@ llvm::DIDescriptor CGDebugInfo::getContextDescriptor(const Decl *D,
|
|||
I = RegionMap.find(Parent);
|
||||
if (I != RegionMap.end())
|
||||
return llvm::DIDescriptor(dyn_cast_or_null<llvm::MDNode>(I->second));
|
||||
if (const NamespaceDecl *NSDecl = dyn_cast<NamespaceDecl>(Parent))
|
||||
return llvm::DIDescriptor(getOrCreateNameSpace(NSDecl, CompileUnit));
|
||||
}
|
||||
return CompileUnit;
|
||||
}
|
||||
|
@ -1802,3 +1804,26 @@ void CGDebugInfo::EmitGlobalVariable(llvm::GlobalVariable *Var,
|
|||
Var->hasInternalLinkage(),
|
||||
true/*definition*/, Var);
|
||||
}
|
||||
|
||||
/// getOrCreateNamesSpace - Return namespace descriptor for the given
|
||||
/// namespace decl.
|
||||
llvm::DINameSpace
|
||||
CGDebugInfo::getOrCreateNameSpace(const NamespaceDecl *NSDecl,
|
||||
llvm::DIDescriptor Unit) {
|
||||
llvm::DenseMap<const NamespaceDecl *, llvm::WeakVH>::iterator I =
|
||||
NameSpaceCache.find(NSDecl);
|
||||
if (I != NameSpaceCache.end())
|
||||
return llvm::DINameSpace(cast<llvm::MDNode>(I->second));
|
||||
|
||||
SourceManager &SM = CGM.getContext().getSourceManager();
|
||||
PresumedLoc PLoc = SM.getPresumedLoc(NSDecl->getLocation());
|
||||
unsigned LineNo = PLoc.isInvalid() ? 0 : PLoc.getLine();
|
||||
|
||||
llvm::DIDescriptor Context =
|
||||
getContextDescriptor(NSDecl, Unit);
|
||||
llvm::DINameSpace NS =
|
||||
DebugFactory.CreateNameSpace(Context, NSDecl->getName(),
|
||||
llvm::DICompileUnit(Unit.getNode()), LineNo);
|
||||
NameSpaceCache[NSDecl] = llvm::WeakVH(NS.getNode());
|
||||
return NS;
|
||||
}
|
||||
|
|
|
@ -68,6 +68,7 @@ class CGDebugInfo {
|
|||
llvm::BumpPtrAllocator DebugInfoNames;
|
||||
|
||||
llvm::DenseMap<const FunctionDecl *, llvm::WeakVH> SPCache;
|
||||
llvm::DenseMap<const NamespaceDecl *, llvm::WeakVH> NameSpaceCache;
|
||||
|
||||
/// Helper functions for getOrCreateType.
|
||||
llvm::DIType CreateType(const BuiltinType *Ty, llvm::DICompileUnit U);
|
||||
|
@ -89,7 +90,9 @@ class CGDebugInfo {
|
|||
llvm::DIType getOrCreateMethodType(const CXXMethodDecl *Method,
|
||||
llvm::DICompileUnit Unit);
|
||||
llvm::DIType getOrCreateVTablePtrType(llvm::DICompileUnit Unit);
|
||||
|
||||
llvm::DINameSpace getOrCreateNameSpace(const NamespaceDecl *N,
|
||||
llvm::DIDescriptor Unit);
|
||||
|
||||
llvm::DIType CreatePointerLikeType(unsigned Tag,
|
||||
const Type *Ty, QualType PointeeTy,
|
||||
llvm::DICompileUnit U);
|
||||
|
|
Loading…
Reference in New Issue