From: Janus Weil Date: Thu, 15 Feb 2018 21:16:00 +0000 (+0100) Subject: re PR fortran/84409 ([F03] check DTIO arguments for character len) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=f3ad8745b0559b3abc4253dbc3a659295b142379;p=gcc.git re PR fortran/84409 ([F03] check DTIO arguments for character len) 2018-02-15 Janus Weil PR fortran/84409 * interface.c (check_dtio_arg_TKR_intent): Add a check for character length. 2018-02-15 Janus Weil PR fortran/84409 * gfortran.dg/dtio_21.f03: Add an error message. * gfortran.dg/dtio_22.f90: Fix invalid test case. From-SVN: r257711 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index ed91bf79b52..481004e7f10 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2018-02-15 Janus Weil + + PR fortran/84409 + * interface.c (check_dtio_arg_TKR_intent): Add a check for character + length. + 2018-02-14 Janus Weil PR fortran/84385 diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index a5f3f4dda16..ad029289c0f 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -4673,7 +4673,7 @@ gfc_check_typebound_override (gfc_symtree* proc, gfc_symtree* old) /* The following three functions check that the formal arguments of user defined derived type IO procedures are compliant with - the requirements of the standard. */ + the requirements of the standard, see F03:9.5.3.7.2 (F08:9.6.4.8.3). */ static void check_dtio_arg_TKR_intent (gfc_symbol *fsym, bool typebound, bt type, @@ -4702,6 +4702,10 @@ check_dtio_arg_TKR_intent (gfc_symbol *fsym, bool typebound, bt type, gfc_error ("DTIO dummy argument at %L must be an " "ASSUMED SHAPE ARRAY", &fsym->declared_at); + if (type == BT_CHARACTER && fsym->ts.u.cl->length != NULL) + gfc_error ("DTIO character argument at %L must have assumed length", + &fsym->declared_at); + if (fsym->attr.intent != intent) gfc_error ("DTIO dummy argument at %L must have INTENT %s", &fsym->declared_at, gfc_code2string (intents, (int)intent)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 4892192860a..aceed33c5b8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2018-02-15 Janus Weil + + PR fortran/84409 + * gfortran.dg/dtio_21.f03: Add an error message. + * gfortran.dg/dtio_22.f90: Fix invalid test case. + 2018-02-15 Thomas Koenig PR fortran/84381 diff --git a/gcc/testsuite/gfortran.dg/dtio_21.f90 b/gcc/testsuite/gfortran.dg/dtio_21.f90 index 8bfe3aa4367..e8d433c58b2 100644 --- a/gcc/testsuite/gfortran.dg/dtio_21.f90 +++ b/gcc/testsuite/gfortran.dg/dtio_21.f90 @@ -19,10 +19,10 @@ program p allocate(z2) print *, z2 contains - subroutine wf2(this, a, b, c, d, e) + subroutine wf2(this, a, b, c, d, e) ! { dg-error "must have assumed length" } class(t2), intent(in) :: this integer, intent(in) :: a - character, intent(in) :: b + character(*), intent(in) :: b integer, intent(in) :: c(:) integer, intent(out) :: d character, intent(inout) :: e diff --git a/gcc/testsuite/gfortran.dg/dtio_22.f90 b/gcc/testsuite/gfortran.dg/dtio_22.f90 index f39450cbca2..152a96a6beb 100644 --- a/gcc/testsuite/gfortran.dg/dtio_22.f90 +++ b/gcc/testsuite/gfortran.dg/dtio_22.f90 @@ -15,10 +15,10 @@ contains subroutine wf(this, unit, b, c, iostat, iomsg) class(t), intent(in) :: this integer, intent(in) :: unit - character, intent(in) :: b + character(*), intent(in) :: b integer, intent(in) :: c(:) integer, intent(out) :: iostat - character, intent(inout) :: iomsg + character(*), intent(inout) :: iomsg write (unit, "(i3)", IOSTAT=iostat, IOMSG=iomsg) this%i end subroutine end