Re-enabled a bunch of disabled unit tests, some as TODO tests
Merged from LCppC.
This commit is contained in:
parent
2bd6a6c252
commit
4b01d5bdc6
|
@ -193,7 +193,7 @@ private:
|
||||||
// char *p1 = a + 10; // OK
|
// char *p1 = a + 10; // OK
|
||||||
// char *p2 = a + 11 // UB
|
// char *p2 = a + 11 // UB
|
||||||
TEST_CASE(pointer_out_of_bounds_1);
|
TEST_CASE(pointer_out_of_bounds_1);
|
||||||
// TODO TEST_CASE(pointer_out_of_bounds_2);
|
TEST_CASE(pointer_out_of_bounds_2);
|
||||||
TEST_CASE(pointer_out_of_bounds_3);
|
TEST_CASE(pointer_out_of_bounds_3);
|
||||||
TEST_CASE(pointer_out_of_bounds_4);
|
TEST_CASE(pointer_out_of_bounds_4);
|
||||||
// TODO TEST_CASE(pointer_out_of_bounds_sub);
|
// TODO TEST_CASE(pointer_out_of_bounds_sub);
|
||||||
|
@ -2148,7 +2148,7 @@ private:
|
||||||
" int *p = a;\n"
|
" int *p = a;\n"
|
||||||
" p[20] = 0;\n"
|
" p[20] = 0;\n"
|
||||||
"}");
|
"}");
|
||||||
// TODO pointer ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:4]: (error) Array 'a[10]' accessed at index 20, which is out of bounds.\n", errout.str());
|
TODO_ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:4]: (error) Array 'a[10]' accessed at index 20, which is out of bounds.\n", "", errout.str());
|
||||||
|
|
||||||
{
|
{
|
||||||
// address of
|
// address of
|
||||||
|
@ -2157,7 +2157,7 @@ private:
|
||||||
" int *p = a;\n"
|
" int *p = a;\n"
|
||||||
" p[10] = 0;\n"
|
" p[10] = 0;\n"
|
||||||
"}");
|
"}");
|
||||||
// TODO pointer ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:4]: (error) Array 'a[10]' accessed at index 10, which is out of bounds.\n", errout.str());
|
TODO_ASSERT_EQUALS("[test.cpp:3] -> [test.cpp:4]: (error) Array 'a[10]' accessed at index 10, which is out of bounds.\n", "", errout.str());
|
||||||
|
|
||||||
check("void f() {\n"
|
check("void f() {\n"
|
||||||
" int a[10];\n"
|
" int a[10];\n"
|
||||||
|
@ -2192,7 +2192,7 @@ private:
|
||||||
" a += 4;\n"
|
" a += 4;\n"
|
||||||
" a[-1] = 0;\n"
|
" a[-1] = 0;\n"
|
||||||
"}");
|
"}");
|
||||||
// TODO ASSERT_EQUALS("", errout.str());
|
TODO_ASSERT_EQUALS("", "[test.cpp:3]: (error) Array 'a[10]' accessed at index -1, which is out of bounds.\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void array_index_enum_array() { // #8439
|
void array_index_enum_array() { // #8439
|
||||||
|
@ -2881,7 +2881,7 @@ private:
|
||||||
" p += 100;\n"
|
" p += 100;\n"
|
||||||
" free(p);"
|
" free(p);"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:3]: (portability) Undefined behaviour, pointer arithmetic 'p+100' is out of bounds.\n", errout.str());
|
TODO_ASSERT_EQUALS("[test.cpp:3]: (portability) Undefined behaviour, pointer arithmetic 'p+100' is out of bounds.\n", "", errout.str());
|
||||||
|
|
||||||
check("void f() {\n"
|
check("void f() {\n"
|
||||||
" char *p = malloc(10);\n"
|
" char *p = malloc(10);\n"
|
||||||
|
@ -2889,7 +2889,7 @@ private:
|
||||||
" *p = 0;\n"
|
" *p = 0;\n"
|
||||||
" free(p);"
|
" free(p);"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("[test.cpp:4]: (error) p is out of bounds.\n", errout.str());
|
TODO_ASSERT_EQUALS("[test.cpp:4]: (error) p is out of bounds.\n", "", errout.str());
|
||||||
|
|
||||||
check("void f() {\n"
|
check("void f() {\n"
|
||||||
" char *p = malloc(10);\n"
|
" char *p = malloc(10);\n"
|
||||||
|
@ -3352,7 +3352,8 @@ private:
|
||||||
" char s[10];\n"
|
" char s[10];\n"
|
||||||
" mymemset(s, 0, '*');\n"
|
" mymemset(s, 0, '*');\n"
|
||||||
"}", settings);
|
"}", settings);
|
||||||
// TODO ASSERT_EQUALS("[test.cpp:3]: (warning) The size argument is given as a char constant.\n", errout.str());
|
TODO_ASSERT_EQUALS("[test.cpp:3]: (warning) The size argument is given as a char constant.\n"
|
||||||
|
"[test.cpp:3]: (error) Buffer is accessed out of bounds: s\n", "[test.cpp:3]: (error) Buffer is accessed out of bounds: s\n", errout.str());
|
||||||
|
|
||||||
// ticket #836
|
// ticket #836
|
||||||
check("void f(void) {\n"
|
check("void f(void) {\n"
|
||||||
|
@ -3557,7 +3558,7 @@ private:
|
||||||
" char *str = new char[5];\n"
|
" char *str = new char[5];\n"
|
||||||
" mysprintf(str, \"abcde\");\n"
|
" mysprintf(str, \"abcde\");\n"
|
||||||
"}", settings);
|
"}", settings);
|
||||||
// TODO ASSERT_EQUALS("[test.cpp:3]: (error) Buffer is accessed out of bounds.\n", errout.str());
|
TODO_ASSERT_EQUALS("[test.cpp:3]: (error) Buffer is accessed out of bounds.\n", "", errout.str());
|
||||||
|
|
||||||
check("void f(int condition) {\n"
|
check("void f(int condition) {\n"
|
||||||
" char str[5];\n"
|
" char str[5];\n"
|
||||||
|
@ -3583,13 +3584,13 @@ private:
|
||||||
" char *a = new char(30);\n"
|
" char *a = new char(30);\n"
|
||||||
" mysprintf(a, \"a\");\n"
|
" mysprintf(a, \"a\");\n"
|
||||||
"}", settings);
|
"}", settings);
|
||||||
// TODO ASSERT_EQUALS("[test.cpp:3]: (error) Buffer is accessed out of bounds.\n", errout.str());
|
TODO_ASSERT_EQUALS("[test.cpp:3]: (error) Buffer is accessed out of bounds.\n", "", errout.str());
|
||||||
|
|
||||||
check("void f(char value) {\n"
|
check("void f(char value) {\n"
|
||||||
" char *a = new char(value);\n"
|
" char *a = new char(value);\n"
|
||||||
" mysprintf(a, \"a\");\n"
|
" mysprintf(a, \"a\");\n"
|
||||||
"}", settings);
|
"}", settings);
|
||||||
// TODO ASSERT_EQUALS("[test.cpp:3]: (error) Buffer is accessed out of bounds.\n", errout.str());
|
TODO_ASSERT_EQUALS("[test.cpp:3]: (error) Buffer is accessed out of bounds.\n", "", errout.str());
|
||||||
|
|
||||||
// This is out of bounds if 'sizeof(ABC)' is 1 (No padding)
|
// This is out of bounds if 'sizeof(ABC)' is 1 (No padding)
|
||||||
check("struct Foo { char a[1]; };\n"
|
check("struct Foo { char a[1]; };\n"
|
||||||
|
@ -3597,7 +3598,7 @@ private:
|
||||||
" struct Foo *x = malloc(sizeof(Foo));\n"
|
" struct Foo *x = malloc(sizeof(Foo));\n"
|
||||||
" mysprintf(x.a, \"aa\");\n"
|
" mysprintf(x.a, \"aa\");\n"
|
||||||
"}", settings);
|
"}", settings);
|
||||||
// TODO ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str()); // TODO: Inconclusive error?
|
||||||
|
|
||||||
check("struct Foo { char a[1]; };\n"
|
check("struct Foo { char a[1]; };\n"
|
||||||
"void f() {\n"
|
"void f() {\n"
|
||||||
|
|
|
@ -62,7 +62,7 @@ private:
|
||||||
|
|
||||||
// Invalid function usage
|
// Invalid function usage
|
||||||
TEST_CASE(invalidFunctionUsage1);
|
TEST_CASE(invalidFunctionUsage1);
|
||||||
// TODO TEST_CASE(invalidFunctionUsageStrings);
|
TEST_CASE(invalidFunctionUsageStrings);
|
||||||
|
|
||||||
// Math function usage
|
// Math function usage
|
||||||
TEST_CASE(mathfunctionCall_fmod);
|
TEST_CASE(mathfunctionCall_fmod);
|
||||||
|
@ -480,32 +480,32 @@ private:
|
||||||
check("int f() { char x = 'x'; return strcmp(\"Hello world\", &x); }");
|
check("int f() { char x = 'x'; return strcmp(\"Hello world\", &x); }");
|
||||||
ASSERT_EQUALS("[test.cpp:1]: (error) Invalid strcmp() argument nr 2. A nul-terminated string is required.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:1]: (error) Invalid strcmp() argument nr 2. A nul-terminated string is required.\n", errout.str());
|
||||||
|
|
||||||
check("size_t f(char x) { char * y = &x; return strlen(y) }");
|
check("size_t f(char x) { char * y = &x; return strlen(y); }");
|
||||||
ASSERT_EQUALS("[test.cpp:1]: (error) Invalid strlen() argument nr 1. A nul-terminated string is required.\n", errout.str());
|
TODO_ASSERT_EQUALS("[test.cpp:1]: (error) Invalid strlen() argument nr 1. A nul-terminated string is required.\n", "", errout.str());
|
||||||
|
|
||||||
check("size_t f(char x) { char * y = &x; char *z = y; return strlen(z) }");
|
check("size_t f(char x) { char * y = &x; char *z = y; return strlen(z); }");
|
||||||
ASSERT_EQUALS("[test.cpp:1]: (error) Invalid strlen() argument nr 1. A nul-terminated string is required.\n", errout.str());
|
TODO_ASSERT_EQUALS("[test.cpp:1]: (error) Invalid strlen() argument nr 1. A nul-terminated string is required.\n", "", errout.str());
|
||||||
|
|
||||||
check("size_t f() { char x = 'x'; char * y = &x; char *z = y; return strlen(z) }");
|
check("size_t f() { char x = 'x'; char * y = &x; char *z = y; return strlen(z); }");
|
||||||
ASSERT_EQUALS("[test.cpp:1]: (error) Invalid strlen() argument nr 1. A nul-terminated string is required.\n", errout.str());
|
TODO_ASSERT_EQUALS("[test.cpp:1]: (error) Invalid strlen() argument nr 1. A nul-terminated string is required.\n", "", errout.str());
|
||||||
|
|
||||||
check("size_t f() { char x = '\\0'; char * y = &x; char *z = y; return strlen(z) }");
|
check("size_t f() { char x = '\\0'; char * y = &x; char *z = y; return strlen(z); }");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("size_t f() { char x[] = \"Hello world\"; return strlen(x) }");
|
check("size_t f() { char x[] = \"Hello world\"; return strlen(x); }");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("size_t f(char x[]) { return strlen(x) }");
|
check("size_t f(char x[]) { return strlen(x); }");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("int f(char x, char y) { return strcmp(&x, &y); }");
|
check("int f(char x, char y) { return strcmp(&x, &y); }");
|
||||||
ASSERT_EQUALS("[test.cpp:1]: (error) Invalid strcmp() argument nr 1. A nul-terminated string is required.\n"
|
ASSERT_EQUALS("[test.cpp:1]: (error) Invalid strcmp() argument nr 1. A nul-terminated string is required.\n"
|
||||||
"[test.cpp:1]: (error) Invalid strcmp() argument nr 2. A nul-terminated string is required.\n", errout.str());
|
"[test.cpp:1]: (error) Invalid strcmp() argument nr 2. A nul-terminated string is required.\n", errout.str());
|
||||||
|
|
||||||
check("size_t f() { char x[] = \"Hello world\"; return strlen(&x[0]) }");
|
check("size_t f() { char x[] = \"Hello world\"; return strlen(&x[0]); }");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("size_t f() { char* x = \"Hello world\"; return strlen(&x[0]) }");
|
check("size_t f() { char* x = \"Hello world\"; return strlen(&x[0]); }");
|
||||||
ASSERT_EQUALS("", errout.str());
|
ASSERT_EQUALS("", errout.str());
|
||||||
|
|
||||||
check("struct S {\n"
|
check("struct S {\n"
|
||||||
|
|
|
@ -72,7 +72,7 @@ private:
|
||||||
TEST_CASE(assign10);
|
TEST_CASE(assign10);
|
||||||
TEST_CASE(assign11); // #3942: x = a(b(p));
|
TEST_CASE(assign11); // #3942: x = a(b(p));
|
||||||
TEST_CASE(assign12); // #4236: FP. bar(&x);
|
TEST_CASE(assign12); // #4236: FP. bar(&x);
|
||||||
// TODO TEST_CASE(assign13); // #4237: FP. char*&ref=p; p=malloc(10); free(ref);
|
TEST_CASE(assign13); // #4237: FP. char*&ref=p; p=malloc(10); free(ref);
|
||||||
TEST_CASE(assign14);
|
TEST_CASE(assign14);
|
||||||
TEST_CASE(assign15);
|
TEST_CASE(assign15);
|
||||||
TEST_CASE(assign16);
|
TEST_CASE(assign16);
|
||||||
|
@ -95,7 +95,7 @@ private:
|
||||||
TEST_CASE(deallocuse2);
|
TEST_CASE(deallocuse2);
|
||||||
TEST_CASE(deallocuse3);
|
TEST_CASE(deallocuse3);
|
||||||
TEST_CASE(deallocuse4);
|
TEST_CASE(deallocuse4);
|
||||||
// TODO TEST_CASE(deallocuse5); // #4018: FP. free(p), p = 0;
|
TEST_CASE(deallocuse5); // #4018: FP. free(p), p = 0;
|
||||||
TEST_CASE(deallocuse6); // #4034: FP. x = p = f();
|
TEST_CASE(deallocuse6); // #4034: FP. x = p = f();
|
||||||
TEST_CASE(deallocuse7); // #6467, #6469, #6473
|
TEST_CASE(deallocuse7); // #6467, #6469, #6473
|
||||||
TEST_CASE(deallocuse8); // #1765
|
TEST_CASE(deallocuse8); // #1765
|
||||||
|
@ -342,7 +342,7 @@ private:
|
||||||
" p = malloc(10);\n"
|
" p = malloc(10);\n"
|
||||||
" free(ref);\n"
|
" free(ref);\n"
|
||||||
"}");
|
"}");
|
||||||
ASSERT_EQUALS("", errout.str());
|
TODO_ASSERT_EQUALS("", "[test.c:6]: (error) Memory leak: p\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void assign14() {
|
void assign14() {
|
||||||
|
|
|
@ -989,7 +989,6 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
/* TODO: What to do here? since there are syntax error simplecpp outputs ""
|
|
||||||
const char filedata[] = "#define BC(b, c...) 0##b * 0##c\n"
|
const char filedata[] = "#define BC(b, c...) 0##b * 0##c\n"
|
||||||
"#define ABC(a, b...) a + BC(b)\n"
|
"#define ABC(a, b...) a + BC(b)\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -997,8 +996,7 @@ private:
|
||||||
"ABC(2,3);\n"
|
"ABC(2,3);\n"
|
||||||
"ABC(4,5,6);\n";
|
"ABC(4,5,6);\n";
|
||||||
|
|
||||||
ASSERT_EQUALS("\n\n\n1 + 0 * 0;\n2 + 03 * 0;\n4 + 05 * 06;", OurPreprocessor::expandMacros(filedata));
|
ASSERT_EQUALS("\n\n\n1 + 0 * 0 ;\n2 + 03 * 0 ;\n4 + 05 * 06 ;", OurPreprocessor::expandMacros(filedata));
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -1142,10 +1140,9 @@ private:
|
||||||
}
|
}
|
||||||
|
|
||||||
void macro_NULL() const {
|
void macro_NULL() const {
|
||||||
// Let the tokenizer handle NULL.
|
|
||||||
// See ticket #4482 - UB when passing NULL to variadic function
|
// See ticket #4482 - UB when passing NULL to variadic function
|
||||||
ASSERT_EQUALS("\n0", OurPreprocessor::expandMacros("#define null 0\nnull"));
|
ASSERT_EQUALS("\n0", OurPreprocessor::expandMacros("#define null 0\nnull"));
|
||||||
// TODO ASSERT_EQUALS("\nNULL", OurPreprocessor::expandMacros("#define NULL 0\nNULL"));
|
TODO_ASSERT_EQUALS("\nNULL", "\n0", OurPreprocessor::expandMacros("#define NULL 0\nNULL")); // TODO: Let the tokenizer handle NULL?
|
||||||
}
|
}
|
||||||
|
|
||||||
void string1() {
|
void string1() {
|
||||||
|
|
|
@ -3058,7 +3058,7 @@ private:
|
||||||
"void A::DoSomething(void) {\n"
|
"void A::DoSomething(void) {\n"
|
||||||
" const std::string x = Bar();\n" // <- warning
|
" const std::string x = Bar();\n" // <- warning
|
||||||
"}");
|
"}");
|
||||||
// TODO ASSERT_EQUALS("[test.cpp:16]: (style) Variable 'x' is assigned a value that is never used.\n", errout.str());
|
ASSERT_EQUALS("[test.cpp:16]: (style) Variable 'x' is assigned a value that is never used.\n", errout.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
void localvar50() { // #6261, #6542
|
void localvar50() { // #6261, #6542
|
||||||
|
|
Loading…
Reference in New Issue