This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/37380] [4.4 Regression] ../../gcc/libcpp/charset.c:1103: error: 'cvt.77.width' is used uninitialized in this function
- From: "rguenth at gcc dot gnu dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 9 Sep 2008 16:56:32 -0000
- Subject: [Bug middle-end/37380] [4.4 Regression] ../../gcc/libcpp/charset.c:1103: error: 'cvt.77.width' is used uninitialized in this function
- References: <bug-37380-276@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #9 from rguenth at gcc dot gnu dot org 2008-09-09 16:56 -------
The key to the problem seems to be a structure passed by value where the
target passes it as pointer and the struct is callee-copied. This gimplifies
to the correct
cvt.64 ={v} cvt;
D.6054_4 = cvt.64.width;
width_5 = (size_t) D.6054_4;
but somehow SRA completely messes up scalarizing the struct copy from the
parameter:
cvt$width_59 = cvt.64.width;
cvt$cd_60 = cvt.64.cd;
cvt$func_61 = cvt.64.func;
cvt.64$cd_62 = cvt$cd_60;
cvt.64$func_63 = cvt$func_61;
cvt.64$width_64 = cvt$width_59;
D.6054_4 = cvt.64$width_64;
width_5 = (size_t) D.6054_4;
where it removed the initialization of cvt.64. Which seems because of
2311 src = force_gimple_operand (src, &seq2, false, NULL_TREE);
cvt$width
cvt.width
(gdb) n
2312 gimple_seq_add_seq (&seq, seq2);
(gdb) call debug_generic_expr (src)
cvt.64.width
so we force-gimple-operanded cvt.width to cvt.64.width (but seq2 is empty).
--
rguenth at gcc dot gnu dot org changed:
What |Removed |Added
----------------------------------------------------------------------------
AssignedTo|unassigned at gcc dot gnu |rguenth at gcc dot gnu dot
|dot org |org
Status|NEW |ASSIGNED
Last reconfirmed|2008-09-07 21:11:45 |2008-09-09 16:56:32
date| |
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37380