(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
gomp/
affinity-2.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-fopenmp" } */
       3  
       4  extern int a[][10], a2[][10];
       5  int b[10], c[10][2], d[10], e[10], f[10];
       6  int b2[10], c2[10][2], d2[10], e2[10], f2[10];
       7  int k[10], l[10], m[10], n[10], o;
       8  int *p;
       9  void bar (void);
      10  int t[10];
      11  #pragma omp threadprivate (t)
      12  
      13  void
      14  foo (int g[3][10], int h[4][8], int i[2][10], int j[][9],
      15       int g2[3][10], int h2[4][8], int i2[2][10], int j2[][9])
      16  {
      17    #pragma omp task affinity( bar[2:5]) /* { dg-error "is not a variable" } */
      18      ;
      19    #pragma omp task affinity( t[2:5])
      20      ;
      21    #pragma omp task affinity( k[0.5:]) /* { dg-error "low bound \[^\n\r]* of array section does not have integral type" } */
      22      ;
      23    #pragma omp task affinity( l[:7.5f]) /* { dg-error "length \[^\n\r]* of array section does not have integral type" } */
      24      ;
      25    #pragma omp task affinity( m[p:]) /* { dg-error "low bound \[^\n\r]* of array section does not have integral type" } */
      26      ;
      27    #pragma omp task affinity( n[:p]) /* { dg-error "length \[^\n\r]* of array section does not have integral type" } */
      28      ;
      29    #pragma omp task affinity( o[2:5]) /* { dg-error "does not have pointer or array type" } */
      30      ;
      31    #pragma omp task affinity( a[:][2:4]) /* { dg-error "array type length expression must be specified" } */
      32      ;
      33    #pragma omp task affinity( b[-1:]) /* { dg-error "negative low bound in array section" } */
      34      ;
      35    #pragma omp task affinity( c[:-3][1:1]) /* { dg-error "negative length in array section" } */
      36      ;
      37    #pragma omp task affinity( d[11:]) /* { dg-error "low bound \[^\n\r]* above array section size" } */
      38      ;
      39    #pragma omp task affinity( e[:11]) /* { dg-error "length \[^\n\r]* above array section size" } */
      40      ;
      41    #pragma omp task affinity( f[1:10]) /* { dg-error "high bound \[^\n\r]* above array section size" } */
      42      ;
      43    #pragma omp task affinity( g[:][2:4]) /* { dg-error "for array function parameter length expression must be specified" } */
      44      ;
      45    #pragma omp task affinity( h[2:2][-1:]) /* { dg-error "negative low bound in array section" } */
      46      ;
      47    #pragma omp task affinity( h[:1][:-3]) /* { dg-error "negative length in array section" } */
      48      ;
      49    #pragma omp task affinity( i[:1][11:]) /* { dg-error "low bound \[^\n\r]* above array section size" } */
      50      ;
      51    #pragma omp task affinity( j[3:4][:10]) /* { dg-error "length \[^\n\r]* above array section size" } */
      52      ;
      53    #pragma omp task affinity( j[30:10][5:5]) /* { dg-error "high bound \[^\n\r]* above array section size" } */
      54      ;
      55    #pragma omp task affinity( a2[:3][2:4])
      56      ;
      57    #pragma omp task affinity( b2[0:])
      58      ;
      59    #pragma omp task affinity( c2[:3][1:1])
      60      ;
      61    #pragma omp task affinity( d2[9:])
      62      ;
      63    #pragma omp task affinity( e2[:10])
      64      ;
      65    #pragma omp task affinity( f2[1:9])
      66      ;
      67    #pragma omp task affinity( g2[:2][2:4])
      68      ;
      69    #pragma omp task affinity( h2[2:2][0:])
      70      ;
      71    #pragma omp task affinity( h2[:1][:3])
      72      ;
      73    #pragma omp task affinity( i2[:1][9:])
      74      ;
      75    #pragma omp task affinity( j2[3:4][:9])
      76      ;
      77    #pragma omp task affinity( j2[30:10][5:4])
      78      ;
      79  }
      80  
      81  void bar2 (int a[10][10][10]);
      82  
      83  void
      84  foo2 (int a[10][10][10], int **b)
      85  {
      86    int c[10][10][10];
      87    #pragma omp task affinity( a[2:4][3:][:7], b[1:7][2:8])
      88      bar2 (a);
      89    int i = 1, j = 3, k = 2, l = 6;
      90    #pragma omp task affinity( a[++i:++j][++k:][:++l])
      91      bar2 (a);
      92    #pragma omp task affinity( a[7:2][:][:], c[5:2][:][:])
      93    {
      94      bar2 (c);
      95      bar2 (a);
      96    }
      97  }
      98  
      99  void
     100  foo3 (int a[10][10][10], int **b, int x)
     101  {
     102    int c[10][10][10];
     103    #pragma omp task affinity( a[2:4][3:0][:7])	/* { dg-error "zero length array section" } */
     104      bar2 (a);
     105    #pragma omp task affinity( b[:7][0:0][:0]) /* { dg-error "zero length array section" } */
     106      bar2 (a);
     107    #pragma omp task affinity( c[:][:][10:])	/* { dg-error "zero length array section" } */
     108      bar2 (c);
     109    #pragma omp task affinity( a[2:4][3:0][:x])	/* { dg-error "zero length array section" } */
     110      bar2 (a);
     111    #pragma omp task affinity( b[:x][0:0][:0]) /* { dg-error "zero length array section" } */
     112      bar2 (a);
     113    #pragma omp task affinity( c[:][x-2:x][10:])	/* { dg-error "zero length array section" } */
     114      bar2 (c);
     115  }
     116  
     117  void
     118  foo4 (int *p, int (*q)[10], int r[10], int s[10][10])
     119  {
     120    int a[10], b[10][10];
     121    #pragma omp task affinity ( p[-1:2])
     122    ;
     123    #pragma omp task affinity ( q[-1:2][2:4])
     124    ;
     125    #pragma omp task affinity ( q[-1:2][-2:4]) /* { dg-error "negative low bound in array section in" } */
     126    ;
     127    #pragma omp task affinity ( r[-1:2])
     128    ;
     129    #pragma omp task affinity ( s[-1:2][2:4])
     130    ;
     131    #pragma omp task affinity ( s[-1:2][-2:4]) /* { dg-error "negative low bound in array section in" } */
     132    ;
     133    #pragma omp task affinity ( a[-1:2])	 /* { dg-error "negative low bound in array section in" } */
     134    ;
     135    #pragma omp task affinity ( b[-1:2][2:4])	 /* { dg-error "negative low bound in array section in" } */
     136    ;
     137    #pragma omp task affinity ( b[1:2][-2:4])	 /* { dg-error "negative low bound in array section in" } */
     138    ;
     139    #pragma omp task affinity ( p[2:-3])	 /* { dg-error "negative length in array section in" } */
     140    ;
     141    #pragma omp task affinity ( q[2:-3][:])	 /* { dg-error "negative length in array section in" } */
     142    ;
     143    #pragma omp task affinity ( q[2:3][0:-1])	 /* { dg-error "negative length in array section in" } */
     144    ;
     145    #pragma omp task affinity ( r[2:-5])	 /* { dg-error "negative length in array section in" } */
     146    ;
     147    #pragma omp task affinity ( s[2:-5][:])	 /* { dg-error "negative length in array section in" } */
     148    ;
     149    #pragma omp task affinity ( s[2:5][0:-4])	 /* { dg-error "negative length in array section in" } */
     150    ;
     151    #pragma omp task affinity ( a[2:-5])	 /* { dg-error "negative length in array section in" } */
     152    ;
     153    #pragma omp task affinity ( b[2:-5][0:10]) /* { dg-error "negative length in array section in" } */
     154    ;
     155    #pragma omp task affinity ( b[2:5][0:-4]) /* { dg-error "negative length in array section in" } */
     156    ;
     157  }
     158  
     159  struct T { int c[3]; };
     160  struct S { int a; struct T *b; struct T g; };
     161  struct S sd[10];
     162  struct S *se[10];
     163  struct S *sf;
     164  struct S sh;
     165  struct U { int a : 5; };
     166  struct U si;
     167  
     168  
     169  void
     170  foo5 (void)
     171  {
     172    #pragma omp task affinity( sd)
     173    ;
     174    #pragma omp task affinity( sd[2])
     175    ;
     176    #pragma omp task affinity( sd[:])
     177    ;
     178    #pragma omp task affinity( sd[2:2])
     179    ;
     180    #pragma omp task affinity( sd[:2])
     181    ;
     182    #pragma omp task affinity( sd[1].b->c[2])
     183    ;
     184    #pragma omp task affinity( sd[0].a)
     185    ;
     186    #pragma omp task affinity( se[3]->a)
     187    ;
     188    #pragma omp task affinity( se[2]->b->c)
     189    ;
     190    #pragma omp task affinity( se[1]->b->c[2])
     191    ;
     192    #pragma omp task affinity( (*sf).a)
     193    ;
     194    #pragma omp task affinity( sf->b->c[0])
     195    ;
     196    #pragma omp task affinity( sf)
     197    ;
     198    #pragma omp task affinity( *sf)
     199    ;
     200    #pragma omp task affinity( sf[0])
     201    ;
     202    #pragma omp task affinity( sf[0].a)
     203    ;
     204    #pragma omp task affinity( sh.g.c[2])
     205    ;
     206  }
     207  
     208  void
     209  foo6 (void)
     210  {
     211    #pragma omp task affinity( sd[:2].b->c[2])	/* { dg-error "expected" } */
     212    ;
     213    #pragma omp task affinity( sd[1:].b->c[2])	/* { dg-error "expected" } */
     214    ;
     215    #pragma omp task affinity( sd[0:1].a)	/* { dg-error "expected" } */
     216    ;
     217    #pragma omp task affinity( se[3:2]->a)	/* { dg-error "expected" } */
     218    ;
     219    #pragma omp task affinity( se[2:2]->b->c)	/* { dg-error "expected" } */
     220    ;
     221    #pragma omp task affinity( se[1]->b->c[2:1])	/* { dg-error "expected" } */
     222    ;
     223    #pragma omp task affinity( sf + 0)		/* { dg-error "'sf' is not lvalue expression nor array section in 'affinity' clause" } */
     224    ;
     225    #pragma omp task affinity( sf[0:1].a)	/* { dg-error "expected" } */
     226    ;
     227    #pragma omp task affinity( sh.g.c[2:1])	/* { dg-error "expected" } */
     228    ;
     229    #pragma omp task affinity( si.a)		/* { dg-error "bit-field 'si\\..*a' in 'affinity' clause" } */
     230    ;
     231  }
     232  /* { dg-additional-options "-Wno-volatile" { target c++ } } */