aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/c-c++-common/gomp/loop-6.c
blob: 24383ff04eaa51189e6227b2cd9de1252a4889ee (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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
int bar (int);
int baz (int *);

void
f1 (int x)
{
  int i = 0, j = 0, k = 0;
  long long l = 0;
  #pragma omp for collapse(2)
  for (i = 0; i < 16; i = i + 2)
    for (j = i * i; j < 16; j += 2)	/* { dg-error "initializer expression refers to iteration variable" } */
      ;
  #pragma omp for collapse(2)
  for (i = 0; i < 16; i = i + 2)
    for (j = i + 3; j < (i + 1) * 2; j += 2)	/* { dg-error "condition expression refers to iteration variable" } */
      ;
  #pragma omp for collapse(2)
  for (i = 0; i < 16; i = i + 2)
    for (j = (i + 1) * 2; j < i * 8; j += 2)	/* { dg-error "initializer expression refers to iteration variable" } */
      ;
  #pragma omp for collapse(3)
  for (i = 0; i < 16; i = i + 2)
    for (j = 0; j < 16; j++)
      for (k = i + j; k < 32; k++)	/* { dg-error "initializer expression refers to iteration variable" } */
	;
  #pragma omp for collapse(2)
  for (l = 0; l < 16; l++)
    for (j = 0; j < l; j++)		/* { dg-error "outer iteration variable 'l' used in condition expression has type other than 'int'" } */
      ;
  #pragma omp for collapse(2)		/* { dg-error "outer iteration variable 'l' used in initializer expression has type other than 'int'" "" { target c } } */
  for (l = 0; l < 16; l++)		/* { dg-error "outer iteration variable 'l' used in initializer expression has type other than 'int'" "" { target c++ } } */
    for (j = 7LL * l; j < 32; j++)
      ;
  #pragma omp for collapse(2)
  for (i = 0; i < 16; i = i + 2)
    for (j = i + 3; j < i * 2 + 2; j += 2)
      ;
  #pragma omp for collapse(2)
  for (i = 0; i < 16; i = i + 2)
    for (j = i * 2 + 2; j < i * 6 + 2; j += 2)
      ;
  #pragma omp for collapse(3)
  for (i = 0; i < 16; i = i + 2)
    for (j = 0; j < 16; j++)
      for (k = 14 + 7 * i; k < 32 * j; k++)	/* { dg-error "two different outer iteration variables 'i' and 'j' used in a single loop" } */
	;
  #pragma omp for schedule(static, 2) collapse(2)	/* { dg-error "'schedule' clause may not appear on non-rectangular 'for'" } */
  for (i = 0; i < 16; i++)
    for (j = 1; j < i; j++)
      ;
  #pragma omp for schedule(static) collapse(2)		/* { dg-error "'schedule' clause may not appear on non-rectangular 'for'" } */
  for (i = 0; i < 16; i++)
    for (j = 1; j < i; j++)
      ;
  #pragma omp for schedule(dynamic, 5) collapse(2)	/* { dg-error "'schedule' clause may not appear on non-rectangular 'for'" } */
  for (i = 0; i < 16; i++)
    for (j = 1; j < i; j++)
      ;
  #pragma omp for ordered collapse(2)			/* { dg-error "'ordered' clause may not appear on non-rectangular 'for'" } */
  for (i = 0; i < 16; i++)
    for (j = 1; j < i; j++)
      ;
  #pragma omp for ordered collapse(2)			/* { dg-error "'ordered' clause may not appear on non-rectangular 'for'" } */
  for (i = 0; i < 16; i++)
    for (j = 1; j < i; j++)
      ;
  #pragma omp for ordered (3) collapse (2)		/* { dg-error "'ordered' clause may not appear on non-rectangular 'for'" } */
  for (i = 0; i < 64; i++)
    for (j = 0; j < i; j++)
      for (k = 0; k < 64; k++)
        {
          #pragma omp ordered depend (sink: i - 1, j - 2, k - 3)
          #pragma omp ordered depend (source)
        }
  #pragma omp for ordered (3) collapse (2)		/* { dg-error "'ordered' clause may not appear on non-rectangular 'for'" } */
  for (i = 0; i < 64; i++)
    for (j = 0; j < 64; j++)
      for (k = i; k < 64; k++)
        {
          #pragma omp ordered depend (sink: i - 1, j - 2, k - 3)
          #pragma omp ordered depend (source)
        }
  #pragma omp for simd schedule(simd: static) collapse(2)	/* { dg-error "'schedule' clause may not appear on non-rectangular 'for'" } */
  for (i = 0; i < 16; i++)
    for (j = 1; j < i; j++)
      ;
}

void
f2 (void)
{
  int i = 0, j = 0;
  #pragma omp distribute dist_schedule(static, 4) collapse(2)	/* { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" } */
  for (i = 0; i < 64; i++)
    for (j = i; j < 64; j++)
      ;
  #pragma omp distribute collapse(2) dist_schedule(static)	/* { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" } */
  for (i = 0; i < 64; i++)
    for (j = i; j < 64; j++)
      ;
  #pragma omp distribute parallel for simd schedule(simd: static) collapse(2)	/* { dg-error "'schedule' clause may not appear on non-rectangular 'for'" } */
  for (i = 0; i < 16; i++)
    for (j = 1; j < i; j++)
      ;
  #pragma omp distribute parallel for simd collapse(2) dist_schedule(static)	/* { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" } */
  for (i = 0; i < 64; i++)
    for (j = i; j < 64; j++)
      ;
  #pragma omp distribute simd collapse(2) dist_schedule(static)	/* { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" } */
  for (i = 0; i < 64; i++)
    for (j = i; j < 64; j++)
      ;
}

void
f3 (void)
{
  int i = 0, j = 0;
  #pragma omp taskloop collapse(2) grainsize(4)	/* { dg-error "'grainsize' clause may not appear on non-rectangular 'taskloop'" } */
  for (i = 0; i < 64; i++)
    for (j = i; j < 64; j++)
      ;
  #pragma omp taskloop collapse(2) num_tasks(4)	/* { dg-error "'num_tasks' clause may not appear on non-rectangular 'taskloop'" } */
  for (i = 0; i < 64; i++)
    for (j = i; j < 64; j++)
      ;
}