| ! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags -fopenmp -fopenmp-version=52 | |
| ! OpenMP Version 5.2 | |
| ! Test that arrays in LINEAR clause are rejected on SIMD directive | |
| ! This test addresses issue #171007 - crash with array in LINEAR clause | |
| subroutine test_1d_array_in_linear() | |
| implicit none | |
| integer :: j, arr(2) | |
| !ERROR: List item 'arr' in LINEAR clause must be a scalar variable | |
| !$omp simd linear(arr) | |
| do j=1,10 | |
| end do | |
| end subroutine | |
| subroutine test_multidim_array() | |
| implicit none | |
| integer :: j, matrix(3,3) | |
| !ERROR: List item 'matrix' in LINEAR clause must be a scalar variable | |
| !$omp simd linear(matrix) | |
| do j=1,10 | |
| end do | |
| end subroutine | |
| subroutine test_assumed_shape_array(arr) | |
| implicit none | |
| integer :: j | |
| integer, intent(in) :: arr(:) | |
| !ERROR: List item 'arr' in LINEAR clause must be a scalar variable | |
| !$omp simd linear(arr) | |
| do j=1,10 | |
| end do | |
| end subroutine | |
| subroutine test_multiple_vars_with_array() | |
| implicit none | |
| integer :: j, scalar1, arr(5), scalar2 | |
| !ERROR: List item 'arr' in LINEAR clause must be a scalar variable | |
| !$omp simd linear(scalar1, arr, scalar2) | |
| do j=1,10 | |
| scalar1 = j | |
| scalar2 = j | |
| end do | |
| end subroutine | |
| ! Valid case - scalar should work fine | |
| subroutine test_scalar_valid() | |
| implicit none | |
| integer :: j, scalar | |
| !$omp simd linear(scalar) | |
| do j=1,10 | |
| scalar = j | |
| end do | |
| end subroutine | |
| ! Valid case - multiple scalars should work | |
| subroutine test_multiple_scalars_valid() | |
| implicit none | |
| integer :: j, scalar1, scalar2, scalar3 | |
| !$omp simd linear(scalar1, scalar2, scalar3) | |
| do j=1,10 | |
| scalar1 = j | |
| scalar2 = j | |
| scalar3 = j | |
| end do | |
| end subroutine | |
| ! Valid case - declare simd with REF modifier allows arrays | |
| subroutine test_declare_simd_ref_array_valid(arr) | |
| implicit none | |
| integer, intent(in) :: arr(10) | |
| !WARNING: The 'modifier(<list>)' syntax is deprecated in OpenMP v5.2, use '<list> : modifier' instead | |
| !WARNING: DECLARE SIMD directive is not implemented yet and will be ignored | |
| !$omp declare simd linear(ref(arr)) | |
| ! No error expected - REF modifier allows arrays | |
| end subroutine |