Using gfortran 4.4.1, a string parameter passed to a subroutine is mangled when
an optional parameter is missing.  I enclose a simplified example below.  

In the original 2000+ line program, the string passed was the required string
plus the string from the following error checking call.  In this simplified
example this does not happen but "AMPLITUDE" gets truncated to "A".
===============================================
      program test_error
c
c  program to try and regenerate gfortran error
c

      call oc5select_name("AMPLITUDE")
c      call oc5error_test("Error message")
      end


      subroutine oc5select_name(dname, report)
      IMPLICIT none
c
      CHARACTER (LEN=*), INTENT(IN)  :: dname
      LOGICAL, OPTIONAL, INTENT(IN)  :: report
      LOGICAL                        :: verbose
c
      verbose = .false.
      if(present(report)) verbose = .true.
      print *," dname = ",dname
      return
      end
===============================================

Correct output :  
  AMPLITUDE

Output from 
    gfortran -o test_error test_error.F
is:  A

When subroutine call is changed to:
      call oc5select_name("AMPLITUDE",.true.)
output is:
  AMPLITUDE

Regards,

  David Webb.

As appears to be requested in one of the bug pages I enclose the output from
"gfortran -v -save-temps"

=============================
~/test> gfortran -v -save-temps -o test_error test_error.F
Driving: gfortran -v -save-temps -o test_error test_error.F -lgfortranbegin
-lgfortran -lm -shared-libgcc
Using built-in specs.
Target: x86_64-suse-linux
Configured with: ../configure --prefix=/usr --infodir=/usr/share/info
--mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64
--enable-languages=c,c++,objc,fortran,obj-c++,java,ada
--enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.4
--enable-ssp --disable-libssp --with-bugurl=http://bugs.opensuse.org/
--with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap
--with-slibdir=/lib64 --with-system-zlib --enable-__cxa_atexit
--enable-libstdcxx-allocator=new --disable-libstdcxx-pch
--enable-version-specific-runtime-libs --program-suffix=-4.4
--enable-linux-futex --without-system-libunwind --with-arch-32=i586
--with-tune=generic --build=x86_64-suse-linux
Thread model: posix
gcc version 4.4.1 [gcc-4_4-branch revision 150839] (SUSE Linux)
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'test_error' '-shared-libgcc'
'-mtune=generic'
 /usr/lib64/gcc/x86_64-suse-linux/4.4/f951 test_error.F -ffixed-form -cpp
test_error.f90 -quiet -v test_error.F -quiet -dumpbase test_error.F
-mtune=generic -auxbase test_error -version -fintrinsic-modules-path
/usr/lib64/gcc/x86_64-suse-linux/4.4/finclude -o test_error.s
#include "..." search starts here:
#include <...> search starts here:
 /usr/lib64/gcc/x86_64-suse-linux/4.4/finclude
 /usr/local/include
 /usr/lib64/gcc/x86_64-suse-linux/4.4/include
 /usr/lib64/gcc/x86_64-suse-linux/4.4/include-fixed
 /usr/lib64/gcc/x86_64-suse-linux/4.4/../../../../x86_64-suse-linux/include
 /usr/include
End of search list.
GNU Fortran (SUSE Linux) version 4.4.1 [gcc-4_4-branch revision 150839]
(x86_64-suse-linux)
        compiled by GNU C version 4.4.1 [gcc-4_4-branch revision 150839], GMP
version 4.3.1, MPFR version 2.4.1-p5.
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'test_error' '-shared-libgcc'
'-mtune=generic'
 /usr/lib64/gcc/x86_64-suse-linux/4.4/../../../../x86_64-suse-linux/bin/as -V
-Qy -o test_error.o test_error.s
GNU assembler version 2.19.51 (x86_64-suse-linux) using BFD version (GNU
Binutils; openSUSE 11.2) 2.19.51.20090527-10.26.4
COMPILER_PATH=/usr/lib64/gcc/x86_64-suse-linux/4.4/:/usr/lib64/gcc/x86_64-suse-linux/4.4/:/usr/lib64/gcc/x86_64-suse-linux/:/usr/lib64/gcc/x86_64-suse-linux/4.4/:/usr/lib64/gcc/x86_64-suse-linux/:/usr/lib64/gcc/x86_64-suse-linux/4.4/../../../../x86_64-suse-linux/bin/
LIBRARY_PATH=/usr/lib64/gcc/x86_64-suse-linux/4.4/:/usr/lib64/gcc/x86_64-suse-linux/4.4/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib64/gcc/x86_64-suse-linux/4.4/../../../../x86_64-suse-linux/lib/:/usr/lib64/gcc/x86_64-suse-linux/4.4/../../../:/lib/:/usr/lib/
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-o' 'test_error' '-shared-libgcc'
'-mtune=generic'
 /usr/lib64/gcc/x86_64-suse-linux/4.4/collect2 --build-id --eh-frame-hdr -m
elf_x86_64 -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o test_error
/usr/lib64/gcc/x86_64-suse-linux/4.4/../../../../lib64/crt1.o
/usr/lib64/gcc/x86_64-suse-linux/4.4/../../../../lib64/crti.o
/usr/lib64/gcc/x86_64-suse-linux/4.4/crtbegin.o
-L/usr/lib64/gcc/x86_64-suse-linux/4.4
-L/usr/lib64/gcc/x86_64-suse-linux/4.4/../../../../lib64 -L/lib/../lib64
-L/usr/lib/../lib64
-L/usr/lib64/gcc/x86_64-suse-linux/4.4/../../../../x86_64-suse-linux/lib
-L/usr/lib64/gcc/x86_64-suse-linux/4.4/../../.. test_error.o -lgfortranbegin
-lgfortran -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc
/usr/lib64/gcc/x86_64-suse-linux/4.4/crtend.o
/usr/lib64/gcc/x86_64-suse-linux/4.4/../../../../lib64/crtn.o


-- 
           Summary: String parameter error when optional parameter missing
           Product: gcc
           Version: 4.4.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: David dot Webb at soc dot soton dot ac dot uk


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42428

  • [Bug fortran/42428] New: St... David dot Webb at soc dot soton dot ac dot uk

Reply via email to