1! { dg-do compile }
2! { dg-options "-fdump-tree-original" }
3!
4! PR 41586: Allocatable _scalars_ are never auto-deallocated
5!
6! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
7
8module automatic_deallocation
9
10  type t0
11    integer :: i
12  end type
13
14  type t1
15    real :: pi = 3.14
16    integer, allocatable :: j
17  end type
18
19  type t2
20    class(t0), allocatable :: k
21  end type t2
22
23contains
24
25  ! (1) simple allocatable scalars
26  subroutine a
27    integer, allocatable :: m
28    allocate (m)
29    m = 42
30  end subroutine
31
32  ! (2) allocatable scalar CLASS variables
33  subroutine b
34    class(t0), allocatable :: m
35    allocate (t0 :: m)
36    m%i = 43
37  end subroutine
38
39  ! (3) allocatable scalar components
40  subroutine c
41    type(t1) :: m
42    allocate (m%j)
43    m%j = 44
44  end subroutine
45
46  ! (4) allocatable scalar CLASS components
47  subroutine d
48    type(t2) :: m
49    allocate (t0 :: m%k)
50    m%k%i = 45
51  end subroutine
52
53end module
54
55
56! { dg-final { scan-tree-dump-times "__builtin_free" 4 "original" } }
57! { dg-final { cleanup-tree-dump "original" } }
58