summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorBrock Wyma <brock.wyma@intel.com>2018-05-14 21:21:22 +0000
committerBrock Wyma <brock.wyma@intel.com>2018-05-14 21:21:22 +0000
commit3db2b108c337b0900a1d519f1d3546f437812e51 (patch)
treebbb5022047924171a8272fe8b28c1d4090297382 /clang/lib
parent4c8a67a2293105d4e4b0dadeebbab21b819049c5 (diff)
downloadbcm5719-llvm-3db2b108c337b0900a1d519f1d3546f437812e51.tar.gz
bcm5719-llvm-3db2b108c337b0900a1d519f1d3546f437812e51.zip
[CodeView] Improve debugging of virtual base class member variables
Initial support for passing the virtual base pointer offset to CodeViewDebug. https://reviews.llvm.org/D46271 llvm-svn: 332296
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/CodeGen/CGDebugInfo.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
index 12209723999..55f96618ea4 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -1536,6 +1536,7 @@ void CGDebugInfo::CollectCXXBasesAux(
auto *BaseTy = getOrCreateType(BI.getType(), Unit);
llvm::DINode::DIFlags BFlags = StartingFlags;
uint64_t BaseOffset;
+ uint32_t VBPtrOffset = 0;
if (BI.isVirtual()) {
if (CGM.getTarget().getCXXABI().isItaniumFamily()) {
@@ -1549,6 +1550,8 @@ void CGDebugInfo::CollectCXXBasesAux(
// vbase offset offset in Itanium.
BaseOffset =
4 * CGM.getMicrosoftVTableContext().getVBTableIndex(RD, Base);
+ VBPtrOffset = CGM.getContext().getASTRecordLayout(RD).getVBPtrOffset()
+ .getQuantity();
}
BFlags |= llvm::DINode::FlagVirtual;
} else
@@ -1558,7 +1561,8 @@ void CGDebugInfo::CollectCXXBasesAux(
BFlags |= getAccessFlag(BI.getAccessSpecifier(), RD);
llvm::DIType *DTy =
- DBuilder.createInheritance(RecordTy, BaseTy, BaseOffset, BFlags);
+ DBuilder.createInheritance(RecordTy, BaseTy, BaseOffset, VBPtrOffset,
+ BFlags);
EltTys.push_back(DTy);
}
}
@@ -2192,7 +2196,7 @@ llvm::DIType *CGDebugInfo::CreateTypeDefinition(const ObjCInterfaceType *Ty,
if (!SClassTy)
return nullptr;
- llvm::DIType *InhTag = DBuilder.createInheritance(RealDecl, SClassTy, 0,
+ llvm::DIType *InhTag = DBuilder.createInheritance(RealDecl, SClassTy, 0, 0,
llvm::DINode::FlagZero);
EltTys.push_back(InhTag);
}
OpenPOWER on IntegriCloud