(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
gomp/
loop-1.c
       1  void foo (void);
       2  int v;
       3  #ifdef __cplusplus
       4  extern "C" {
       5  #endif
       6  int omp_get_thread_num (void);
       7  int omp_get_num_threads (void);
       8  int omp_target_is_present (const void *, int);
       9  int omp_get_cancellation (void);
      10  #ifdef __cplusplus
      11  }
      12  #endif
      13  
      14  void
      15  f1 (int *a)
      16  {
      17    int i;
      18    #pragma omp simd order(concurrent)
      19    for (i = 0; i < 64; i++)
      20      {
      21        int j;
      22        #pragma omp loop
      23        for (j = 0; j < 64; j++)
      24  	a[64 * i + j] = i + j;
      25      }
      26  }
      27  
      28  void
      29  f2 (int *a)
      30  {
      31    int i;
      32    #pragma omp for simd order(concurrent)
      33    for (i = 0; i < 64; i++)
      34      {
      35        int j;
      36        #pragma omp loop
      37        for (j = 0; j < 64; j++)
      38  	a[64 * i + j] = i + j;
      39      }
      40  }
      41  
      42  void
      43  f3 (int *a)
      44  {
      45    int i;
      46    #pragma omp for order(concurrent)
      47    for (i = 0; i < 64; i++)
      48      {
      49        int j;
      50        #pragma omp loop
      51        for (j = 0; j < 64; j++)
      52  	a[64 * i + j] = i + j;
      53      }
      54  }
      55  
      56  void
      57  f4 (int *a)
      58  {
      59    int i;
      60    #pragma omp loop order(concurrent) bind(parallel)
      61    for (i = 0; i < 64; i++)
      62      {
      63        #pragma omp parallel
      64        foo ();
      65      }
      66    #pragma omp loop order(concurrent) bind(parallel)
      67    for (i = 0; i < 64; i++)
      68      {
      69        int j;
      70        #pragma omp simd
      71        for (j = 0; j < 64; j++)
      72  	a[64 * i + j] = i + j;
      73      }
      74    #pragma omp loop order(concurrent) bind(parallel)
      75    for (i = 0; i < 64; i++)
      76      {
      77        int j;
      78        #pragma omp loop
      79        for (j = 0; j < 64; j++)
      80  	a[64 * i + j] = i + j;
      81      }
      82    #pragma omp loop order(concurrent) bind(parallel)
      83    for (i = 0; i < 64; i++)
      84      {
      85        #pragma omp critical		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" } */
      86        foo ();
      87      }
      88    #pragma omp loop order(concurrent) bind(parallel)
      89    for (i = 0; i < 64; i++)
      90      {
      91        #pragma omp ordered simd		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" } */
      92        foo ();
      93      }
      94    #pragma omp loop order(concurrent) bind(parallel)
      95    for (i = 0; i < 64; i++)
      96      {
      97        #pragma omp atomic		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" } */
      98        v++;
      99      }
     100    #pragma omp loop order(concurrent) bind(parallel)
     101    for (i = 0; i < 64; i++)
     102      {
     103        #pragma omp atomic read		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" "" { target c++ } } */
     104        a[i] = v;				/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" "" { target c } } */
     105      }
     106    #pragma omp loop order(concurrent) bind(parallel)
     107    for (i = 0; i < 64; i++)
     108      {
     109        #pragma omp atomic write		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" "" { target c++ } } */
     110        v = a[i];				/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" "" { target c } } */
     111      }
     112    #pragma omp loop order(concurrent) bind(parallel)
     113    for (i = 0; i < 64; i++)
     114      a[i] += omp_get_thread_num ();	/* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */
     115    #pragma omp loop order(concurrent) bind(parallel)
     116    for (i = 0; i < 64; i++)
     117      a[i] += omp_get_num_threads ();	/* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */
     118    #pragma omp loop order(concurrent) bind(parallel)
     119    for (i = 0; i < 64; i++)
     120      a[i] += omp_target_is_present (a + i, 0);	/* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */
     121    #pragma omp loop order(concurrent) bind(parallel)
     122    for (i = 0; i < 64; i++)
     123      a[i] += omp_get_cancellation ();	/* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */
     124  }
     125  
     126  void
     127  f5 (int *a)
     128  {
     129    int i;
     130    #pragma omp parallel
     131    {
     132    #pragma omp loop
     133    for (i = 0; i < 64; i++)
     134      {
     135        #pragma omp parallel
     136        foo ();
     137      }
     138    #pragma omp loop
     139    for (i = 0; i < 64; i++)
     140      {
     141        int j;
     142        #pragma omp simd
     143        for (j = 0; j < 64; j++)
     144  	a[64 * i + j] = i + j;
     145      }
     146    #pragma omp loop
     147    for (i = 0; i < 64; i++)
     148      {
     149        int j;
     150        #pragma omp loop
     151        for (j = 0; j < 64; j++)
     152  	a[64 * i + j] = i + j;
     153      }
     154    #pragma omp loop
     155    for (i = 0; i < 64; i++)
     156      {
     157        #pragma omp critical		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" } */
     158        foo ();
     159      }
     160    #pragma omp loop
     161    for (i = 0; i < 64; i++)
     162      {
     163        #pragma omp ordered simd		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" } */
     164        foo ();
     165      }
     166    #pragma omp loop
     167    for (i = 0; i < 64; i++)
     168      {
     169        #pragma omp atomic		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" } */
     170        v++;
     171      }
     172    #pragma omp loop
     173    for (i = 0; i < 64; i++)
     174      {
     175        #pragma omp atomic read		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" "" { target c++ } } */
     176        a[i] = v;				/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" "" { target c } } */
     177      }
     178    #pragma omp loop
     179    for (i = 0; i < 64; i++)
     180      {
     181        #pragma omp atomic write		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" "" { target c++ } } */
     182        v = a[i];				/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" "" { target c } } */
     183      }
     184    #pragma omp loop
     185    for (i = 0; i < 64; i++)
     186      {
     187        #pragma omp master		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" } */
     188        foo ();
     189      }
     190    #pragma omp loop
     191    for (i = 0; i < 64; i++)
     192      {
     193        #pragma omp masked		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" } */
     194        foo ();
     195      }
     196    #pragma omp loop
     197    for (i = 0; i < 64; i++)
     198      {
     199        #pragma omp scope			/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" } */
     200        foo ();
     201      }
     202    #pragma omp loop
     203    for (i = 0; i < 64; i++)
     204      a[i] += omp_get_thread_num ();	/* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */
     205    #pragma omp loop
     206    for (i = 0; i < 64; i++)
     207      a[i] += omp_get_num_threads ();	/* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */
     208    #pragma omp loop
     209    for (i = 0; i < 64; i++)
     210      a[i] += omp_target_is_present (a + i, 0);	/* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */
     211    #pragma omp loop
     212    for (i = 0; i < 64; i++)
     213      a[i] += omp_get_cancellation ();	/* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */
     214    }
     215  }
     216  
     217  void
     218  f6 (int *a)
     219  {
     220    int i;
     221    #pragma omp master
     222    {
     223    #pragma omp loop
     224    for (i = 0; i < 64; i++)
     225      {
     226        #pragma omp parallel
     227        foo ();
     228      }
     229    #pragma omp loop
     230    for (i = 0; i < 64; i++)
     231      {
     232        int j;
     233        #pragma omp simd
     234        for (j = 0; j < 64; j++)
     235  	a[64 * i + j] = i + j;
     236      }
     237    #pragma omp loop
     238    for (i = 0; i < 64; i++)
     239      {
     240        int j;
     241        #pragma omp loop
     242        for (j = 0; j < 64; j++)
     243  	a[64 * i + j] = i + j;
     244      }
     245    #pragma omp loop
     246    for (i = 0; i < 64; i++)
     247      {
     248        #pragma omp critical		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" } */
     249        foo ();
     250      }
     251    #pragma omp loop
     252    for (i = 0; i < 64; i++)
     253      {
     254        #pragma omp ordered simd		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" } */
     255        foo ();
     256      }
     257    #pragma omp loop
     258    for (i = 0; i < 64; i++)
     259      {
     260        #pragma omp atomic		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" } */
     261        v++;
     262      }
     263    #pragma omp loop
     264    for (i = 0; i < 64; i++)
     265      {
     266        #pragma omp atomic read		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" "" { target c++ } } */
     267        a[i] = v;				/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" "" { target c } } */
     268      }
     269    #pragma omp loop
     270    for (i = 0; i < 64; i++)
     271      {
     272        #pragma omp atomic write		/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" "" { target c++ } } */
     273        v = a[i];				/* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a 'loop' region" "" { target c } } */
     274      }
     275    #pragma omp loop
     276    for (i = 0; i < 64; i++)
     277      a[i] += omp_get_thread_num ();	/* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */
     278    #pragma omp loop
     279    for (i = 0; i < 64; i++)
     280      a[i] += omp_get_num_threads ();	/* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */
     281    #pragma omp loop
     282    for (i = 0; i < 64; i++)
     283      a[i] += omp_target_is_present (a + i, 0);	/* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */
     284    #pragma omp loop
     285    for (i = 0; i < 64; i++)
     286      a[i] += omp_get_cancellation ();	/* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */
     287    }
     288  }
     289