In the example listed below, member "i" of object "obj" allocated at frame of "bar" routine is not getting default-initialized to 0 but contains any garbage left on the stack. That violates clause 8.5.1/7 of the C++ Standard.
$ cat bar.cpp #include <cstdio> struct S { const char* s; int i; }; void foo() { // Put some garbage on the stack S dummy[2]; for (int i = 0; i < sizeof(dummy); i++) ((char *)&dummy)[i] = -1; } int bar() { // Allocate object on the stack S obj[2] = { {"m0"}, { } }; // Assume fields those not explicitly initialized // are default initialized to 0 [8.5.1/7 and 8.5/5] if (obj[0].i == 0){ return 0; } else { printf("Failed: obj[0].i == '%d', expecting '0'\n", obj[0].i); return 1; } }; int main(){ foo(); return bar(); } $ g++ bar.cpp ; ./a.out Failed: obj[0].i == '-1', expecting '0' -- Summary: Struct member is not getting default-initialized Product: gcc Version: 4.0.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: grigory dot zagorodnev at intel dot com CC: gcc-bugs at gcc dot gnu dot org GCC build triplet: i686-redhat-linux GCC host triplet: i686-redhat-linux GCC target triplet: i686-redhat-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18191