From 38214b690759c675b9ae6ec78ca4975743093fb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Marjam=C3=A4ki?= Date: Thu, 16 Jul 2015 20:49:14 +0200 Subject: [PATCH] ValueFlow: function arguments only has 'possible' values --- lib/valueflow.cpp | 7 +++++++ test/testvalueflow.cpp | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/lib/valueflow.cpp b/lib/valueflow.cpp index 4f77b8c63..21a709859 100644 --- a/lib/valueflow.cpp +++ b/lib/valueflow.cpp @@ -1878,6 +1878,13 @@ static void valueFlowSubFunction(TokenList *tokenlist, ErrorLogger *errorLogger, continue; } } + + // passed values are not "known".. + for (std::list::iterator it = argvalues.begin(); it != argvalues.end(); ++it) { + if (it->valueKind == ValueFlow::Value::Known) + it->valueKind = ValueFlow::Value::Possible; + } + valueFlowInjectParameter(tokenlist, errorLogger, settings, arg, functionScope, argvalues); } } diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 47d030fed..8fcd9c999 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -1556,6 +1556,13 @@ private: value = valueOfTok(code, "+"); ASSERT_EQUALS(5, value.intvalue); ASSERT_EQUALS(ValueFlow::Value::ValueKind::Possible, value.valueKind); + + // function + code = "int f(int x) { return x + 1; }\n" // <- possible value + "void a() { f(12); }\b"; + value = valueOfTok(code, "+"); + ASSERT_EQUALS(13, value.intvalue); + ASSERT_EQUALS(ValueFlow::Value::ValueKind::Possible, value.valueKind); } };