Skip to content

Commit f122da3

Browse files
Fix #13196 FP negativeContainerIndex for non-empty container (#6948)
1 parent 95bbb6e commit f122da3

File tree

2 files changed

+12
-2
lines changed

2 files changed

+12
-2
lines changed

Diff for: lib/valueflow.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -5452,6 +5452,7 @@ void ValueFlow::setValues(TokenList& tokenlist,
54525452
VFA(analyzeArrayBool(tokenlist, settings)),
54535453
VFA(analyzeArrayElement(tokenlist, settings)),
54545454
VFA(analyzeRightShift(tokenlist, settings)),
5455+
VFA_CPP(valueFlowCondition(ContainerConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings, skippedFunctions)),
54555456
VFA(valueFlowAfterAssign(tokenlist, symboldatabase, errorLogger, settings, skippedFunctions)),
54565457
VFA_CPP(valueFlowAfterSwap(tokenlist, symboldatabase, errorLogger, settings)),
54575458
VFA(valueFlowCondition(SimpleConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings, skippedFunctions)),
@@ -5470,8 +5471,6 @@ void ValueFlow::setValues(TokenList& tokenlist,
54705471
valueFlowCondition(IteratorConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings, skippedFunctions)),
54715472
VFA_CPP(analyzeIteratorInfer(tokenlist, settings)),
54725473
VFA_CPP(valueFlowContainerSize(tokenlist, symboldatabase, errorLogger, settings, skippedFunctions)),
5473-
VFA_CPP(
5474-
valueFlowCondition(ContainerConditionHandler{}, tokenlist, symboldatabase, errorLogger, settings, skippedFunctions)),
54755474
VFA(valueFlowSafeFunctions(tokenlist, symboldatabase, errorLogger, settings)),
54765475
});
54775476

Diff for: test/teststl.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -2587,6 +2587,17 @@ class TestStl : public TestFixture {
25872587
"int O::f() const { return v[c.h() - 1]; }\n");
25882588
ASSERT_EQUALS("", errout_str());
25892589

2590+
check("void f(const std::vector<int>& v) {\n" // #13196
2591+
" if (v.empty())\n"
2592+
" return;\n"
2593+
" int idx = -1;\n"
2594+
" for (int i = 0; i < v.size(); ++i) {\n"
2595+
" idx = i;\n"
2596+
" }\n"
2597+
" (void)v[idx];\n"
2598+
"}\n");
2599+
ASSERT_EQUALS("", errout_str());
2600+
25902601
const auto oldSettings = settings;
25912602
settings.daca = true;
25922603

0 commit comments

Comments
 (0)