! RUN: %python %S/../test_errors.py %s %flang -fopenmp -fopenmp-version=51 subroutine defaultmap_all_none_no_errors implicit none real :: array(10) integer, pointer :: ptr(:) real, allocatable :: alloca integer :: index !$omp target defaultmap(none) map(to: index, alloca) map(tofrom: array, ptr) do index = 1, 10 ptr(index) = array(index) + alloca end do !$omp end target end subroutine defaultmap_all_none_no_errors subroutine defaultmap_all_none implicit none real :: array(10) integer, pointer :: ptr(:) real, allocatable :: alloca integer :: index !$omp target defaultmap(none) !ERROR: The DEFAULTMAP(NONE) clause requires that 'index' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause do index = 1, 10 !ERROR: The DEFAULTMAP(NONE) clause requires that 'ptr' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause !ERROR: The DEFAULTMAP(NONE) clause requires that 'index' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause !ERROR: The DEFAULTMAP(NONE) clause requires that 'array' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause !ERROR: The DEFAULTMAP(NONE) clause requires that 'index' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause !ERROR: The DEFAULTMAP(NONE) clause requires that 'alloca' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause ptr(index) = array(index) + alloca end do !$omp end target end subroutine defaultmap_all_none subroutine defaultmap_scalar_none implicit none real :: array(10) integer, pointer :: ptr(:) real, allocatable :: alloca integer :: index !$omp target defaultmap(none: scalar) !ERROR: The DEFAULTMAP(NONE) clause requires that 'index' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause do index = 1, 10 !ERROR: The DEFAULTMAP(NONE) clause requires that 'index' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause !ERROR: The DEFAULTMAP(NONE) clause requires that 'index' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause ptr(index) = array(index) + alloca end do !$omp end target end subroutine defaultmap_scalar_none subroutine defaultmap_pointer_none implicit none real :: array(10) integer, pointer :: ptr(:) real, allocatable :: alloca integer :: index !$omp target defaultmap(none: pointer) do index = 1, 10 !ERROR: The DEFAULTMAP(NONE) clause requires that 'ptr' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause ptr(index) = array(index) + alloca end do !$omp end target end subroutine defaultmap_pointer_none subroutine defaultmap_allocatable_none implicit none real :: array(10) integer, pointer :: ptr(:) real, allocatable :: alloca integer :: index !$omp target defaultmap(none: allocatable) do index = 1, 10 !ERROR: The DEFAULTMAP(NONE) clause requires that 'alloca' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause ptr(index) = array(index) + alloca end do !$omp end target end subroutine defaultmap_allocatable_none subroutine defaultmap_aggregate_none implicit none real :: array(10) integer, pointer :: ptr(:) real, allocatable :: alloca integer :: index !$omp target defaultmap(none: aggregate) do index = 1, 10 !ERROR: The DEFAULTMAP(NONE) clause requires that 'array' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause ptr(index) = array(index) + alloca end do !$omp end target end subroutine defaultmap_aggregate_none ! Verify we do not catch null in defaultmap(none) subroutine defaultmap_builtin_none implicit none integer, pointer :: ptr(:) !$omp target defaultmap(none) map(ptr) !CHECK-NOT: The DEFAULTMAP(NONE) clause requires that 'null' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause ptr => null() !$omp end target end subroutine defaultmap_builtin_none module pro implicit none contains function test_procedure() result(ret) integer :: ret ret = 1 end function test_procedure ! Verify we do not catch a function symbol in defaultmap(none) ! but do catch procedure pointers subroutine defaultmap_func_and_procedure_pointer() implicit none procedure(test_procedure), pointer :: f1 integer :: i f1 => test_procedure !$omp target defaultmap(none) map(i) !ERROR: The DEFAULTMAP(NONE) clause requires that 'f1' must be listed in a data-sharing attribute, data-mapping attribute, or is_device_ptr clause i = f1() i = test_procedure() !$omp end target end subroutine defaultmap_func_and_procedure_pointer end module