diff --git a/lib/checkunusedvar.cpp b/lib/checkunusedvar.cpp index ca91679c17a..ba5fee3acd2 100644 --- a/lib/checkunusedvar.cpp +++ b/lib/checkunusedvar.cpp @@ -1555,7 +1555,7 @@ void CheckUnusedVar::checkStructMemberUsage() tok = tok->next()->astOperand2(); const ValueType *valueType = tok->valueType(); - if (!valueType->containerTypeToken) + if (!valueType || !valueType->containerTypeToken) continue; const Type *type = valueType->containerTypeToken->type(); diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index e6507e7304b..95624048651 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -2047,6 +2047,15 @@ class TestUnusedVar : public TestFixture { " x = y;\n" "}\n"); ASSERT_EQUALS("", errout_str()); + + // #13551 - don't crash + checkStructMemberUsage("struct S {};\n" + "void f(vector> p) {\n" + " for (auto [a, _] : p) {\n" + " if (a == 0) {}\n" + " }\n" + "}\n"); + ASSERT_EQUALS("", errout_str()); } void functionVariableUsage_(const char* file, int line, const char code[], bool cpp = true) {