MCPcopy Create free account
hub / github.com/cppcheck-opensource/cppcheck / valueFlowUninitTest

Method valueFlowUninitTest

test/testuninitvar.cpp:5594–6749  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5592 }
5593
5594 void valueFlowUninitTest() {
5595 // #9735 - FN
5596 valueFlowUninit("typedef struct\n"
5597 "{\n"
5598 " int x;\n"
5599 " unsigned int flag : 1;\n" // bit filed gets never initialized
5600 "} status;\n"
5601 "bool foo(const status * const s)\n"
5602 "{\n"
5603 " return s->flag;\n" // << uninitvar
5604 "}\n"
5605 "void bar(const status * const s)\n"
5606 "{\n"
5607 " if( foo(s) == 1) {;}\n"
5608 "}\n"
5609 "void f(void)\n"
5610 "{\n"
5611 " status s;\n"
5612 " s.x = 42;\n"
5613 " bar(&s);\n"
5614 "}");
5615 ASSERT_EQUALS("[test.cpp:18:9] -> [test.cpp:12:13] -> [test.cpp:8:15]: (warning) Uninitialized variable: s->flag [uninitvar]\n", errout_str());
5616
5617 // Ticket #2207 - False negative
5618 valueFlowUninit("void foo() {\n"
5619 " int a;\n"
5620 " b = c - a;\n"
5621 "}");
5622 ASSERT_EQUALS("[test.cpp:3:13]: (error) Uninitialized variable: a [uninitvar]\n", errout_str());
5623
5624 valueFlowUninit("void foo() {\n"
5625 " int a;\n"
5626 " b = a - c;\n"
5627 "}");
5628 ASSERT_EQUALS("[test.cpp:3:9]: (error) Uninitialized variable: a [uninitvar]\n", errout_str());
5629
5630 // Ticket #6455 - some compilers allow const variables to be uninitialized
5631 // extracttests.disable
5632 valueFlowUninit("void foo() {\n"
5633 " const int a;\n"
5634 " b = c - a;\n"
5635 "}");
5636 ASSERT_EQUALS("[test.cpp:3:13]: (error) Uninitialized variable: a [uninitvar]\n", errout_str());
5637 // extracttests.enable
5638
5639 valueFlowUninit("void foo() {\n"
5640 " int *p;\n"
5641 " realloc(p,10);\n"
5642 "}");
5643 ASSERT_EQUALS("[test.cpp:3:13]: (error) Uninitialized variable: p [uninitvar]\n", errout_str());
5644
5645 valueFlowUninit("void foo() {\n" // #5240
5646 " char *p = malloc(100);\n"
5647 " char *tmp = realloc(p,1000);\n"
5648 " if (!tmp) free(p);\n"
5649 "}");
5650 ASSERT_EQUALS("", errout_str());
5651

Callers

nothing calls this directly

Calls 1

valueFlowUninitFunction · 0.85

Tested by

no test coverage detected