Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[clang-tidy] Remove enforcement of rule C.48 from cppcoreguidelines-p… #80193

Closed
wants to merge 128 commits into from

Conversation

carlosgalvezp
Copy link
Contributor

…refer-member-init

This functionality already exists in
cppcoreguidelines-use-default-member-init. It was deprecated from this check in clang-tidy 17.

This allows us to fully decouple this check from the corresponding modernize check, which has an unhealthy dependency.

Fixes #62169

…refer-member-init

This functionality already exists in
cppcoreguidelines-use-default-member-init. It was deprecated from
this check in clang-tidy 17.

This allows us to fully decouple this check from the corresponding
modernize check, which has an unhealthy dependency.

Fixes llvm#62169
@llvmbot
Copy link
Collaborator

llvmbot commented Jan 31, 2024

@llvm/pr-subscribers-clang-tools-extra

Author: Carlos Galvez (carlosgalvezp)

Changes

…refer-member-init

This functionality already exists in
cppcoreguidelines-use-default-member-init. It was deprecated from this check in clang-tidy 17.

This allows us to fully decouple this check from the corresponding modernize check, which has an unhealthy dependency.

Fixes #62169


Patch is 20.59 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/80193.diff

6 Files Affected:

  • (modified) clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp (+86-159)
  • (modified) clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.h (-4)
  • (modified) clang-tools-extra/docs/ReleaseNotes.rst (+8)
  • (modified) clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/prefer-member-initializer.rst (+6-48)
  • (removed) clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init-assignment.cpp (-33)
  • (removed) clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init.cpp (-33)
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp
index f79a67819bb85..de96c3dc4efef 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp
@@ -34,27 +34,6 @@ static bool isNoReturnCallStatement(const Stmt *S) {
   return Func->isNoReturn();
 }
 
