Add tests for # 10773, #108787, #8991 (#4063)

* Add test for #10773

* Add test for #10878

* Add test for #8991
This commit is contained in:
chrchr-github 2022-04-30 08:20:00 +02:00 committed by GitHub
parent 3ca2eb984e
commit 6a914dc435
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 0 deletions

View File

@ -188,6 +188,7 @@ private:
TEST_CASE(array_index_61); // #10621 TEST_CASE(array_index_61); // #10621
TEST_CASE(array_index_62); // #7684 TEST_CASE(array_index_62); // #7684
TEST_CASE(array_index_63); // #10979 TEST_CASE(array_index_63); // #10979
TEST_CASE(array_index_64); // #10878
TEST_CASE(array_index_multidim); TEST_CASE(array_index_multidim);
TEST_CASE(array_index_switch_in_for); TEST_CASE(array_index_switch_in_for);
TEST_CASE(array_index_for_in_for); // FP: #2634 TEST_CASE(array_index_for_in_for); // FP: #2634
@ -1796,6 +1797,30 @@ private:
ASSERT_EQUALS("", errout.str()); ASSERT_EQUALS("", errout.str());
} }
void array_index_64() // #10878
{
check("struct Array {\n"
" int x[10];\n"
" int& accessArrayRef(int a) { return x[a]; }\n"
"};\n"
"void f() {\n"
" Array array = {};\n"
" array.accessArrayRef(10);\n"
"}\n");
ASSERT_EQUALS("[test.cpp:3]: (error) Array 'x[10]' accessed at index 10, which is out of bounds.\n", errout.str());
check("int i = 10;\n"
"struct Array {\n"
" int x[10];\n"
" int& accessArrayRef(int a) { return x[a]; }\n"
"};\n"
"void f() {\n"
" Array array = {};\n"
" array.accessArrayRef(i);\n"
"}\n");
TODO_ASSERT_EQUALS("[test.cpp:3]: (error) Array 'x[10]' accessed at index 10, which is out of bounds.\n", "", errout.str());
}
void array_index_multidim() { void array_index_multidim() {
check("void f()\n" check("void f()\n"
"{\n" "{\n"

View File

@ -227,6 +227,17 @@ private:
" outfile << vec_points[0](0) << static_cast<int>(d) << ' ';\n" " outfile << vec_points[0](0) << static_cast<int>(d) << ' ';\n"
"}"); "}");
ASSERT_EQUALS("", errout.str()); ASSERT_EQUALS("", errout.str());
check("void f(unsigned b, int len, unsigned char rem) {\n" // #10773
" int bits = 0;\n"
" while (len > 8) {\n"
" b = b >> rem;\n"
" bits += 8 - rem;\n"
" if (bits == 512)\n"
" len -= 8;\n"
" }\n"
"}\n");
ASSERT_EQUALS("", errout.str());
} }
void checkIntegerOverflow() { void checkIntegerOverflow() {

View File

@ -207,6 +207,7 @@ private:
TEST_CASE(varidenum4); TEST_CASE(varidenum4);
TEST_CASE(varidenum5); TEST_CASE(varidenum5);
TEST_CASE(varidenum6); // #9180 TEST_CASE(varidenum6); // #9180
TEST_CASE(varidenum7); // #8991
TEST_CASE(varidnamespace1); TEST_CASE(varidnamespace1);
TEST_CASE(varidnamespace2); TEST_CASE(varidnamespace2);
@ -3353,6 +3354,20 @@ private:
ASSERT_EQUALS(expected, tokenize(code)); ASSERT_EQUALS(expected, tokenize(code));
} }
void varidenum7() { // #8991
const char code[] = "namespace N1 { const int c = 42; }\n"
"namespace N2 { const int c = 24; }\n"
"struct S {\n"
" enum { v1 = N1::c, v2 = N2::c };\n"
"};\n";
const char expected[] = "1: namespace N1 { const int c@1 = 42 ; }\n"
"2: namespace N2 { const int c@2 = 24 ; }\n"
"3: struct S {\n"
"4: enum Anonymous0 { v1 = N1 :: c@1 , v2 = N2 :: c@2 } ;\n"
"5: } ;\n";
ASSERT_EQUALS(expected, tokenize(code));
}
void varid_classnameshaddowsvariablename() { void varid_classnameshaddowsvariablename() {
const char code[] = "class Data;\n" const char code[] = "class Data;\n"
"void strange_declarated(const Data& Data);\n" "void strange_declarated(const Data& Data);\n"