1  /* Invalid use of OpenACC parallelism dimensions clauses: 'num_gangs',
       2     'num_workers', 'vector_length'.  */
       3  
       4  /* See also '../../gfortran.dg/goacc/parallel-dims-2.f90'.  */
       5  
       6  void f(int i, float f)
       7  {
       8  #pragma acc kernels num_gangs /* { dg-error "expected '\\(' before end of line" } */
       9    ;
      10  #pragma acc kernels num_workers /* { dg-error "expected '\\(' before end of line" } */
      11    ;
      12  #pragma acc kernels vector_length /* { dg-error "expected '\\(' before end of line" } */
      13    ;
      14  
      15  #pragma acc parallel num_gangs /* { dg-error "expected '\\(' before end of line" } */
      16    ;
      17  #pragma acc parallel num_workers /* { dg-error "expected '\\(' before end of line" } */
      18    ;
      19  #pragma acc parallel vector_length /* { dg-error "expected '\\(' before end of line" } */
      20    ;
      21  
      22  
      23  #pragma acc kernels num_gangs( /* { dg-error "expected (primary-|)expression before end of line" } */
      24    ;
      25  #pragma acc kernels num_workers( /* { dg-error "expected (primary-|)expression before end of line" } */
      26    ;
      27  #pragma acc kernels vector_length( /* { dg-error "expected (primary-|)expression before end of line" } */
      28    ;
      29  
      30  #pragma acc parallel num_gangs( /* { dg-error "expected (primary-|)expression before end of line" } */
      31    ;
      32  #pragma acc parallel num_workers( /* { dg-error "expected (primary-|)expression before end of line" } */
      33    ;
      34  #pragma acc parallel vector_length( /* { dg-error "expected (primary-|)expression before end of line" } */
      35    ;
      36  
      37  
      38  #pragma acc kernels num_gangs() /* { dg-error "expected (primary-|)expression before '\\)' token" } */
      39    ;
      40  #pragma acc kernels num_workers() /* { dg-error "expected (primary-|)expression before '\\)' token" } */
      41    ;
      42  #pragma acc kernels vector_length() /* { dg-error "expected (primary-|)expression before '\\)' token" } */
      43    ;
      44  
      45  #pragma acc parallel num_gangs() /* { dg-error "expected (primary-|)expression before '\\)' token" } */
      46    ;
      47  #pragma acc parallel num_workers() /* { dg-error "expected (primary-|)expression before '\\)' token" } */
      48    ;
      49  #pragma acc parallel vector_length() /* { dg-error "expected (primary-|)expression before '\\)' token" } */
      50    ;
      51  
      52  
      53  #pragma acc kernels num_gangs(1 /* { dg-error "expected '\\)' before end of line" } */
      54    ;
      55  #pragma acc kernels num_workers(1 /* { dg-error "expected '\\)' before end of line" } */
      56    ;
      57  #pragma acc kernels vector_length(1 /* { dg-error "expected '\\)' before end of line" } */
      58    ;
      59  
      60  #pragma acc parallel num_gangs(1 /* { dg-error "expected '\\)' before end of line" } */
      61    ;
      62  #pragma acc parallel num_workers(1 /* { dg-error "expected '\\)' before end of line" } */
      63    ;
      64  #pragma acc parallel vector_length(1 /* { dg-error "expected '\\)' before end of line" } */
      65    ;
      66  
      67  
      68  #pragma acc kernels num_gangs(i /* { dg-error "expected '\\)' before end of line" } */
      69    ;
      70  #pragma acc kernels num_workers(i /* { dg-error "expected '\\)' before end of line" } */
      71    ;
      72  #pragma acc kernels vector_length(i /* { dg-error "expected '\\)' before end of line" } */
      73    ;
      74  
      75  #pragma acc parallel num_gangs(i /* { dg-error "expected '\\)' before end of line" } */
      76    ;
      77  #pragma acc parallel num_workers(i /* { dg-error "expected '\\)' before end of line" } */
      78    ;
      79  #pragma acc parallel vector_length(i /* { dg-error "expected '\\)' before end of line" } */
      80    ;
      81  
      82  
      83  #pragma acc kernels num_gangs(1 i /* { dg-error "expected '\\)' before 'i'" } */
      84    ;
      85  #pragma acc kernels num_workers(1 i /* { dg-error "expected '\\)' before 'i'" } */
      86    ;
      87  #pragma acc kernels vector_length(1 i /* { dg-error "expected '\\)' before 'i'" } */
      88    ;
      89  
      90  #pragma acc parallel num_gangs(1 i /* { dg-error "expected '\\)' before 'i'" } */
      91    ;
      92  #pragma acc parallel num_workers(1 i /* { dg-error "expected '\\)' before 'i'" } */
      93    ;
      94  #pragma acc parallel vector_length(1 i /* { dg-error "expected '\\)' before 'i'" } */
      95    ;
      96  
      97  
      98  #pragma acc kernels num_gangs(1 i) /* { dg-error "expected '\\)' before 'i'" } */
      99    ;
     100  #pragma acc kernels num_workers(1 i) /* { dg-error "expected '\\)' before 'i'" } */
     101    ;
     102  #pragma acc kernels vector_length(1 i) /* { dg-error "expected '\\)' before 'i'" } */
     103    ;
     104  
     105  #pragma acc parallel num_gangs(1 i) /* { dg-error "expected '\\)' before 'i'" } */
     106    ;
     107  #pragma acc parallel num_workers(1 i) /* { dg-error "expected '\\)' before 'i'" } */
     108    ;
     109  #pragma acc parallel vector_length(1 i) /* { dg-error "expected '\\)' before 'i'" } */
     110    ;
     111  
     112  
     113  #pragma acc kernels num_gangs(1, i /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
     114    /* { dg-bogus "expected '\\)' before end of line" "TODO" { xfail c } .-1 } */
     115    ;
     116  #pragma acc kernels num_workers(1, i /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
     117    /* { dg-bogus "expected '\\)' before end of line" "TODO" { xfail c } .-1 } */
     118    ;
     119  #pragma acc kernels vector_length(1, i /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
     120    /* { dg-bogus "expected '\\)' before end of line" "TODO" { xfail c } .-1 } */
     121    ;
     122  
     123  #pragma acc parallel num_gangs(1, i /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
     124    /* { dg-bogus "expected '\\)' before end of line" "TODO" { xfail c } .-1 } */
     125    ;
     126  #pragma acc parallel num_workers(1, i /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
     127    /* { dg-bogus "expected '\\)' before end of line" "TODO" { xfail c } .-1 } */
     128    ;
     129  #pragma acc parallel vector_length(1, i /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
     130    /* { dg-bogus "expected '\\)' before end of line" "TODO" { xfail c } .-1 } */
     131    ;
     132  
     133  
     134  #pragma acc kernels num_gangs(1, i) /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
     135    ;
     136  #pragma acc kernels num_workers(1, i) /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
     137    ;
     138  #pragma acc kernels vector_length(1, i) /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
     139    ;
     140  
     141  #pragma acc parallel num_gangs(1, i) /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
     142    ;
     143  #pragma acc parallel num_workers(1, i) /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
     144    ;
     145  #pragma acc parallel vector_length(1, i) /* { dg-error "expected '\\)' before ',' token" "TODO" { xfail c } } */
     146    ;
     147  
     148  
     149  #pragma acc kernels num_gangs(num_gangs_k) /* { dg-error "'num_gangs_k' (un|was not )declared" } */
     150    ;
     151  #pragma acc kernels num_workers(num_workers_k) /* { dg-error "'num_workers_k' (un|was not )declared" } */
     152    ;
     153  #pragma acc kernels vector_length(vector_length_k) /* { dg-error "'vector_length_k' (un|was not )declared" } */
     154    ;
     155  
     156  #pragma acc parallel num_gangs(num_gangs_p) /* { dg-error "'num_gangs_p' (un|was not )declared" } */
     157    ;
     158  #pragma acc parallel num_workers(num_workers_p) /* { dg-error "'num_workers_p' (un|was not )declared" } */
     159    ;
     160  #pragma acc parallel vector_length(vector_length_p) /* { dg-error "'vector_length_p' (un|was not )declared" } */
     161    ;
     162  
     163  
     164  #pragma acc kernels num_gangs(f) /* { dg-error "'num_gangs' expression must be integral" } */
     165    ;
     166  #pragma acc kernels num_workers(f) /* { dg-error "'num_workers' expression must be integral" } */
     167    ;
     168  #pragma acc kernels vector_length(f) /* { dg-error "'vector_length' expression must be integral" } */
     169    ;
     170  
     171  #pragma acc parallel num_gangs(f) /* { dg-error "'num_gangs' expression must be integral" } */
     172    ;
     173  #pragma acc parallel num_workers(f) /* { dg-error "'num_workers' expression must be integral" } */
     174    ;
     175  #pragma acc parallel vector_length(f) /* { dg-error "'vector_length' expression must be integral" } */
     176    ;
     177  
     178  
     179  #pragma acc kernels num_gangs((float) 1) /* { dg-error "'num_gangs' expression must be integral" } */
     180    ;
     181  #pragma acc kernels num_workers((float) 1) /* { dg-error "'num_workers' expression must be integral" } */
     182    ;
     183  #pragma acc kernels vector_length((float) 1) /* { dg-error "'vector_length' expression must be integral" } */
     184    ;
     185  
     186  #pragma acc parallel num_gangs((float) 1) /* { dg-error "'num_gangs' expression must be integral" } */
     187    ;
     188  #pragma acc parallel num_workers((float) 1) /* { dg-error "'num_workers' expression must be integral" } */
     189    ;
     190  #pragma acc parallel vector_length((float) 1) /* { dg-error "'vector_length' expression must be integral" } */
     191    ;
     192  
     193  
     194  #pragma acc kernels num_gangs(0) /* { dg-warning "'num_gangs' value must be positive" } */
     195    ;
     196  #pragma acc kernels num_workers(0) /* { dg-warning "'num_workers' value must be positive" } */
     197    ;
     198  #pragma acc kernels vector_length(0) /* { dg-warning "'vector_length' value must be positive" } */
     199    ;
     200  
     201  #pragma acc parallel num_gangs(0) /* { dg-warning "'num_gangs' value must be positive" } */
     202    ;
     203  #pragma acc parallel num_workers(0) /* { dg-warning "'num_workers' value must be positive" } */
     204    ;
     205  #pragma acc parallel vector_length(0) /* { dg-warning "'vector_length' value must be positive" } */
     206    ;
     207  
     208  
     209  #pragma acc kernels num_gangs((int) -1.2) /* { dg-warning "'num_gangs' value must be positive" } */
     210    ;
     211  #pragma acc kernels num_workers((int) -1.2) /* { dg-warning "'num_workers' value must be positive" } */
     212    ;
     213  #pragma acc kernels vector_length((int) -1.2) /* { dg-warning "'vector_length' value must be positive" } */
     214    ;
     215  
     216  #pragma acc parallel num_gangs((int) -1.2) /* { dg-warning "'num_gangs' value must be positive" } */
     217    ;
     218  #pragma acc parallel num_workers((int) -1.2) /* { dg-warning "'num_workers' value must be positive" } */
     219    ;
     220  #pragma acc parallel vector_length((int) -1.2) /* { dg-warning "'vector_length' value must be positive" } */
     221    ;
     222  
     223  
     224  #pragma acc kernels \
     225    num_gangs(1) /* { dg-error "too many 'num_gangs' clauses" "" { target c } } */ \
     226    num_workers(1) /* { dg-error "too many 'num_workers' clauses" "" { target c } } */ \
     227    vector_length(1) /* { dg-error "too many 'vector_length' clauses" "" { target c } } */ \
     228    num_workers(1) /* { dg-error "too many 'num_workers' clauses" "" { target c++ } } */ \
     229    vector_length(1) /* { dg-error "too many 'vector_length' clauses" "" { target c++ } } */ \
     230    num_gangs(1) /* { dg-error "too many 'num_gangs' clauses" "" { target c++ } } */
     231    ;
     232  
     233  #pragma acc parallel							\
     234    num_gangs(1) /* { dg-error "too many 'num_gangs' clauses" "" { target c } } */ \
     235    num_workers(1) /* { dg-error "too many 'num_workers' clauses" "" { target c } } */ \
     236    vector_length(1) /* { dg-error "too many 'vector_length' clauses" "" { target c } } */ \
     237    num_workers(1) /* { dg-error "too many 'num_workers' clauses" "" { target c++ } } */ \
     238    vector_length(1) /* { dg-error "too many 'vector_length' clauses" "" { target c++ } } */ \
     239    num_gangs(1) /* { dg-error "too many 'num_gangs' clauses" "" { target c++ } } */
     240    ;
     241  
     242  
     243  #pragma acc kernels \
     244    num_gangs(-1) /* { dg-warning "'num_gangs' value must be positive" } */ \
     245    num_workers() /* { dg-error "expected (primary-|)expression before '\\)' token" } */ \
     246    vector_length(abc_k) /* { dg-error "'abc_k' (un|was not )declared" } */ \
     247    num_workers(0.5) /* { dg-error "'num_workers' expression must be integral" } */ \
     248    vector_length(&f) /* { dg-error "'vector_length' expression must be integral" } */ \
     249    num_gangs( /* { dg-error "expected (primary-|)expression before end of line" "TODO" { xfail c } } */
     250    ;
     251  
     252  #pragma acc parallel							\
     253    num_gangs(-1) /* { dg-warning "'num_gangs' value must be positive" } */ \
     254    num_workers() /* { dg-error "expected (primary-|)expression before '\\)' token" } */ \
     255    vector_length(abc_p) /* { dg-error "'abc_p' (un|was not )declared" } */ \
     256    num_workers(0.5) /* { dg-error "'num_workers' expression must be integral" } */ \
     257    vector_length(&f) /* { dg-error "'vector_length' expression must be integral" } */ \
     258    num_gangs( /* { dg-error "expected (primary-|)expression before end of line" "TODO" { xfail c } } */
     259    ;
     260  
     261  
     262    /* The 'serial' construct doesn't allow these at all.  */
     263  
     264  #pragma acc serial num_gangs (1) /* { dg-error "'num_gangs' is not valid for '#pragma acc serial'" } */
     265    ;
     266  #pragma acc serial num_workers (1) /* { dg-error "'num_workers' is not valid for '#pragma acc serial'" } */
     267    ;
     268  #pragma acc serial vector_length (1) /* { dg-error "'vector_length' is not valid for '#pragma acc serial'" } */
     269    ;
     270  }