diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 85f90085416..ba0850f9bdc 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -5329,7 +5329,7 @@ static void valueFlowForwardConst(Token* start, const Settings* const settings, int /*unused*/ = 0) { - for (Token* tok = start; tok != end; tok = tok->next()) { + for (Token* tok = start; precedes(tok, end); tok = tok->next()) { if (tok->varId() == var->declarationId()) { for (const ValueFlow::Value& value : values) setTokenValue(tok, value, settings); diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 5b2cb58e47b..7106b1301af 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -6812,6 +6812,14 @@ class TestValueFlow : public TestFixture { " std::shared_ptr m;\n" "};\n"; valueOfTok(code, "r"); + + code = "void f(int a, int b) {\n" // #11423 + " auto g = [](int& a, const int b) -> void {};\n" + " auto h = [&a, &b]() {\n" + " std::swap(a, b);\n" + " };\n" + "}\n"; + valueOfTok(code, "b"); } void valueFlowHang() {