From: Jerry DeLisle <jvdelisle@charter.net>
To: "fortran@gcc.gnu.org" <fortran@gcc.gnu.org>
Cc: GCC Patches <gcc-patches@gcc.gnu.org>
Subject: [PATCH, Fortran] PR78659 Spurious "requires DTIO" reported against namelist statement
Date: Thu, 11 May 2017 15:35:00 -0000 [thread overview]
Message-ID: <5faf10d1-1b97-932e-5c2b-bbd666219497@charter.net> (raw)
[-- Attachment #1: Type: text/plain, Size: 1193 bytes --]
Hi all,
The attached patch fixes this issue by moving the DTIO namelist checks from
namelist resolution to READ/WRITE statement resolution. This allows the checks
to be specific to the io_kind. The dtio_procs_present function is moved and
modified to accept the io_kind as an argument and check for the specific DTIO
procedure.
The original dtio_procs_present function also had a segfault for one of the test
cases because in the particular case the accessed structures do not exist. This
is prevented by adding the appropriate guarding to avoid memory accesses to
never never land.
Several new test cases added. Regression tested on x86-64.
OK for trunk. I would like to recommend back porting to 7 after allowing some
time for testing.
Regards,
Jerry
2017-05-11 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/78659
* io.c (dtio_procs_present): Add new function to check for DTIO
procedures relative to I/O statement READ or WRITE.
(gfc_resolve_dt): Add namelist checks using the new function.
* resolve.c (dtio_procs_present): Remove function and related
namelist checks. (resolve_fl_namelist): Add check specific to
Fortran 95 restriction on namelist objects.
[-- Attachment #2: namelist_91.f90 --]
[-- Type: text/x-fortran, Size: 195 bytes --]
! { dg-do compile }
! PR78659 Spurious "requires DTIO" reported against namelist statement
program p
type t
integer :: k
end type
class(t), allocatable :: x
namelist /nml/ x
end
[-- Attachment #3: namelist_92.f90 --]
[-- Type: text/x-fortran, Size: 488 bytes --]
! { dg-do compile }
! PR78659 Spurious "requires DTIO" reported against namelist statement
MODULE ma
IMPLICIT NONE
TYPE :: ta
INTEGER, allocatable :: array(:)
END TYPE ta
END MODULE ma
PROGRAM p
USE ma
type(ta):: x
NAMELIST /nml/ x
WRITE (*, nml) ! { dg-error "has ALLOCATABLE or POINTER components and thus requires a defined input/output" }
READ (*, nml) ! { dg-error "has ALLOCATABLE or POINTER components and thus requires a defined input/output" }
END PROGRAM p
[-- Attachment #4: namelist_93.f90 --]
[-- Type: text/x-fortran, Size: 466 bytes --]
! { dg-do compile }
! PR78659 Spurious "requires DTIO" reported against namelist statement
MODULE ma
IMPLICIT NONE
TYPE :: ta
INTEGER, allocatable :: array(:)
END TYPE ta
END MODULE ma
PROGRAM p
USE ma
class(ta), allocatable :: x
NAMELIST /nml/ x
WRITE (*, nml)! { dg-error "is polymorphic and requires a defined input/output procedure" }
READ (*, nml) ! { dg-error "is polymorphic and requires a defined input/output procedure" }
END PROGRAM p
[-- Attachment #5: namelist_94.f90 --]
[-- Type: text/x-fortran, Size: 866 bytes --]
! { dg-do compile }
! PR78659 Spurious "requires DTIO" reported against namelist statement
MODULE m
IMPLICIT NONE
TYPE :: t
CHARACTER :: c
CONTAINS
PROCEDURE :: write_formatted
GENERIC :: WRITE(FORMATTED) => write_formatted
END TYPE
CONTAINS
SUBROUTINE write_formatted(dtv, unit, iotype, v_list, iostat, iomsg)
CLASS(t), INTENT(IN) :: dtv
INTEGER, INTENT(IN) :: unit
CHARACTER(*), INTENT(IN) :: iotype
INTEGER, INTENT(IN) :: v_list(:)
INTEGER, INTENT(OUT) :: iostat
CHARACTER(*), INTENT(INOUT) :: iomsg
WRITE (unit, "(A)", IOSTAT=iostat, IOMSG=iomsg) dtv%c
print *, "what"
END SUBROUTINE
END MODULE
PROGRAM p
USE m
IMPLICIT NONE
class(t), allocatable :: x
NAMELIST /nml/ x
x = t('a')
WRITE (*, nml)
READ (*, nml) ! { dg-error "is polymorphic and requires a defined input/output procedure" }
END
next reply other threads:[~2017-05-11 15:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-11 15:35 Jerry DeLisle [this message]
2017-05-11 15:46 ` PATCH ATTACHED " Jerry DeLisle
2017-05-11 17:23 ` Paul Richard Thomas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5faf10d1-1b97-932e-5c2b-bbd666219497@charter.net \
--to=jvdelisle@charter.net \
--cc=fortran@gcc.gnu.org \
--cc=gcc-patches@gcc.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).