Skip to content

Commit 4f922f5

Browse files
authored
Merge pull request #835 from JIghtuse/master
Fixed #7139 (ValueFlow: Missed shift operation in for expression)
2 parents ba6cda9 + a32f61a commit 4f922f5

2 files changed

Lines changed: 17 additions & 0 deletions

File tree

lib/valueflow.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1929,6 +1929,10 @@ static void execute(const Token *expr,
19291929
*result = result1 / result2;
19301930
else if (expr->str() == "%")
19311931
*result = result1 % result2;
1932+
else if (expr->str() == "<<")
1933+
*result = result1 << result2;
1934+
else if (expr->str() == ">>")
1935+
*result = result1 >> result2;
19321936
}
19331937

19341938
else if (expr->str() == "&&") {

test/testvalueflow.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1968,6 +1968,19 @@ class TestValueFlow : public TestFixture {
19681968
value = valueOfTok(code, "&");
19691969
ASSERT_EQUALS(0, value.intvalue);
19701970
ASSERT(value.isKnown());
1971+
1972+
// Ticket #7139
1973+
// "<<" in third expression of for
1974+
code = "void f(void) {\n"
1975+
" int bit, x;\n"
1976+
" for (bit = 1, x = 0; bit < 128; bit = bit << 1, x++) {\n"
1977+
" z = x;\n" // <- known value [0..6]
1978+
" }\n"
1979+
"}\n";
1980+
ASSERT_EQUALS(true, testValueOfX(code, 4U, 0));
1981+
ASSERT_EQUALS(true, testValueOfX(code, 4U, 6));
1982+
ASSERT_EQUALS(false, testValueOfX(code, 4U, 7));
1983+
ASSERT(value.isKnown());
19711984
}
19721985
};
19731986

0 commit comments

Comments
 (0)