coarray_41.f90: Add "-latomic" option if libatomic_available.
[official-gcc.git] / gcc / testsuite / gfortran.dg / coarray_lib_alloc_4.f90
blobc6de955c0200b8f83fa23162e68a7dad4c74f71f
1 ! { dg-do run }
2 ! { dg-options "-fcoarray=lib -lcaf_single -fdump-tree-original" }
3 ! { dg-additional-options "-latomic" { target libatomic_available } }
5 ! Allocate/deallocate with libcaf.
8 program test_caf_alloc
10 type t
11 integer, allocatable :: i
12 real, allocatable :: r(:)
13 end type t
15 type(t), allocatable :: xx[:]
17 allocate (xx[*])
19 if (allocated(xx%i)) call abort()
20 if (allocated(xx[1]%i)) call abort()
21 if (allocated(xx[1]%r)) call abort()
22 allocate(xx%i)
23 if (.not. allocated(xx[1]%i)) call abort()
24 if (allocated(xx[1]%r)) call abort()
26 allocate(xx%r(5))
27 if (.not. allocated(xx[1]%i)) call abort()
28 if (.not. allocated(xx[1]%r)) call abort()
30 deallocate(xx%i)
31 if (allocated(xx[1]%i)) call abort()
32 if (.not. allocated(xx[1]%r)) call abort()
34 deallocate(xx%r)
35 if (allocated(xx[1]%i)) call abort()
36 if (allocated(xx[1]%r)) call abort()
38 deallocate(xx)
39 end
41 ! { dg-final { scan-tree-dump-times "_gfortran_caf_is_present \\(xx\\.token, 2 - \\(integer\\(kind=4\\)\\) xx\\.dim\\\[0\\\]\\.lbound, &caf_ref\\.\[0-9\]+\\)|_gfortran_caf_is_present \\(xx\\.token, 2 - xx\\.dim\\\[0\\\]\\.lbound, &caf_ref\\.\[0-9\]+\\)" 10 "original" } }
42 ! { dg-final { scan-tree-dump-times "_gfortran_caf_register \\(\[0-9\]+, 1, &xx\\.token, \\(void \\*\\) &xx, 0B, 0B, 0\\)" 1 "original" } }
43 ! { dg-final { scan-tree-dump-times "_gfortran_caf_register \\(\[0-9\]+, 7" 2 "original" } }
44 ! { dg-final { scan-tree-dump-times "_gfortran_caf_register \\(\[0-9\]+, 8" 2 "original" } }
45 ! { dg-final { scan-tree-dump-times "_gfortran_caf_deregister \\(&xx\\.token, 0, 0B, 0B, 0\\)" 1 "original" } }
46 ! { dg-final { scan-tree-dump-times "_gfortran_caf_deregister \\(&\\(\\(struct t \\* restrict\\) xx\\.data\\)->r\\.token, 1, 0B, 0B, 0\\)" 1 "original" } }
47 ! { dg-final { scan-tree-dump-times "_gfortran_caf_deregister \\(&\\(\\(struct t \\* restrict\\) xx\\.data\\)->_caf_i, 1, 0B, 0B, 0\\)" 1 "original" } }