diff --git a/lib/checksizeof.cpp b/lib/checksizeof.cpp index b9c495733e0..2d9012078a6 100644 --- a/lib/checksizeof.cpp +++ b/lib/checksizeof.cpp @@ -87,7 +87,7 @@ void CheckSizeofImpl::checkSizeofForArrayParameter() } const Variable *var = varTok->variable(); - if (var && var->isArray() && var->isArgument() && !var->isReference()) + if (var && var->isArray() && var->isArgument() && !var->isReference() && !(var->isStlType() && var->getTypeName() == "std::array")) sizeofForArrayParameterError(tok); } } diff --git a/test/testsizeof.cpp b/test/testsizeof.cpp index 9337252f92c..f955242019f 100644 --- a/test/testsizeof.cpp +++ b/test/testsizeof.cpp @@ -334,6 +334,14 @@ class TestSizeof : public TestFixture { "}"); ASSERT_EQUALS("", errout_str()); + check("int f(std::array a) {\n" // #14860 + " return sizeof(a);\n" + "}\n" + "int g(std::string a[2]) {\n" + " return sizeof(a);\n" + "}\n"); + ASSERT_EQUALS("[test.cpp:5:12]: (warning) Using 'sizeof' on array given as function argument returns size of a pointer. [sizeofwithsilentarraypointer]\n", + errout_str()); } void sizeofForNumericParameter() {