1252190Srpaulo! { dg-do compile }
2252190Srpaulo! { dg-options "-fdump-tree-original" }
3252190Srpaulo!
4252190Srpaulo! PR 41586: Allocatable _scalars_ are never auto-deallocated
5252190Srpaulo!
6252190Srpaulo! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
7252190Srpaulo
8252190Srpaulomodule automatic_deallocation
9252190Srpaulo
10252190Srpaulo  type t0
11252190Srpaulo    integer :: i
12252190Srpaulo  end type
13252190Srpaulo
14252190Srpaulo  type t1
15252190Srpaulo    real :: pi = 3.14
16252190Srpaulo    integer, allocatable :: j
17252190Srpaulo  end type
18252190Srpaulo
19252190Srpaulo  type t2
20252190Srpaulo    class(t0), allocatable :: k
21252190Srpaulo  end type t2
22252190Srpaulo
23252190Srpaulocontains
24252190Srpaulo
25252190Srpaulo  ! (1) simple allocatable scalars
26252190Srpaulo  subroutine a
27252190Srpaulo    integer, allocatable :: m
28252190Srpaulo    allocate (m)
29252190Srpaulo    m = 42
30252190Srpaulo  end subroutine
31252190Srpaulo
32252190Srpaulo  ! (2) allocatable scalar CLASS variables
33252190Srpaulo  subroutine b
34252190Srpaulo    class(t0), allocatable :: m
35252190Srpaulo    allocate (t0 :: m)
36252190Srpaulo    m%i = 43
37252190Srpaulo  end subroutine
38252190Srpaulo
39252190Srpaulo  ! (3) allocatable scalar components
40252190Srpaulo  subroutine c
41252190Srpaulo    type(t1) :: m
42252190Srpaulo    allocate (m%j)
43252190Srpaulo    m%j = 44
44252190Srpaulo  end subroutine
45252190Srpaulo
46252190Srpaulo  ! (4) allocatable scalar CLASS components
47252190Srpaulo  subroutine d
48252190Srpaulo    type(t2) :: m
49252190Srpaulo    allocate (t0 :: m%k)
50252190Srpaulo    m%k%i = 45
51252190Srpaulo  end subroutine
52252190Srpaulo
53252190Srpauloend module
54252190Srpaulo
55252190Srpaulo
56252190Srpaulo! { dg-final { scan-tree-dump-times "__builtin_free" 4 "original" } }
57252190Srpaulo! { dg-final { cleanup-tree-dump "original" } }
58252190Srpaulo