Skip to content

Commit 6ee9633

Browse files
Fix #13550 Remove boostForeachError/checkboost.cpp (#7198)
1 parent 0e1166b commit 6ee9633

12 files changed

+62
-282
lines changed

Makefile

-8
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ LIBOBJ = $(libcppdir)/valueflow.o \
191191
$(libcppdir)/checkassert.o \
192192
$(libcppdir)/checkautovariables.o \
193193
$(libcppdir)/checkbool.o \
194-
$(libcppdir)/checkboost.o \
195194
$(libcppdir)/checkbufferoverrun.o \
196195
$(libcppdir)/checkclass.o \
197196
$(libcppdir)/checkcondition.o \
@@ -275,7 +274,6 @@ TESTOBJ = test/fixture.o \
275274
test/testastutils.o \
276275
test/testautovariables.o \
277276
test/testbool.o \
278-
test/testboost.o \
279277
test/testbufferoverrun.o \
280278
test/testcharvar.o \
281279
test/testcheck.o \
@@ -482,9 +480,6 @@ $(libcppdir)/checkautovariables.o: lib/checkautovariables.cpp lib/addoninfo.h li
482480
$(libcppdir)/checkbool.o: lib/checkbool.cpp lib/addoninfo.h lib/astutils.h lib/check.h lib/checkbool.h lib/config.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h
483481
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/checkbool.cpp
484482

485-
$(libcppdir)/checkboost.o: lib/checkboost.cpp lib/check.h lib/checkboost.h lib/config.h lib/errortypes.h lib/library.h lib/mathlib.h lib/sourcelocation.h lib/standards.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h
486-
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/checkboost.cpp
487-
488483
$(libcppdir)/checkbufferoverrun.o: lib/checkbufferoverrun.cpp externals/tinyxml2/tinyxml2.h lib/addoninfo.h lib/astutils.h lib/check.h lib/checkbufferoverrun.h lib/color.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/path.h lib/platform.h lib/settings.h lib/smallvector.h lib/sourcelocation.h lib/standards.h lib/suppressions.h lib/symboldatabase.h lib/templatesimplifier.h lib/token.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/valueflow.h lib/vfvalue.h lib/xml.h
489484
$(CXX) ${INCLUDE_FOR_LIB} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/checkbufferoverrun.cpp
490485

@@ -719,9 +714,6 @@ test/testautovariables.o: test/testautovariables.cpp externals/simplecpp/simplec
719714
test/testbool.o: test/testbool.cpp externals/simplecpp/simplecpp.h lib/addoninfo.h lib/check.h lib/checkbool.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h
720715
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testbool.cpp
721716

722-
test/testboost.o: test/testboost.cpp externals/simplecpp/simplecpp.h lib/addoninfo.h lib/check.h lib/checkboost.h lib/color.h lib/config.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/tokenize.h lib/tokenlist.h lib/utils.h test/fixture.h test/helpers.h
723-
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testboost.cpp
724-
725717
test/testbufferoverrun.o: test/testbufferoverrun.cpp externals/simplecpp/simplecpp.h lib/addoninfo.h lib/check.h lib/checkbufferoverrun.h lib/color.h lib/config.h lib/ctu.h lib/errorlogger.h lib/errortypes.h lib/library.h lib/mathlib.h lib/platform.h lib/preprocessor.h lib/settings.h lib/standards.h lib/suppressions.h lib/tokenize.h lib/tokenlist.h lib/utils.h lib/vfvalue.h test/fixture.h test/helpers.h
726718
$(CXX) ${INCLUDE_FOR_TEST} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ test/testbufferoverrun.cpp
727719

lib/checkboost.cpp

-82
This file was deleted.

lib/checkboost.h

-71
This file was deleted.

lib/cppcheck.vcxproj

