Lines Matching refs:CSM
6807 CXXSpecialMember CSM = getSpecialMember(M);
6809 if (CSM != CXXInvalid) {
6810 M->setTrivial(SpecialMemberIsTrivial(M, CSM));
6815 SpecialMemberIsTrivial(M, CSM, TAH_ConsiderTrivialABI));
6822 if ((CSM == CXXCopyConstructor || CSM == CXXMoveConstructor ||
6823 CSM == CXXDestructor) && M->isUserProvided()) {
6832 (CSM == CXXDefaultConstructor || CSM == CXXCopyConstructor ||
6833 CSM == CXXDestructor))
6961 /// \param CSM The kind of special member function.
6967 Sema &S, CXXRecordDecl *Class, Sema::CXXSpecialMember CSM,
6970 if (CSM == Sema::CXXCopyAssignment || CSM == Sema::CXXMoveAssignment)
6974 if (CSM == Sema::CXXDefaultConstructor || CSM == Sema::CXXDestructor)
6979 return S.LookupSpecialMember(Class, CSM,
7072 Sema::CXXSpecialMember CSM, unsigned Quals,
7079 assert(CSM == Sema::CXXDefaultConstructor);
7086 if (CSM == Sema::CXXDefaultConstructor)
7088 if (CSM == Sema::CXXDestructor)
7092 lookupCallFromSpecialMember(S, ClassDecl, CSM, Quals, ConstRHS);
7103 Sema &S, CXXRecordDecl *ClassDecl, Sema::CXXSpecialMember CSM,
7112 switch (CSM) {
7152 return CSM == Sema::CXXDefaultConstructor
7175 if (!specialMemberIsConstexpr(S, BaseClassDecl, CSM, 0, ConstArg,
7190 if (CSM == Sema::CXXDefaultConstructor && F->hasInClassInitializer())
7195 if (!specialMemberIsConstexpr(S, FieldRecDecl, CSM,
7199 } else if (CSM == Sema::CXXDefaultConstructor) {
7230 Sema &S, SourceLocation Loc, CXXMethodDecl *MD, Sema::CXXSpecialMember CSM,
7303 CXXSpecialMember CSM) {
7306 assert(MD->isExplicitlyDefaulted() && CSM != CXXInvalid &&
7332 if (CSM == CXXDefaultConstructor || CSM == CXXDestructor)
7339 << CSM << MD->getSourceRange();
7346 << CSM << MD->getSourceRange();
7354 if (CSM == CXXCopyConstructor)
7356 else if (CSM == CXXCopyAssignment)
7360 if (CSM == CXXCopyAssignment || CSM == CXXMoveAssignment) {
7370 << (CSM == CXXMoveAssignment) << ExpectedReturnType;
7380 << (CSM == CXXMoveAssignment) << getLangOpts().CPlusPlus14;
7399 diag::err_defaulted_special_member_volatile_param) << CSM;
7407 else if (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment) {
7410 << (CSM == CXXCopyAssignment);
7416 << (CSM == CXXMoveAssignment);
7423 assert(CSM == CXXCopyAssignment && "unexpected non-ref argument");
7437 bool Constexpr = defaultedSpecialMemberIsConstexpr(*this, RD, CSM,
7447 << CSM;
7477 if (ShouldDeleteForTypeMismatch || ShouldDeleteSpecialMember(MD, CSM)) {
7481 Diag(MD->getLocation(), diag::warn_defaulted_method_deleted) << CSM;
7483 Diag(MD->getLocation(), diag::note_deleted_type_mismatch) << CSM;
7485 ShouldDeleteSpecialMember(MD, CSM, nullptr, /*Diagnose*/true);
7490 diag::warn_cxx17_compat_defaulted_method_type_mismatch) << CSM;
7496 Diag(MD->getLocation(), diag::err_out_of_line_default_deletes) << CSM;
7498 ShouldDeleteSpecialMember(MD, CSM, nullptr, /*Diagnose*/true);
8692 Sema::CXXSpecialMember CSM;
8698 SpecialMemberVisitor(Sema &S, CXXMethodDecl *MD, Sema::CXXSpecialMember CSM,
8700 : S(S), MD(MD), CSM(CSM), ICI(ICI) {
8701 switch (CSM) {
8728 return CSM == Sema::CXXMoveConstructor || CSM == Sema::CXXMoveAssignment;
8734 return lookupCallFromSpecialMember(S, Class, CSM, Quals,
8743 assert(CSM == Sema::CXXDefaultConstructor);
8813 Sema::CXXSpecialMember CSM,
8815 : SpecialMemberVisitor(S, MD, CSM, ICI), Diagnose(Diagnose),
8821 return ICI ? Sema::CXXInvalid : CSM;
8937 if (!(CSM == Sema::CXXDefaultConstructor &&
8967 if (CSM == Sema::CXXDefaultConstructor && FD->hasInClassInitializer())
9019 if (CSM == Sema::CXXDefaultConstructor) {
9043 } else if (CSM == Sema::CXXCopyConstructor) {
9094 if (CSM == Sema::CXXDefaultConstructor && AllVariantFieldsAreConst &&
9122 if (CSM == Sema::CXXDefaultConstructor && inUnion() && AllFieldsAreConst) {
9141 bool Sema::ShouldDeleteSpecialMember(CXXMethodDecl *MD, CXXSpecialMember CSM,
9157 (CSM == CXXDefaultConstructor || CSM == CXXCopyAssignment)) {
9166 if (CSM != CXXDefaultConstructor && CSM != CXXDestructor &&
9175 (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment)) {
9186 (!DeletesOnlyMatchingCopy || CSM == CXXCopyConstructor)) {
9198 (!DeletesOnlyMatchingCopy || CSM == CXXCopyAssignment)) {
9214 << (CSM == CXXCopyAssignment) << RD
9226 if (CSM == CXXDestructor && MD->isVirtual()) {
9238 SpecialMemberDeletionInfo SMI(*this, MD, CSM, ICI, Diagnose);
9256 // For inherited constructors (non-null ICI), CSM may be passed so that MD
9259 // expects CSM to match MD, therefore recalculate CSM.
9260 assert(ICI || CSM == getSpecialMember(MD));
9261 auto RealCSM = CSM;
9300 Sema::CXXSpecialMember CSM, unsigned Quals,
9307 switch (CSM) {
9397 lookupCallFromSpecialMember(S, RD, CSM, Quals, ConstRHS);
9418 (CSM == Sema::CXXCopyConstructor || CSM == Sema::CXXMoveConstructor))
9456 Sema::CXXSpecialMember CSM,
9464 if (findTrivialSpecialMember(S, SubRD, CSM, SubType.getCVRQualifiers(),
9472 if (!Selected && CSM == Sema::CXXDefaultConstructor) {
9479 << Kind << SubType.getUnqualifiedType() << CSM << SubType;
9483 << Kind << SubType.getUnqualifiedType() << CSM;
9486 << Kind << SubType.getUnqualifiedType() << CSM;
9492 << Kind << SubType.getUnqualifiedType() << CSM;
9495 S.SpecialMemberIsTrivial(Selected, CSM, Sema::TAH_IgnoreTrivialABI,
9506 Sema::CXXSpecialMember CSM,
9519 CSM, ConstArg, TAH, Diagnose))
9528 if (CSM == Sema::CXXDefaultConstructor && FI->hasInClassInitializer()) {
9548 CSM, TSK_Field, TAH, Diagnose))
9557 void Sema::DiagnoseNontrivial(const CXXRecordDecl *RD, CXXSpecialMember CSM) {
9560 bool ConstArg = (CSM == CXXCopyConstructor || CSM == CXXCopyAssignment);
9561 checkTrivialSubobjectCall(*this, RD->getLocation(), Ty, ConstArg, CSM,
9569 bool Sema::SpecialMemberIsTrivial(CXXMethodDecl *MD, CXXSpecialMember CSM,
9571 assert(!MD->isUserProvided() && CSM != CXXInvalid && "not special enough");
9580 switch (CSM) {
9647 ConstArg, CSM, TSK_BaseClass, TAH, Diagnose))
9662 if (!checkTrivialClassMembers(*this, RD, CSM, ConstArg, TAH, Diagnose))
9668 if (CSM == CXXDestructor && MD->isVirtual()) {
9677 if (CSM != CXXDestructor && MD->getParent()->isDynamicClass()) {
12807 Sema::CXXSpecialMember CSM,
12810 : SpecialMemberVisitor(S, MD, CSM, ICI), Loc(Loc), ExceptSpec(S) {}
12840 if (CSM == Sema::CXXDefaultConstructor && FD->hasInClassInitializer()) {
12899 Sema &S, SourceLocation Loc, CXXMethodDecl *MD, Sema::CXXSpecialMember CSM,
12908 SpecialMemberExceptionSpecInfo Info(S, MD, CSM, ICI, MD->getLocation());
12949 DeclaringSpecialMember(Sema &S, CXXRecordDecl *RD, Sema::CXXSpecialMember CSM)
12950 : S(S), D(RD, CSM), SavedContext(S, RD) {
12969 Ctx.SpecialMember = CSM;