| Issue |
170331
|
| Summary |
[flang] Default initialization of derived type procedure pointer component fails across file boundaries
|
| Labels |
flang
|
| Assignees |
|
| Reporter |
edvinolo
|
When compiled with flang, the following module and program combination leads to a segmentation fault due to a null pointer. The problem seems to be that the procedure pointer component ```bar``` of the type ```typ``` is not properly initialized when the type definition is in a separate source file from where the initialization happens. If I put the module and program in the same source file, there are no issues.
### Reproducer:
https://gcc.godbolt.org/z/s8rzoroq7
* m_1.f90:
``` fortran
module m_1
implicit none
type, public :: typ
integer :: i = 11
procedure(foo), pointer :: bar => goo
end type typ
abstract interface
function foo(this,x) result(res)
import :: typ
implicit none
class(typ), intent(in) :: this
integer, intent(in) :: x
integer :: res
end function foo
end interface
contains
function goo(this,x) result(res)
class(typ), intent(in) :: this
integer, intent(in) :: x
integer :: res
res = x + this%i
end function goo
end module m_1
```
* example.f90:
``` fortran
program example
use m_1, only: typ
use iso_c_binding, only: c_funloc, c_intptr_t
use iso_fortran_env, only: output_unit
implicit none
integer :: x
type(typ) :: a
x = 1
print *,'a%i:', a%i
print *, 'c_funloc(a%bar):', transfer(c_funloc(a%bar),0_c_intptr_t)
print *, 'associated(a%bar):', associated(a%bar)
flush(output_unit)
print *, a%bar(x)
end program example
```
Compiling with ```flang m_1.f90 example.f90``` and then running the program prints
```
a%i: 11
c_funloc(a%bar): 0
associated(a%bar): F
```
before terminating with a segmentation fault. Compiling with gfortran instead leads to normal execution and the following example output
```
a%i: 11
c_funloc(a%bar): 4198842
associated(a%bar): T
12
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs