diff --git a/test/testbufferoverrun.cpp b/test/testbufferoverrun.cpp index 66bc18955f1..24bbaf9430a 100644 --- a/test/testbufferoverrun.cpp +++ b/test/testbufferoverrun.cpp @@ -36,6 +36,8 @@ class TestBufferOverrun : public TestFixture { private: /*const*/ Settings settings0 = settingsBuilder().library("std.cfg").severity(Severity::warning).severity(Severity::style).severity(Severity::portability).build(); + const Settings settings0_i = settingsBuilder(settings0).certainty(Certainty::inconclusive).build(); + const Settings settings1 = settingsBuilder(settings0).severity(Severity::performance).certainty(Certainty::inconclusive).build(); struct CheckOptions { @@ -46,7 +48,7 @@ class TestBufferOverrun : public TestFixture { #define check(...) check_(__FILE__, __LINE__, __VA_ARGS__) template void check_(const char* file, int line, const char (&code)[size], const CheckOptions& options = make_default_obj()) { - const Settings settings = options.s ? *options.s : settingsBuilder(settings0).certainty(Certainty::inconclusive).build(); + const Settings& settings = options.s ? *options.s : settings0_i; // Tokenize.. SimpleTokenizer tokenizer(settings, *this, options.cpp); @@ -58,10 +60,8 @@ class TestBufferOverrun : public TestFixture { // TODO: get rid of this void check_(const char* file, int line, const std::string& code) { - const Settings settings = settingsBuilder(settings0).certainty(Certainty::inconclusive).build(); - // Tokenize.. - SimpleTokenizer tokenizer(settings, *this); + SimpleTokenizer tokenizer(settings0_i, *this); ASSERT_LOC(tokenizer.tokenize(code), file, line); // Check for buffer overruns.. @@ -72,9 +72,7 @@ class TestBufferOverrun : public TestFixture { template void checkP_(const char* file, int line, const char (&code)[size]) { - const Settings settings = settingsBuilder(settings0).severity(Severity::performance).certainty(Certainty::inconclusive).build(); - - SimpleTokenizer2 tokenizer(settings, *this, code, "test.cpp"); + SimpleTokenizer2 tokenizer(settings1, *this, code, "test.cpp"); // Tokenizer.. ASSERT_LOC(tokenizer.simplifyTokens1(""), file, line); @@ -2722,7 +2720,7 @@ class TestBufferOverrun : public TestFixture { " char str[6] = \"\\0\";\n" " unsigned short port = 65535;\n" " snprintf(str, sizeof(str), \"%hu\", port);\n" - "}", dinit(CheckOptions, $.s = &settings0, $.cpp = false)); + "}", dinit(CheckOptions, $.cpp = false)); ASSERT_EQUALS("", errout_str()); check("int f(int x) {\n" // #11020 @@ -3499,18 +3497,16 @@ class TestBufferOverrun : public TestFixture { void buffer_overrun_errorpath() { setMultiline(); - const Settings settingsOld = settings0; // TODO: get rid of this - settings0.templateLocation = "{file}:{line}:note:{info}"; + Settings s = settings0; + s.templateLocation = "{file}:{line}:note:{info}"; check("void f() {\n" " char *p = malloc(10);\n" " memset(p, 0, 20);\n" - "}"); + "}", dinit(CheckOptions, $.s = &s)); ASSERT_EQUALS("[test.cpp:3:12]: error: Buffer is accessed out of bounds: p [bufferAccessOutOfBounds]\n" "[test.cpp:2:13]: note: Assign p, buffer with size 10\n" "[test.cpp:3:12]: note: Buffer overrun\n", errout_str()); - - settings0 = settingsOld; } void buffer_overrun_bailoutIfSwitch() { diff --git a/test/testclass.cpp b/test/testclass.cpp index 7494fe9edc2..aa28ab96fb2 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -39,6 +39,7 @@ class TestClass : public TestFixture { const Settings settings2 = settingsBuilder().severity(Severity::style).library("std.cfg").certainty(Certainty::inconclusive).build(); const Settings settings3 = settingsBuilder().severity(Severity::style).library("std.cfg").severity(Severity::warning).build(); const Settings settings3_i = settingsBuilder(settings3).certainty(Certainty::inconclusive).build(); + const Settings settings4 = settingsBuilder().severity(Severity::warning).severity(Severity::portability).library("std.cfg").library("posix.cfg").build(); void run() override { mNewTemplate = true; @@ -2974,8 +2975,7 @@ class TestClass : public TestFixture { #define checkNoMemset(...) checkNoMemset_(__FILE__, __LINE__, __VA_ARGS__) template void checkNoMemset_(const char* file, int line, const char (&code)[size]) { - const Settings settings = settingsBuilder().severity(Severity::warning).severity(Severity::portability).library("std.cfg").library("posix.cfg").build(); - checkNoMemset_(file, line, code, settings); + checkNoMemset_(file, line, code, settings4); } template @@ -7626,10 +7626,10 @@ class TestClass : public TestFixture { " }\n" "};"; - checkConst(code, dinit(CheckConstOptions, $.s = &settings0, $.inconclusive = true)); + checkConst(code); ASSERT_EQUALS("[test.cpp:3:10]: (performance, inconclusive) Technically the member function 'foo::f' can be static (but you may consider moving to unnamed namespace). [functionStatic]\n", errout_str()); - checkConst(code, dinit(CheckConstOptions, $.s = &settings0, $.inconclusive = false)); // TODO: Set inconclusive to true (preprocess it) + checkConst(code, dinit(CheckConstOptions, $.inconclusive = false)); // TODO: Set inconclusive to true (preprocess it) ASSERT_EQUALS("", errout_str()); } diff --git a/test/testcondition.cpp b/test/testcondition.cpp index 9bde30f36b5..fe3a3586f31 100644 --- a/test/testcondition.cpp +++ b/test/testcondition.cpp @@ -132,13 +132,12 @@ class TestCondition : public TestFixture { { const Settings* s = nullptr; bool cpp = true; - bool inconclusive = false; }; #define check(...) check_(__FILE__, __LINE__, __VA_ARGS__) template void check_(const char* file, int line, const char (&code)[size], const CheckOptions& options = make_default_obj()) { - const Settings settings = settingsBuilder(options.s ? *options.s : settings0).certainty(Certainty::inconclusive, options.inconclusive).build(); + const Settings& settings = options.s ? *options.s : settings0; SimpleTokenizer2 tokenizer(settings, *this, code, options.cpp ? "test.cpp" : "test.c"); @@ -1307,24 +1306,25 @@ class TestCondition : public TestFixture { } void incorrectLogicOperator6() { // char literals + const Settings s = settingsBuilder(settings0).certainty(Certainty::inconclusive).build(); check("void f(char x) {\n" " if (x == '1' || x == '2') {}\n" - "}", dinit(CheckOptions, $.inconclusive = true)); + "}", dinit(CheckOptions, $.s = &s)); ASSERT_EQUALS("", errout_str()); check("void f(char x) {\n" " if (x == '1' && x == '2') {}\n" - "}", dinit(CheckOptions, $.inconclusive = true)); + "}", dinit(CheckOptions, $.s = &s)); ASSERT_EQUALS("[test.cpp:2:16]: (warning) Logical conjunction always evaluates to false: x == '1' && x == '2'. [incorrectLogicOperator]\n", errout_str()); check("int f(char c) {\n" " return (c >= 'a' && c <= 'z');\n" - "}", dinit(CheckOptions, $.inconclusive = true)); + "}", dinit(CheckOptions, $.s = &s)); ASSERT_EQUALS("", errout_str()); check("int f(char c) {\n" " return (c <= 'a' && c >= 'z');\n" - "}", dinit(CheckOptions, $.inconclusive = true)); + "}", dinit(CheckOptions, $.s = &s)); ASSERT_EQUALS("[test.cpp:2:20]: (warning, inconclusive) Logical conjunction always evaluates to false: c <= 'a' && c >= 'z'. [incorrectLogicOperator]\n", errout_str()); check("int f(char c) {\n" diff --git a/test/testleakautovar.cpp b/test/testleakautovar.cpp index ce98d375e0f..1339e6868ac 100644 --- a/test/testleakautovar.cpp +++ b/test/testleakautovar.cpp @@ -29,7 +29,7 @@ class TestLeakAutoVar : public TestFixture { TestLeakAutoVar() : TestFixture("TestLeakAutoVar") {} private: - const Settings settings = settingsBuilder().library("std.cfg").build(); + const Settings settings = settingsBuilder().library("std.cfg").checkLibrary().build(); void run() override { mNewTemplate = true; @@ -223,7 +223,7 @@ class TestLeakAutoVar : public TestFixture { #define check(...) check_(__FILE__, __LINE__, __VA_ARGS__) template void check_(const char* file, int line, const char (&code)[size], const CheckOptions& options = make_default_obj()) { - const Settings settings1 = settingsBuilder(options.s ? *options.s : settings).checkLibrary().build(); + const Settings& settings1 = options.s ? *options.s : settings; // Tokenize.. SimpleTokenizer tokenizer(settings1, *this, options.cpp); @@ -235,10 +235,8 @@ class TestLeakAutoVar : public TestFixture { template void check_(const char* file, int line, const char (&code)[size], const Settings & s) { - const Settings settings0 = settingsBuilder(s).checkLibrary().build(); - // Tokenize.. - SimpleTokenizer tokenizer(settings0, *this); + SimpleTokenizer tokenizer(s, *this); ASSERT_LOC(tokenizer.tokenize(code), file, line); // Check for leaks.. @@ -454,7 +452,7 @@ class TestLeakAutoVar : public TestFixture { } void assign22() { // #9139 - const Settings s = settingsBuilder().library("posix.cfg").build(); + const Settings s = settingsBuilder().library("posix.cfg").checkLibrary().build(); check("void f(char tempFileName[256]) {\n" " const int fd = socket(AF_INET, SOCK_PACKET, 0 );\n" "}", dinit(CheckOptions, $.cpp = true, $.s = &s)); @@ -467,7 +465,7 @@ class TestLeakAutoVar : public TestFixture { } void assign23() { - const Settings s = settingsBuilder().library("posix.cfg").build(); + const Settings s = settingsBuilder().library("posix.cfg").checkLibrary().build(); check("void f() {\n" " int n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14;\n" " *&n1 = open(\"xx.log\", O_RDONLY);\n" @@ -2277,7 +2275,7 @@ class TestLeakAutoVar : public TestFixture { } void ifelse24() { // #1733 - const Settings s = settingsBuilder().library("std.cfg").library("posix.cfg").build(); + const Settings s = settingsBuilder().library("std.cfg").library("posix.cfg").checkLibrary().build(); check("void f() {\n" " char* temp = strdup(\"temp.txt\");\n" @@ -3190,7 +3188,7 @@ class TestLeakAutoVar : public TestFixture { " \n" " \n" "\n"; - const Settings settingsLeakIgnore = settingsBuilder().libraryxml(xmldata).build(); + const Settings settingsLeakIgnore = settingsBuilder().libraryxml(xmldata).checkLibrary().build(); check("void f() {\n" " double* a = new double[1024];\n" " SomeClass::someMethod(a);\n" diff --git a/test/testuninitvar.cpp b/test/testuninitvar.cpp index 6f18005b2a1..38a3c4de717 100644 --- a/test/testuninitvar.cpp +++ b/test/testuninitvar.cpp @@ -110,13 +110,12 @@ class TestUninitVar : public TestFixture { struct CheckUninitVarOptions { bool cpp = true; - bool debugwarnings = false; const Settings *s = nullptr; }; #define checkUninitVar(...) checkUninitVar_(__FILE__, __LINE__, __VA_ARGS__) void checkUninitVar_(const char* file, int line, const char code[], const CheckUninitVarOptions& options = make_default_obj()) { - const Settings settings1 = settingsBuilder(options.s ? *options.s : settings).debugwarnings(options.debugwarnings).build(); + const Settings& settings1 =options.s ? *options.s : settings; // Tokenize.. SimpleTokenizer tokenizer(settings1, *this, options.cpp); diff --git a/test/testvalueflow.cpp b/test/testvalueflow.cpp index 0285e2dea2b..33e5037a096 100644 --- a/test/testvalueflow.cpp +++ b/test/testvalueflow.cpp @@ -5641,7 +5641,7 @@ class TestValueFlow : public TestFixture { // #13959 const Settings settingsOld = settings; - settings = settingsBuilder(settingsOld).c(Standards::C23).build(); + settings.standards.c = Standards::C23; code = "void f(int* p) {\n" " if (p == nullptr)\n" " return;\n" @@ -5651,7 +5651,7 @@ class TestValueFlow : public TestFixture { ASSERT_EQUALS(1, value.intvalue); ASSERT_EQUALS(true, value.isKnown()); - settings = settingsBuilder(settingsOld).c(Standards::C17).build(); + settings.standards.c = Standards::C17; value = valueOfTok(code, "p ) { }", &settings, /*cpp*/ false); ASSERT(value == ValueFlow::Value()); settings = settingsOld;