-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
<ClCompile Include="checkassert.cpp" />
3737
<ClCompile Include="checkautovariables.cpp" />
3838
<ClCompile Include="checkbool.cpp" />
39-
<ClCompile Include="checkboost.cpp" />
4039
<ClCompile Include="checkbufferoverrun.cpp" />
4140
<ClCompile Include="checkclass.cpp" />
4241
<ClCompile Include="checkcondition.cpp" />
@@ -108,7 +107,6 @@
108107
<ClInclude Include="checkassert.h" />
109108
<ClInclude Include="checkautovariables.h" />
110109
<ClInclude Include="checkbool.h" />
111-
<ClInclude Include="checkboost.h" />
112110
<ClInclude Include="checkbufferoverrun.h" />
113111
<ClInclude Include="checkclass.h" />
114112
<ClInclude Include="checkcondition.h" />

lib/cppcheck.vcxproj.filters

-6
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,6 @@
8989
<ClCompile Include="token.cpp">
9090
<Filter>Source Files</Filter>
9191
</ClCompile>
92-
<ClCompile Include="checkboost.cpp">
93-
<Filter>Source Files</Filter>
94-
</ClCompile>
9592
<ClCompile Include="checkinternal.cpp">
9693
<Filter>Source Files</Filter>
9794
</ClCompile>
@@ -382,9 +379,6 @@
382379
<ClInclude Include="checkautovariables.h">
383380
<Filter>Header Files</Filter>
384381
</ClInclude>
385-
<ClInclude Include="checkboost.h">
386-
<Filter>Header Files</Filter>
387-
</ClInclude>
388382
<ClInclude Include="checkio.h">
389383
<Filter>Header Files</Filter>
390384
</ClInclude>

lib/tokenize.cpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -5499,10 +5499,11 @@ bool Tokenizer::simplifyTokenList1(const char FileName[])
54995499

