This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug fortran/33386] New: Fortran SELECT statement miscompiles
- From: "jpr at csc dot fi" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 11 Sep 2007 09:42:06 -0000
- Subject: [Bug fortran/33386] New: Fortran SELECT statement miscompiles
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
Hi,
In my application a wrong CASE is occationally selected in a SELECT statement.
I've not been able to reduce the code to do the wrong jump. However, the
following simple code run through valgrind gives uninitialized variable
warnings, which i think might be the source of the problem:
PROGRAM test
REAL :: x = 0
SELECT CASE( getstring() )
CASE('a')
x = 1
CASE('b')
x = 2
END SELECT
PRINT*,x
CONTAINS
FUNCTION getstring() RESULT(s)
CHARACTER(LEN=1) :: s
s = 'c'
END FUNCTION getstring
END PROGRAM test
Driving: gfortran -v -O0 -g -o a a.f90 -lgfortranbegin -lgfortran -lm
-shared-libgcc
Using built-in specs.
Target: i386-pc-linux-gnu
Configured with: /home/fx/gfortran_nightbuild/trunk/configure
--prefix=/home/fx/gfortran_nightbuild/irun-20070910
--enable-languages=c,fortran --build=i386-pc-linux-gnu
--enable-checking=release --with-gmp=/home/fx/gfortran_nightbuild/software
Thread model: posix
gcc version 4.3.0 20070910 (experimental) [trunk revision 128320] (GCC)
COLLECT_GCC_OPTIONS='-v' '-O0' '-g' '-o' 'a' '-shared-libgcc' '-mtune=i386'
/home/wrk/jpr/irun/bin/../libexec/gcc/i386-pc-linux-gnu/4.3.0/f951 a.f90
-quiet -dumpbase a.f90 -mtune=i386 -auxbase a -g -O0 -version
-fintrinsic-modules-path
/home/wrk/jpr/irun/bin/../lib/gcc/i386-pc-linux-gnu/4.3.0/finclude -o
/tmp/ccouIARh.s
GNU F95 (GCC) version 4.3.0 20070910 (experimental) [trunk revision 128320]
(i386-pc-linux-gnu)
compiled by GNU C version 4.3.0 20070910 (experimental) [trunk revision
128320], GMP version 4.2.1, MPFR version 2.2.1.
GGC heuristics: --param ggc-min-expand=64 --param ggc-min-heapsize=64211
COLLECT_GCC_OPTIONS='-v' '-O0' '-g' '-o' 'a' '-shared-libgcc' '-mtune=i386'
as -V -Qy -o /tmp/ccGk0ias.o /tmp/ccouIARh.s
GNU assembler version 2.15.92.0.2 (i386-redhat-linux) using BFD version
2.15.92.0.2 20040927
COMPILER_PATH=/home/wrk/jpr/irun/bin/../libexec/gcc/i386-pc-linux-gnu/4.3.0/:/home/wrk/jpr/irun/bin/../libexec/gcc/
LIBRARY_PATH=/home/wrk/jpr/irun/bin/../lib/gcc/i386-pc-linux-gnu/4.3.0/:/home/wrk/jpr/irun/bin/../lib/gcc/:/home/wrk/jpr/irun/bin/../lib/gcc/i386-pc-linux-gnu/4.3.0/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-O0' '-g' '-o' 'a' '-shared-libgcc' '-mtune=i386'
/home/wrk/jpr/irun/bin/../libexec/gcc/i386-pc-linux-gnu/4.3.0/collect2
--eh-frame-hdr -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 -o a
/usr/lib/crt1.o /usr/lib/crti.o
/home/wrk/jpr/irun/bin/../lib/gcc/i386-pc-linux-gnu/4.3.0/crtbegin.o
-L/home/wrk/jpr/irun/bin/../lib/gcc/i386-pc-linux-gnu/4.3.0
-L/home/wrk/jpr/irun/bin/../lib/gcc
-L/home/wrk/jpr/irun/bin/../lib/gcc/i386-pc-linux-gnu/4.3.0/../../..
/tmp/ccGk0ias.o -lgfortranbegin -lgfortran -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc
/home/wrk/jpr/irun/bin/../lib/gcc/i386-pc-linux-gnu/4.3.0/crtend.o
/usr/lib/crtn.o
valgrind ./a
==4319== Memcheck, a memory error detector.
==4319== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
==4319== Using LibVEX rev 1575, a library for dynamic binary translation.
==4319== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.
==4319== Using valgrind-3.1.1, a dynamic binary instrumentation framework.
==4319== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
==4319== For more details, rerun with: -v
==4319==
==4319== Conditional jump or move depends on uninitialised value(s)
==4319== at 0x80485CE: MAIN__ (a.f90:4)
==4319== by 0x8048690: main (fmain.c:21)
==4319==
==4319== Conditional jump or move depends on uninitialised value(s)
==4319== at 0x80485D7: MAIN__ (a.f90:4)
==4319== by 0x8048690: main (fmain.c:21)
0.000000
==4319==
==4319== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 17 from 1)
==4319== malloc/free: in use at exit: 0 bytes in 0 blocks.
==4319== malloc/free: 11 allocs, 11 frees, 25,425 bytes allocated.
==4319== For counts of detected errors, rerun with: -v
==4319== All heap blocks were freed -- no leaks are possible.
Adding a default case gets rid of the problems, also for my real application
code.
Regards, Juha
--
Summary: Fortran SELECT statement miscompiles
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: jpr at csc dot fi
GCC host triplet: i386 linux
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33386