-static bool isLiteral(const Expr *E) {
-  return isa<StringLiteral, CharacterLiteral, IntegerLiteral, FloatingLiteral,
-             CXXBoolLiteralExpr, CXXNullPtrLiteralExpr>(E);
-}
-
-static bool isUnaryExprOfLiteral(const Expr *E) {
-  if (const auto *UnOp = dyn_cast<UnaryOperator>(E))
-    return isLiteral(UnOp->getSubExpr());
-  return false;
-}
-
-static bool shouldBeDefaultMemberInitializer(const Expr *Value) {
-  if (isLiteral(Value) || isUnaryExprOfLiteral(Value))
-    return true;
-
-  if (const auto *DRE = dyn_cast<DeclRefExpr>(Value))
-    return isa<EnumConstantDecl>(DRE->getDecl());
-
-  return false;
-}
-
 namespace {
 
 AST_MATCHER_P(FieldDecl, indexNotLessThan, unsigned, Index) {
@@ -166,19 +145,7 @@ isAssignmentToMemberOf(const CXXRecordDecl *Rec, const Stmt *S,
 
 PreferMemberInitializerCheck::PreferMemberInitializerCheck(
     StringRef Name, ClangTidyContext *Context)
-    : ClangTidyCheck(Name, Context),
-      IsUseDefaultMemberInitEnabled(
-          Context->isCheckEnabled("modernize-use-default-member-init")),
-      UseAssignment(
-          Options.get("UseAssignment",
-                      OptionsView("modernize-use-default-member-init",
-                                  Context->getOptions().CheckOptions, Context)
-                          .get("UseAssignment", false))) {}
-
-void PreferMemberInitializerCheck::storeOptions(
-    ClangTidyOptions::OptionMap &Opts) {
-  Options.store(Opts, "UseAssignment", UseAssignment);
-}
+    : ClangTidyCheck(Name, Context) {}
 
 void PreferMemberInitializerCheck::registerMatchers(MatchFinder *Finder) {
   Finder->addMatcher(cxxConstructorDecl(hasBody(compoundStmt()),
@@ -230,139 +197,99 @@ void PreferMemberInitializerCheck::check(
     updateAssignmentLevel(Field, InitValue, Ctor, AssignedFields);
     if (!canAdvanceAssignment(AssignedFields[Field]))
       continue;
-    const bool IsInDefaultMemberInitializer =
-        IsUseDefaultMemberInitEnabled && getLangOpts().CPlusPlus11 &&
-        Ctor->isDefaultConstructor() &&
-        (getLangOpts().CPlusPlus20 || !Field->isBitField()) &&
-        !Field->hasInClassInitializer() &&
-        (!isa<RecordDecl>(Class->getDeclContext()) ||
-         !cast<RecordDecl>(Class->getDeclContext())->isUnion()) &&
-        shouldBeDefaultMemberInitializer(InitValue);
-    if (IsInDefaultMemberInitializer) {
-      bool InvalidFix = false;
-      SourceLocation FieldEnd =
-          Lexer::getLocForEndOfToken(Field->getSourceRange().getEnd(), 0,
-                                     *Result.SourceManager, getLangOpts());
-      InvalidFix |= FieldEnd.isInvalid() || FieldEnd.isMacroID();
-      SourceLocation SemiColonEnd;
-      if (auto NextToken = Lexer::findNextToken(
-              S->getEndLoc(), *Result.SourceManager, getLangOpts()))
-        SemiColonEnd = NextToken->getEndLoc();
-      else
-        InvalidFix = true;
-      auto Diag =
-          diag(S->getBeginLoc(), "%0 should be initialized in an in-class"
-                                 " default member initializer")
-          << Field;
-      if (InvalidFix)
-        continue;
-      CharSourceRange StmtRange =
-          CharSourceRange::getCharRange(S->getBeginLoc(), SemiColonEnd);
 
-      SmallString<128> Insertion(
-          {UseAssignment ? " = " : "{",
-           Lexer::getSourceText(Result.SourceManager->getExpansionRange(
-                                    InitValue->getSourceRange()),
-                                *Result.SourceManager, getLangOpts()),
-           UseAssignment ? "" : "}"});
-
-      Diag << FixItHint::CreateInsertion(FieldEnd, Insertion)
-           << FixItHint::CreateRemoval(StmtRange);
-
-    } else {
-      StringRef InsertPrefix = "";
-      bool HasInitAlready = false;
-      SourceLocation InsertPos;
-      SourceRange ReplaceRange;
-      bool AddComma = false;
-      bool InvalidFix = false;
-      unsigned Index = Field->getFieldIndex();
-      const CXXCtorInitializer *LastInListInit = nullptr;
-      for (const CXXCtorInitializer *Init : Ctor->inits()) {
-        if (!Init->isWritten() || Init->isInClassMemberInitializer())
-          continue;
-        if (Init->getMember() == Field) {
-          HasInitAlready = true;
-          if (isa<ImplicitValueInitExpr>(Init->getInit()))
-            InsertPos = Init->getRParenLoc();
-          else {
-            ReplaceRange = Init->getInit()->getSourceRange();
-          }
-          break;
-        }
-        if (Init->isMemberInitializer() &&
-            Index < Init->getMember()->getFieldIndex()) {
-          InsertPos = Init->getSourceLocation();
-          // There are initializers after the one we are inserting, so add a
-          // comma after this insertion in order to not break anything.
-          AddComma = true;
-          break;
+    StringRef InsertPrefix = "";
+    bool HasInitAlready = false;
+    SourceLocation InsertPos;
+    SourceRange ReplaceRange;
+    bool AddComma = false;
+    bool InvalidFix = false;
+    unsigned Index = Field->getFieldIndex();
+    const CXXCtorInitializer *LastInListInit = nullptr;
+    for (const CXXCtorInitializer *Init : Ctor->inits()) {
+      if (!Init->isWritten() || Init->isInClassMemberInitializer())
+        continue;
+      if (Init->getMember() == Field) {
+        HasInitAlready = true;
+        if (isa<ImplicitValueInitExpr>(Init->getInit()))
+          InsertPos = Init->getRParenLoc();
+        else {
+          ReplaceRange = Init->getInit()->getSourceRange();
         }
-        LastInListInit = Init;
+        break;
       }
-      if (HasInitAlready) {
-        if (InsertPos.isValid())
-          InvalidFix |= InsertPos.isMacroID();
-        else
-          InvalidFix |= ReplaceRange.getBegin().isMacroID() ||
-                        ReplaceRange.getEnd().isMacroID();
-      } else {
-        if (InsertPos.isInvalid()) {
-          if (LastInListInit) {
-            InsertPos = Lexer::getLocForEndOfToken(
-                LastInListInit->getRParenLoc(), 0, *Result.SourceManager,
-                getLangOpts());
-            // Inserting after the last constructor initializer, so we need a
-            // comma.
-            InsertPrefix = ", ";
-          } else {
-            InsertPos = Lexer::getLocForEndOfToken(
-                Ctor->getTypeSourceInfo()
-                    ->getTypeLoc()
-                    .getAs<clang::FunctionTypeLoc>()
-                    .getLocalRangeEnd(),
-                0, *Result.SourceManager, getLangOpts());
-
-            // If this is first time in the loop, there are no initializers so
-            // `:` declares member initialization list. If this is a
-            // subsequent pass then we have already inserted a `:` so continue
-            // with a comma.
-            InsertPrefix = FirstToCtorInits ? " : " : ", ";
-          }
-        }
+      if (Init->isMemberInitializer() &&
+          Index < Init->getMember()->getFieldIndex()) {
+        InsertPos = Init->getSourceLocation();
+        // There are initializers after the one we are inserting, so add a
+        // comma after this insertion in order to not break anything.
+        AddComma = true;
+        break;
+      }
+      LastInListInit = Init;
+    }
+    if (HasInitAlready) {
+      if (InsertPos.isValid())
         InvalidFix |= InsertPos.isMacroID();
+      else
+        InvalidFix |= ReplaceRange.getBegin().isMacroID() ||
+                      ReplaceRange.getEnd().isMacroID();
+    } else {
+      if (InsertPos.isInvalid()) {
+        if (LastInListInit) {
+          InsertPos =
+              Lexer::getLocForEndOfToken(LastInListInit->getRParenLoc(), 0,
+                                         *Result.SourceManager, getLangOpts());
+          // Inserting after the last constructor initializer, so we need a
+          // comma.
+          InsertPrefix = ", ";
+        } else {
+          InsertPos = Lexer::getLocForEndOfToken(
+              Ctor->getTypeSourceInfo()
+                  ->getTypeLoc()
+                  .getAs<clang::FunctionTypeLoc>()
+                  .getLocalRangeEnd(),
+              0, *Result.SourceManager, getLangOpts());
+
+          // If this is first time in the loop, there are no initializers so
+          // `:` declares member initialization list. If this is a
+          // subsequent pass then we have already inserted a `:` so continue
+          // with a comma.
+          InsertPrefix = FirstToCtorInits ? " : " : ", ";
+        }
       }
+      InvalidFix |= InsertPos.isMacroID();
+    }
 
-      SourceLocation SemiColonEnd;
-      if (auto NextToken = Lexer::findNextToken(
-              S->getEndLoc(), *Result.SourceManager, getLangOpts()))
-        SemiColonEnd = NextToken->getEndLoc();
+    SourceLocation SemiColonEnd;
+    if (auto NextToken = Lexer::findNextToken(
+            S->getEndLoc(), *Result.SourceManager, getLangOpts()))
+      SemiColonEnd = NextToken->getEndLoc();
+    else
+      InvalidFix = true;
+
+    auto Diag = diag(S->getBeginLoc(), "%0 should be initialized in a member"
+                                       " initializer of the constructor")
+                << Field;
+    if (InvalidFix)
+      continue;
+    StringRef NewInit = Lexer::getSourceText(
+        Result.SourceManager->getExpansionRange(InitValue->getSourceRange()),
+        *Result.SourceManager, getLangOpts());
+    if (HasInitAlready) {
+      if (InsertPos.isValid())
+        Diag << FixItHint::CreateInsertion(InsertPos, NewInit);
       else
-        InvalidFix = true;
-
-      auto Diag = diag(S->getBeginLoc(), "%0 should be initialized in a member"
-                                         " initializer of the constructor")
-                  << Field;
-      if (InvalidFix)
-        continue;
-      StringRef NewInit = Lexer::getSourceText(
-          Result.SourceManager->getExpansionRange(InitValue->getSourceRange()),
-          *Result.SourceManager, getLangOpts());
-      if (HasInitAlready) {
-        if (InsertPos.isValid())
-          Diag << FixItHint::CreateInsertion(InsertPos, NewInit);
-        else
-          Diag << FixItHint::CreateReplacement(ReplaceRange, NewInit);
-      } else {
-        SmallString<128> Insertion({InsertPrefix, Field->getName(), "(",
-                                    NewInit, AddComma ? "), " : ")"});
-        Diag << FixItHint::CreateInsertion(InsertPos, Insertion,
-                                           FirstToCtorInits);
-        FirstToCtorInits = areDiagsSelfContained();
-      }
-      Diag << FixItHint::CreateRemoval(
-          CharSourceRange::getCharRange(S->getBeginLoc(), SemiColonEnd));
+        Diag << FixItHint::CreateReplacement(ReplaceRange, NewInit);
+    } else {
+      SmallString<128> Insertion({InsertPrefix, Field->getName(), "(", NewInit,
+                                  AddComma ? "), " : ")"});
+      Diag << FixItHint::CreateInsertion(InsertPos, Insertion,
+                                         FirstToCtorInits);
+      FirstToCtorInits = areDiagsSelfContained();
     }
+    Diag << FixItHint::CreateRemoval(
+        CharSourceRange::getCharRange(S->getBeginLoc(), SemiColonEnd));
   }
 }
 
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.h b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.h
index 7b39da1fd3c54..b3f8284b435af 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.h
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.h
@@ -24,12 +24,8 @@ class PreferMemberInitializerCheck : public ClangTidyCheck {
   bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
     return LangOpts.CPlusPlus;
   }
-  void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
   void registerMatchers(ast_matchers::MatchFinder *Finder) override;
   void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
-
-  const bool IsUseDefaultMemberInitEnabled;
-  const bool UseAssignment;
 };
 
 } // namespace clang::tidy::cppcoreguidelines
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index ad99fe9d08f9c..2ebca968af9d4 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -106,6 +106,14 @@ New check aliases
 Changes in existing checks
 ^^^^^^^^^^^^^^^^^^^^^^^^^^
 
+- Removed enforcement of rule `C.48
+  <https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c48-prefer-in-class-initializers-to-member-initializers-in-constructors-for-constant-initializers>`_
+  from :doc:`cppcoreguidelines-prefer-member-initializer
+  <clang-tidy/checks/cppcoreguidelines/prefer-member-initializer>`.
+  This functionality was deprecated since :program:`clang-tidy` 17, where a new
+  check was added to cover only this rule: :doc:`cppcoreguidelines-use-default-member-init
+  <clang-tidy/checks/cppcoreguidelines/use-default-member-init>`.
+
 Removed checks
 ^^^^^^^^^^^^^^
 
diff --git a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/prefer-member-initializer.rst b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/prefer-member-initializer.rst
index 81aa662043bc3..6d1bdb93cc7b0 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/prefer-member-initializer.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/prefer-member-initializer.rst
@@ -13,27 +13,11 @@ This check implements `C.49
 <https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c49-prefer-initialization-to-assignment-in-constructors>`_
 from the C++ Core Guidelines.
 
-If the language version is `C++ 11` or above, the constructor is the default
-constructor of the class, the field is not a bitfield (only in case of earlier
-language version than `C++ 20`), furthermore the assigned value is a literal,
-negated literal or ``enum`` constant then the preferred place of the
-initialization is at the class member declaration.
-
-This latter rule is `C.48
+Please note, that this check does not enforce rule `C.48
 <https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c48-prefer-in-class-initializers-to-member-initializers-in-constructors-for-constant-initializers>`_
-from the C++ Core Guidelines.
-
-Please note, that this check does not enforce this latter rule for
-initializations already implemented as member initializers. For that purpose
+from the C++ Core Guidelines. For that purpose
 see check :doc:`modernize-use-default-member-init <../modernize/use-default-member-init>`.
 
-.. note::
-
-  Enforcement of rule C.48 in this check is deprecated, to be removed in
-  :program:`clang-tidy` version 19 (only C.49 will be enforced by this check then).
-  Please use :doc:`cppcoreguidelines-use-default-member-init <../cppcoreguidelines/use-default-member-init>`
-  to enforce rule C.48.
-
 Example 1
 ---------
 
@@ -51,16 +35,16 @@ Example 1
     }
   };
 
-Here ``n`` can be initialized using a default member initializer, unlike
+Here ``n`` can be initialized in the constructor initializer list, unlike
 ``m``, as ``m``'s initialization follows a control statement (``if``):
 
 .. code-block:: c++
 
   class C {
-    int n{1};
+    int n;
     int m;
   public:
-    C() {
+    C(): n(1) {
       if (dice())
         return;
       m = 1;
@@ -84,7 +68,7 @@ Example 2
     }
   };
 
-Here ``n`` can be initialized in the constructor initialization list, unlike
+Here ``n`` can be initialized in the constructor initializer list, unlike
 ``m``, as ``m``'s initialization follows a control statement (``if``):
 
 .. code-block:: c++
@@ -94,29 +78,3 @@ Here ``n`` can be initialized in the constructor initialization list, unlike
       return;
     m = mm;
   }
-
-.. option:: UseAssignment
-
-   Note: this option is deprecated, to be removed in :program:`clang-tidy`
-   version 19. Please use the `UseAssignment` option from
-   :doc:`cppcoreguidelines-use-default-member-init <../cppcoreguidelines/use-default-member-init>`
-   instead.
-
-   If this option is set to `true` (by default `UseAssignment` from
-   :doc:`modernize-use-default-member-init
-   <../modernize/use-default-member-init>` will be used),
-   the check will initialize members with an assignment.
-   In this case the fix of the first example looks like this:
-
-.. code-block:: c++
-
-  class C {
-    int n = 1;
-    int m;
-  public:
-    C() {
-      if (dice())
-        return;
-      m = 1;
-    }
-  };
diff --git a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init-assignment.cpp b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init-assignment.cpp
deleted file mode 100644
index 70ef19181f7ad..0000000000000
--- a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init-assignment.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// RUN: %check_clang_tidy %s cppcoreguidelines-prefer-member-initializer,modernize-use-default-member-init %t -- \
-// RUN: -config="{CheckOptions: {modernize-use-default-member-init.UseAssignment: true}}"
-// RUN: %check_clang_tidy %s cppcoreguidelines-prefer-member-initializer,modernize-use-default-member-init %t -- \
-// RUN: -config="{CheckOptions: {modernize-use-default-member-init.UseAssignment: false, cppcoreguidelines-prefer-member-initializer.UseAssignment: true}}"
-
-class Simple1 {
-  int n;
-  // CHECK-FIXES: int n = 0;
-  double x;
-  // CHECK-FIXES: double x = 0.0;
-
-public:
-  Simple1() {
-    n = 0;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'n' should be initialized in an in-class default member initializer [cppcoreguidelines-prefer-member-initializer]
-    // CHECK-FIXES: {{^\ *$}}
-    x = 0.0;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'x' should be initialized in an in-class default member initializer [cppcoreguidelines-prefer-member-initializer]
-    // CHECK-FIXES: {{^\ *$}}
-  }
-
-  Simple1(int nn, double xx) {
-    // CHECK-FIXES: Simple1(int nn, double xx) : n(nn), x(xx) {
-    n = nn;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'n' should be initialized in a member initializer of the constructor [cppcoreguidelines-prefer-member-initializer]
-    // CHECK-FIXES: {{^\ *$}}
-    x = xx;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'x' should be initialized in a member initializer of the constructor [cppcoreguidelines-prefer-member-initializer]
-    // CHECK-FIXES: {{^\ *$}}
-  }
-
-  ~Simple1() = default;
-};
diff --git a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init.cpp b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init.cpp
deleted file mode 100644
index 281a817a42b30..0000000000000
--- a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// RUN: %check_clang_tidy %s cppcoreguidelines-prefer-member-initializer,modernize-use-default-member-init %t
-// RUN: %check_clang_tidy %s cppcoreguidelines-prefer-member-initializer,modernize-use-default-member-init %t -- \
-// RUN: -config="{CheckOptions: {modernize-use-default-member-init.UseAssignment: true, \
-// RUN:                          cppcoreguidelines-prefer-member-initializer.UseAssignment: false}}"
-
-class Simple1 {
-  int n;
-  // CHECK-FIXES: int n{0};
-  double x;
-  // CHECK-FIXES: double x{0.0};
-
-public:
-  Simple1() {
-    n = 0;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'n' should be initialized in an in-class default member initializer [cppcoreguidelines-prefer-member-initializer]
-    // CHECK-FIXES: {{^\ *$}}
-    x = 0.0;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'x' should be initialized in an in-class default member initializer [cppcoreguidelines-prefer-m...
[truncated]

@llvmbot
Copy link
Collaborator

llvmbot commented Jan 31, 2024

@llvm/pr-subscribers-clang-tidy

Author: Carlos Galvez (carlosgalvezp)

Changes

…refer-member-init

This functionality already exists in
cppcoreguidelines-use-default-member-init. It was deprecated from this check in clang-tidy 17.

This allows us to fully decouple this check from the corresponding modernize check, which has an unhealthy dependency.

Fixes #62169


Patch is 20.59 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/80193.diff

6 Files Affected:

  • (modified) clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp (+86-159)
  • (modified) clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.h (-4)
  • (modified) clang-tools-extra/docs/ReleaseNotes.rst (+8)
  • (modified) clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/prefer-member-initializer.rst (+6-48)
  • (removed) clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init-assignment.cpp (-33)
  • (removed) clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init.cpp (-33)
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp
index f79a67819bb85..de96c3dc4efef 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp
@@ -34,27 +34,6 @@ static bool isNoReturnCallStatement(const Stmt *S) {
   return Func->isNoReturn();
 }
 
-static bool isLiteral(const Expr *E) {
-  return isa<StringLiteral, CharacterLiteral, IntegerLiteral, FloatingLiteral,
-             CXXBoolLiteralExpr, CXXNullPtrLiteralExpr>(E);
-}
-
-static bool isUnaryExprOfLiteral(const Expr *E) {
-  if (const auto *UnOp = dyn_cast<UnaryOperator>(E))
-    return isLiteral(UnOp->getSubExpr());
-  return false;
-}
-
-static bool shouldBeDefaultMemberInitializer(const Expr *Value) {
-  if (isLiteral(Value) || isUnaryExprOfLiteral(Value))
-    return true;
-
-  if (const auto *DRE = dyn_cast<DeclRefExpr>(Value))
-    return isa<EnumConstantDecl>(DRE->getDecl());
-
-  return false;
-}
-
 namespace {
 
 AST_MATCHER_P(FieldDecl, indexNotLessThan, unsigned, Index) {
@@ -166,19 +145,7 @@ isAssignmentToMemberOf(const CXXRecordDecl *Rec, const Stmt *S,
 
 PreferMemberInitializerCheck::PreferMemberInitializerCheck(
     StringRef Name, ClangTidyContext *Context)
-    : ClangTidyCheck(Name, Context),
-      IsUseDefaultMemberInitEnabled(
-          Context->isCheckEnabled("modernize-use-default-member-init")),
-      UseAssignment(
-          Options.get("UseAssignment",
-                      OptionsView("modernize-use-default-member-init",
-                                  Context->getOptions().CheckOptions, Context)
-                          .get("UseAssignment", false))) {}
-
-void PreferMemberInitializerCheck::storeOptions(
-    ClangTidyOptions::OptionMap &Opts) {
-  Options.store(Opts, "UseAssignment", UseAssignment);
-}
+    : ClangTidyCheck(Name, Context) {}
 
 void PreferMemberInitializerCheck::registerMatchers(MatchFinder *Finder) {
   Finder->addMatcher(cxxConstructorDecl(hasBody(compoundStmt()),
@@ -230,139 +197,99 @@ void PreferMemberInitializerCheck::check(
     updateAssignmentLevel(Field, InitValue, Ctor, AssignedFields);
     if (!canAdvanceAssignment(AssignedFields[Field]))
       continue;
-    const bool IsInDefaultMemberInitializer =
-        IsUseDefaultMemberInitEnabled && getLangOpts().CPlusPlus11 &&
-        Ctor->isDefaultConstructor() &&
-        (getLangOpts().CPlusPlus20 || !Field->isBitField()) &&
-        !Field->hasInClassInitializer() &&
-        (!isa<RecordDecl>(Class->getDeclContext()) ||
-         !cast<RecordDecl>(Class->getDeclContext())->isUnion()) &&
-        shouldBeDefaultMemberInitializer(InitValue);
-    if (IsInDefaultMemberInitializer) {
-      bool InvalidFix = false;
-      SourceLocation FieldEnd =
-          Lexer::getLocForEndOfToken(Field->getSourceRange().getEnd(), 0,
-                                     *Result.SourceManager, getLangOpts());
-      InvalidFix |= FieldEnd.isInvalid() || FieldEnd.isMacroID();
-      SourceLocation SemiColonEnd;
-      if (auto NextToken = Lexer::findNextToken(
-              S->getEndLoc(), *Result.SourceManager, getLangOpts()))
-        SemiColonEnd = NextToken->getEndLoc();
-      else
-        InvalidFix = true;
-      auto Diag =
-          diag(S->getBeginLoc(), "%0 should be initialized in an in-class"
-                                 " default member initializer")
-          << Field;
-      if (InvalidFix)
-        continue;
-      CharSourceRange StmtRange =
-          CharSourceRange::getCharRange(S->getBeginLoc(), SemiColonEnd);
 
-      SmallString<128> Insertion(
-          {UseAssignment ? " = " : "{",
-           Lexer::getSourceText(Result.SourceManager->getExpansionRange(
-                                    InitValue->getSourceRange()),
-                                *Result.SourceManager, getLangOpts()),
-           UseAssignment ? "" : "}"});
-
-      Diag << FixItHint::CreateInsertion(FieldEnd, Insertion)
-           << FixItHint::CreateRemoval(StmtRange);
-
-    } else {
-      StringRef InsertPrefix = "";
-      bool HasInitAlready = false;
-      SourceLocation InsertPos;
-      SourceRange ReplaceRange;
-      bool AddComma = false;
-      bool InvalidFix = false;
-      unsigned Index = Field->getFieldIndex();
-      const CXXCtorInitializer *LastInListInit = nullptr;
-      for (const CXXCtorInitializer *Init : Ctor->inits()) {
-        if (!Init->isWritten() || Init->isInClassMemberInitializer())
-          continue;
-        if (Init->getMember() == Field) {
-          HasInitAlready = true;
-          if (isa<ImplicitValueInitExpr>(Init->getInit()))
-            InsertPos = Init->getRParenLoc();
-          else {
-            ReplaceRange = Init->getInit()->getSourceRange();
-          }
-          break;
-        }
-        if (Init->isMemberInitializer() &&
-            Index < Init->getMember()->getFieldIndex()) {
-          InsertPos = Init->getSourceLocation();
-          // There are initializers after the one we are inserting, so add a
-          // comma after this insertion in order to not break anything.
-          AddComma = true;
-          break;
+    StringRef InsertPrefix = "";
+    bool HasInitAlready = false;
+    SourceLocation InsertPos;
+    SourceRange ReplaceRange;
+    bool AddComma = false;
+    bool InvalidFix = false;
+    unsigned Index = Field->getFieldIndex();
+    const CXXCtorInitializer *LastInListInit = nullptr;
+    for (const CXXCtorInitializer *Init : Ctor->inits()) {
+      if (!Init->isWritten() || Init->isInClassMemberInitializer())
+        continue;
+      if (Init->getMember() == Field) {
+        HasInitAlready = true;
+        if (isa<ImplicitValueInitExpr>(Init->getInit()))
+          InsertPos = Init->getRParenLoc();
+        else {
+          ReplaceRange = Init->getInit()->getSourceRange();
         }
-        LastInListInit = Init;
+        break;
       }
-      if (HasInitAlready) {
-        if (InsertPos.isValid())
-          InvalidFix |= InsertPos.isMacroID();
-        else
-          InvalidFix |= ReplaceRange.getBegin().isMacroID() ||
-                        ReplaceRange.getEnd().isMacroID();
-      } else {
-        if (InsertPos.isInvalid()) {
-          if (LastInListInit) {
-            InsertPos = Lexer::getLocForEndOfToken(
-                LastInListInit->getRParenLoc(), 0, *Result.SourceManager,
-                getLangOpts());
-            // Inserting after the last constructor initializer, so we need a
-            // comma.
-            InsertPrefix = ", ";
-          } else {
-            InsertPos = Lexer::getLocForEndOfToken(
-                Ctor->getTypeSourceInfo()
-                    ->getTypeLoc()
-                    .getAs<clang::FunctionTypeLoc>()
-                    .getLocalRangeEnd(),
-                0, *Result.SourceManager, getLangOpts());
-
-            // If this is first time in the loop, there are no initializers so
-            // `:` declares member initialization list. If this is a
-            // subsequent pass then we have already inserted a `:` so continue
-            // with a comma.
-            InsertPrefix = FirstToCtorInits ? " : " : ", ";
-          }
-        }
+      if (Init->isMemberInitializer() &&
+          Index < Init->getMember()->getFieldIndex()) {
+        InsertPos = Init->getSourceLocation();
+        // There are initializers after the one we are inserting, so add a
+        // comma after this insertion in order to not break anything.
+        AddComma = true;
+        break;
+      }
+      LastInListInit = Init;
+    }
+    if (HasInitAlready) {
+      if (InsertPos.isValid())
         InvalidFix |= InsertPos.isMacroID();
+      else
+        InvalidFix |= ReplaceRange.getBegin().isMacroID() ||
+                      ReplaceRange.getEnd().isMacroID();
+    } else {
+      if (InsertPos.isInvalid()) {
+        if (LastInListInit) {
+          InsertPos =
+              Lexer::getLocForEndOfToken(LastInListInit->getRParenLoc(), 0,
+                                         *Result.SourceManager, getLangOpts());
+          // Inserting after the last constructor initializer, so we need a
+          // comma.
+          InsertPrefix = ", ";
+        } else {
+          InsertPos = Lexer::getLocForEndOfToken(
+              Ctor->getTypeSourceInfo()
+                  ->getTypeLoc()
+                  .getAs<clang::FunctionTypeLoc>()
+                  .getLocalRangeEnd(),
+              0, *Result.SourceManager, getLangOpts());
+
+          // If this is first time in the loop, there are no initializers so
+          // `:` declares member initialization list. If this is a
+          // subsequent pass then we have already inserted a `:` so continue
+          // with a comma.
+          InsertPrefix = FirstToCtorInits ? " : " : ", ";
+        }
       }
+      InvalidFix |= InsertPos.isMacroID();
+    }
 
-      SourceLocation SemiColonEnd;
-      if (auto NextToken = Lexer::findNextToken(
-              S->getEndLoc(), *Result.SourceManager, getLangOpts()))
-        SemiColonEnd = NextToken->getEndLoc();
+    SourceLocation SemiColonEnd;
+    if (auto NextToken = Lexer::findNextToken(
+            S->getEndLoc(), *Result.SourceManager, getLangOpts()))
+      SemiColonEnd = NextToken->getEndLoc();
+    else
+      InvalidFix = true;
+
+    auto Diag = diag(S->getBeginLoc(), "%0 should be initialized in a member"
+                                       " initializer of the constructor")
+                << Field;
+    if (InvalidFix)
+      continue;
+    StringRef NewInit = Lexer::getSourceText(
+        Result.SourceManager->getExpansionRange(InitValue->getSourceRange()),
+        *Result.SourceManager, getLangOpts());
+    if (HasInitAlready) {
+      if (InsertPos.isValid())
+        Diag << FixItHint::CreateInsertion(InsertPos, NewInit);
       else
-        InvalidFix = true;
-
-      auto Diag = diag(S->getBeginLoc(), "%0 should be initialized in a member"
-                                         " initializer of the constructor")
-                  << Field;
-      if (InvalidFix)
-        continue;
-      StringRef NewInit = Lexer::getSourceText(
-          Result.SourceManager->getExpansionRange(InitValue->getSourceRange()),
-          *Result.SourceManager, getLangOpts());
-      if (HasInitAlready) {
-        if (InsertPos.isValid())
-          Diag << FixItHint::CreateInsertion(InsertPos, NewInit);
-        else
-          Diag << FixItHint::CreateReplacement(ReplaceRange, NewInit);
-      } else {
-        SmallString<128> Insertion({InsertPrefix, Field->getName(), "(",
-                                    NewInit, AddComma ? "), " : ")"});
-        Diag << FixItHint::CreateInsertion(InsertPos, Insertion,
-                                           FirstToCtorInits);
-        FirstToCtorInits = areDiagsSelfContained();
-      }
-      Diag << FixItHint::CreateRemoval(
-          CharSourceRange::getCharRange(S->getBeginLoc(), SemiColonEnd));
+        Diag << FixItHint::CreateReplacement(ReplaceRange, NewInit);
+    } else {
+      SmallString<128> Insertion({InsertPrefix, Field->getName(), "(", NewInit,
+                                  AddComma ? "), " : ")"});
+      Diag << FixItHint::CreateInsertion(InsertPos, Insertion,
+                                         FirstToCtorInits);
+      FirstToCtorInits = areDiagsSelfContained();
     }
+    Diag << FixItHint::CreateRemoval(
+        CharSourceRange::getCharRange(S->getBeginLoc(), SemiColonEnd));
   }
 }
 
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.h b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.h
index 7b39da1fd3c54..b3f8284b435af 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.h
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.h
@@ -24,12 +24,8 @@ class PreferMemberInitializerCheck : public ClangTidyCheck {
   bool isLanguageVersionSupported(const LangOptions &LangOpts) const override {
     return LangOpts.CPlusPlus;
   }
-  void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
   void registerMatchers(ast_matchers::MatchFinder *Finder) override;
   void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
-
-  const bool IsUseDefaultMemberInitEnabled;
-  const bool UseAssignment;
 };
 
 } // namespace clang::tidy::cppcoreguidelines
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index ad99fe9d08f9c..2ebca968af9d4 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -106,6 +106,14 @@ New check aliases
 Changes in existing checks
 ^^^^^^^^^^^^^^^^^^^^^^^^^^
 
+- Removed enforcement of rule `C.48
+  <https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c48-prefer-in-class-initializers-to-member-initializers-in-constructors-for-constant-initializers>`_
+  from :doc:`cppcoreguidelines-prefer-member-initializer
+  <clang-tidy/checks/cppcoreguidelines/prefer-member-initializer>`.
+  This functionality was deprecated since :program:`clang-tidy` 17, where a new
+  check was added to cover only this rule: :doc:`cppcoreguidelines-use-default-member-init
+  <clang-tidy/checks/cppcoreguidelines/use-default-member-init>`.
+
 Removed checks
 ^^^^^^^^^^^^^^
 
diff --git a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/prefer-member-initializer.rst b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/prefer-member-initializer.rst
index 81aa662043bc3..6d1bdb93cc7b0 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/prefer-member-initializer.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines/prefer-member-initializer.rst
@@ -13,27 +13,11 @@ This check implements `C.49
 <https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c49-prefer-initialization-to-assignment-in-constructors>`_
 from the C++ Core Guidelines.
 
-If the language version is `C++ 11` or above, the constructor is the default
-constructor of the class, the field is not a bitfield (only in case of earlier
-language version than `C++ 20`), furthermore the assigned value is a literal,
-negated literal or ``enum`` constant then the preferred place of the
-initialization is at the class member declaration.
-
-This latter rule is `C.48
+Please note, that this check does not enforce rule `C.48
 <https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#c48-prefer-in-class-initializers-to-member-initializers-in-constructors-for-constant-initializers>`_
-from the C++ Core Guidelines.
-
-Please note, that this check does not enforce this latter rule for
-initializations already implemented as member initializers. For that purpose
+from the C++ Core Guidelines. For that purpose
 see check :doc:`modernize-use-default-member-init <../modernize/use-default-member-init>`.
 
-.. note::
-
-  Enforcement of rule C.48 in this check is deprecated, to be removed in
-  :program:`clang-tidy` version 19 (only C.49 will be enforced by this check then).
-  Please use :doc:`cppcoreguidelines-use-default-member-init <../cppcoreguidelines/use-default-member-init>`
-  to enforce rule C.48.
-
 Example 1
 ---------
 
@@ -51,16 +35,16 @@ Example 1
     }
   };
 
-Here ``n`` can be initialized using a default member initializer, unlike
+Here ``n`` can be initialized in the constructor initializer list, unlike
 ``m``, as ``m``'s initialization follows a control statement (``if``):
 
 .. code-block:: c++
 
   class C {
-    int n{1};
+    int n;
     int m;
   public:
-    C() {
+    C(): n(1) {
       if (dice())
         return;
       m = 1;
@@ -84,7 +68,7 @@ Example 2
     }
   };
 
-Here ``n`` can be initialized in the constructor initialization list, unlike
+Here ``n`` can be initialized in the constructor initializer list, unlike
 ``m``, as ``m``'s initialization follows a control statement (``if``):
 
 .. code-block:: c++
@@ -94,29 +78,3 @@ Here ``n`` can be initialized in the constructor initialization list, unlike
       return;
     m = mm;
   }
-
-.. option:: UseAssignment
-
-   Note: this option is deprecated, to be removed in :program:`clang-tidy`
-   version 19. Please use the `UseAssignment` option from
-   :doc:`cppcoreguidelines-use-default-member-init <../cppcoreguidelines/use-default-member-init>`
-   instead.
-
-   If this option is set to `true` (by default `UseAssignment` from
-   :doc:`modernize-use-default-member-init
-   <../modernize/use-default-member-init>` will be used),
-   the check will initialize members with an assignment.
-   In this case the fix of the first example looks like this:
-
-.. code-block:: c++
-
-  class C {
-    int n = 1;
-    int m;
-  public:
-    C() {
-      if (dice())
-        return;
-      m = 1;
-    }
-  };
diff --git a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init-assignment.cpp b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init-assignment.cpp
deleted file mode 100644
index 70ef19181f7ad..0000000000000
--- a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init-assignment.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// RUN: %check_clang_tidy %s cppcoreguidelines-prefer-member-initializer,modernize-use-default-member-init %t -- \
-// RUN: -config="{CheckOptions: {modernize-use-default-member-init.UseAssignment: true}}"
-// RUN: %check_clang_tidy %s cppcoreguidelines-prefer-member-initializer,modernize-use-default-member-init %t -- \
-// RUN: -config="{CheckOptions: {modernize-use-default-member-init.UseAssignment: false, cppcoreguidelines-prefer-member-initializer.UseAssignment: true}}"
-
-class Simple1 {
-  int n;
-  // CHECK-FIXES: int n = 0;
-  double x;
-  // CHECK-FIXES: double x = 0.0;
-
-public:
-  Simple1() {
-    n = 0;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'n' should be initialized in an in-class default member initializer [cppcoreguidelines-prefer-member-initializer]
-    // CHECK-FIXES: {{^\ *$}}
-    x = 0.0;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'x' should be initialized in an in-class default member initializer [cppcoreguidelines-prefer-member-initializer]
-    // CHECK-FIXES: {{^\ *$}}
-  }
-
-  Simple1(int nn, double xx) {
-    // CHECK-FIXES: Simple1(int nn, double xx) : n(nn), x(xx) {
-    n = nn;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'n' should be initialized in a member initializer of the constructor [cppcoreguidelines-prefer-member-initializer]
-    // CHECK-FIXES: {{^\ *$}}
-    x = xx;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'x' should be initialized in a member initializer of the constructor [cppcoreguidelines-prefer-member-initializer]
-    // CHECK-FIXES: {{^\ *$}}
-  }
-
-  ~Simple1() = default;
-};
diff --git a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init.cpp b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init.cpp
deleted file mode 100644
index 281a817a42b30..0000000000000
--- a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines/prefer-member-initializer-modernize-use-default-member-init.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-// RUN: %check_clang_tidy %s cppcoreguidelines-prefer-member-initializer,modernize-use-default-member-init %t
-// RUN: %check_clang_tidy %s cppcoreguidelines-prefer-member-initializer,modernize-use-default-member-init %t -- \
-// RUN: -config="{CheckOptions: {modernize-use-default-member-init.UseAssignment: true, \
-// RUN:                          cppcoreguidelines-prefer-member-initializer.UseAssignment: false}}"
-
-class Simple1 {
-  int n;
-  // CHECK-FIXES: int n{0};
-  double x;
-  // CHECK-FIXES: double x{0.0};
-
-public:
-  Simple1() {
-    n = 0;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'n' should be initialized in an in-class default member initializer [cppcoreguidelines-prefer-member-initializer]
-    // CHECK-FIXES: {{^\ *$}}
-    x = 0.0;
-    // CHECK-MESSAGES: :[[@LINE-1]]:5: warning: 'x' should be initialized in an in-class default member initializer [cppcoreguidelines-prefer-m...
[truncated]

Diag << FixItHint::CreateInsertion(FieldEnd, Insertion)
<< FixItHint::CreateRemoval(StmtRange);

} else {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The diff is very unfortunate, but essentially there's no changes to the code inside this "else" block. It's just unindented 2 spaces. The main change is the removal of the "if" block.

Copy link
Member

@PiotrZSL PiotrZSL left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks fine.

For me check names are not the best, it's hard to figure out what they does. Maybe they should be named like prefer-using-initialization-list and prefer-using-in-class-initializers.
Simply because now member initializer could be both an in class and on initialization list.

Second thing is that would be nice if changed check name is more early in release notes, like "Changed/Improved cppcoreguidelines-prefer-member-initializer by removing enforcement of rule C.48, , deprecated since :program:clang-tidy 17. This rule is now covered by cppcoreguidelines-use-default-member-init check."

I didn't check too deeply changed, code after all that's mainly code removal, and that's covered by tests.

@carlosgalvezp
Copy link
Contributor Author

Thanks for the review! I agree, check names are not the best. It's a bit of a hassle to change them though :/

I will fix the comment about the release notes tonight 👍

Carlos Gálvez and others added 19 commits February 1, 2024 19:08
When a compilation unit has an interface to an external subroutine or
function, and there is a global object (like a module) with the same
name, we're emitting an error. This is too strong, the program will
still build. This comes up in real applications, too. Downgrade the
error to a warning.
…m#79533)"

This reverts commit 51e0d1b.
That commit breaks a unit test:

```
Failed Tests (1):
  lldb-unit :: Core/./LLDBCoreTests/4/8
```
…lvm#80090)

Since we already add a `-fmodule-map-file=` argument for every used
modulemap, we can remove all `ModuleMapFiles` entries before adding
them.

This reduces the number of module variants when `-fmodule-map-file=`
appears on the original command line.
As mentioned in llvm#74747, this case is triggering a particularly high cost trip count expansion.
This patch adjusts the Docker container intended for CI use to contain a
PGO+ThinLTO+BOLT optimized clang. The toolchain is built within a Github
action and takes ~3.5 hours. No caching is utilized. The current PGO
optimization is fairly minimal, only running clang over hello world.
This can be adjusted as needed.
…encies

Removes the MaterializationResponsibility::addDependencies and
addDependenciesForAll methods, and transfers dependency registration to
the notifyEmitted operation. The new dependency registration allows
dependencies to be specified for arbitrary subsets of the
MaterializationResponsibility's symbols (rather than just single symbols
or all symbols) via an array of SymbolDependenceGroups (pairs of symbol
sets and corresponding dependencies for that set).

This patch aims to both improve emission performance and simplify
dependence tracking. By eliminating some states (e.g. symbols having
registered dependencies but not yet being resolved or emitted) we make
some errors impossible by construction, and reduce the number of error
cases that we need to check. NonOwningSymbolStringPtrs are used for
dependence tracking under the session lock, which should reduce
ref-counting operations, and intra-emit dependencies are resolved
outside the session lock, which should provide better performance when
JITing concurrently (since some dependence tracking can happen in
parallel).

The Orc C API is updated to account for this change, with the
LLVMOrcMaterializationResponsibilityNotifyEmitted API being modified and
the LLVMOrcMaterializationResponsibilityAddDependencies and
LLVMOrcMaterializationResponsibilityAddDependenciesForAll operations
being removed.
The inf and nan string index bounds checks were after the index was
being used. This patch moves the index usage to the end of the
condition.

Fixes llvm#79988
…TOC (llvm#79530)

This patch adds support for common and local symbols in the TOC for AIX.
Note that we need to update isVirtualSection so as a common symbol in
TOC will have the symbol type XTY_CM and will be initialized when placed
in the TOC so sections with this type are no longer virtual.

---------

Co-authored-by: Zaara Syeda <syzaara@ca.ibm.com>
…issue. (llvm#79398)

There are currently a few checkers that don't fill in the bug report's
"decl-with-issue" field (typically a function in which the bug is
found).

The new attribute `[[clang::suppress]]` uses decl-with-issue to reduce
the size of the suppression source range map so that it didn't need to
do that for the entire translation unit.

I'm already seeing a few problems with this approach so I'll probably
redesign it in some point as it looks like a premature optimization. Not
only checkers shouldn't be required to pass decl-with-issue (consider
clang-tidy checkers that never had such notion), but also it's not
necessarily uniquely determined (consider leak suppressions at
allocation site).

For now I'm adding a simple stop-gap solution that falls back to
building the suppression map for the entire TU whenever decl-with-issue
isn't specified. Which won't happen in the default setup because luckily
all default checkers do provide decl-with-issue.

---------

Co-authored-by: Balazs Benics <benicsbalazs@gmail.com>
Add a new node `AArch64ISD::URSHR_I_PRED`.

`srl(add(X, 1 << (ShiftValue - 1)), ShiftValue)` is transformed to
`urshr`, or to `rshrnb` (as before) if the result it truncated.

`uzp1(rshrnb(uunpklo(X),C), rshrnb(uunpkhi(X), C))` is converted to
`urshr(X, C)` (tested by the wide_trunc tests).

Pattern matching code in `canLowerSRLToRoundingShiftForVT` is taken
from prior code in rshrnb. It returns true if the add has NUW or if the
number of bits used in the return value allow us to not care about the
overflow (tested by rshrnb test cases).
paschalis-mpeis and others added 19 commits February 1, 2024 19:32
Run lines appear in a more natural order:
- no veclib (neon, sve)
- neon + veclib
- sve + veclib
- sve + tailfold + veclib
`statistics dump` command relies on `SymbolFile::GetDebugInfoSize()` to
get total debug info size.
The current implementation is missing debug info for split dwarf
scenarios which requires getting debug info from separate dwo/dwp files.
This patch fixes this issue for split dwarf by parsing debug info from
dwp/dwo.

New yaml tests are added.

---------

Co-authored-by: jeffreytan81 <jeffreytan@fb.com>
Currently machine LICM hoist PC_ADD_REL_OFFSET out of loops, causes
register pressure when function calls are deep in loops. This is a main
cause of sgpr spill for programs containing large number of function
calls in loops.

This patch marks PC_ADD_REL_OFFSET as rematerializable, which eliminates
sgpr spills due to function calls in loops.
…#79866)

`TargetOptions` is currently passed by value in AMDGPU targets, which
makes unnecessary copies. This PR fixes this issue.
Move the diagnostic so it fires only when doing an OpenMP capture, not
for non-OpenMP captures. This allows non-OpenMP code to work when using
OpenMP elsewhere, such as the code reported in
llvm#66999.
The header is unused now, so we can remove it.
GCC has supported a generic constraint "s" for a long time (since at
least 1992), which references a symbol or label with an optional
constant offset. "i" is a superset that also supports a constant
integer.

GCC's RISC-V port also supports a machine-specific constraint "S",
which cannot be used with a preemptible symbol. (We don't bother to
check preemptibility.) In PIC code, an external symbol is preemptible by
default, making "S" less useful if you want to create an artificial
reference for linker garbage collection, or define sections to hold
symbol addresses:

```
void fun();
// error: impossible constraint in ‘asm’ for riscv64-linux-gnu-gcc -fpie/-fpic
void foo() { asm(".reloc ., BFD_RELOC_NONE, %0" :: "S"(fun)); }
// good even if -fpie/-fpic
void foo() { asm(".reloc ., BFD_RELOC_NONE, %0" :: "s"(fun)); }
```

This patch adds support for "s". Modify https://reviews.llvm.org/D105254
("S") to handle multi-depth GEPs (https://reviews.llvm.org/D61560).
…category (llvm#80221)

When printing category conflicts in the ObjC category checker, also
print the source file name of the problematic categories. Currently we
only print the object file name. This change is mostly useful only for
thinLTO builds, where the object file name will be of form
999.arm64.lto.o and thus does not reveal any information about the
original source file.

---------

Co-authored-by: Alex Borcan <alexborcan@meta.com>
Assign `nullptr` to the pointer instead.
Harmonizes the include guard as it is rather uncommon within the MLIR
subproject to append an underscore to include guards.
…lvm#79911)

This PR implements experimental support for the RISC-V Atomic
Load-Acquire and Store-Release Extension (Zalasr). It has been approved
to be pursued as a fast track extension
(https://lists.riscv.org/g/tech-unprivileged/topic/arc_architecture_review/101951698),
but has not yet been approved by ARC or ratified. See
https://github.com/mehnadnerd/riscv-zalasr for draft spec.

---------

Co-authored-by: brs <turtwig@utexas.edu>
Co-authored-by: Philip Reames <preames@rivosinc.com>
…refer-member-init

This functionality already exists in
cppcoreguidelines-use-default-member-init. It was deprecated from
this check in clang-tidy 17.

This allows us to fully decouple this check from the corresponding
modernize check, which has an unhealthy dependency.

Fixes llvm#62169
Copy link

github-actions bot commented Feb 1, 2024

⚠️ C/C++ code formatter, clang-format found issues in your code. ⚠️

You can test this locally with the following command:
git-clang-format --diff 60860079ec9416a263d1078e0e29cf393a89737a b5bfeaa70b2f61ed6e11d6f00b7d48bfb3281ae4 -- clang-tools-extra/test/clang-tidy/checkers/modernize/avoid-c-arrays-ignores-strings.cpp clang/test/Driver/modules-skip-odr-check-in-gmf.cpp clang/test/Modules/skip-odr-check-in-gmf.cppm libc/src/stdbit/stdc_leading_ones_uc.cpp libc/src/stdbit/stdc_leading_ones_uc.h libc/src/stdbit/stdc_leading_ones_ui.cpp libc/src/stdbit/stdc_leading_ones_ui.h libc/src/stdbit/stdc_leading_ones_ul.cpp libc/src/stdbit/stdc_leading_ones_ul.h libc/src/stdbit/stdc_leading_ones_ull.cpp libc/src/stdbit/stdc_leading_ones_ull.h libc/src/stdbit/stdc_leading_ones_us.cpp libc/src/stdbit/stdc_leading_ones_us.h libc/test/src/stdbit/stdc_leading_ones_uc_test.cpp libc/test/src/stdbit/stdc_leading_ones_ui_test.cpp libc/test/src/stdbit/stdc_leading_ones_ul_test.cpp libc/test/src/stdbit/stdc_leading_ones_ull_test.cpp libc/test/src/stdbit/stdc_leading_ones_us_test.cpp mlir/include/mlir/Conversion/FuncToEmitC/FuncToEmitC.h mlir/include/mlir/Conversion/FuncToEmitC/FuncToEmitCPass.h mlir/lib/Conversion/FuncToEmitC/FuncToEmitC.cpp mlir/lib/Conversion/FuncToEmitC/FuncToEmitCPass.cpp bolt/include/bolt/Core/BinaryContext.h bolt/include/bolt/Rewrite/RewriteInstance.h bolt/lib/Passes/BinaryPasses.cpp bolt/lib/Profile/StaleProfileMatching.cpp bolt/lib/Profile/YAMLProfileReader.cpp bolt/lib/Rewrite/RewriteInstance.cpp clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.cpp clang-tools-extra/clang-tidy/cppcoreguidelines/PreferMemberInitializerCheck.h clang-tools-extra/clang-tidy/modernize/AvoidCArraysCheck.cpp clang-tools-extra/clang-tidy/modernize/AvoidCArraysCheck.h clang-tools-extra/test/clang-tidy/checkers/modernize/avoid-c-arrays.cpp clang/include/clang/AST/DeclTemplate.h clang/include/clang/Format/Format.h clang/include/clang/Lex/Token.h clang/include/clang/Parse/Parser.h clang/include/clang/Sema/Sema.h clang/include/clang/Serialization/ASTReader.h clang/include/clang/StaticAnalyzer/Core/BugReporter/BugSuppression.h clang/lib/AST/ASTContext.cpp clang/lib/AST/DeclTemplate.cpp clang/lib/AST/Interp/ByteCodeExprGen.cpp clang/lib/AST/Interp/ByteCodeExprGen.h clang/lib/AST/Interp/Context.cpp clang/lib/AST/Interp/Interp.h clang/lib/AST/TypePrinter.cpp clang/lib/Analysis/FlowSensitive/HTMLLogger.cpp clang/lib/Basic/Targets/AArch64.cpp clang/lib/Basic/Targets/AArch64.h clang/lib/Basic/Targets/RISCV.cpp clang/lib/Basic/Targets/X86.cpp clang/lib/CodeGen/CGBuiltin.cpp clang/lib/CodeGen/CGCall.cpp clang/lib/CodeGen/CGObjCMac.cpp clang/lib/CodeGen/CodeGenModule.cpp clang/lib/Driver/ToolChains/AMDGPU.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Driver/ToolChains/HIPAMD.cpp clang/lib/Format/Format.cpp clang/lib/Format/FormatTokenLexer.cpp clang/lib/Format/TokenAnnotator.cpp clang/lib/Format/UnwrappedLineParser.cpp clang/lib/Frontend/FrontendActions.cpp clang/lib/Lex/Lexer.cpp clang/lib/Parse/ParseDecl.cpp clang/lib/Parse/ParseDeclCXX.cpp clang/lib/Parse/ParseExpr.cpp clang/lib/Parse/ParseObjc.cpp clang/lib/Parse/ParseTemplate.cpp clang/lib/Parse/Parser.cpp clang/lib/Sema/SemaConcept.cpp clang/lib/Sema/SemaDecl.cpp clang/lib/Sema/SemaExpr.cpp clang/lib/Sema/SemaExprCXX.cpp clang/lib/Sema/SemaTemplate.cpp clang/lib/Sema/SemaTemplateDeduction.cpp clang/lib/Sema/SemaTemplateInstantiate.cpp clang/lib/Sema/SemaTemplateInstantiateDecl.cpp clang/lib/Serialization/ASTReader.cpp clang/lib/Serialization/ASTReaderDecl.cpp clang/lib/Serialization/ASTWriter.cpp clang/lib/Serialization/ASTWriterDecl.cpp clang/lib/StaticAnalyzer/Core/BugReporter.cpp clang/lib/StaticAnalyzer/Core/BugSuppression.cpp clang/lib/Tooling/DependencyScanning/ModuleDepCollector.cpp clang/test/AST/Interp/c.c clang/test/AST/Interp/complex.cpp clang/test/Analysis/Checkers/WebKit/call-args.cpp clang/test/Analysis/copypaste/suspicious-clones.cpp clang/test/CXX/temp/p3.cpp clang/test/CodeGen/RISCV/riscv-inline-asm.c clang/test/CodeGen/aarch64-sme-intrinsics/aarch64-sme-attrs.cpp clang/test/CodeGen/aarch64-sme-intrinsics/acle_sme_zero.c clang/test/CodeGen/aarch64-targetattr.c clang/test/Interpreter/cxx20-modules.cppm clang/test/Modules/aarch64-sme-keywords.cppm clang/test/Modules/concept.cppm clang/test/Modules/polluted-operator.cppm clang/test/Modules/pr76638.cppm clang/test/OpenMP/declare_simd_messages.cpp clang/test/Preprocessor/aarch64-target-features.c clang/test/Preprocessor/riscv-target-features.c clang/test/Sema/c2x-auto.c clang/test/Sema/c2x-bool.c clang/test/Sema/check-increment.c clang/test/Sema/inline-asm-validate-riscv.c clang/test/SemaCXX/datasizeof.cpp clang/test/SemaCXX/decomposition-openmp.cpp clang/unittests/Format/ConfigParseTest.cpp clang/unittests/Format/FormatTest.cpp clang/unittests/Format/TokenAnnotatorTest.cpp flang/include/flang/Common/Fortran-features.h flang/include/flang/Lower/AbstractConverter.h flang/lib/Lower/ConvertCall.cpp flang/lib/Lower/ConvertType.cpp flang/lib/Optimizer/HLFIR/IR/HLFIROps.cpp flang/lib/Semantics/check-declarations.cpp libc/include/llvm-libc-macros/stdbit-macros.h libc/src/errno/libc_errno.cpp libc/src/errno/libc_errno.h libc/src/stdio/scanf_core/float_converter.cpp libc/src/unistd/linux/read.cpp libc/test/include/stdbit_test.cpp libc/test/integration/startup/linux/tls_test.cpp libc/test/src/errno/errno_test.cpp libc/test/src/stdlib/StrtolTest.h libc/test/src/sys/mman/linux/madvise_test.cpp libc/test/src/sys/mman/linux/mlock_test.cpp libc/test/src/sys/mman/linux/mmap_test.cpp libc/test/src/sys/mman/linux/mprotect_test.cpp libc/test/src/sys/mman/linux/posix_madvise_test.cpp libc/test/src/time/asctime_r_test.cpp libc/test/src/time/asctime_test.cpp libcxx/include/__memory/allocate_at_least.h libcxx/include/__memory/allocator_traits.h libcxx/include/memory libcxx/include/version libcxx/modules/std/memory.inc libcxx/test/std/language.support/support.limits/support.limits.general/memory.version.compile.pass.cpp libcxx/test/std/language.support/support.limits/support.limits.general/version.version.compile.pass.cpp lld/MachO/ObjC.cpp lldb/include/lldb/Breakpoint/Breakpoint.h lldb/include/lldb/Breakpoint/BreakpointLocation.h lldb/include/lldb/Breakpoint/Watchpoint.h lldb/include/lldb/Breakpoint/WatchpointAlgorithms.h lldb/source/Breakpoint/Breakpoint.cpp lldb/source/Breakpoint/BreakpointLocation.cpp lldb/source/Breakpoint/Watchpoint.cpp lldb/source/Breakpoint/WatchpointAlgorithms.cpp lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.h lldb/tools/debugserver/source/MacOSX/arm64/DNBArchImplARM64.cpp lldb/unittests/Breakpoint/WatchpointAlgorithmsTests.cpp llvm/include/llvm-c/Orc.h llvm/include/llvm/CodeGen/GlobalISel/GIMatchTableExecutor.h llvm/include/llvm/CodeGen/GlobalISel/GIMatchTableExecutorImpl.h llvm/include/llvm/DebugInfo/DIContext.h llvm/include/llvm/DebugInfo/DWARF/DWARFVerifier.h llvm/include/llvm/ExecutionEngine/Orc/Core.h llvm/include/llvm/ExecutionEngine/Orc/DebugUtils.h llvm/include/llvm/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.h llvm/include/llvm/MC/MCDisassembler/MCDisassembler.h llvm/include/llvm/Object/ELFObjectFile.h llvm/include/llvm/TargetParser/AArch64TargetParser.h llvm/lib/CodeGen/MIRPrinter.cpp llvm/lib/CodeGen/SelectOptimize.cpp llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp llvm/lib/DebugInfo/DWARF/DWARFContext.cpp llvm/lib/DebugInfo/DWARF/DWARFVerifier.cpp llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp llvm/lib/ExecutionEngine/Orc/Core.cpp llvm/lib/ExecutionEngine/Orc/DebugUtils.cpp llvm/lib/ExecutionEngine/Orc/IndirectionUtils.cpp llvm/lib/ExecutionEngine/Orc/LazyReexports.cpp llvm/lib/ExecutionEngine/Orc/ObjectLinkingLayer.cpp llvm/lib/ExecutionEngine/Orc/OrcV2CBindings.cpp llvm/lib/ExecutionEngine/Orc/RTDyldObjectLinkingLayer.cpp llvm/lib/IR/AsmWriter.cpp llvm/lib/IR/AutoUpgrade.cpp llvm/lib/IR/DebugInfo.cpp llvm/lib/IR/DebugInfoMetadata.cpp llvm/lib/IR/Function.cpp llvm/lib/IR/ProfDataUtils.cpp llvm/lib/IR/Verifier.cpp llvm/lib/MC/MCContext.cpp llvm/lib/MC/MCSectionXCOFF.cpp llvm/lib/MC/XCOFFObjectWriter.cpp llvm/lib/Support/CommandLine.cpp llvm/lib/Support/RISCVISAInfo.cpp llvm/lib/Support/StringRef.cpp llvm/lib/Target/AArch64/AArch64ISelLowering.cpp llvm/lib/Target/AArch64/AArch64ISelLowering.h llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp llvm/lib/Target/AArch64/SMEABIPass.cpp llvm/lib/Target/AArch64/Utils/AArch64SMEAttributes.cpp llvm/lib/Target/AArch64/Utils/AArch64SMEAttributes.h llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.h llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.h llvm/lib/Target/AMDGPU/GCNSubtarget.h llvm/lib/Target/AMDGPU/R600TargetMachine.cpp llvm/lib/Target/AMDGPU/R600TargetMachine.h llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.cpp llvm/lib/Target/AMDGPU/Utils/AMDGPUBaseInfo.h llvm/lib/Target/PowerPC/PPCAsmPrinter.cpp llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp llvm/lib/Target/RISCV/RISCVISelLowering.cpp llvm/lib/Target/SystemZ/SystemZISelLowering.cpp llvm/lib/Target/WebAssembly/WebAssemblyTargetMachine.cpp llvm/lib/Target/X86/X86FixupVectorConstants.cpp llvm/lib/Target/X86/X86InstrInfo.cpp llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp llvm/lib/Transforms/Utils/LoopUnrollRuntime.cpp llvm/lib/Transforms/Utils/ScalarEvolutionExpander.cpp llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp llvm/tools/llvm-exegesis/lib/BenchmarkResult.cpp llvm/tools/llvm-exegesis/lib/BenchmarkResult.h llvm/tools/llvm-exegesis/lib/BenchmarkRunner.cpp llvm/tools/llvm-exegesis/lib/BenchmarkRunner.h llvm/tools/llvm-exegesis/lib/ResultAggregator.cpp llvm/tools/llvm-exegesis/llvm-exegesis.cpp llvm/tools/llvm-objdump/llvm-objdump.cpp llvm/unittests/ExecutionEngine/Orc/CoreAPIsTest.cpp llvm/unittests/ExecutionEngine/Orc/LazyCallThroughAndReexportsTest.cpp llvm/unittests/ExecutionEngine/Orc/OrcCAPITest.cpp llvm/unittests/ExecutionEngine/Orc/ResourceTrackerTest.cpp llvm/unittests/Support/RISCVISAInfoTest.cpp llvm/unittests/Target/AArch64/SMEAttributesTest.cpp llvm/unittests/TargetParser/TargetParserTest.cpp llvm/unittests/tools/llvm-exegesis/Mips/BenchmarkResultTest.cpp llvm/unittests/tools/llvm-exegesis/ResultAggregatorTest.cpp llvm/unittests/tools/llvm-exegesis/X86/BenchmarkResultTest.cpp llvm/utils/TableGen/CodeGenInstruction.cpp llvm/utils/TableGen/GlobalISel/Patterns.cpp llvm/utils/TableGen/GlobalISel/Patterns.h llvm/utils/TableGen/GlobalISelCombinerEmitter.cpp llvm/utils/TableGen/GlobalISelMatchTable.cpp llvm/utils/TableGen/GlobalISelMatchTable.h llvm/utils/TableGen/X86FoldTablesEmitter.cpp mlir/include/mlir/Conversion/Passes.h mlir/include/mlir/Conversion/SCFToEmitC/SCFToEmitC.h mlir/include/mlir/Dialect/EmitC/IR/EmitC.h mlir/include/mlir/Dialect/Vector/Transforms/VectorRewritePatterns.h mlir/include/mlir/IR/OperationSupport.h mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp mlir/lib/Conversion/ArithToAMDGPU/ArithToAMDGPU.cpp mlir/lib/Conversion/GPUToROCDL/LowerGpuOpsToROCDLOps.cpp mlir/lib/Conversion/TosaToTensor/TosaToTensor.cpp mlir/lib/Dialect/Arith/IR/ArithOps.cpp mlir/lib/Dialect/EmitC/IR/EmitC.cpp mlir/lib/Dialect/SCF/Transforms/ParallelLoopFusion.cpp mlir/lib/Dialect/Tensor/Transforms/ConcatOpPatterns.cpp mlir/lib/Dialect/Vector/TransformOps/VectorTransformOps.cpp mlir/lib/Dialect/Vector/Transforms/VectorEmulateNarrowType.cpp mlir/lib/IR/OperationSupport.cpp mlir/lib/Target/Cpp/TranslateToCpp.cpp mlir/lib/Target/LLVMIR/ModuleImport.cpp mlir/lib/Target/LLVMIR/ModuleTranslation.cpp mlir/lib/Transforms/Utils/GreedyPatternRewriteDriver.cpp openmp/libomptarget/plugins-nextgen/cuda/src/rtl.cpp libcxx/test/std/utilities/memory/allocator.traits/allocator.traits.members/allocate_at_least.pass.cpp
View the diff from clang-format here.
diff --git a/lldb/unittests/Breakpoint/WatchpointAlgorithmsTests.cpp b/lldb/unittests/Breakpoint/WatchpointAlgorithmsTests.cpp
index ba99c6bf4f..1d819cf862 100644
--- a/lldb/unittests/Breakpoint/WatchpointAlgorithmsTests.cpp
+++ b/lldb/unittests/Breakpoint/WatchpointAlgorithmsTests.cpp
@@ -176,5 +176,4 @@ TEST(WatchpointAlgorithmsTests, PowerOf2Watchpoints) {
     check_testcase(test, result, min_byte_size, max_byte_size,
                    address_byte_size);
   }
-
 }
diff --git a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
index 2c5b0b3d0c..9951afc55f 100644
--- a/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
+++ b/llvm/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
@@ -479,7 +479,8 @@ static SectionKind getELFKindForNamedSection(StringRef Name, SectionKind K) {
       Name == ".llvmbc" || Name == ".llvmcmd")
     return SectionKind::getMetadata();
 
-  if (!Name.starts_with(".")) return K;
+  if (!Name.starts_with("."))
+    return K;
 
   // Default implementation based on some magic section names.
   if (Name == ".bss" || Name.starts_with(".bss.") ||
diff --git a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
index 6a3710407b..aa7366a87b 100644
--- a/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
+++ b/llvm/lib/Target/PowerPC/PPCISelDAGToDAG.cpp
@@ -7621,7 +7621,8 @@ static void foldADDIForLocalExecAccesses(SDNode *N, SelectionDAG *DAG) {
   // access. The first operand of InitialADDI should be the thread pointer,
   // which has been checked in isEligibleToFoldADDIForLocalExecAccesses().
   SDValue TPRegNode = InitialADDI.getOperand(0);
-  [[maybe_unused]] RegisterSDNode *TPReg = dyn_cast<RegisterSDNode>(TPRegNode.getNode());
+  [[maybe_unused]] RegisterSDNode *TPReg =
+      dyn_cast<RegisterSDNode>(TPRegNode.getNode());
   [[maybe_unused]] const PPCSubtarget &Subtarget =
       DAG->getMachineFunction().getSubtarget<PPCSubtarget>();
   assert((TPReg && (TPReg->getReg() == Subtarget.getThreadPointerRegister())) &&
diff --git a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
index 831911ab21..e0509befaf 100644
--- a/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
@@ -6862,9 +6862,8 @@ canFoldTermCondOfLoop(Loop *L, ScalarEvolution &SE, DominatorTree &DT,
       continue;
     }
 
-    if (Expander.isHighCostExpansion(TermValueSLocal, L,
-                                     2*SCEVCheapExpansionBudget,
-                                     &TTI, InsertPt)) {
+    if (Expander.isHighCostExpansion(
+            TermValueSLocal, L, 2 * SCEVCheapExpansionBudget, &TTI, InsertPt)) {
       LLVM_DEBUG(
           dbgs() << "Is too expensive to expand terminating value for phi node"
                  << PN << "\n");
diff --git a/llvm/unittests/TargetParser/TargetParserTest.cpp b/llvm/unittests/TargetParser/TargetParserTest.cpp
index cbd8fe18cd..7e7057fded 100644
--- a/llvm/unittests/TargetParser/TargetParserTest.cpp
+++ b/llvm/unittests/TargetParser/TargetParserTest.cpp
@@ -131,14 +131,14 @@ template <ARM::ISAKind ISAKind> struct AssertSameExtensionFlags {
     if (ExpectedFlags == GotFlags)
       return testing::AssertionSuccess();
 
-    return testing::AssertionFailure() << llvm::formatv(
-               "CPU: {4}\n"
-               "Expected extension flags: {0} ({1})\n"
-               "     Got extension flags: {2} ({3})\n",
-               FormatExtensionFlags(ExpectedFlags),
-               SerializeExtensionFlags(ExpectedFlags),
-               FormatExtensionFlags(GotFlags),
-               SerializeExtensionFlags(ExpectedFlags), CPUName);
+    return testing::AssertionFailure()
+           << llvm::formatv("CPU: {4}\n"
+                            "Expected extension flags: {0} ({1})\n"
+                            "     Got extension flags: {2} ({3})\n",
+                            FormatExtensionFlags(ExpectedFlags),
+                            SerializeExtensionFlags(ExpectedFlags),
+                            FormatExtensionFlags(GotFlags),
+                            SerializeExtensionFlags(ExpectedFlags), CPUName);
   }
 
 private:
@@ -1075,21 +1075,21 @@ INSTANTIATE_TEST_SUITE_P(
     ::testing::Values(
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a34", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a35", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a53", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a55", "armv8.2-a", "crypto-neon-fp-armv8",
@@ -1102,60 +1102,69 @@ INSTANTIATE_TEST_SUITE_P(
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a510", "armv9-a", "neon-fp-armv8",
             (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_FP, AArch64::AEK_SIMD,
-                 AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_RDM,
-                 AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_BF16,
-                 AArch64::AEK_I8MM, AArch64::AEK_SVE, AArch64::AEK_SVE2,
-                 AArch64::AEK_SVE2BITPERM, AArch64::AEK_PAUTH, AArch64::AEK_MTE,
-                 AArch64::AEK_SSBS, AArch64::AEK_FP16, AArch64::AEK_FP16FML,
-                 AArch64::AEK_SB, AArch64::AEK_JSCVT, AArch64::AEK_FCMA})),
+                {AArch64::AEK_CRC,         AArch64::AEK_FP,
+                 AArch64::AEK_SIMD,        AArch64::AEK_RAS,
+                 AArch64::AEK_LSE,         AArch64::AEK_RDM,
+                 AArch64::AEK_RCPC,        AArch64::AEK_DOTPROD,
+                 AArch64::AEK_BF16,        AArch64::AEK_I8MM,
+                 AArch64::AEK_SVE,         AArch64::AEK_SVE2,
+                 AArch64::AEK_SVE2BITPERM, AArch64::AEK_PAUTH,
+                 AArch64::AEK_MTE,         AArch64::AEK_SSBS,
+                 AArch64::AEK_FP16,        AArch64::AEK_FP16FML,
+                 AArch64::AEK_SB,          AArch64::AEK_JSCVT,
+                 AArch64::AEK_FCMA})),
             "9-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a520", "armv9.2-a", "crypto-neon-fp-armv8",
             (AArch64::ExtensionBitset(
-                {AArch64::AEK_BF16,  AArch64::AEK_I8MM,  AArch64::AEK_SVE,
-                 AArch64::AEK_SVE2,  AArch64::AEK_FP16,  AArch64::AEK_DOTPROD,
-                 AArch64::AEK_LSE,  AArch64::AEK_RDM,  AArch64::AEK_SIMD,
-                 AArch64::AEK_RCPC,  AArch64::AEK_RAS,  AArch64::AEK_CRC,
-                 AArch64::AEK_FP,  AArch64::AEK_SB,  AArch64::AEK_SSBS,
-                 AArch64::AEK_MTE,  AArch64::AEK_FP16FML,  AArch64::AEK_PAUTH,
-                 AArch64::AEK_SVE2BITPERM,  AArch64::AEK_FLAGM,
-                 AArch64::AEK_PERFMON, AArch64::AEK_PREDRES, AArch64::AEK_JSCVT,
-                 AArch64::AEK_FCMA})),
+                {AArch64::AEK_BF16,        AArch64::AEK_I8MM,
+                 AArch64::AEK_SVE,         AArch64::AEK_SVE2,
+                 AArch64::AEK_FP16,        AArch64::AEK_DOTPROD,
+                 AArch64::AEK_LSE,         AArch64::AEK_RDM,
+                 AArch64::AEK_SIMD,        AArch64::AEK_RCPC,
+                 AArch64::AEK_RAS,         AArch64::AEK_CRC,
+                 AArch64::AEK_FP,          AArch64::AEK_SB,
+                 AArch64::AEK_SSBS,        AArch64::AEK_MTE,
+                 AArch64::AEK_FP16FML,     AArch64::AEK_PAUTH,
+                 AArch64::AEK_SVE2BITPERM, AArch64::AEK_FLAGM,
+                 AArch64::AEK_PERFMON,     AArch64::AEK_PREDRES,
+                 AArch64::AEK_JSCVT,       AArch64::AEK_FCMA})),
             "9.2-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a57", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a65", "armv8.2-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_FP16,
-                 AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RCPC,
-                 AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_SSBS})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_DOTPROD,
+                                       AArch64::AEK_FP, AArch64::AEK_FP16,
+                                       AArch64::AEK_LSE, AArch64::AEK_RAS,
+                                       AArch64::AEK_RCPC, AArch64::AEK_RDM,
+                                       AArch64::AEK_SIMD, AArch64::AEK_SSBS})),
             "8.2-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a65ae", "armv8.2-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_FP16,
-                 AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RCPC,
-                 AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_SSBS})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_DOTPROD,
+                                       AArch64::AEK_FP, AArch64::AEK_FP16,
+                                       AArch64::AEK_LSE, AArch64::AEK_RAS,
+                                       AArch64::AEK_RCPC, AArch64::AEK_RDM,
+                                       AArch64::AEK_SIMD, AArch64::AEK_SSBS})),
             "8.2-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a72", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a73", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a75", "armv8.2-a", "crypto-neon-fp-armv8",
@@ -1211,13 +1220,16 @@ INSTANTIATE_TEST_SUITE_P(
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a710", "armv9-a", "neon-fp-armv8",
             (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_FP, AArch64::AEK_SIMD,
-                 AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_RDM,
-                 AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_MTE,
-                 AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_SVE,
-                 AArch64::AEK_SVE2, AArch64::AEK_SVE2BITPERM,
-                 AArch64::AEK_PAUTH, AArch64::AEK_FLAGM, AArch64::AEK_SB,
-                 AArch64::AEK_I8MM, AArch64::AEK_BF16, AArch64::AEK_JSCVT,
+                {AArch64::AEK_CRC,     AArch64::AEK_FP,
+                 AArch64::AEK_SIMD,    AArch64::AEK_RAS,
+                 AArch64::AEK_LSE,     AArch64::AEK_RDM,
+                 AArch64::AEK_RCPC,    AArch64::AEK_DOTPROD,
+                 AArch64::AEK_MTE,     AArch64::AEK_FP16,
+                 AArch64::AEK_FP16FML, AArch64::AEK_SVE,
+                 AArch64::AEK_SVE2,    AArch64::AEK_SVE2BITPERM,
+                 AArch64::AEK_PAUTH,   AArch64::AEK_FLAGM,
+                 AArch64::AEK_SB,      AArch64::AEK_I8MM,
+                 AArch64::AEK_BF16,    AArch64::AEK_JSCVT,
                  AArch64::AEK_FCMA})),
             "9-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
@@ -1240,15 +1252,19 @@ INSTANTIATE_TEST_SUITE_P(
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-a720", "armv9.2-a", "crypto-neon-fp-armv8",
             (AArch64::ExtensionBitset(
-                {AArch64::AEK_BF16,  AArch64::AEK_I8MM,  AArch64::AEK_SVE,
-                 AArch64::AEK_SVE2,  AArch64::AEK_FP16,  AArch64::AEK_DOTPROD,
-                 AArch64::AEK_LSE,  AArch64::AEK_RDM,  AArch64::AEK_SIMD,
-                 AArch64::AEK_RCPC,  AArch64::AEK_RAS,  AArch64::AEK_CRC,
-                 AArch64::AEK_FP,  AArch64::AEK_SB,  AArch64::AEK_SSBS,
-                 AArch64::AEK_MTE,  AArch64::AEK_FP16FML,  AArch64::AEK_PAUTH,
-                 AArch64::AEK_SVE2BITPERM,  AArch64::AEK_FLAGM,
-                 AArch64::AEK_PERFMON, AArch64::AEK_PREDRES,
-                 AArch64::AEK_PROFILE, AArch64::AEK_JSCVT, AArch64::AEK_FCMA})),
+                {AArch64::AEK_BF16,        AArch64::AEK_I8MM,
+                 AArch64::AEK_SVE,         AArch64::AEK_SVE2,
+                 AArch64::AEK_FP16,        AArch64::AEK_DOTPROD,
+                 AArch64::AEK_LSE,         AArch64::AEK_RDM,
+                 AArch64::AEK_SIMD,        AArch64::AEK_RCPC,
+                 AArch64::AEK_RAS,         AArch64::AEK_CRC,
+                 AArch64::AEK_FP,          AArch64::AEK_SB,
+                 AArch64::AEK_SSBS,        AArch64::AEK_MTE,
+                 AArch64::AEK_FP16FML,     AArch64::AEK_PAUTH,
+                 AArch64::AEK_SVE2BITPERM, AArch64::AEK_FLAGM,
+                 AArch64::AEK_PERFMON,     AArch64::AEK_PREDRES,
+                 AArch64::AEK_PROFILE,     AArch64::AEK_JSCVT,
+                 AArch64::AEK_FCMA})),
             "9.2-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "neoverse-v1", "armv8.4-a", "crypto-neon-fp-armv8",
