Two gfortran bugs

John Harper John.Harper@msor.vuw.ac.nz
Thu Jul 5 01:06:00 GMT 2012


After sending the email below, I found that an older gfortran version,
4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) does not have my bug 1 but does 
have bug 2. Version 4.6.2 20120120 (prerelease) (GCC) has both bugs,
like version 4.8.0 20120701 (experimental) (GCC) mentioned below.
I showed this by compiling and running the same program with std=f95
three times.

On Thu, 5 Jul 2012, John Harper wrote:

> Date: Thu, 5 Jul 2012 11:38:39 +1200 (NZST)
> From: John Harper <John.Harper@msor.vuw.ac.nz>
> To: gcc@gcc.gnu.org
> Subject: Two gfortran bugs
> 
> My program testpublic5.f90 (see below) when compiled with -std=f95
> using gfortran version 4.8.0 20120701 (experimental) (GCC)
> reveals two compiler bugs, giving an unjustified warning and failing
> to mention that the program violates an f95 constraint. It compiles
> and runs with -std=f95 the same way as with -std=f2003
>
> 1. Gfortran warns that the declaration character name*63 is obsolescent, but 
> it is not. Character*63 name would be obsolescent, of course. (You will 
> notice that the program contains several declarations of that
> nature, but only the one in the declaration of a derived type triggers
> the warning.)
>
> 2. The f95 constraint is that a function returning a private type must
> not have a public generic identifier. That constraint is not in f2003.
>
> ayley[~/Jfh] % cat testpublic5.f90
> ! Bad f95 (forbidden by 3rd constraint after R523 that functions of
> ! private type [e.g. namekindlen] can't have public generic identifiers
> ! [e.g. attributes].) The constraint does not apply to the private
> ! function chstring with the public generic identifier string because
> ! neither its argument nor its function value is of private type.
> ! Good f2003/2008.
> !
> module whattype
>  private
>  public properties,attributes
>  interface attributes
>     module procedure namekindlen
>  end interface attributes
>  interface properties
>     module procedure charprops
>  end interface properties
>  type charints
>     character name*63 ! Max length of a name in f2003
>     integer   sort
>     integer   leng
>  end type charints
> contains
>  pure function    namekindlen(string)
>    type(charints) namekindlen
>    character(*),intent(in)::  string
>    namekindlen = charints(string,kind(string),len(string))
>  end function namekindlen
>
>  pure integer function ilen(i) ! Minimum space to write integer i
>    integer,intent(in)::     i
>    character str*(range(i)+3)
>    write(str,"(I0,A)") i,'?'
>    ilen = index(str,'?')-1
>  end function ilen
>
>  pure function charprops(s) result(                answer)
>    character,intent(in)::s*(*)
>    character(len(s)+ilen(kind(s))+ilen(len(s))+32) answer
>    type(charints) nkl
>    nkl = attributes(s)
>    write(answer,"(2(A,I0))") '"'//nkl%name(1:len(s))//'"'// &
>         ' is type character, kind ',nkl%sort,' len ',nkl%leng
>  end function charprops
> end module whattype
>
> program testpublic
>  use whattype
>  character,parameter:: stuff*(*) = 'foobar  '
>  print "(A)",properties(stuff)
> end program testpublic
> cayley[~/Jfh] %
> cayley[~/Jfh] % alias gf
> /local/scratch/gf/bin/gfortran
> cayley[~/Jfh] % gf -v
> Using built-in specs.
> COLLECT_GCC=/local/scratch/gf/bin/gfortran
> COLLECT_LTO_WRAPPER=/local/scratch/gf/libexec/gcc/i686-pc-linux-gnu/4.8.0/lto-wrapper
> Target: i686-pc-linux-gnu
> Configured with: /local/scratch/gcc-4.8-20120701/configure 
> --prefix=/local/scratch/gf --enable-languages=c,fortran --disable-libada 
> --with-local-prefix=/local/scratch --with-gmp=/local/scratch
> Thread model: posix
> gcc version 4.8.0 20120701 (experimental) (GCC)
> cayley[~/Jfh] %
> cayley[~/Jfh] % gf -std=f95 testpublic5.f90
> testpublic5.f90:18.22:
>
>     character name*63 ! Max length of a name in f2003
>                      1
> Warning: Obsolescent feature: Old-style character length at (1)
> cayley[~/Jfh] % ./a.out
> "foobar  " is type character, kind 1 len 8
> cayley[~/Jfh] %
>
> -- John Harper, School of Mathematics Statistics and Operations Research
> Victoria University, PO Box 600, Wellington 6140, New Zealand
> e-mail john.harper@vuw.ac.nz phone (+64)(4)463 5276 fax (+64)(4)463 5045
>


-- John Harper, School of Mathematics Statistics and Operations Research
Victoria University, PO Box 600, Wellington 6140, New Zealand
e-mail john.harper@vuw.ac.nz phone (+64)(4)463 5276 fax (+64)(4)463 5045



More information about the Gcc mailing list