Index: clang-tidy/misc/SuspiciousMissingCommaCheck.cpp =================================================================== --- clang-tidy/misc/SuspiciousMissingCommaCheck.cpp +++ clang-tidy/misc/SuspiciousMissingCommaCheck.cpp @@ -100,6 +100,16 @@ Result.Nodes.getNodeAs("str"); assert(InitializerList && ConcatenatedLiteral); + // InitializerList has an array filler when the explicitly given size is + // bigger than the real array size - e.g. because there is a missing comma. + if (InitializerList->hasArrayFiller()) { + diag(InitializerList->getExprLoc(), + "wrong string array initialization: " + "the explicit given size and the " + "real number of elements aren't equal"); + return; + } + // Skip small arrays as they often generate false-positive. unsigned int Size = InitializerList->getNumInits(); if (Size < SizeThreshold) return; Index: docs/clang-tidy/checks/misc-suspicious-missing-comma.rst =================================================================== --- docs/clang-tidy/checks/misc-suspicious-missing-comma.rst +++ docs/clang-tidy/checks/misc-suspicious-missing-comma.rst @@ -42,3 +42,14 @@ "Warning %s", }; +This checker is also capable of warn on cases when the explicitly given array size +isn't equal to the real array size. + +.. code:: c++ + + const char* TheThreeMusketeers[4] = { + "Athos", + "Porthos", + "Aramis" + "D'Artagnan" + }; Index: test/clang-tidy/misc-suspicious-missing-comma.cpp =================================================================== --- test/clang-tidy/misc-suspicious-missing-comma.cpp +++ test/clang-tidy/misc-suspicious-missing-comma.cpp @@ -80,3 +80,21 @@ "Dummy line", "Dummy line", }; + +// Missing comma or wrong explicit array size. +const char* TheThreeMusketeers[4] = { + "Athos", + "Porthos", + "Aramis" + "D'Artagnan" +}; +// CHECK-MESSAGES: :[[@LINE-6]]:3: warning: wrong string array initialization: the explicit given size and the real number of elements aren't equal [misc-suspicious-missing-comma] + +// Correctly given array size should avoid warning. +const char* TheFourMusketeers[4] = { + "Athos", + "Porthos", + "Aramis", + "Charles de Batz de Castelmore" + "D'Artagnan" +};