xref: /llvm-project/flang/test/Semantics/OpenMP/allocators04.f90 (revision cdbd22876b71acad9e5eeceadc0d8859e6e73b18)
1! REQUIRES: openmp_runtime
2
3! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags -fopenmp-version=50
4! OpenMP Version 5.2
5! Inherited from 2.11.3 allocate Directive
6! If list items within the ALLOCATE directive have the SAVE attribute, are a common block name, or are declared in the scope of a
7! module, then only predefined memory allocator parameters can be used in the allocator clause
8! SAVE and common block names can't be declared as allocatable, only module scope variables are tested
9
10module AllocateModule
11    integer, allocatable :: a, b
12end module
13
14subroutine allocate()
15    use omp_lib
16    use AllocateModule
17
18    integer(kind=omp_allocator_handle_kind) :: custom_allocator
19    type(omp_alloctrait) :: trait(1)
20
21    trait(1)%key = fallback
22    trait(1)%value = default_mem_fb
23    custom_allocator = omp_init_allocator(omp_default_mem_space, 1, trait)
24
25    !$omp allocators allocate(omp_default_mem_alloc: a)
26        allocate(a)
27
28    !ERROR: If list items within the ALLOCATORS directive have the SAVE attribute, are a common block name, or are declared in the scope of a module, then only predefined memory allocator parameters can be used in the allocator clause
29    !$omp allocators allocate(custom_allocator: b)
30        allocate(b)
31end subroutine
32