[Bug tree-optimization/27638] New: Strange initialization of uninitialized structure part
uros at kss-loka dot si
gcc-bugzilla@gcc.gnu.org
Wed May 17 06:59:00 GMT 2006
This testcase generates some kind of initalization of uninitialized part of the
structure:
--cut here--
struct ret_struct
{
int long_buf[10];
};
struct ret_struct
strc_test (int i)
{
struct ret_struct ret;
ret.long_buf[0] = i;
ret.long_buf[1] = 0x2;
ret.long_buf[2] = 0x3;
ret.long_buf[3] = 0x4;
ret.long_buf[4] = 0x5;
ret.long_buf[5] = 0x6;
return ret;
}
--cut here--
gcc -O2 -fverbose-asm -fomit-frame-pointer:
--cut here--
strc_test:
movl 4(%esp), %eax # D.1563, D.1563
movl 8(%esp), %edx # i, i
movl %eax, 36(%eax) # ret$long_buf$9, <result>.long_buf << !!
movl %eax, 32(%eax) # ret$long_buf$8, <result>.long_buf << !!
movl %eax, 28(%eax) # ret$long_buf$7, <result>.long_buf << !!
movl %eax, 24(%eax) # ret$long_buf$6, <result>.long_buf << !!
movl $6, 20(%eax) #, <result>.long_buf
movl $5, 16(%eax) #, <result>.long_buf
movl $4, 12(%eax) #, <result>.long_buf
movl $3, 8(%eax) #, <result>.long_buf
movl $2, 4(%eax) #, <result>.long_buf
movl %edx, (%eax) # i, <result>.long_buf
ret $4 #
--cut here--
These extra variables can be seen in the _.optimized tree dump:
--cut here--
;; Function strc_test (strc_test)
Analyzing Edge Insertions.
strc_test (i)
{
int ret$long_buf$9;
int ret$long_buf$8;
int ret$long_buf$7;
int ret$long_buf$6;
<bb 2>:
<retval>.long_buf[9] = ret$long_buf$9;
<retval>.long_buf[8] = ret$long_buf$8;
<retval>.long_buf[7] = ret$long_buf$7;
<retval>.long_buf[6] = ret$long_buf$6;
<retval>.long_buf[5] = 6;
<retval>.long_buf[4] = 5;
<retval>.long_buf[3] = 4;
<retval>.long_buf[2] = 3;
<retval>.long_buf[1] = 2;
<retval>.long_buf[0] = i;
return <retval>;
}
--cut here--
Using -Wall, gcc correctly warns about uninitialized part
(why extra 'u' in index?):
t.c:16: warning: 'ret.long_buf[9u]' is used uninitialized in this function
t.c:16: warning: 'ret.long_buf[8u]' is used uninitialized in this function
t.c:16: warning: 'ret.long_buf[7u]' is used uninitialized in this function
t.c:16: warning: 'ret.long_buf[6u]' is used uninitialized in this function
IMO emitting some sort of initialization in this case is not needed.
--
Summary: Strange initialization of uninitialized structure part
Product: gcc
Version: 4.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: uros at kss-loka dot si
GCC build triplet: i686-pc-linux-gnu
GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27638
More information about the Gcc-bugs
mailing list