mirror of
https://github.com/autc04/Retro68.git
synced 2024-06-28 11:30:19 +00:00
61 lines
1.6 KiB
Fortran
61 lines
1.6 KiB
Fortran
! { dg-do run }
|
|
!
|
|
! Test the fix for PR80931, which was nearly fix by the patch for PR87151.
|
|
! However, the 'span' for 'temp' was not being set and so a segfault
|
|
! occurred in the assignment at line 39.
|
|
!
|
|
! Contributed by Tiziano Mueller <dev-zero@gentoo.org>
|
|
!
|
|
module input_section_types
|
|
type :: section
|
|
character(len=:), allocatable :: keywords_(:)
|
|
|
|
contains
|
|
procedure, pass :: add_keyword
|
|
end type
|
|
|
|
interface section
|
|
procedure constructor
|
|
end interface
|
|
|
|
contains
|
|
|
|
type(section) function constructor ()
|
|
allocate (character(len=255) :: constructor%keywords_(0))
|
|
end function
|
|
|
|
subroutine add_keyword (this, name)
|
|
class(section), intent(inout) :: this
|
|
character(*), intent(in) :: name
|
|
character(len=:), allocatable :: temp(:)
|
|
|
|
integer :: n_elements
|
|
|
|
n_elements = size (this%keywords_)
|
|
allocate (character(len=255) :: temp(n_elements+1))
|
|
temp(:n_elements) = this%keywords_
|
|
call move_alloc (temp, this%keywords_)
|
|
|
|
this%keywords_(n_elements+1) = name
|
|
end subroutine
|
|
end module
|
|
|
|
use input_section_types
|
|
type(section) :: s
|
|
character(*), parameter :: hello = "Hello World"
|
|
character(*), parameter :: bye = "Goodbye World"
|
|
|
|
s = constructor ()
|
|
|
|
call s%add_keyword (hello)
|
|
if (len (s%keywords_) .ne. 255) stop 1
|
|
if (size (s%keywords_, 1) .ne. 1) stop 2
|
|
if (trim (s%keywords_(1)) .ne. hello) stop 3
|
|
|
|
call s%add_keyword (bye)
|
|
if (len (s%keywords_) .ne. 255) stop 4
|
|
if (size (s%keywords_, 1) .ne. 2) stop 5
|
|
if (trim (s%keywords_(1)) .ne. hello) stop 6
|
|
if (trim (s%keywords_(2)) .ne. bye) stop 7
|
|
end
|