aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/CodeGen/CGDebugInfo.cpp
diff options
context:
space:
mode:
authorMichael Buch <michaelbuch12@gmail.com>2023-06-19 13:59:32 +0100
committerMichael Buch <michaelbuch12@gmail.com>2023-06-20 09:19:19 +0100
commitc146df9618764d5548c38ce61edc45147094b26f (patch)
treed00dc4b2fefac7f2445004946336738de78916f2 /clang/lib/CodeGen/CGDebugInfo.cpp
parent189d9447b182e80e284561382f43bbf5ae0bb031 (diff)
downloadllvm-c146df9618764d5548c38ce61edc45147094b26f.zip
llvm-c146df9618764d5548c38ce61edc45147094b26f.tar.gz
llvm-c146df9618764d5548c38ce61edc45147094b26f.tar.bz2
[clang][DebugInfo] Emit DW_AT_deleted on any deleted member function
Currently we emit `DW_AT_deleted` for `deleted` special-member functions (i.e., ctors/dtors). However, in C++ one can mark any member function as deleted. This patch expands the set of member functions for which we emit `DW_AT_deleted`. The DWARFv5 spec section 5.7.8 says: ``` <non-normative> In C++, a member function may be declared as deleted. This prevents the compiler from generating a default implementation of a special member function such as a constructor or destructor, and can affect overload resolution when used on other member functions. </non-normative> If the member function entry has been declared as deleted, then that entry has a DW_AT_deleted attribute. ``` Thus this change is conforming. Differential Revision: https://reviews.llvm.org/D153282
Diffstat (limited to 'clang/lib/CodeGen/CGDebugInfo.cpp')
-rw-r--r--clang/lib/CodeGen/CGDebugInfo.cpp23
1 files changed, 2 insertions, 21 deletions
diff --git a/clang/lib/CodeGen/CGDebugInfo.cpp b/clang/lib/CodeGen/CGDebugInfo.cpp
index 2fd2227..f049a682 100644
--- a/clang/lib/CodeGen/CGDebugInfo.cpp
+++ b/clang/lib/CodeGen/CGDebugInfo.cpp
@@ -1945,27 +1945,8 @@ llvm::DISubprogram *CGDebugInfo::CreateCXXMemberFunction(
ContainingType = RecordTy;
}
- // We're checking for deleted C++ special member functions
- // [Ctors,Dtors, Copy/Move]
- auto checkAttrDeleted = [&](const auto *Method) {
- if (Method->getCanonicalDecl()->isDeleted())
- SPFlags |= llvm::DISubprogram::SPFlagDeleted;
- };
-
- switch (Method->getKind()) {
-
- case Decl::CXXConstructor:
- case Decl::CXXDestructor:
- checkAttrDeleted(Method);
- break;
- case Decl::CXXMethod:
- if (Method->isCopyAssignmentOperator() ||
- Method->isMoveAssignmentOperator())
- checkAttrDeleted(Method);
- break;
- default:
- break;
- }
+ if (Method->getCanonicalDecl()->isDeleted())
+ SPFlags |= llvm::DISubprogram::SPFlagDeleted;
if (Method->isNoReturn())
Flags |= llvm::DINode::FlagNoReturn;