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"); }