diff options
author | Brock Wyma <brock.wyma@intel.com> | 2018-05-14 21:21:22 +0000 |
---|---|---|
committer | Brock Wyma <brock.wyma@intel.com> | 2018-05-14 21:21:22 +0000 |
commit | 3db2b108c337b0900a1d519f1d3546f437812e51 (patch) | |
tree | bbb5022047924171a8272fe8b28c1d4090297382 /clang/lib | |
parent | 4c8a67a2293105d4e4b0dadeebbab21b819049c5 (diff) | |
download | bcm5719-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.cpp | 8 |
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); } |