diff --git a/lib/astutils.cpp b/lib/astutils.cpp index 39c6359823a..97b00e8784e 100644 --- a/lib/astutils.cpp +++ b/lib/astutils.cpp @@ -2120,7 +2120,8 @@ bool isWithoutSideEffects(const Token* tok, bool checkArrayAccess, bool checkRef tok = tok->astOperand2(); if (tok && tok->varId()) { const Variable* var = tok->variable(); - return var && ((!var->isClass() && (checkReference || !var->isReference())) || var->isPointer() || (checkArrayAccess ? var->isStlType() && !var->isStlType(CheckClass::stl_containers_not_const) : var->isStlType())); + return var && ((!var->isClass() && (checkReference || !var->isReference())) || var->isPointer() || + (checkArrayAccess ? var->isArray() || (var->isStlType() && !var->isStlType(CheckClass::stl_containers_not_const)) : var->isStlType())); } return true; } diff --git a/test/testincompletestatement.cpp b/test/testincompletestatement.cpp index 7a1fbdb2dab..3d8f5d4d713 100644 --- a/test/testincompletestatement.cpp +++ b/test/testincompletestatement.cpp @@ -750,6 +750,14 @@ class TestIncompleteStatement : public TestFixture { " g();\n" "}\n"); ASSERT_EQUALS("", errout_str()); + + check("struct S;\n" // #14664 + "S* a[1];\n" + "void f() {\n" + " a[0];\n" + "}\n"); + ASSERT_EQUALS("[test.cpp:4:6]: (warning) Redundant code: Found unused array access. [constStatement]\n", + errout_str()); } void vardecl() {