1! { dg-do compile }
2! { dg-options "-fdump-tree-original" }
3!
4! PR 80983: [F03] memory leak when calling procedure-pointer component with allocatable result
5!
6! Contributed by Janus Weil <janus@gcc.gnu.org>
7
8program test
9  implicit none
10
11  type :: concrete_type
12    procedure (alloc_integer), pointer, nopass :: alloc
13  end type
14
15  procedure (alloc_integer), pointer :: pp
16
17  type(concrete_type) :: concrete
18
19  print *, alloc_integer()     ! case #1: plain function
20
21  pp => alloc_integer
22  print *, pp()                ! case #2: procedure pointer
23
24  concrete % alloc => alloc_integer
25  print *, concrete % alloc()  ! case #3: procedure-pointer component
26
27contains
28
29   function alloc_integer() result(res)
30      integer, allocatable :: res
31      allocate(res, source=13)
32   end function
33
34end
35
36! { dg-final { scan-tree-dump-times "__builtin_free" 3 "original" } }
37