diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp --- a/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp +++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/ProTypeMemberInitCheck.cpp @@ -402,6 +402,8 @@ // Gather all fields (direct and indirect) that need to be initialized. SmallPtrSet FieldsToInit; forEachField(ClassDecl, ClassDecl.fields(), [&](const FieldDecl *F) { + if (IgnoreArrays && F->getType()->isArrayType()) + return; if (!F->hasInClassInitializer() && utils::type_traits::isTriviallyDefaultConstructible(F->getType(), Context) && diff --git a/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-pro-type-member-init.ignorearrays.cpp b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-pro-type-member-init.ignorearrays.cpp new file mode 100644 --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/checkers/cppcoreguidelines-pro-type-member-init.ignorearrays.cpp @@ -0,0 +1,16 @@ +// RUN: %check_clang_tidy %s \ +// RUN: cppcoreguidelines-pro-type-member-init %t \ +// RUN: -config="{CheckOptions: \ +// RUN: [{key: cppcoreguidelines-pro-type-member-init.IgnoreArrays, value: true} ]}" + +typedef int TypedefArray[4]; +using UsingArray = int[4]; + +struct HasArrayMember { + HasArrayMember() {} + // CHECK-MESSAGES: warning: constructor does not initialize these fields: Number + UsingArray U; + TypedefArray T; + int RawArray[4]; + int Number; +};