Fix virtual bases' debug info.

llvm-svn: 95678
This commit is contained in:
Devang Patel 2010-02-09 19:09:28 +00:00
parent ddfe8092e9
commit 0ae70d16b8
1 changed files with 4 additions and 2 deletions

View File

@ -641,7 +641,7 @@ CollectCXXMemberFunctions(const CXXRecordDecl *RD, llvm::DICompileUnit Unit,
E = RD->method_end(); I != E; ++I) {
const CXXMethodDecl *Method = *I;
if (Method->isImplicit())
if (Method->isImplicit() && !Method->isUsed())
continue;
EltTys.push_back(CreateCXXMemberFunction(Method, Unit, RecordTy));
@ -666,7 +666,9 @@ CollectCXXBases(const CXXRecordDecl *RD, llvm::DICompileUnit Unit,
cast<CXXRecordDecl>(BI->getType()->getAs<RecordType>()->getDecl());
if (BI->isVirtual()) {
BaseOffset = RL.getVBaseClassOffset(Base);
// virtual base offset index is -ve. The code generator emits dwarf
// expression where it expects +ve number.
BaseOffset = 0 - CGM.getVtableInfo().getVirtualBaseOffsetIndex(RD, Base);
BFlags = llvm::DIType::FlagVirtual;
} else
BaseOffset = RL.getBaseClassOffset(Base);