55005500
// if MACRO
55015501
for (Token *tok = list.front(); tok; tok = tok->next()) {
5502-
if (Token::Match(tok, "if|for|while|BOOST_FOREACH %name% (")) {
5502+
if (Token::Match(tok, "if|for|while %name% (")) {
55035503
if (Token::simpleMatch(tok, "for each")) {
5504-
// 'for each ( )' -> 'asm ( )'
5505-
tok->str("asm");
5504+
// 'for each (x in y )' -> 'for (x : y)'
5505+
if (Token* in = Token::findsimplematch(tok->tokAt(2), "in", tok->linkAt(2)))
5506+
in->str(":");
55065507
tok->deleteNext();
55075508
} else if (tok->strAt(1) == "constexpr") {
55085509
tok->deleteNext();

oss-fuzz/Makefile

-4
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ LIBOBJ = $(libcppdir)/valueflow.o \
4444
$(libcppdir)/checkassert.o \
4545
$(libcppdir)/checkautovariables.o \
4646
$(libcppdir)/checkbool.o \
47-
$(libcppdir)/checkboost.o \
4847
$(libcppdir)/checkbufferoverrun.o \
4948
$(libcppdir)/checkclass.o \
5049
$(libcppdir)/checkcondition.o \
@@ -178,9 +177,6 @@ $(libcppdir)/checkautovariables.o: ../lib/checkautovariables.cpp ../lib/addoninf
178177
$(libcppdir)/checkbool.o: ../lib/checkbool.cpp ../lib/addoninfo.h ../lib/astutils.h ../lib/check.h ../lib/checkbool.h ../lib/config.h ../lib/errortypes.h ../lib/library.h ../lib/mathlib.h ../lib/platform.h ../lib/settings.h ../lib/smallvector.h ../lib/sourcelocation.h ../lib/standards.h ../lib/suppressions.h ../lib/symboldatabase.h ../lib/templatesimplifier.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/vfvalue.h
179178
$(CXX) ${LIB_FUZZING_ENGINE} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/checkbool.cpp
180179

181-
$(libcppdir)/checkboost.o: ../lib/checkboost.cpp ../lib/check.h ../lib/checkboost.h ../lib/config.h ../lib/errortypes.h ../lib/library.h ../lib/mathlib.h ../lib/sourcelocation.h ../lib/standards.h ../lib/symboldatabase.h ../lib/templatesimplifier.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/vfvalue.h
182-
$(CXX) ${LIB_FUZZING_ENGINE} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/checkboost.cpp
183-
184180
$(libcppdir)/checkbufferoverrun.o: ../lib/checkbufferoverrun.cpp ../externals/tinyxml2/tinyxml2.h ../lib/addoninfo.h ../lib/astutils.h ../lib/check.h ../lib/checkbufferoverrun.h ../lib/color.h ../lib/config.h ../lib/ctu.h ../lib/errorlogger.h ../lib/errortypes.h ../lib/library.h ../lib/mathlib.h ../lib/path.h ../lib/platform.h ../lib/settings.h ../lib/smallvector.h ../lib/sourcelocation.h ../lib/standards.h ../lib/suppressions.h ../lib/symboldatabase.h ../lib/templatesimplifier.h ../lib/token.h ../lib/tokenize.h ../lib/tokenlist.h ../lib/utils.h ../lib/valueflow.h ../lib/vfvalue.h ../lib/xml.h
185181
$(CXX) ${LIB_FUZZING_ENGINE} $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $(libcppdir)/checkbufferoverrun.cpp
186182

test/cfg/boost.cpp

+55-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
#include <boost/thread/lock_guard.hpp>
2020
#include <boost/test/unit_test.hpp>
2121
#include <boost/core/scoped_enum.hpp>
22+
#include <boost/foreach.hpp>
23+
24+
#include <set>
25+
#include <vector>
2226

2327
BOOST_FORCEINLINE void boost_forceinline_test()
2428
{}
@@ -108,6 +112,56 @@ void lock_guard_finiteLifetime(boost::mutex& m)
108112
boost::lock_guard<boost::mutex>{ m };
109113
}
110114

115+
void test_BOOST_FOREACH_1(std::vector<int> data)
116+
{
117+
BOOST_FOREACH(int i, data) {
118+
// cppcheck-suppress invalidContainerLoop
119+
data.push_back(123);
120+
}
121+
}
122+
123+
void test_BOOST_FOREACH_2(std::set<int> data)
124+
{
125+
BOOST_FOREACH(int i, data) {
126+
// don't warn for std::set
127+
data.insert(123);
128+
}
129+
}
130+
131+
void test_BOOST_FOREACH_3(std::vector<int> data)
132+
{
133+
BOOST_FOREACH(const int& i, data) {
134+
// cppcheck-suppress invalidContainerLoop
135+
data.erase(data.begin());
136+
}
137+
}
138+
139+
// Check single line usage
140+
void test_BOOST_FOREACH_4(std::vector<int> data)
141+
{
142+
BOOST_FOREACH(const int& i, data)
143+
// cppcheck-suppress invalidContainerLoop
144+
data.clear();
145+
}
146+
147+
// Container returned as result of a function -> Be quiet
148+
std::vector<int> get_data();
149+
void test_BOOST_FOREACH_5()
150+
{
151+
std::set<int> data;
152+
BOOST_FOREACH(const int& i, get_data())
153+
data.insert(i);
154+
}
155+
156+
// Break after modification (#4788)
157+
void test_BOOST_FOREACH_6(std::vector<int> data)
158+
{
159+
BOOST_FOREACH(int i, data) {
160+
data.push_back(123);
161+
break;
162+
}
163+
}
164+
111165
BOOST_AUTO_TEST_SUITE(my_auto_test_suite)
112166

113167
BOOST_AUTO_TEST_CASE(test_message_macros)
@@ -127,4 +181,4 @@ BOOST_AUTO_TEST_CASE_TEMPLATE(my_tuple_test, T, test_types_w_tuples)
127181
BOOST_TEST(sizeof(T) == 4U);
128182
}
129183

130-
BOOST_AUTO_TEST_SUITE_END()
184+
BOOST_AUTO_TEST_SUITE_END()

0 commit comments

Comments
 (0)