File: assign_allocatable_array_of_struct_instances.f90

package info (click to toggle)
lfortran 0.45.0-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 46,332 kB
  • sloc: cpp: 137,068; f90: 51,260; python: 6,444; ansic: 4,277; yacc: 2,285; fortran: 806; sh: 524; makefile: 30; javascript: 15
file content (34 lines) | stat: -rw-r--r-- 940 bytes parent folder | download
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