diff --git a/Makefile b/Makefile
index a1e087771..ca835744d 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
# This file is generated by tools/dmake, do not edit.
ifndef CXXFLAGS
- CXXFLAGS=-DHAVE_RULES -Wall -Wextra -Wshadow -pedantic -Wno-long-long -Wfloat-equal -Wcast-qual -Wsign-conversion -g
+ CXXFLAGS=-DHAVE_RULES -Wall -Wextra -Wshadow -pedantic -Wno-long-long -Wfloat-equal -Wcast-qual -g
endif
ifndef CXX
@@ -192,7 +192,7 @@ lib/checkunusedfunctions.o: lib/checkunusedfunctions.cpp lib/checkunusedfunction
lib/cppcheck.o: lib/cppcheck.cpp lib/cppcheck.h lib/settings.h lib/errorlogger.h lib/checkunusedfunctions.h lib/check.h lib/token.h lib/tokenize.h lib/preprocessor.h lib/path.h lib/timer.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_LIB} -c -o lib/cppcheck.o lib/cppcheck.cpp
-lib/errorlogger.o: lib/errorlogger.cpp lib/errorlogger.h lib/path.h lib/cppcheck.h lib/settings.h lib/checkunusedfunctions.h lib/check.h lib/token.h lib/tokenize.h
+lib/errorlogger.o: lib/errorlogger.cpp lib/errorlogger.h lib/settings.h lib/path.h lib/cppcheck.h lib/checkunusedfunctions.h lib/check.h lib/token.h lib/tokenize.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_LIB} -c -o lib/errorlogger.o lib/errorlogger.cpp
lib/executionpath.o: lib/executionpath.cpp lib/executionpath.h lib/token.h
@@ -216,7 +216,7 @@ lib/symboldatabase.o: lib/symboldatabase.cpp lib/symboldatabase.h lib/token.h li
lib/timer.o: lib/timer.cpp lib/timer.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_LIB} -c -o lib/timer.o lib/timer.cpp
-lib/token.o: lib/token.cpp lib/token.h lib/errorlogger.h lib/check.h lib/tokenize.h lib/settings.h
+lib/token.o: lib/token.cpp lib/token.h lib/errorlogger.h lib/settings.h lib/check.h lib/tokenize.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_LIB} -c -o lib/token.o lib/token.cpp
lib/tokenize.o: lib/tokenize.cpp lib/tokenize.h lib/token.h lib/mathlib.h lib/settings.h lib/errorlogger.h lib/check.h lib/path.h lib/symboldatabase.h
@@ -261,7 +261,7 @@ test/testcharvar.o: test/testcharvar.cpp lib/tokenize.h lib/checkother.h lib/che
test/testclass.o: test/testclass.cpp lib/tokenize.h lib/checkclass.h lib/check.h lib/token.h lib/settings.h lib/errorlogger.h lib/symboldatabase.h test/testsuite.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testclass.o test/testclass.cpp
-test/testcmdlineparser.o: test/testcmdlineparser.cpp test/testsuite.h lib/errorlogger.h test/redirect.h lib/settings.h
+test/testcmdlineparser.o: test/testcmdlineparser.cpp test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testcmdlineparser.o test/testcmdlineparser.cpp
test/testconstructors.o: test/testconstructors.cpp lib/tokenize.h lib/checkclass.h lib/check.h lib/token.h lib/settings.h lib/errorlogger.h lib/symboldatabase.h test/testsuite.h test/redirect.h
@@ -279,13 +279,13 @@ test/testerrorlogger.o: test/testerrorlogger.cpp lib/cppcheck.h lib/settings.h l
test/testexceptionsafety.o: test/testexceptionsafety.cpp lib/tokenize.h lib/checkexceptionsafety.h lib/check.h lib/token.h lib/settings.h lib/errorlogger.h test/testsuite.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testexceptionsafety.o test/testexceptionsafety.cpp
-test/testfilelister_unix.o: test/testfilelister_unix.cpp test/testsuite.h lib/errorlogger.h test/redirect.h
+test/testfilelister_unix.o: test/testfilelister_unix.cpp test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testfilelister_unix.o test/testfilelister_unix.cpp
-test/testincompletestatement.o: test/testincompletestatement.cpp test/testsuite.h lib/errorlogger.h test/redirect.h lib/tokenize.h lib/checkother.h lib/check.h lib/token.h lib/settings.h
+test/testincompletestatement.o: test/testincompletestatement.cpp test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h lib/tokenize.h lib/checkother.h lib/check.h lib/token.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testincompletestatement.o test/testincompletestatement.cpp
-test/testmathlib.o: test/testmathlib.cpp lib/mathlib.h test/testsuite.h lib/errorlogger.h test/redirect.h
+test/testmathlib.o: test/testmathlib.cpp lib/mathlib.h test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testmathlib.o test/testmathlib.cpp
test/testmemleak.o: test/testmemleak.cpp lib/tokenize.h lib/checkmemoryleak.h lib/check.h lib/token.h lib/settings.h lib/errorlogger.h lib/symboldatabase.h test/testsuite.h test/redirect.h
@@ -297,63 +297,63 @@ test/testnullpointer.o: test/testnullpointer.cpp lib/tokenize.h lib/checknullpoi
test/testobsoletefunctions.o: test/testobsoletefunctions.cpp lib/tokenize.h lib/checkobsoletefunctions.h lib/check.h lib/token.h lib/settings.h lib/errorlogger.h test/testsuite.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testobsoletefunctions.o test/testobsoletefunctions.cpp
-test/testoptions.o: test/testoptions.cpp test/options.h test/testsuite.h lib/errorlogger.h test/redirect.h
+test/testoptions.o: test/testoptions.cpp test/options.h test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testoptions.o test/testoptions.cpp
test/testother.o: test/testother.cpp lib/tokenize.h lib/checkother.h lib/check.h lib/token.h lib/settings.h lib/errorlogger.h test/testsuite.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testother.o test/testother.cpp
-test/testpath.o: test/testpath.cpp test/testsuite.h lib/errorlogger.h test/redirect.h lib/path.h
+test/testpath.o: test/testpath.cpp test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h lib/path.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testpath.o test/testpath.cpp
-test/testpathmatch.o: test/testpathmatch.cpp test/testsuite.h lib/errorlogger.h test/redirect.h
+test/testpathmatch.o: test/testpathmatch.cpp test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testpathmatch.o test/testpathmatch.cpp
test/testpostfixoperator.o: test/testpostfixoperator.cpp lib/tokenize.h lib/checkpostfixoperator.h lib/check.h lib/token.h lib/settings.h lib/errorlogger.h test/testsuite.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testpostfixoperator.o test/testpostfixoperator.cpp
-test/testpreprocessor.o: test/testpreprocessor.cpp test/testsuite.h lib/errorlogger.h test/redirect.h lib/preprocessor.h lib/tokenize.h lib/token.h lib/settings.h
+test/testpreprocessor.o: test/testpreprocessor.cpp test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h lib/preprocessor.h lib/tokenize.h lib/token.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testpreprocessor.o test/testpreprocessor.cpp
-test/testrunner.o: test/testrunner.cpp test/testsuite.h lib/errorlogger.h test/redirect.h test/options.h
+test/testrunner.o: test/testrunner.cpp test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h test/options.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testrunner.o test/testrunner.cpp
test/testsettings.o: test/testsettings.cpp lib/settings.h test/testsuite.h lib/errorlogger.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testsettings.o test/testsettings.cpp
-test/testsimplifytokens.o: test/testsimplifytokens.cpp test/testsuite.h lib/errorlogger.h test/redirect.h lib/tokenize.h lib/token.h lib/settings.h
+test/testsimplifytokens.o: test/testsimplifytokens.cpp test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h lib/tokenize.h lib/token.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testsimplifytokens.o test/testsimplifytokens.cpp
test/teststl.o: test/teststl.cpp lib/tokenize.h lib/checkstl.h lib/check.h lib/token.h lib/settings.h lib/errorlogger.h test/testsuite.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/teststl.o test/teststl.cpp
-test/testsuite.o: test/testsuite.cpp test/testsuite.h lib/errorlogger.h test/redirect.h test/options.h
+test/testsuite.o: test/testsuite.cpp test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h test/options.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testsuite.o test/testsuite.cpp
-test/testsuppressions.o: test/testsuppressions.cpp test/testsuite.h lib/cppcheck.h lib/settings.h lib/errorlogger.h cli/threadexecutor.h
+test/testsuppressions.o: test/testsuppressions.cpp lib/cppcheck.h lib/settings.h lib/errorlogger.h lib/checkunusedfunctions.h lib/check.h lib/token.h lib/tokenize.h test/testsuite.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testsuppressions.o test/testsuppressions.cpp
-test/testsymboldatabase.o: test/testsymboldatabase.cpp test/testsuite.h lib/errorlogger.h test/redirect.h test/testutils.h lib/settings.h lib/tokenize.h lib/token.h lib/symboldatabase.h
+test/testsymboldatabase.o: test/testsymboldatabase.cpp test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h test/testutils.h lib/tokenize.h lib/token.h lib/symboldatabase.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testsymboldatabase.o test/testsymboldatabase.cpp
test/testthreadexecutor.o: test/testthreadexecutor.cpp lib/cppcheck.h lib/settings.h lib/errorlogger.h lib/checkunusedfunctions.h lib/check.h lib/token.h lib/tokenize.h test/testsuite.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testthreadexecutor.o test/testthreadexecutor.cpp
-test/testtoken.o: test/testtoken.cpp test/testsuite.h lib/errorlogger.h test/redirect.h test/testutils.h lib/settings.h lib/tokenize.h lib/token.h
+test/testtoken.o: test/testtoken.cpp test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h test/testutils.h lib/tokenize.h lib/token.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testtoken.o test/testtoken.cpp
-test/testtokenize.o: test/testtokenize.cpp test/testsuite.h lib/errorlogger.h test/redirect.h lib/tokenize.h lib/token.h lib/settings.h
+test/testtokenize.o: test/testtokenize.cpp test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h lib/tokenize.h lib/token.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testtokenize.o test/testtokenize.cpp
test/testuninitvar.o: test/testuninitvar.cpp lib/tokenize.h lib/checkuninitvar.h lib/check.h lib/token.h lib/settings.h lib/errorlogger.h test/testsuite.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testuninitvar.o test/testuninitvar.cpp
-test/testunusedfunctions.o: test/testunusedfunctions.cpp lib/tokenize.h test/testsuite.h lib/errorlogger.h test/redirect.h lib/checkunusedfunctions.h lib/check.h lib/token.h lib/settings.h
+test/testunusedfunctions.o: test/testunusedfunctions.cpp lib/tokenize.h test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h lib/checkunusedfunctions.h lib/check.h lib/token.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testunusedfunctions.o test/testunusedfunctions.cpp
test/testunusedprivfunc.o: test/testunusedprivfunc.cpp lib/tokenize.h lib/checkclass.h lib/check.h lib/token.h lib/settings.h lib/errorlogger.h lib/symboldatabase.h test/testsuite.h test/redirect.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testunusedprivfunc.o test/testunusedprivfunc.cpp
-test/testunusedvar.o: test/testunusedvar.cpp test/testsuite.h lib/errorlogger.h test/redirect.h lib/tokenize.h lib/checkother.h lib/check.h lib/token.h lib/settings.h
+test/testunusedvar.o: test/testunusedvar.cpp test/testsuite.h lib/errorlogger.h lib/settings.h test/redirect.h lib/tokenize.h lib/checkother.h lib/check.h lib/token.h
$(CXX) $(CPPFLAGS) $(CXXFLAGS) ${INCLUDE_FOR_TEST} -c -o test/testunusedvar.o test/testunusedvar.cpp
diff --git a/cppcheck.cbproj b/cppcheck.cbproj
index 05d4a7a96..692ea829f 100644
--- a/cppcheck.cbproj
+++ b/cppcheck.cbproj
@@ -18,82 +18,82 @@
Base
- exe
true
- true
- NO_STRICT
+ exe
JPHNE
- true
+ NO_STRICT
+ true
true
- true
+ true
true
+ true
true
- true
true
+ true
true
false
- true
- C:\cppcheck;src;cli;lib;externals\tinyxml
true
- true
- true
- true
+ C:\cppcheck;src;cli;lib;externals\tinyxml
+ true
CppConsoleApplication
- true
+ true
+ true
+ true
.\
- true
+ true
true
- vcl.bpi;rtl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;vcldbx.bpi;bdertl.bpi;A407_R110.bpi;DreamEdit_C6.bpi
+ true
true
- true
- true
+ vcl.bpi;rtl.bpi;bcbie.bpi;vclx.bpi;vclactnband.bpi;xmlrtl.bpi;bcbsmp.bpi;dbrtl.bpi;vcldb.bpi;vcldbx.bpi;bdertl.bpi;A407_R110.bpi;DreamEdit_C6.bpi
true
- true
+ true
+ true
$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;C:\cppcheck;cli;lib;externals;externals\tinyxml
+ true
true
$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;C:\cppcheck;src;cli;lib;externals\tinyxml
- true
true
+ true
- false
false
- true
- _DEBUG;_HAS_ITERATOR_DEBUGGING=1;$(Defines)
+ false
true
- true
+ _DEBUG;_HAS_ITERATOR_DEBUGGING=1;$(Defines)
+ true
true
- true
+ true
true
+ true
true
- true
- true
false
+ true
+ true
true
true
None
DEBUG
- true
true
- true
+ true
true
- true
- .\
+ true
true
- true
+ .\
+ true
true
+ true
bcb_Debug
- true
- true
true
+ true
+ true
false
- true
true
+ true
true
true
true
- $(BDS)\lib\debug;$(ILINK_LibraryPath)
true
+ $(BDS)\lib\debug;$(ILINK_LibraryPath)
Full
true
@@ -113,133 +113,123 @@
CPlusPlusBuilder.Personality
CppConsoleApplication
-FalseFalse1000FalseFalseFalseFalseFalse105312521.0.0.01.0.0.0applicom.cFalseC:\linux-2.6.25.1\drivers\charFalseFalseTrueFalseFalseTrueTrue4$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;C:\cppcheck;cli;lib;externals$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;C:\cppcheck;src;cli;lib$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;C:\cppcheck;src $(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;C:\cppcheck
- 1$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;C:\cppcheck;src;cli;lib;externals\tinyxml$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;C:\cppcheck;src;cli;lib1NO_STRICTNO_STRICT3.\bcb_debug.1250
+FalseFalse1000FalseFalseFalseFalseFalse105312521.0.0.01.0.0.0applicom.cFalseC:\linux-2.6.25.1\drivers\charFalseFalseTrueFalseFalseTrueTrue4$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;C:\cppcheck;cli;lib;externals$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;C:\cppcheck;src;cli;lib$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;C:\cppcheck;src$(BDS)\include;$(BDS)\include\dinkumware;$(BDS)\include\vcl;C:\cppcheck1$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;C:\cppcheck;src;cli;lib;externals\tinyxml$(BDS)\lib;$(BDS)\lib\obj;$(BDS)\lib\psdk;C:\cppcheck;src;cli;lib1NO_STRICTNO_STRICT3.\bcb_debug.1250
- 27
+ 0
- 28
+ 1
+
+
+ cli\filelister.h
+ 2
+
+
+ 3
+
+
+ 4
- 29
+ 5
+
+
+ 6
- 26
-
-
- 30
-
-
- 31
-
-
- 32
-
-
- 33
+ 7
lib\checkautovariables.h
- 0
+ 8
lib\checkbufferoverrun.h
- 1
+ 9
lib\checkclass.h
- 2
+ 10
lib\checkexceptionsafety.h
- 3
+ 11
lib\checkmemoryleak.h
- 4
+ 12
lib\checknullpointer.h
- 5
+ 13
lib\checkobsoletefunctions.h
- 6
+ 14
lib\checkother.h
- 7
+ 15
lib\checkpostfixoperator.h
- 8
+ 16
lib\checkstl.h
- 9
+ 17
lib\checkuninitvar.h
- 10
+ 18
lib\checkunusedfunctions.h
- 11
+ 19
- 12
+ 20
lib\errorlogger.h
- 13
+ 21
lib\executionpath.h
- 14
-
-
- lib\filelister.h
- 15
-
-
- 16
-
-
- 17
+ 22
lib\mathlib.h
- 18
+ 23
- 19
+ 24
lib\preprocessor.h
- 20
+ 25
lib\settings.h
- 21
+ 26
lib\symboldatabase.h
- 22
+ 27
- 23
+ 28
lib\token.h
- 24
+ 29
lib\tokenize.h
- 25
+ 30
Cfg_1
diff --git a/lib/checknullpointer.cpp b/lib/checknullpointer.cpp
index 8d3219afe..698476b12 100644
--- a/lib/checknullpointer.cpp
+++ b/lib/checknullpointer.cpp
@@ -554,7 +554,7 @@ void CheckNullPointer::nullPointerByCheckAndDeRef()
{
// goto the end paranthesis
const Token *endpar = tok->next()->link();
- const Token *endbody = endpar ? endpar->next()->link() : 0;
+ const Token *endbody = Token::simpleMatch(endpar, ") {") ? endpar->next()->link() : 0;
if (endbody &&
Token::Match(endbody->tokAt(-3), "[;{}] %var% ;") &&
isUpper(endbody->tokAt(-2)->str()))
diff --git a/lib/checkother.cpp b/lib/checkother.cpp
index f75f5f83f..233f562a8 100644
--- a/lib/checkother.cpp
+++ b/lib/checkother.cpp
@@ -73,10 +73,10 @@ void CheckOther::clarifyCalculation()
return;
for (const Token *tok = _tokenizer->tokens(); tok; tok = tok->next())
{
- if (tok->str() == "?")
+ if (tok->strAt(1) == "?")
{
// condition
- const Token *cond = tok->previous();
+ const Token *cond = tok;
if (cond->isName() || cond->isNumber())
cond = cond->previous();
else if (cond->str() == ")")
@@ -85,7 +85,7 @@ void CheckOther::clarifyCalculation()
continue;
// multiplication
- if (cond->str() == "*")
+ if (cond && cond->str() == "*")
cond = cond->previous();
else
continue;
diff --git a/lib/tokenize.cpp b/lib/tokenize.cpp
index 90287bb39..d578c9ad9 100644
--- a/lib/tokenize.cpp
+++ b/lib/tokenize.cpp
@@ -1,4 +1,4 @@
-/*
+/*
* Cppcheck - A tool for static C/C++ code analysis
* Copyright (C) 2007-2011 Daniel Marjamäki and Cppcheck team.
*
@@ -5528,6 +5528,9 @@ void Tokenizer::simplifyVarDecl()
}
}
+ if (!tok2)
+ break;
+
if (Token::Match(tok2, ":: %type%"))
{
typelen += 2;
@@ -7684,9 +7687,9 @@ void Tokenizer::simplifyEnum()
// find all uses of this enumerator and substitute it's value for it's name
if (enumName && (enumValue || (enumValueStart && enumValueEnd)))
{
- const std::string pattern(className.empty() ?
- std::string("") :
- (className + " :: " + enumName->str()));
+ const std::string pattern = className.empty() ?
+ std::string("") :
+ std::string(className + " :: " + enumName->str());
int level = 1;
bool inScope = true;
diff --git a/test/testnullpointer.cpp b/test/testnullpointer.cpp
index 35b239974..03a7d0e1b 100644
--- a/test/testnullpointer.cpp
+++ b/test/testnullpointer.cpp
@@ -890,6 +890,9 @@ private:
" };\n"
"}");
ASSERT_EQUALS("", errout.str());
+
+ // #2582 - segmentation fault
+ check("if()");
}
// Test CheckNullPointer::nullConstantDereference
diff --git a/test/testother.cpp b/test/testother.cpp
index bdd9261af..428e77ba2 100644
--- a/test/testother.cpp
+++ b/test/testother.cpp
@@ -1865,6 +1865,12 @@ private:
" printf(\"%i\", 10 * (c == 0) ? 1 : 2);\n"
"}");
ASSERT_EQUALS("[test.cpp:2]: (information) Please clarify precedence: 'a*b?..'\n", errout.str());
+
+ // Ticket #2585 - segmentation fault for invalid code
+ check("abcdef?" "?<"
+ "123456?" "?>"
+ "+?" "?=");
+ ASSERT_EQUALS("", errout.str());
}
void incorrectStringCompare()
diff --git a/test/testsuppressions.cpp b/test/testsuppressions.cpp
index d27f75f56..df6ac2627 100644
--- a/test/testsuppressions.cpp
+++ b/test/testsuppressions.cpp
@@ -191,7 +191,8 @@ private:
void suppressionsMultiFile()
{
const char *names[] = {"abc.cpp", "xyz.cpp", NULL};
- const char *codes[] = {
+ const char *codes[] =
+ {
"void f() {\n"
"}\n",
"void f() {\n"
diff --git a/test/testtokenize.cpp b/test/testtokenize.cpp
index 978ec46d7..504e1c769 100644
--- a/test/testtokenize.cpp
+++ b/test/testtokenize.cpp
@@ -234,7 +234,8 @@ private:
TEST_CASE(vardecl_union);
TEST_CASE(volatile_variables);
TEST_CASE(syntax_error);
- TEST_CASE(syntax_error_templates);
+ TEST_CASE(syntax_error_templates_1);
+ TEST_CASE(syntax_error_templates_2);
TEST_CASE(removeKeywords);
@@ -4165,7 +4166,7 @@ private:
}
- void syntax_error_templates()
+ void syntax_error_templates_1()
{
// ok code.. using ">" for a comparison
{
@@ -4235,6 +4236,14 @@ private:
}
}
+ void syntax_error_templates_2()
+ {
+ std::istringstream istr("template<>\n");
+ Settings settings;
+ Tokenizer tokenizer(&settings, this);
+ tokenizer.tokenize(istr, "test.cpp"); // shouldn't segfault
+ }
+
void removeKeywords()
{
const char code[] = "if (__builtin_expect(!!(x), 1));";
diff --git a/tools/dmake.cpp b/tools/dmake.cpp
index b8b739ff1..3332f14c5 100644
--- a/tools/dmake.cpp
+++ b/tools/dmake.cpp
@@ -232,6 +232,7 @@ int main(int argc, char **argv)
// TODO: add more compiler warnings.
// -Wlogical-op : doesn't work on older GCC
// -Wconversion : too many warnings
+ // -Wsign-conversion : too many warnings
// The _GLIBCXX_DEBUG doesn't work in cygwin
makeConditionalVariable(fout, "CXXFLAGS",
@@ -243,7 +244,7 @@ int main(int argc, char **argv)
"-Wno-long-long "
"-Wfloat-equal "
"-Wcast-qual "
- "-Wsign-conversion "
+// "-Wsign-conversion "
// "-Wconversion "
"-g");
}