@@ -1282,11 +1298,12 @@ INSTANTIATE_TEST_SUITE_P(
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-r82", "armv8-r", "crypto-neon-fp-armv8",
             (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_RDM, AArch64::AEK_SSBS,
-                 AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_SIMD,
-                 AArch64::AEK_FP16, AArch64::AEK_FP16FML, AArch64::AEK_RAS,
-                 AArch64::AEK_RCPC, AArch64::AEK_LSE, AArch64::AEK_SB,
-                 AArch64::AEK_JSCVT, AArch64::AEK_FCMA, AArch64::AEK_PAUTH})),
+                {AArch64::AEK_CRC, AArch64::AEK_RDM,
+                 AArch64::AEK_SSBS, AArch64::AEK_DOTPROD, AArch64::AEK_FP,
+                 AArch64::AEK_SIMD, AArch64::AEK_FP16, AArch64::AEK_FP16FML,
+                 AArch64::AEK_RAS, AArch64::AEK_RCPC, AArch64::AEK_LSE,
+                 AArch64::AEK_SB, AArch64::AEK_JSCVT, AArch64::AEK_FCMA,
+                 AArch64::AEK_PAUTH})),
             "8-R"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-x1", "armv8.2-a", "crypto-neon-fp-armv8",
@@ -1304,19 +1321,23 @@ INSTANTIATE_TEST_SUITE_P(
                  AArch64::AEK_FP, AArch64::AEK_RDM, AArch64::AEK_SIMD,
                  AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_FP16,
                  AArch64::AEK_DOTPROD, AArch64::AEK_RCPC, AArch64::AEK_SSBS,
-                 AArch64::AEK_PAUTH, AArch64::AEK_PROFILE, AArch64::AEK_FLAGM})),
+                 AArch64::AEK_PAUTH, AArch64::AEK_PROFILE,
+                 AArch64::AEK_FLAGM})),
             "8.2-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-x2", "armv9-a", "neon-fp-armv8",
             (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_FP, AArch64::AEK_SIMD,
-                 AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_RDM,
-                 AArch64::AEK_RCPC, AArch64::AEK_DOTPROD, AArch64::AEK_MTE,
-                 AArch64::AEK_PAUTH, AArch64::AEK_I8MM, AArch64::AEK_BF16,
-                 AArch64::AEK_SVE, AArch64::AEK_SVE2, AArch64::AEK_SVE2BITPERM,
-                 AArch64::AEK_SSBS, AArch64::AEK_SB, AArch64::AEK_FP16,
-                 AArch64::AEK_FP16FML, AArch64::AEK_FLAGM, AArch64::AEK_JSCVT,
-                 AArch64::AEK_FCMA})),
+                {AArch64::AEK_CRC,         AArch64::AEK_FP,
+                 AArch64::AEK_SIMD,        AArch64::AEK_RAS,
+                 AArch64::AEK_LSE,         AArch64::AEK_RDM,
+                 AArch64::AEK_RCPC,        AArch64::AEK_DOTPROD,
+                 AArch64::AEK_MTE,         AArch64::AEK_PAUTH,
+                 AArch64::AEK_I8MM,        AArch64::AEK_BF16,
+                 AArch64::AEK_SVE,         AArch64::AEK_SVE2,
+                 AArch64::AEK_SVE2BITPERM, AArch64::AEK_SSBS,
+                 AArch64::AEK_SB,          AArch64::AEK_FP16,
+                 AArch64::AEK_FP16FML,     AArch64::AEK_FLAGM,
+                 AArch64::AEK_JSCVT,       AArch64::AEK_FCMA})),
             "9-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-x3", "armv9-a", "neon-fp-armv8",
