[Bug fortran/84778] Issue with character arguments of specified length (does not compile)
kargl at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Mar 9 18:11:00 GMT 2018
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.
More information about the Gcc-bugs
mailing list