diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 04e4a71d18e..667666ad602 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -7649,6 +7649,8 @@ static void valueFlowContainerSize(TokenList* tokenlist, for (const Variable *var : symboldatabase->variableList()) { if (!var) continue; + if (!var->scope() || !var->scope()->bodyEnd || !var->scope()->bodyStart) + continue; if (!var->valueType() || !var->valueType()->container) continue; if (!astIsContainer(var->nameToken())) diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 1ecd16c67b0..9756cfb5018 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -6434,6 +6434,12 @@ class TestValueFlow : public TestFixture { " std::cout << (void*)(std::shared_ptr{ g() }.get());\n" "}\n"; valueOfTok(code, "."); + + code = "class T;\n" + "struct S {\n" + " void f(std::array& a);\n" + "};\n"; + valueOfTok(code, "a"); } void valueFlowHang() {