DebugInfo: omit debug info for friends

GCC ToT doesn't do this & it's worth about 3.2% on Clang's DWO file size
with Clang. Some or all of this may be due to things like r190715 which
could have source fixes/improvements, but it's not clear that's the case
and that doesn't help other source bases.

llvm-svn: 190716
This commit is contained in:
David Blaikie 2013-09-13 18:45:00 +00:00
parent 0a4e61f81c
commit dedd27fc62
3 changed files with 4 additions and 24 deletions

View File

@ -1139,23 +1139,6 @@ CollectCXXMemberFunctions(const CXXRecordDecl *RD, llvm::DIFile Unit,
} }
} }
/// CollectCXXFriends - A helper function to collect debug info for
/// C++ base classes. This is used while creating debug info entry for
/// a Record.
void CGDebugInfo::
CollectCXXFriends(const CXXRecordDecl *RD, llvm::DIFile Unit,
SmallVectorImpl<llvm::Value *> &EltTys,
llvm::DIType RecordTy) {
for (CXXRecordDecl::friend_iterator BI = RD->friend_begin(),
BE = RD->friend_end(); BI != BE; ++BI) {
if ((*BI)->isUnsupportedFriend())
continue;
if (TypeSourceInfo *TInfo = (*BI)->getFriendType())
EltTys.push_back(DBuilder.createFriend(
RecordTy, getOrCreateType(TInfo->getType(), Unit)));
}
}
/// CollectCXXBases - A helper function to collect debug info for /// CollectCXXBases - A helper function to collect debug info for
/// C++ base classes. This is used while creating debug info entry for /// C++ base classes. This is used while creating debug info entry for
/// a Record. /// a Record.
@ -1528,7 +1511,6 @@ llvm::DIType CGDebugInfo::CreateTypeDefinition(const RecordType *Ty) {
CollectRecordFields(RD, DefUnit, EltTys, FwdDecl); CollectRecordFields(RD, DefUnit, EltTys, FwdDecl);
if (CXXDecl) { if (CXXDecl) {
CollectCXXMemberFunctions(CXXDecl, DefUnit, EltTys, FwdDecl); CollectCXXMemberFunctions(CXXDecl, DefUnit, EltTys, FwdDecl);
CollectCXXFriends(CXXDecl, DefUnit, EltTys, FwdDecl);
} }
LexicalBlockStack.pop_back(); LexicalBlockStack.pop_back();

View File

@ -155,11 +155,6 @@ class CGDebugInfo {
SmallVectorImpl<llvm::Value *> &E, SmallVectorImpl<llvm::Value *> &E,
llvm::DIType T); llvm::DIType T);
void CollectCXXFriends(const CXXRecordDecl *Decl,
llvm::DIFile F,
SmallVectorImpl<llvm::Value *> &EltTys,
llvm::DIType RecordTy);
void CollectCXXBases(const CXXRecordDecl *Decl, void CollectCXXBases(const CXXRecordDecl *Decl,
llvm::DIFile F, llvm::DIFile F,
SmallVectorImpl<llvm::Value *> &EltTys, SmallVectorImpl<llvm::Value *> &EltTys,

View File

@ -14,4 +14,7 @@ struct MyFriend {
} }
}; };
// CHECK: DW_TAG_friend // Emitting debug info for friends unnecessarily bloats debug info without any
// known benefit or debugger feature that requires it. Re-enable this is a
// use-case appears.
// CHECK-NOT: DW_TAG_friend