<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/149885>149885</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[flang] Runtime failure at the READ statement of list-directed I/O with an array input item.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
flang:runtime
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
DanielCChen
</td>
</tr>
</table>
<pre>
Consider the following code:
```
module m
type dataType
complex, allocatable :: cx
end type
type base
character(20), pointer :: name => null()
real, allocatable :: data
class(dataType), allocatable :: d2
end type
interface read(formatted)
procedure readBaseFmtd
procedure readDataTypeFmtd
end interface
contains
integer function currentPos (s)
character(*), intent(in) :: s
currentPos = len (trim(s)) + 1
end function
subroutine readDataTypeFmtd (dtv, unit, iotype, v_list, iostat, iomsg)
class(dataType), intent(inout) :: dtv
integer, intent(in) :: unit
character(*), intent(in) :: iotype
integer, intent(in) :: v_list(:)
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
if (.not. allocated(dtv%cx)) allocate (dtv%cx)
read(unit, *, iostat=iostat, iomsg=iomsg) dtv%cx
end subroutine
subroutine readBaseFmtd (dtv, unit, iotype, v_list, iostat, iomsg)
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
if (.not. associated(dtv%name)) allocate (dtv%name)
read (unit, *, iostat=iostat, iomsg=iomsg) dtv%name
if (iostat /= 0) error stop 1
if (.not. allocated(dtv%data)) allocate (dtv%data)
read (unit, *, iostat=iostat, iomsg=iomsg) dtv%data
if (iostat /= 0) then
print*, iomsg
error stop 2
end if
if (.not. allocated(dtv%d2)) allocate(dtv%d2)
read (unit, *, iostat=iostat, decimal='COMMA', iomsg=iomsg) dtv%d2
if (iostat /= 0) error stop 3
end subroutine
end module
program modeInquire002
use m
class(base), allocatable :: b1(:)
integer :: j = 3 !! If j is less than 3 or b1 is a scalar, the code works fine.
open (1, file='modeInquire002.data')
write (1, &
fmt='("''", a, "'' ",dp,e15.8, " (", dc, e15.8," ; ",e15.8," ) ")', &
sign='plus') &
('xlftest '//achar(iachar('0') + i-1), i*1.2, &
cmplx(sin(i*1.1), cos(i*1.1), 4), i=1,j)
rewind 1
allocate (b1(j))
read (1,*) b1
end
```
Flang failed at the runtime with:
```
> a.out
Bad real input data at column 64 of record 1
Fortran ERROR STOP: code 2
IEEE arithmetic exceptions signaled: INEXACT
```
If `b1` is a scalar or has less than 3 elements, it works fine.
Both gfortran and XLF compile and executes the code successfully.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzkV0lv47gS_jX0pRBDorzIBx8cOwYCvH5p5PWhbw80VbKZoUgNSWX594OipFjeBtM9Pacxgpgma6-vikXhvdobxCWb3rPpZiSacLBuuRFGoV6vD2hGO1t8LNfWeFWgg3BAKK3W9k2ZPUhbIMtWLFmxWdL9JavKFo1GqFiyAgAIHzVCIYL49lFjt0cfaata4zvjaxBaWymC2GkEkpetQL53pGiKKIKUDATuhD8RdhBOyICO8ZwnjC9IbG2VCeh6kUZUJH7DsgcwjdaM50R4FOJQ6BvmkP1EKbXwnvH8059W0zUOftOBaFUpJJLGgvG8tK4SIWBxak_trMSicS3dvfC4rUJxk2DT2TQgIt2f2loDuhNpTRDK-FOr9uigbIwMyhqQjXNowlfrgfHcn9o2DDjjqy4OJMMExnNlGF_0oRgoiawDudkGNBqSH5yqejXEyu8hHXjRW3UU5Zuds01Q5tJ7kleEV7KoMSpEy2zMAV_D6_-18t2eD6JbVX5_5uD1TA88tE0YOEn6jtxdMG_HJNr1c-HsXPkBZb3LOf0-8fIa66lfXZB-wNRzfgptmzVVUmbGxoZxXzKE-TZXU_ne5b4_grOjExR1pdPnN1rymdJsc55b2mlzDJ8ij-g6Yukmvvry-5XYik3sn8HVvwNQvdIhrry3Up0Aixr_TWj1hxfggr-Drih1CPqWAxjfUs-jGwrQOevAB1vHTnfLn4s6iXfRLXf6w1_rTnf9XZh4xatwQGrSUDtF6VsdpR6ZYeg7HxzE-6r8oWDws1CcnfxkHAqUqhKapgU-Xz99-bJifP5nAeJ_MTwDx7Mjy0UPoo12jmqJamf3TlS0h4_m90Y5TBLS2fhu0rrSU65MJbv0vGj7a78jeIl3cgaMp4yn8FjCCygPGr2HcBAGMrAOdiltCvBSaBGLnQZDGgfhzbrfPJTK4Phk4LB1e8-nRF0qjW1sTx0at_Cdn2TuzakW4Wmbsxntl1VoBcSmweNiHhdrEC1dt9mu1kXN-BrT6TjvTqHnXEMh6X9_GM-y-47vZDcOJi3i5gNjBh-ap1vDat341pUrZFH3_F2XAT0BZE4Y4VtBvZCA0y8YnyefQu5B3aV9e2R8lY75dSNiV61q_U4DFTXuvCXvmaX1F3uTT8HZhgL9cpIDh2_KFMM-NWw9EVUvbSEOedpqS2P0CHIEv3iMpjh7NLBktdXC7KEUSmMBIkRIucYEVSG8qXC4fGnQJC_GdD0kK7gXRZzgQZm6CXFiJynS6qYyMJuALcGhtO7Tja11wQkDD8_PT8_wv29PX-PLg1DclfPjw8MDCKfCocKgJOC7xJrGUB8TLTQWxPL434fvq_W3S5ceS2CzZJeyWTIsGCqhgzitKtRYoQk-5iBcltG9DQfYl53JwhTw_T_b-IhSGuNvfEfZBPTHWvSNlOh92Wj9MR4Vy6xYZAsxwmU6n2Ypn-XzyeiwxLTYzTM5zSdiUaTJYrKb82SWJ5hwzKeLbKSWPOHTZM7TdDFJ08kY5U7mk2QmpzLLxGLHJglWQumx1q_V2Lr9SHnf4DKdLPJ8OtJih9rHNybnJWWZZasus1RO083ILYn1btfsPZskNFz4o7Cggo5P1JZ3uoHnDhYEFnr-dGh5flhtgFpuDCUlnCTdFcqhDFjAI-Pbp4gloBg6Jz46tKiA1XjUOL08hFD72CGpIPcqHJrdWNqK8S0Z1H3d1c6-oAyMb6OrnvFt5-3rkv8RAAD__9sAaO0">