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

            Bug ID: 58171
           Summary: Incorrect error message on invalid code when using
                    class constructor
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: abensonca at gmail dot com

The following code leads to an incorrect error message from the compiler using
gfortran 4.9.0 (r201758):

module ct
  type :: cps
     private
     double precision :: aa ! Removing this line leads to a more meaningful
error message from the compiler.
   contains
  end type cps
  interface cps
     module procedure newCps
  end interface cps
contains
  function newCps(a,b)
    implicit none
    type(cps) :: newCps
    double precision, intent(in) :: a,b
    return
  end function newCps
end module ct
program bug
  use ct
  implicit none
  type(cps) :: c
  c=cps(0.27d0) !,0.13d0) ! Passing two arguments (as expected) results in
successful compile.
end program bug

$ gfortran -v
Using built-in specs.
COLLECT_GCC=/opt/gcc-trunk/bin/gfortran
COLLECT_LTO_WRAPPER=/opt/gcc-trunk/libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc-trunk/configure --prefix=/opt/gcc-trunk
--enable-languages=c,c++,fortran --disable-multilib
Thread model: posix
gcc version 4.9.0 20130808 (experimental) (GCC) 


$ gfortran bug.F90 -o bug.exe
bug.F90:22.4:

  c=cps(0.27d0) !,0.13d0) ! Passing two arguments (as expected) results in
successful compile.
    1
Error: Component 'aa' at (1) is a PRIVATE component of 'cps'

The code is invalid - the class constructor requires two arguments - but the
error message doesn't reflect this. Passing two arguments to the constructor
results in a successful compile. 

If I remove the "aa" variable from the cps type then the error message is more
useful:

$ gfortran bug.F90 -o bug.exe
bug.F90:22.8:

  c=cps(0.27d0) !,0.13d0) ! Passing two arguments (as expected) results in
successful compile.
        1
Error: Too many components in structure constructor at (1)!

but still incorrect - it should be "Too few components in structure
constructor", not "Too many".

Reply via email to