------- Additional Comments From pinskia at gcc dot gnu dot org 2004-10-28 14:19
-------
Confirmed, a regression but I don't know if this is a middle-end problem or a
front-end problem.
The front-end produces the following code:
struct S obj[2] = {{.s=(const char *) "m0"}, {}};
This is a middle-end (the gimplifier) issue as the C front-end has the same problem
(the C standard
defines it in 6.7.8/21).
The C example:
#include <stdio.h>
typedef struct S {
const char* s;
int i;
} S;
void foo() {
// Put some garbage on the stack
S dummy[2];
for (unsigned 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();
}
Note we get a warning which is bogus:
pr18191.c:23: warning: 'obj$0$i' is used uninitialized in this function
--
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Component|c++ |middle-end
Ever Confirmed| |1
Keywords| |wrong-code
Last reconfirmed|0000-00-00 00:00:00 |2004-10-28 14:19:42
date| |
Summary|Struct member is not getting|[4.0 Regression] Struct
|default-initialized |member is not getting
| |default-initialized
Target Milestone|--- |4.0.0
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18191