@@ -1338,45 +1359,49 @@ INSTANTIATE_TEST_SUITE_P(
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cortex-x4", "armv9.2-a", "crypto-neon-fp-armv8",
             (AArch64::ExtensionBitset(
-                {AArch64::AEK_BF16,  AArch64::AEK_I8MM,  AArch64::AEK_SVE,
-                 AArch64::AEK_SVE2,  AArch64::AEK_FP16,  AArch64::AEK_DOTPROD,
-                 AArch64::AEK_LSE,  AArch64::AEK_RDM,  AArch64::AEK_SIMD,
-                 AArch64::AEK_RCPC,  AArch64::AEK_RAS,  AArch64::AEK_CRC,
-                 AArch64::AEK_FP,  AArch64::AEK_SB,  AArch64::AEK_SSBS,
-                 AArch64::AEK_MTE,  AArch64::AEK_FP16FML,  AArch64::AEK_PAUTH,
-                 AArch64::AEK_SVE2BITPERM,  AArch64::AEK_FLAGM,
-                 AArch64::AEK_PERFMON, AArch64::AEK_PREDRES,
-                 AArch64::AEK_PROFILE, AArch64::AEK_JSCVT, AArch64::AEK_FCMA})),
+                {AArch64::AEK_BF16,        AArch64::AEK_I8MM,
+                 AArch64::AEK_SVE,         AArch64::AEK_SVE2,
+                 AArch64::AEK_FP16,        AArch64::AEK_DOTPROD,
+                 AArch64::AEK_LSE,         AArch64::AEK_RDM,
+                 AArch64::AEK_SIMD,        AArch64::AEK_RCPC,
+                 AArch64::AEK_RAS,         AArch64::AEK_CRC,
+                 AArch64::AEK_FP,          AArch64::AEK_SB,
+                 AArch64::AEK_SSBS,        AArch64::AEK_MTE,
+                 AArch64::AEK_FP16FML,     AArch64::AEK_PAUTH,
+                 AArch64::AEK_SVE2BITPERM, AArch64::AEK_FLAGM,
+                 AArch64::AEK_PERFMON,     AArch64::AEK_PREDRES,
+                 AArch64::AEK_PROFILE,     AArch64::AEK_JSCVT,
+                 AArch64::AEK_FCMA})),
             "9.2-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "cyclone", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_NONE, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_NONE, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "apple-a7", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_NONE, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_NONE, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "apple-a8", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_NONE, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_NONE, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "apple-a9", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_NONE, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_NONE, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "apple-a10", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_RDM, AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_RDM, AArch64::AEK_SIMD})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "apple-a11", "armv8.2-a", "crypto-neon-fp-armv8",
