From 8a1b8df1ba9738a17ac6dabe1b36c8e041ea8eeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Sun, 8 Feb 2015 19:20:05 +0100 Subject: [PATCH] ValueFlow: Improved handling of alias values in valueFlowForward --- lib/valueflow.cpp | 2 ++ test/testvalueflow.cpp | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 489aebfc4..7c1a882d2 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -142,6 +142,8 @@ static std::map getProgramMemory(const Token *tok { std::map programMemory; programMemory[varid] = value.intvalue; + if (value.varId) + programMemory[value.varId] = value.varvalue; const std::map programMemory1(programMemory); int indentlevel = 0; for (const Token *tok2 = tok; tok2; tok2 = tok2->previous()) { diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 40baa9e6b..cfc024603 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -766,6 +766,13 @@ private: "}"; ASSERT_EQUALS(false, testValueOfX(code, 6U, 0)); + code = "void f(int y) {\n" // alias + " int x = y;\n" + " if (y == 54) {}\n" + " else { a = x; }\n" + "}"; + ASSERT_EQUALS(false, testValueOfX(code, 4U, 54)); + code = "void f () {\n" " ST * x = g_pST;\n" " if (x->y == 0) {\n"