Issue |
144363
|
Summary |
[flang] DTIO: Flang generates code to reference DTIO routines even there is not READ or WRITE in source code.
|
Labels |
flang:frontend
|
Assignees |
|
Reporter |
DanielCChen
|
Consider the following reducer:
```
module m1
type :: base
! empty type
end type
interface read(unformatted)
subroutine readUnformattedbase (dtv, unit, iostat, iomsg)
import base
class(base), intent(inout) :: dtv
integer, intent(in) :: unit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
end subroutine
end interface
interface write(unformatted)
subroutine writeUnformattedbase (dtv, unit, iostat, iomsg)
import base
class(base), intent(in) :: dtv
integer, intent(in) :: unit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
end subroutine
end interface
end module
program test
use m1
type(base), allocatable :: b1
allocate ( b1 )
open ( 2, file = 'test.data', form='unformatted', access='sequential' )
inquire ( iolength = length1 ) b1
close ( 2, status ='delete' )
end program
```
There is not READ or WRITE in the code, but Flang has
```
ld: 0711-317 ERROR: Undefined symbol: readunformattedbase_
ld: 0711-317 ERROR: Undefined symbol: writeunformattedbase_
```
Further more, if I provide the following implementation of the DTIO routines,
```
subroutine readUnformattedbase (dtv, myunit, iostat, iomsg)
use m1, only: base
class(base), intent(inout) :: dtv
integer, intent(in) :: myunit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
integer :: length1
select type (dtv)
type is (base)
inquire ( iolength = length1 ) dtv
end select
end subroutine
subroutine writeUnformattedbase (dtv, myunit, iostat, iomsg)
use m1, only: base
class(base), intent(in) :: dtv
integer, intent(in) :: myunit
integer, intent(out) :: iostat
character(*), intent(inout) :: iomsg
integer :: length1
select type (dtv)
type is (base)
inquire ( iolength = length1 ) dtv
end select
end subroutine
```
Flang coredumps at runtime at the `inquire` statement
```
fatal Fortran runtime error(t.f:39): Defined unformatted I/O without an external unit
IOT/Abort trap(coredump)
```
All ifort, gfortran and XLF compiles and executes the code successfully.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs