Issue |
154843
|
Summary |
[flang] Failure when reading 3 level of nested namelist.
|
Labels |
flang:runtime
|
Assignees |
|
Reporter |
DanielCChen
|
Consider the following reducer:
```
module m
type data
integer :: k
end type
type container
integer :: j
type(data) :: d
end type
type base
integer :: i
type(container) :: c
end type
interface read(formatted)
subroutine readformatted(dtv, unit, iotype, v_list, iostat, iomsg )
import base
class(base), intent(inout) :: dtv
integer, intent(in) :: unit
character(*), intent(in) :: iotype
integer, intent(in) :: v_list(:)
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
end subroutine
end interface
end module
program position102kl
use m
integer :: stat
character(200) :: msg = ''
type(base) :: b1
type(base) :: b2
namelist /nml/ b1, b2
open (1, file = 'position102kl.1', form='formatted', access='sequential' )
read (1,NML=nml, iostat=stat, iomsg=msg)
if ( stat /= 0 ) ERROR STOP 1
end program
subroutine readformatted (dtv, unit, iotype, v_list, iostat, iomsg)
use m, only: base, container
interface read(formatted)
subroutine containerreadformatted(dtv, unit, iotype, v_list, iostat, iomsg )
import container
class(container), intent(inout) :: dtv
integer, intent(in) :: unit
character(*), intent(in) :: iotype
integer, intent(in) :: v_list(:)
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
end subroutine
end interface
class(base), intent(inout) :: dtv
integer, intent(in) :: unit
character(*), intent(in) :: iotype
integer, intent(in) :: v_list(:)
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
type(container) :: c1
namelist /basedtio/ c1
read (unit, "(TL100, I4)", iostat=iostat, iomsg=iomsg) dtv%i
if ( iostat /= 0 ) ERROR STOP 6
read (unit, basedtio, iostat=iostat, iomsg=iomsg)
if ( iostat /= 0 ) ERROR STOP 7
end subroutine
subroutine containerreadformatted(dtv, unit, iotype, v_list, iostat, iomsg )
use m, only: container, data
interface read(formatted)
subroutine datareadformatted(dtv, unit, iotype, v_list, iostat, iomsg )
import data
class(data), intent(inout) :: dtv ! tcx: (4)
integer, intent(in) :: unit
character(*), intent(in) :: iotype
integer, intent(in) :: v_list(:)
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
end subroutine
end interface
class(container), intent(inout) :: dtv ! tcx: (4,4)
integer, intent(in) :: unit
character(*), intent(in) :: iotype
integer, intent(in) :: v_list(:)
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
type(data) :: d1
namelist /containerdtio/ d1
read (unit, "(TR10, T1,I4)", iostat=iostat) dtv%j
if ( iostat /= 0 ) ERROR STOP 10
read (unit, containerdtio, iostat=iostat, iomsg=iomsg)
end subroutine
subroutine datareadformatted(dtv, unit, iotype, v_list, iostat, iomsg )
use m, only: data
class(data), intent(inout) :: dtv ! tcx: (4)
integer, intent(in) :: unit
character(*), intent(in) :: iotype
integer, intent(in) :: v_list(:)
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
read (unit, "(5X, TL99, I4)", iostat=iostat ) dtv%k
end subroutine
```
The input file `position102kl.1` is:
```
&NML
B1=1001 &BASEDTIO
C1=1002 &CONTAINERDTIO
D1=1003
/
/ B2=2001 &BASEDTIO
C1=2002 &CONTAINERDTIO
D1=2003
/
/
/
```
Flang failed at
```
> a.out
Fortran ERROR STOP: code 6
```
When both gfortran and XLF executed passed this point.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs