https://github.com/HerrCai0907 updated https://github.com/llvm/llvm-project/pull/71006
>From 69b7688f56f7fe96031201eef1c3804f391c5abe Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcongcai0...@163.com> Date: Thu, 2 Nov 2023 08:49:22 +0800 Subject: [PATCH 1/2] [NFC][clang-tidy]refactor isAssignmentToMemberOf in PreferMemberInitializerCheck --- .../PreferMemberInitializerCheck.cpp | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp index b6daf8b936bde0f..f0070265e6a734a 100644 --- a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp +++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp @@ -118,45 +118,45 @@ static void updateAssignmentLevel( } } -static std::pair<const FieldDecl *, const Expr *> +static std::optional<std::pair<const FieldDecl *, const Expr *>> isAssignmentToMemberOf(const CXXRecordDecl *Rec, const Stmt *S, const CXXConstructorDecl *Ctor) { if (const auto *BO = dyn_cast<BinaryOperator>(S)) { if (BO->getOpcode() != BO_Assign) - return std::make_pair(nullptr, nullptr); + return {}; const auto *ME = dyn_cast<MemberExpr>(BO->getLHS()->IgnoreParenImpCasts()); if (!ME) - return std::make_pair(nullptr, nullptr); + return {}; const auto *Field = dyn_cast<FieldDecl>(ME->getMemberDecl()); if (!Field) - return std::make_pair(nullptr, nullptr); + return {}; if (!isa<CXXThisExpr>(ME->getBase())) - return std::make_pair(nullptr, nullptr); + return {}; const Expr *Init = BO->getRHS()->IgnoreParenImpCasts(); return std::make_pair(Field, Init); } if (const auto *COCE = dyn_cast<CXXOperatorCallExpr>(S)) { if (COCE->getOperator() != OO_Equal) - return std::make_pair(nullptr, nullptr); + return {}; const auto *ME = dyn_cast<MemberExpr>(COCE->getArg(0)->IgnoreParenImpCasts()); if (!ME) - return std::make_pair(nullptr, nullptr); + return {}; const auto *Field = dyn_cast<FieldDecl>(ME->getMemberDecl()); if (!Field) - return std::make_pair(nullptr, nullptr); + return {}; if (!isa<CXXThisExpr>(ME->getBase())) - return std::make_pair(nullptr, nullptr); + return {}; const Expr *Init = COCE->getArg(1)->IgnoreParenImpCasts(); return std::make_pair(Field, Init); } - return std::make_pair(nullptr, nullptr); + return {}; } PreferMemberInitializerCheck::PreferMemberInitializerCheck( @@ -216,11 +216,12 @@ void PreferMemberInitializerCheck::check( return; } - const FieldDecl *Field = nullptr; - const Expr *InitValue = nullptr; - std::tie(Field, InitValue) = isAssignmentToMemberOf(Class, S, Ctor); - if (!Field) + std::optional<std::pair<const FieldDecl *, const Expr *>> + AssignmentToMember = isAssignmentToMemberOf(Class, S, Ctor); + if (!AssignmentToMember) continue; + const FieldDecl *Field = AssignmentToMember.value().first; + const Expr *InitValue = AssignmentToMember.value().second; updateAssignmentLevel(Field, InitValue, Ctor, AssignedFields); if (!canAdvanceAssignment(AssignedFields[Field])) continue; >From 02201dba276c8d11f324af01ef01d06a04324a4d Mon Sep 17 00:00:00 2001 From: Congcong Cai <congcongcai0...@163.com> Date: Thu, 2 Nov 2023 18:44:01 +0800 Subject: [PATCH 2/2] refactor --- .../PreferMemberInitializerCheck.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp index f0070265e6a734a..23d7303371529da 100644 --- a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp +++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp @@ -118,7 +118,12 @@ static void updateAssignmentLevel( } } -static std::optional<std::pair<const FieldDecl *, const Expr *>> +struct AssignmentPair { + const FieldDecl *Field; + const Expr *Init; +}; + +static std::optional<AssignmentPair> isAssignmentToMemberOf(const CXXRecordDecl *Rec, const Stmt *S, const CXXConstructorDecl *Ctor) { if (const auto *BO = dyn_cast<BinaryOperator>(S)) { @@ -136,7 +141,7 @@ isAssignmentToMemberOf(const CXXRecordDecl *Rec, const Stmt *S, if (!isa<CXXThisExpr>(ME->getBase())) return {}; const Expr *Init = BO->getRHS()->IgnoreParenImpCasts(); - return std::make_pair(Field, Init); + return AssignmentPair{Field, Init}; } if (const auto *COCE = dyn_cast<CXXOperatorCallExpr>(S)) { if (COCE->getOperator() != OO_Equal) @@ -154,7 +159,7 @@ isAssignmentToMemberOf(const CXXRecordDecl *Rec, const Stmt *S, if (!isa<CXXThisExpr>(ME->getBase())) return {}; const Expr *Init = COCE->getArg(1)->IgnoreParenImpCasts(); - return std::make_pair(Field, Init); + return AssignmentPair{Field, Init}; } return {}; } @@ -216,12 +221,12 @@ void PreferMemberInitializerCheck::check( return; } - std::optional<std::pair<const FieldDecl *, const Expr *>> - AssignmentToMember = isAssignmentToMemberOf(Class, S, Ctor); + std::optional<AssignmentPair> AssignmentToMember = + isAssignmentToMemberOf(Class, S, Ctor); if (!AssignmentToMember) continue; - const FieldDecl *Field = AssignmentToMember.value().first; - const Expr *InitValue = AssignmentToMember.value().second; + const FieldDecl *Field = AssignmentToMember->Field; + const Expr *InitValue = AssignmentToMember->Init; updateAssignmentLevel(Field, InitValue, Ctor, AssignedFields); if (!canAdvanceAssignment(AssignedFields[Field])) continue; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits