From b68d6f94715c33c42226be15aa43c3ad61657df7 Mon Sep 17 00:00:00 2001 From: Paul Fultz II Date: Sun, 22 Mar 2020 04:12:53 -0500 Subject: [PATCH] Fix crash in valueflow when using local classes (#2575) --- lib/forwardanalyzer.cpp | 4 ++++ test/testvalueflow.cpp | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/lib/forwardanalyzer.cpp b/lib/forwardanalyzer.cpp index ba6577add..b394da4c8 100644 --- a/lib/forwardanalyzer.cpp +++ b/lib/forwardanalyzer.cpp @@ -46,6 +46,10 @@ struct ForwardTraversal { return Progress::Break; if (out) *out = lambdaEndToken; + // Skip class scope + } else if (Token::simpleMatch(tok, "{") && tok->scope() && tok->scope()->isClassOrStruct()) { + if (out) + *out = tok->link(); } else { if (f(tok) == Progress::Break) return Progress::Break; diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index ba97ebeab..4bd1a3da5 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -4453,6 +4453,14 @@ private: " dostuff(1);\n" "}\n"; valueOfTok(code, "x"); + + code = "void a() {\n" + " static int x = 0;\n" + " struct c {\n" + " c(c &&) { ++x; }\n" + " };\n" + "}\n"; + valueOfTok(code, "x"); } void valueFlowHang() {