[clang] [Clang] Diagnose defaulted assignment operator with incompatible object parameter (PR #70176)
Timm Baeder via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 26 02:46:13 PDT 2023
================
@@ -7748,6 +7748,24 @@ bool Sema::CheckExplicitlyDefaultedSpecialMember(CXXMethodDecl *MD,
HadError = true;
}
}
+ // [C++23][dcl.fct.def.default]/p2.2
+ // if F2 has an implicit object parameter of type “reference to C”,
+ // F1 may be an explicit object member function whose explicit object
+ // parameter is of (possibly different) type “reference to C”,
+ // in which case the type of F1 would differ from the type of F2
+ // in that the type of F1 has an additional parameter;
+ if (!Context.hasSameType(
+ ThisType.getNonReferenceType().getUnqualifiedType(),
+ Context.getRecordType(RD))) {
+ if (DeleteOnTypeMismatch)
+ ShouldDeleteForTypeMismatch = true;
+ else {
+ Diag(MD->getLocation(),
+ diag::err_defaulted_special_member_explicit_object_mismatch)
+ << (CSM == CXXMoveAssignment) << RD;
----------------
tbaederr wrote:
Nothing specific. In line 7709 above, we pass `MD->getSourceRange()`.
https://github.com/llvm/llvm-project/pull/70176
More information about the cfe-commits
mailing list