This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/38868] r143152 breaks output routines in xplor-nih
- 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: 17 Jan 2009 10:57:46 -0000
- Subject: [Bug middle-end/38868] r143152 breaks output routines in xplor-nih
- References: <bug-38868-11113@http.gcc.gnu.org/bugzilla/>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Comment #18 from rguenth at gcc dot gnu dot org 2009-01-17 10:57 -------
Well, I don't know how fortran strings are supposed to work, but for the
80 chars in a C string you need 81 bytes, 1 byte for the terminating null
character. Also you single-file testcase prints nothing at -O0 for me, the
expected output with optimization.
At -O0 I see loads of
==5461== Conditional jump or move depends on uninitialised value(s)
==5461== at 0x40D1E7A: (within /usr/lib/libgfortran.so.3.0.0)
==5461== by 0x40D0921: (within /usr/lib/libgfortran.so.3.0.0)
==5461== by 0x8048FA6: print2_ (in /tmp/t)
==5461== by 0x8048A16: printe_ (in /tmp/t)
==5461== by 0x8048819: MAIN__ (in /tmp/t)
....
==5461== Use of uninitialised value of size 4
==5461== at 0x41624E6: (within /lib/i686/cmov/libc-2.7.so)
==5461== by 0x4165C9B: vfprintf (in /lib/i686/cmov/libc-2.7.so)
==5461== by 0x418B323: vsnprintf (in /lib/i686/cmov/libc-2.7.so)
==5461== by 0x416D451: snprintf (in /lib/i686/cmov/libc-2.7.so)
==5461== by 0x40CB189: (within /usr/lib/libgfortran.so.3.0.0)
==5461== by 0x40D0CBA: (within /usr/lib/libgfortran.so.3.0.0)
==5461== by 0x8048FA6: print2_ (in /tmp/t)
==5461== by 0x8048A16: printe_ (in /tmp/t)
==5461== by 0x8048819: MAIN__ (in /tmp/t)
this is with GFortran 4.3. With GFortran 4.4 I get output at -O0 but also
==5485== Conditional jump or move depends on uninitialised value(s)
==5485== at 0x40D1E7A: (within /usr/lib/libgfortran.so.3.0.0)
==5485== by 0x40D0921: (within /usr/lib/libgfortran.so.3.0.0)
==5485== by 0x8048FC0: print2_ (in /tmp/t)
==5485== by 0x80489F7: printe_ (in /tmp/t)
==5485== by 0x80487FC: MAIN__ (in /tmp/t)
==5485== by 0x80493F8: main (in /tmp/t)
so I guess this is a problem in the Fortran runtime or the problem is exposed
there. But I wonder why there is a difference with optimization.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38868