From dedd27fc62528220ec4cd539498567238d832e78 Mon Sep 17 00:00:00 2001 From: David Blaikie Date: Fri, 13 Sep 2013 18:45:00 +0000 Subject: [PATCH] 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 --- clang/lib/CodeGen/CGDebugInfo.cpp | 18 ------------------ clang/lib/CodeGen/CGDebugInfo.h | 5 ----- clang/test/CodeGenCXX/debug-info-friend.cpp | 5 ++++- 3 files changed, 4 insertions(+), 24 deletions(-) diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp index f81d2cf683e5..0069d577f24a 100644 --- a/clang/lib/CodeGen/CGDebugInfo.cpp +++ b/clang/lib/CodeGen/CGDebugInfo.cpp @@ -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 &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 /// C++ base classes. This is used while creating debug info entry for /// a Record. @@ -1528,7 +1511,6 @@ llvm::DIType CGDebugInfo::CreateTypeDefinition(const RecordType *Ty) { CollectRecordFields(RD, DefUnit, EltTys, FwdDecl); if (CXXDecl) { CollectCXXMemberFunctions(CXXDecl, DefUnit, EltTys, FwdDecl); - CollectCXXFriends(CXXDecl, DefUnit, EltTys, FwdDecl); } LexicalBlockStack.pop_back(); diff --git a/clang/lib/CodeGen/CGDebugInfo.h b/clang/lib/CodeGen/CGDebugInfo.h index d480d9bbc872..0ca274f56881 100644 --- a/clang/lib/CodeGen/CGDebugInfo.h +++ b/clang/lib/CodeGen/CGDebugInfo.h @@ -155,11 +155,6 @@ class CGDebugInfo { SmallVectorImpl &E, llvm::DIType T); - void CollectCXXFriends(const CXXRecordDecl *Decl, - llvm::DIFile F, - SmallVectorImpl &EltTys, - llvm::DIType RecordTy); - void CollectCXXBases(const CXXRecordDecl *Decl, llvm::DIFile F, SmallVectorImpl &EltTys, diff --git a/clang/test/CodeGenCXX/debug-info-friend.cpp b/clang/test/CodeGenCXX/debug-info-friend.cpp index cf6651cde18e..b103b142a2ae 100644 --- a/clang/test/CodeGenCXX/debug-info-friend.cpp +++ b/clang/test/CodeGenCXX/debug-info-friend.cpp @@ -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