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

             Bug #: 52062
           Summary: [4.6.2 regression] public generic name, specific
                    functions of private types
    Classification: Unclassified
           Product: gcc
           Version: 4.6.2
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: fortran
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: john.har...@vuw.ac.nz


A program that compiles and runs with gfortran 4.4.4 but gives an internal
compiler error with gfortran 4.6.2. IMHO the program is bad f95 but good f2003
because it disobeys a f95 constraint that seems not to be a f2003 constraint.
Evidence: 
rimu[~]$ cat testpublic.f90
! Can a public generic name refer to private specific functions returning
! private types? (F95 standard 5.2.3 R523 3rd constraint: A module procedure 
! that has a dummy argument or function result of a type that has PRIVATE 
! accessibility shall have PRIVATE accessibility and shall not have a 
! generic identifier that has PUBLIC accessibility. That constraint is 
! not in f2003 so this program seems to be valid f2003 but bad f95.)
Module whattype
  private
  public datatype
  interface datatype
     module procedure rtype,chtype
  end interface datatype
  type char1int
     character(9) name
     integer      sort
  end type char1int
  type char2int
     character(9) name
     integer      sort
     integer      leng
  end type char2int
contains
  elemental type(char1int) function rtype(x)
    real,intent(in)::                     x
    rtype = char1int('real',kind(x))
  end function rtype

  elemental type(char2int) function chtype(x)
    Character(*),intent(in)::              x
    chtype = char2int('character',kind(x),len(x))
  end function chtype

end module whattype

program testpublic
  use whattype
  print 999, ' "rhubarb" is ',datatype("rhubarb")
  print 999, ' 666.0     is ',datatype(666.0)
999 format (2A,' kind = ',I0,:,' len = ',I0)
end program testpublic

rimu[~]$ gfortran -v
Using built-in specs.
Target: i386-redhat-linux6E
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla
--enable-bootstrap --enable-shared --enable-threads=posix
--enable-checking=release --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --disable-gnu-unique-object
--enable-languages=c,c++,fortran --disable-libgcj
--with-mpfr=/builddir/build/BUILD/gcc-4.4.4-20100726/obj-i386-redhat-linux6E/mpfr-install/
--with-ppl=/builddir/build/BUILD/gcc-4.4.4-20100726/obj-i386-redhat-linux6E/ppl-install
--with-cloog=/builddir/build/BUILD/gcc-4.4.4-20100726/obj-i386-redhat-linux6E/cloog-install
--with-tune=generic --with-arch=i586 --build=i386-redhat-linux6E
Thread model: posix
gcc version 4.4.4 20100726 (Red Hat 4.4.4-13) (GCC) 
rimu[~]$ gfortran testpublic.f90
rimu[~]$ ./a.out
 "rhubarb" is character kind = 1 len = 7
 666.0     is real      kind = 4
rimu[~]$ 
rimu[~]$ /tmp/gf/bin/gfortran -v testpublic.f90
Driving: /tmp/gf/bin/gfortran -v testpublic.f90 -l gfortran -l m -shared-libgcc
Using built-in specs.
COLLECT_GCC=/tmp/gf/bin/gfortran
Target: i686-pc-linux-gnu
Configured with: /tmp/gcc-4.6.2/configure --prefix=/tmp/gf
--enable-languages=c,c++,fortran --disable-libada --with-gmp=/home/harperj1
--with-mpfr-include=/home/harperj1/mpfr-3.0.0
--with-mpfr-lib=/home/harperj1/mpfr-3.0.0/.libs
--with-mpc=/home/harperj1/mpc-0.9
Thread model: posix
gcc version 4.6.2 (GCC) 
COLLECT_GCC_OPTIONS='-v' '-shared-libgcc' '-mtune=generic' '-march=pentiumpro'
 /tmp/gf/libexec/gcc/i686-pc-linux-gnu/4.6.2/f951 testpublic.f90 -quiet
-dumpbase testpublic.f90 -mtune=generic -march=pentiumpro -auxbase testpublic
-version -fintrinsic-modules-path finclude -o /tmp/ccTvKzZ1.s
GNU Fortran (GCC) version 4.6.2 (i686-pc-linux-gnu)
        compiled by GNU C version 4.6.2, GMP version 4.3.2, MPFR version 3.0.0,
MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU Fortran (GCC) version 4.6.2 (i686-pc-linux-gnu)
        compiled by GNU C version 4.6.2, GMP version 4.3.2, MPFR version 3.0.0,
MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
testpublic.f90: In function âtestpublicâ:
testpublic.f90:37:0: internal compiler error: in transfer_expr, at
fortran/trans-io.c:2166
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.

Reply via email to