aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2024-02-25 14:50:07 -0800
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2024-02-25 14:53:52 -0800
commit3f58f96a4e8255e222953f9856bcd6c25f7b33cd (patch)
tree16d6c08066efbe4578cb661a9f25b8f89eb4257b /gcc
parentd1b241b9506cdc0ebd3f43d12cf77d7c33271342 (diff)
downloadgcc-3f58f96a4e8255e222953f9856bcd6c25f7b33cd.zip
gcc-3f58f96a4e8255e222953f9856bcd6c25f7b33cd.tar.gz
gcc-3f58f96a4e8255e222953f9856bcd6c25f7b33cd.tar.bz2
libgfortran: Propagate user defined iostat and iomsg.
PR libfortran/105456 libgfortran/ChangeLog: * io/list_read.c (list_formatted_read_scalar): Add checks for the case where a user defines their own error codes and error messages and generate the runtime error. * io/transfer.c (st_read_done): Whitespace. gcc/testsuite/ChangeLog: * gfortran.dg/pr105456.f90: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/gfortran.dg/pr105456.f9038
1 files changed, 38 insertions, 0 deletions
diff --git a/gcc/testsuite/gfortran.dg/pr105456.f90 b/gcc/testsuite/gfortran.dg/pr105456.f90
new file mode 100644
index 0000000..1883238
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr105456.f90
@@ -0,0 +1,38 @@
+! { dg-do run }
+! { dg-shouldfail "The users message" }
+module sk1
+ implicit none
+ type char
+ character :: ch
+ end type char
+ interface read (formatted)
+ module procedure read_formatted
+ end interface read (formatted)
+contains
+ subroutine read_formatted (dtv, unit, iotype, vlist, piostat, piomsg)
+ class (char), intent(inout) :: dtv
+ integer, intent(in) :: unit
+ character (len=*), intent(in) :: iotype
+ integer, intent(in) :: vlist(:)
+ integer, intent(out) :: piostat
+ character (len=*), intent(inout) :: piomsg
+ character :: ch
+ read (unit,fmt='(A1)', advance="no", iostat=piostat, iomsg=piomsg) ch
+ piostat = 42
+ piomsg="The users message"
+ dtv%ch = ch
+ end subroutine read_formatted
+end module sk1
+
+program skip1
+ use sk1
+ implicit none
+ type (char) :: x
+ open (10,status="scratch")
+ write (10,'(A)') '', 'a'
+ rewind (10)
+ read (10,*) x
+ write (*,'(10(A))') "Read: '",x%ch,"'"
+end program skip1
+! { dg-output ".*(unit = 10, file = .*)" }
+! { dg-output "Fortran runtime error: The users message" }