@@ -73,6 +73,8 @@ class TestUninitVar : public TestFixture {
7373 TEST_CASE (syntax_error); // Ticket #5073
7474 TEST_CASE (trac_5970);
7575
76+ TEST_CASE (isVariableUsageDeref); // *p
77+
7678 // dead pointer
7779 TEST_CASE (deadPointer);
7880 }
@@ -537,13 +539,6 @@ class TestUninitVar : public TestFixture {
537539 " }" );
538540 ASSERT_EQUALS (" [test.cpp:4]: (error) Uninitialized variable: c\n " , errout.str ());
539541
540- checkUninitVar (" void f()\n "
541- " {\n "
542- " char *s = malloc(100);\n "
543- " *s += 10;\n "
544- " }" );
545- ASSERT_EQUALS (" [test.cpp:4]: (error) Memory is allocated but not initialized: s\n " , errout.str ());
546-
547542 checkUninitVar (" void f()\n "
548543 " {\n "
549544 " int a[10];\n "
@@ -1236,18 +1231,6 @@ class TestUninitVar : public TestFixture {
12361231 " }" );
12371232 TODO_ASSERT_EQUALS (" [test.cpp:4]: (error) Uninitialized variable: a\n " , " " , errout.str ());
12381233
1239- checkUninitVar (" int f() {\n "
1240- " char a[10];\n "
1241- " char c = *a;\n "
1242- " }" );
1243- ASSERT_EQUALS (" [test.cpp:3]: (error) Uninitialized variable: a\n " , errout.str ());
1244-
1245- checkUninitVar (" int f() {\n "
1246- " char a[SIZE+10];\n "
1247- " char c = *a;\n "
1248- " }" );
1249- ASSERT_EQUALS (" [test.cpp:3]: (error) Uninitialized variable: a\n " , errout.str ());
1250-
12511234 checkUninitVar (" int f()\n "
12521235 " {\n "
12531236 " char a[10];\n "
@@ -3783,6 +3766,33 @@ class TestUninitVar : public TestFixture {
37833766 check.deadPointer ();
37843767 }
37853768
3769+ void isVariableUsageDeref () {
3770+ // *p
3771+ checkUninitVar (" void f() {\n "
3772+ " char a[10];\n "
3773+ " char c = *a;\n "
3774+ " }" );
3775+ ASSERT_EQUALS (" [test.cpp:3]: (error) Uninitialized variable: a\n " , errout.str ());
3776+
3777+ checkUninitVar (" void f() {\n "
3778+ " char a[SIZE+10];\n "
3779+ " char c = *a;\n "
3780+ " }" );
3781+ ASSERT_EQUALS (" [test.cpp:3]: (error) Uninitialized variable: a\n " , errout.str ());
3782+
3783+ checkUninitVar (" void f() {\n "
3784+ " char a[10];\n "
3785+ " *a += 10;\n "
3786+ " }" );
3787+ ASSERT_EQUALS (" [test.cpp:3]: (error) Uninitialized variable: a\n " , errout.str ());
3788+
3789+ checkUninitVar (" void f() {\n "
3790+ " int a[10][10];\n "
3791+ " dostuff(*a);\n "
3792+ " }" );
3793+ ASSERT_EQUALS (" " , errout.str ());
3794+ }
3795+
37863796 void deadPointer () {
37873797 checkDeadPointer (" void f() {\n "
37883798 " int *p = p1;\n "
0 commit comments