2016-10-04 Jerry DeLisle <jvdelisle@gcc.gnu.org>
io/inquire.c (inquire_via_unit): Add check for internal unit passed into child IO procedure. From-SVN: r240768
This commit is contained in:
parent
3aa27eae35
commit
ddd12b5fb0
3 changed files with 41 additions and 1 deletions
33
gcc/testsuite/gfortran.dg/dtio_15.f90
Normal file
33
gcc/testsuite/gfortran.dg/dtio_15.f90
Normal file
|
@ -0,0 +1,33 @@
|
|||
! {dg-do run }
|
||||
! Test that inquire of string internal unit in child process errors.
|
||||
module string_m
|
||||
implicit none
|
||||
type person
|
||||
character(10) :: aname
|
||||
integer :: ijklmno
|
||||
contains
|
||||
procedure :: write_s
|
||||
generic :: write(formatted) => write_s
|
||||
end type person
|
||||
contains
|
||||
subroutine write_s (this, lun, iotype, vlist, istat, imsg)
|
||||
class(person), intent(in) :: this
|
||||
integer, intent(in) :: lun
|
||||
character(len=*), intent(in) :: iotype
|
||||
integer, intent(in) :: vlist(:)
|
||||
integer, intent(out) :: istat
|
||||
character(len=*), intent(inout) :: imsg
|
||||
integer :: filesize
|
||||
inquire( unit=lun, size=filesize, iostat=istat, iomsg=imsg)
|
||||
if (istat /= 0) return
|
||||
end subroutine write_s
|
||||
end module string_m
|
||||
program p
|
||||
use string_m
|
||||
type(person) :: s
|
||||
character(len=12) :: msg
|
||||
integer :: istat
|
||||
character(len=256) :: imsg = ""
|
||||
write( msg, "(DT)", iostat=istat) s
|
||||
if (istat /= 5018) call abort
|
||||
end program p
|
|
@ -1,3 +1,8 @@
|
|||
2016-10-04 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||
|
||||
io/inquire.c (inquire_via_unit): Add check for internal unit
|
||||
passed into child IO procedure.
|
||||
|
||||
2016-10-01 Andre Vehreschild <vehre@gcc.gnu.org>
|
||||
|
||||
PR fortran/77663
|
||||
|
|
|
@ -41,7 +41,9 @@ inquire_via_unit (st_parameter_inquire *iqp, gfc_unit * u)
|
|||
const char *p;
|
||||
GFC_INTEGER_4 cf = iqp->common.flags;
|
||||
|
||||
if (iqp->common.unit == GFC_INTERNAL_UNIT || iqp->common.unit == GFC_INTERNAL_UNIT4)
|
||||
if (iqp->common.unit == GFC_INTERNAL_UNIT ||
|
||||
iqp->common.unit == GFC_INTERNAL_UNIT4 ||
|
||||
u->internal_unit_kind != 0)
|
||||
generate_error (&iqp->common, LIBERROR_INQUIRE_INTERNAL_UNIT, NULL);
|
||||
|
||||
if ((cf & IOPARM_INQUIRE_HAS_EXIST) != 0)
|
||||
|
|
Loading…
Add table
Reference in a new issue