File: assign_allocatable_array_of_struct_instances.f90

package info (click to toggle)
lfortran 0.58.0-4
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 54,512 kB
  • sloc: cpp: 162,179; f90: 68,251; python: 17,476; ansic: 6,278; yacc: 2,334; sh: 1,317; fortran: 892; makefile: 33; javascript: 15
file content (34 lines) | stat: -rw-r--r-- 940 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
program assign_allocatable_array_of_struct_instances
    implicit none

    integer :: i

    type :: string
        character(:), allocatable :: s
    end type

    type(string), allocatable :: tokens(:)

    allocate(tokens(5))
    do i = 1, 5
        tokens(i)%s = "a"
    end do

    tokens = merge_pair(tokens, 1)

contains

    function merge_pair(intokens, idx) result(tkns)
        ! Merge the pair `idx`
        type(string), intent(in) :: intokens(:)
        integer, intent(in) :: idx
        type(string), allocatable :: tkns(:)
        type(string) :: merged_token
        merged_token%s = intokens(idx)%s // intokens(idx+1)%s
        ! The segmentation fault occurs at the below line, when used with
        ! `--experimental-simplifier` flag (i.e. simplifier pass enabled) and
        ! no `--realloc-lhs` flag is enabled for it
        tkns = [intokens(:idx-1), merged_token, intokens(idx+2:)]
    end function

end program