https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84778

kargl at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |WAITING
   Last reconfirmed|                            |2018-03-09
                 CC|                            |kargl at gcc dot gnu.org
     Ever confirmed|0                           |1

--- Comment #2 from kargl at gcc dot gnu.org ---
(In reply to david.applegate from comment #0)
> Pass a character "a"  into a subroutine with an additional argument integer
> "b" which specifies its length.  This does not compile if integer "b" is
> declared after character "a" in the subroutine. See below
> 
> program test
> 
>   implicit none
>   integer, parameter :: b = 5
>   character(len=b) :: a
> 
>   a = "hello"
> 
>   write(*,*)a//" from main program"
>   
>   call testsub(a,b)
> 
> contains
> 
>   subroutine testsub(a,b)
> 
>     ! integer, intent(in) :: b   ! if we put declaration of b here instead
> it compiles ok
>     character(len=b), intent(in) :: a
>     integer, intent(in) :: b 
>     
>     write(*,*)a//" from testsub"
>     
>   end subroutine testsub
> end program test

The gfortran gives

% gfcx -o z m.f90
m.f90:16:18:

     character(len=b), intent(in) :: a
                  1
Error: Scalar INTEGER expression expected at (1)

plus a few run on errors.  The above error message 
is correct.  The dummy argument 'b' in testsub
prevents host associate, so when 'b' is used
in the above statement it has no type and the
implicit none prevents determining what type 
to use in the specification statement.

F2003 explicitly states 

A variable in a specification expression shall have
its type and type parameters, if any, specified by a
previous declaration in the same scoping unit, by the
implicit typing rules in effect for the scoping unit,
or by host or use association. If a variable in a
specification expression is typed by the implicit typing
rules, its appearance in any subsequent type declaration
statement shall confirm the implied type and type parameters.

Reply via email to