re PR fortran/84409 ([F03] check DTIO arguments for character len)
authorJanus Weil <janus@gcc.gnu.org>
Thu, 15 Feb 2018 21:16:00 +0000 (22:16 +0100)
committerJanus Weil <janus@gcc.gnu.org>
Thu, 15 Feb 2018 21:16:00 +0000 (22:16 +0100)
2018-02-15  Janus Weil  <janus@gcc.gnu.org>

PR fortran/84409
* interface.c (check_dtio_arg_TKR_intent): Add a check for character
length.

2018-02-15  Janus Weil  <janus@gcc.gnu.org>

PR fortran/84409
* gfortran.dg/dtio_21.f03: Add an error message.
* gfortran.dg/dtio_22.f90: Fix invalid test case.

From-SVN: r257711

gcc/fortran/ChangeLog
gcc/fortran/interface.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/dtio_21.f90
gcc/testsuite/gfortran.dg/dtio_22.f90

index ed91bf79b52ea22068f56171ffe9217cf246e1c0..481004e7f101b3b924157855c7040c2dc0923ce6 100644 (file)
@@ -1,3 +1,9 @@
+2018-02-15  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/84409
+       * interface.c (check_dtio_arg_TKR_intent): Add a check for character
+       length.
+
 2018-02-14  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/84385
index a5f3f4dda16393ddb84064510293c2eb9a8aec04..ad029289c0fbee725131dead6865c6e55216a6eb 100644 (file)
@@ -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));
index 4892192860afa75ac9c864db6d1589318e55a82f..aceed33c5b8ed475cd022b0f2c3006bd020dfc58 100644 (file)
@@ -1,3 +1,9 @@
+2018-02-15  Janus Weil  <janus@gcc.gnu.org>
+
+       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  <tkoenig@gcc.gnu.org>
 
        PR fortran/84381
index 8bfe3aa4367a11bb8393d343f9909fec6d4ac515..e8d433c58b2f51a935c8f31e989a43ce8cc5e834 100644 (file)
@@ -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
index f39450cbca2f9ae55ff9eec239fdf0efd9e51081..152a96a6beb6b03e95f652439c36762c4ef6c8fc 100644 (file)
@@ -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