[Bug fortran/84674] New: Derived type name change makes a program segfault, removing non_overridable
albandil at atlas dot cz
gcc-bugzilla@gcc.gnu.org
Fri Mar 2 15:14:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84674
Bug ID: 84674
Summary: Derived type name change makes a program segfault,
removing non_overridable
Product: gcc
Version: 8.0.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: albandil at atlas dot cz
Target Milestone: ---
Take the program code from
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61284#c0 , change derived type
name "t3" to "DerivedType" (three places in the code) and compile the result by
gfortran 7.3.0. It will compile fine, but result in segmentation fault at
runtime, even though the original code (with "t3") now runs all right.
When the modified code is compiled with gfortran 7.2.0 or ifort 17.0.0, it also
runs well, without crashing.
Finally, when "non_overridable" keyword on line 12 is removed (as indicated in
the commented line 13), the modified program runs well, too, even when compiled
by gfortran 7.3.0.
For reference, here is the failing code:
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) :: DerivedType
end type DerivedType
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(DerivedType::v)
v%i = 2
call v%ff()
write(*,*) v%i
end program p
More information about the Gcc-bugs
mailing list