@@ -1499,54 +1524,55 @@ INSTANTIATE_TEST_SUITE_P(
             "8.3-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "exynos-m3", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "exynos-m4", "armv8.2-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_FP16,
-                 AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM,
-                 AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_DOTPROD,
+                                       AArch64::AEK_FP, AArch64::AEK_FP16,
+                                       AArch64::AEK_LSE, AArch64::AEK_RAS,
+                                       AArch64::AEK_RDM, AArch64::AEK_SIMD})),
             "8.2-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "exynos-m5", "armv8.2-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_FP16,
-                 AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RDM,
-                 AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_DOTPROD,
+                                       AArch64::AEK_FP, AArch64::AEK_FP16,
+                                       AArch64::AEK_LSE, AArch64::AEK_RAS,
+                                       AArch64::AEK_RDM, AArch64::AEK_SIMD})),
             "8.2-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "falkor", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_RDM})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD, AArch64::AEK_RDM})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "kryo", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "neoverse-e1", "armv8.2-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_FP16,
-                 AArch64::AEK_LSE, AArch64::AEK_RAS, AArch64::AEK_RCPC,
-                 AArch64::AEK_RDM, AArch64::AEK_SIMD, AArch64::AEK_SSBS})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_DOTPROD,
+                                       AArch64::AEK_FP, AArch64::AEK_FP16,
+                                       AArch64::AEK_LSE, AArch64::AEK_RAS,
+                                       AArch64::AEK_RCPC, AArch64::AEK_RDM,
+                                       AArch64::AEK_SIMD, AArch64::AEK_SSBS})),
             "8.2-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "neoverse-n1", "armv8.2-a", "crypto-neon-fp-armv8",
             (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_DOTPROD, AArch64::AEK_FP, AArch64::AEK_FP16,
-                 AArch64::AEK_LSE, AArch64::AEK_PROFILE, AArch64::AEK_RAS,
-                 AArch64::AEK_RCPC, AArch64::AEK_RDM, AArch64::AEK_SIMD,
-                 AArch64::AEK_SSBS})),
+                {AArch64::AEK_CRC, AArch64::AEK_AES,
+                 AArch64::AEK_SHA2, AArch64::AEK_DOTPROD, AArch64::AEK_FP,
+                 AArch64::AEK_FP16, AArch64::AEK_LSE, AArch64::AEK_PROFILE,
+                 AArch64::AEK_RAS, AArch64::AEK_RCPC, AArch64::AEK_RDM,
+                 AArch64::AEK_SIMD, AArch64::AEK_SSBS})),
             "8.2-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "neoverse-n2", "armv9-a", "crypto-neon-fp-armv8",
