aboutsummaryrefslogtreecommitdiff
path: root/flang/test/Semantics/OpenMP/simd-linear-array.f90
blob: e904f348ae47a4439655b45b0f851f5887d334fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
! 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