[clang] [CIR] Implement isMemcpyEquivalentSpecialMember for trivial copy/move ctors (PR #186700)

Eli Friedman via cfe-commits cfe-commits at lists.llvm.org
Wed Apr 1 13:56:54 PDT 2026


================
@@ -2770,6 +2770,40 @@ bool CXXMethodDecl::isMoveAssignmentOperator() const {
   return Context.hasSameUnqualifiedType(ClassType, ParamType);
 }
 
+bool CXXMethodDecl::isCopyOrMoveConstructor() const {
+  if (const auto *Ctor = dyn_cast<CXXConstructorDecl>(this))
+    return Ctor->isCopyOrMoveConstructor();
+  return false;
+}
+
+bool CXXMethodDecl::isCopyOrMoveConstructorOrAssignment() const {
+  return isCopyOrMoveConstructor() || isCopyAssignmentOperator() ||
+         isMoveAssignmentOperator();
+}
+
+bool CXXMethodDecl::isMemcpyEquivalentSpecialMember() const {
+  if (!isCopyOrMoveConstructorOrAssignment())
+    return false;
+
+  const ASTContext &Ctx = getASTContext();
----------------
efriedma-quic wrote:

Please pass in `ASTContext&` instead of calling `getASTContext()`; it's relatively expensive.  (We have to walk the DeclContexts to find the TranslationUnitDecl.)

https://github.com/llvm/llvm-project/pull/186700


More information about the cfe-commits mailing list