@@ -1565,24 +1591,24 @@ INSTANTIATE_TEST_SUITE_P(
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "ampere1", "armv8.6-a", "crypto-neon-fp-armv8",
             (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_FP, AArch64::AEK_FP16,
-                 AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE,
-                 AArch64::AEK_RDM, AArch64::AEK_RCPC, AArch64::AEK_DOTPROD,
+                {AArch64::AEK_CRC,  AArch64::AEK_FP,   AArch64::AEK_FP16,
+                 AArch64::AEK_SIMD, AArch64::AEK_RAS,  AArch64::AEK_LSE,
+                 AArch64::AEK_RDM,  AArch64::AEK_RCPC, AArch64::AEK_DOTPROD,
                  AArch64::AEK_SHA3, AArch64::AEK_BF16, AArch64::AEK_SHA2,
-                 AArch64::AEK_AES, AArch64::AEK_I8MM, AArch64::AEK_SSBS,
-                 AArch64::AEK_SB, AArch64::AEK_RAND, AArch64::AEK_JSCVT,
+                 AArch64::AEK_AES,  AArch64::AEK_I8MM, AArch64::AEK_SSBS,
+                 AArch64::AEK_SB,   AArch64::AEK_RAND, AArch64::AEK_JSCVT,
                  AArch64::AEK_FCMA, AArch64::AEK_PAUTH})),
             "8.6-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "ampere1a", "armv8.6-a", "crypto-neon-fp-armv8",
             (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_FP, AArch64::AEK_FP16,
-                 AArch64::AEK_SIMD, AArch64::AEK_RAS, AArch64::AEK_LSE,
-                 AArch64::AEK_RDM, AArch64::AEK_RCPC, AArch64::AEK_DOTPROD,
-                 AArch64::AEK_SM4, AArch64::AEK_SHA3, AArch64::AEK_BF16,
-                 AArch64::AEK_SHA2, AArch64::AEK_AES, AArch64::AEK_I8MM,
-                 AArch64::AEK_SSBS, AArch64::AEK_SB, AArch64::AEK_RAND,
-                 AArch64::AEK_MTE, AArch64::AEK_JSCVT, AArch64::AEK_FCMA,
+                {AArch64::AEK_CRC,  AArch64::AEK_FP,    AArch64::AEK_FP16,
+                 AArch64::AEK_SIMD, AArch64::AEK_RAS,   AArch64::AEK_LSE,
+                 AArch64::AEK_RDM,  AArch64::AEK_RCPC,  AArch64::AEK_DOTPROD,
+                 AArch64::AEK_SM4,  AArch64::AEK_SHA3,  AArch64::AEK_BF16,
+                 AArch64::AEK_SHA2, AArch64::AEK_AES,   AArch64::AEK_I8MM,
+                 AArch64::AEK_SSBS, AArch64::AEK_SB,    AArch64::AEK_RAND,
+                 AArch64::AEK_MTE,  AArch64::AEK_JSCVT, AArch64::AEK_FCMA,
                  AArch64::AEK_PAUTH})),
             "8.6-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
