| ! RUN: %python %S/../test_errors.py %s %flang_fc1 %openmp_flags |
| ! 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(:) |
| |
| !$omp declare simd linear(ref(arr)) |
| ! No error expected - REF modifier allows assumed-shape arrays |
| end subroutine |