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