Add tests/TODO for #7950, #9974 (#3818)

* Add tests/TODO for #7950, #9974

* Comment
This commit is contained in:
chrchr-github 2022-02-10 20:05:14 +01:00 committed by GitHub
parent 65c0ef8eb0
commit ddd84f9b98
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 0 deletions

View File

@ -4627,6 +4627,13 @@ private:
" char *p = arr + 20;\n" " char *p = arr + 20;\n"
"}"); "}");
ASSERT_EQUALS("[test.cpp:3]: (portability) Undefined behaviour, pointer arithmetic 'arr+20' is out of bounds.\n", errout.str()); ASSERT_EQUALS("[test.cpp:3]: (portability) Undefined behaviour, pointer arithmetic 'arr+20' is out of bounds.\n", errout.str());
check("char(*g())[1];\n" // #7950
"void f() {\n"
" int a[2];\n"
" int* b = a + sizeof(*g());\n"
"}\n");
ASSERT_EQUALS("", errout.str());
} }
#define ctu(code) ctu_(code, __FILE__, __LINE__) #define ctu(code) ctu_(code, __FILE__, __LINE__)

View File

@ -231,6 +231,7 @@ private:
TEST_CASE(doubleMove1); TEST_CASE(doubleMove1);
TEST_CASE(doubleMoveMemberInitialization1); TEST_CASE(doubleMoveMemberInitialization1);
TEST_CASE(doubleMoveMemberInitialization2); TEST_CASE(doubleMoveMemberInitialization2);
TEST_CASE(doubleMoveMemberInitialization3); // #9974
TEST_CASE(moveAndAssign1); TEST_CASE(moveAndAssign1);
TEST_CASE(moveAndAssign2); TEST_CASE(moveAndAssign2);
TEST_CASE(moveAssignMoveAssign); TEST_CASE(moveAssignMoveAssign);
@ -9069,6 +9070,17 @@ private:
ASSERT_EQUALS("[test.cpp:5]: (warning) Access of moved variable 'b'.\n", errout.str()); ASSERT_EQUALS("[test.cpp:5]: (warning) Access of moved variable 'b'.\n", errout.str());
} }
void doubleMoveMemberInitialization3() { // #9974
check("struct A { int i; };\n"
"struct B { A a1; A a2; };\n"
"B f() {\n"
" A a1 = { 1 };\n"
" A a2 = { 2 };\n"
" return { .a1 = std::move(a1), .a2 = std::move(a2) };\n"
"}\n");
ASSERT_EQUALS("", errout.str());
}
void moveAndAssign1() { void moveAndAssign1() {
check("A g(A a);\n" check("A g(A a);\n"
"void f() {\n" "void f() {\n"

View File

@ -2458,6 +2458,10 @@ private:
"sizeof(char[20][3]);\n" "sizeof(char[20][3]);\n"
"sizeof(char[unknown][3]);"; "sizeof(char[unknown][3]);";
ASSERT_EQUALS("20 ; 60 ; sizeof ( char [ unknown ] [ 3 ] ) ;", tok(code)); ASSERT_EQUALS("20 ; 60 ; sizeof ( char [ unknown ] [ 3 ] ) ;", tok(code));
code = "char(*Helper())[1];\n"
"sizeof(*Helper());\n";
TODO_ASSERT_EQUALS("char ( * Helper ( ) ) [ 1 ] ; 1 ;", "char ( * Helper ( ) ) [ 1 ] ; sizeof ( * Helper ( ) ) ;", tok(code));
} }
void sizeof5() { void sizeof5() {