llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-tidy

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

Author: None (dsiroky)

<details>
<summary>Changes</summary>

cppcoreguidelines-pro-type-member-init check has an option IgnoreArrays for 
ignoring uninitialized C arrays. This patch adds support for C++ std::array as 
well.

---
Full diff: https://github.com/llvm/llvm-project/pull/98134.diff


1 Files Affected:

- (modified) 
clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp 
(+23-1) 


``````````diff
diff --git 
a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp 
b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp
index 9c3c7cc70c187..f5fa340cdb985 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp
@@ -422,6 +422,28 @@ static const char *getInitializer(QualType QT, bool 
UseAssignment) {
   }
 }
 
+static bool isStdArray(QualType QT) {
+  const auto *RT = QT->getAs<RecordType>();
+  if (!RT)
+    return false;
+  const auto *RD = RT->getDecl();
+  if (!RD)
+    return false;
+
+  const IdentifierInfo *II = RD->getIdentifier();
+  if (!II)
+    return false;
+
+  if (II->getName() == "array") {
+    const NamespaceDecl *NS = dyn_cast<NamespaceDecl>(RD->getDeclContext());
+    if (NS && NS->getName() == "std") {
+      return true;
+    }
+  }
+
+  return false;
+}
+
 void ProTypeMemberInitCheck::checkMissingMemberInitializer(
     ASTContext &Context, const CXXRecordDecl &ClassDecl,
     const CXXConstructorDecl *Ctor) {
@@ -435,7 +457,7 @@ void ProTypeMemberInitCheck::checkMissingMemberInitializer(
   bool AnyMemberHasInitPerUnion = false;
   forEachFieldWithFilter(ClassDecl, ClassDecl.fields(),
                          AnyMemberHasInitPerUnion, [&](const FieldDecl *F) {
-    if (IgnoreArrays && F->getType()->isArrayType())
+    if (IgnoreArrays && (F->getType()->isArrayType() || 
isStdArray(F->getType())))
       return;
     if (F->hasInClassInitializer() && F->getParent()->isUnion()) {
       AnyMemberHasInitPerUnion = true;

``````````

</details>


https://github.com/llvm/llvm-project/pull/98134
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to