@@ -1600,10 +1626,10 @@ INSTANTIATE_TEST_SUITE_P(
             "8.4-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "thunderx2t99", "armv8.1-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_LSE, AArch64::AEK_RDM, AArch64::AEK_FP,
-                 AArch64::AEK_SIMD})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_LSE,
+                                       AArch64::AEK_RDM, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD})),
             "8.1-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "thunderx3t110", "armv8.3-a", "crypto-neon-fp-armv8",
@@ -1615,27 +1641,27 @@ INSTANTIATE_TEST_SUITE_P(
             "8.3-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "thunderx", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_SIMD, AArch64::AEK_FP})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_SIMD,
+                                       AArch64::AEK_FP})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "thunderxt81", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_SIMD, AArch64::AEK_FP})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_SIMD,
+                                       AArch64::AEK_FP})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "thunderxt83", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_SIMD, AArch64::AEK_FP})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_SIMD,
+                                       AArch64::AEK_FP})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "thunderxt88", "armv8-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_SIMD, AArch64::AEK_FP})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_SIMD,
+                                       AArch64::AEK_FP})),
             "8-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "tsv110", "armv8.2-a", "crypto-neon-fp-armv8",
@@ -1648,11 +1674,11 @@ INSTANTIATE_TEST_SUITE_P(
             "8.2-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "a64fx", "armv8.2-a", "crypto-neon-fp-armv8",
-            (AArch64::ExtensionBitset(
-                {AArch64::AEK_CRC, AArch64::AEK_AES, AArch64::AEK_SHA2,
-                 AArch64::AEK_FP, AArch64::AEK_SIMD, AArch64::AEK_FP16,
-                 AArch64::AEK_RAS, AArch64::AEK_LSE, AArch64::AEK_SVE,
-                 AArch64::AEK_RDM})),
+            (AArch64::ExtensionBitset({AArch64::AEK_CRC, AArch64::AEK_AES,
+                                       AArch64::AEK_SHA2, AArch64::AEK_FP,
+                                       AArch64::AEK_SIMD, AArch64::AEK_FP16,
+                                       AArch64::AEK_RAS, AArch64::AEK_LSE,
+                                       AArch64::AEK_SVE, AArch64::AEK_RDM})),
             "8.2-A"),
         ARMCPUTestParams<AArch64::ExtensionBitset>(
             "carmel", "armv8.2-a", "crypto-neon-fp-armv8",

@carlosgalvezp
Copy link
Contributor Author

I've screwed up with the merge conflicts somehow, will create a new PR

@carlosgalvezp carlosgalvezp deleted the cppcoreguidelines_c48 branch February 1, 2024 20:21
@ldionne ldionne removed the request for review from a team February 1, 2024 21:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[clang-tidy] Remove enforcement of rule C.48 from cppcoreguidelines-prefer-member-init