https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61284
Bug ID: 61284
Summary: non_overridable produces segmentation fault
Product: gcc
Version: 4.10.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: mrestelli at gmail dot com
The attached code produces a segmentation fault when including the
non_overridable attribute in t2.
$ gfortran --version
GNU Fortran (GCC) 4.10.0 20140508 (experimental)
$ ./bhg
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:
#0 0x7F46D0A23797
#1 0x7F46D0A23D64
#2 0x7F46CFF5453F
#3 0x0
module m
implicit none
type, abstract :: t1
integer :: i
contains
procedure(i_f), pass(u), deferred :: ff
end type t1
type, abstract, extends(t1) :: t2
contains
procedure, non_overridable, pass(u) :: ff => f ! Segmentation fault
!procedure, pass(u) :: ff => f ! works
end type t2
type, extends(t2) :: t3
end type t3
abstract interface
subroutine i_f(u)
import :: t1
class(t1), intent(inout) :: u
end subroutine i_f
end interface
contains
subroutine f(u)
class(t2), intent(inout) :: u
u%i = 3*u%i
end subroutine f
end module m
program p
use m
implicit none
class(t1), allocatable :: v
allocate(t3::v)
v%i = 2
call v%ff()
write(*,*) v%i
end program p