Skip to content

Commit 8d5e72d

Browse files
Update testmemleak.cpp
1 parent 692b6b4 commit 8d5e72d

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

test/testmemleak.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1673,6 +1673,7 @@ class TestMemleakStructMember : public TestFixture {
16731673
TEST_CASE(assign2);
16741674
TEST_CASE(assign3);
16751675
TEST_CASE(assign4); // #11019
1676+
TEST_CASE(assign5);
16761677

16771678
// Failed allocation
16781679
TEST_CASE(failedAllocation);
@@ -1919,6 +1920,29 @@ class TestMemleakStructMember : public TestFixture {
19191920
ASSERT_EQUALS("", errout_str());
19201921
}
19211922

1923+
void assign5() {
1924+
check("struct S { int fd; };\n"
1925+
"void f() {\n"
1926+
" struct S* s = (struct S*)malloc(sizeof(struct S));\n"
1927+
" s->fd = open(\"abc\", O_RDWR | O_NOCTTY);\n"
1928+
" free(s);\n"
1929+
"}\n"
1930+
"void g() {\n"
1931+
" struct S* s = static_cast<struct S*>(malloc(sizeof(struct S)));\n"
1932+
" s->fd = open(\"abc\", O_RDWR | O_NOCTTY);\n"
1933+
" free(s);\n"
1934+
"}\n"
1935+
"void h() {\n"
1936+
" S* s = new S;\n"
1937+
" s->fd = open(\"abc\", O_RDWR | O_NOCTTY);\n"
1938+
" delete s;\n"
1939+
"}\n");
1940+
ASSERT_EQUALS("[test.cpp:5:5]: (error) Resource leak: s.fd [resourceLeak]\n"
1941+
"[test.cpp:10:5]: (error) Resource leak: s.fd [resourceLeak]\n"
1942+
"[test.cpp:16:1]: (error) Resource leak: s.fd [resourceLeak]\n",
1943+
errout_str());
1944+
}
1945+
19221946
void failedAllocation() {
19231947
check("static struct ABC * foo()\n"
19241948
"{\n"

0 commit comments

Comments
 (0)