1  /* { dg-do compile }  */
       2  /* { dg-additional-options "-O2" }  */
       3  
       4  /* { dg-additional-options -Wuninitialized } */
       5  
       6  #include "../../../../include/gomp-constants.h"
       7  
       8  #pragma acc routine
       9  int
      10  foo (void)
      11  {
      12    int res;
      13    /* { dg-note {'res' was declared here} {} { target *-*-* } .-1 } */
      14    
      15    __builtin_goacc_parlevel_id (GOMP_DIM_GANG);
      16    __builtin_goacc_parlevel_id (GOMP_DIM_WORKER);
      17    __builtin_goacc_parlevel_id (GOMP_DIM_VECTOR);
      18  
      19    __builtin_goacc_parlevel_size (GOMP_DIM_GANG);
      20    __builtin_goacc_parlevel_size (GOMP_DIM_WORKER);
      21    __builtin_goacc_parlevel_size (GOMP_DIM_VECTOR);
      22  
      23    res += __builtin_goacc_parlevel_id (GOMP_DIM_GANG);
      24    /* { dg-warning {'res' is used uninitialized} {} { target *-*-* } .-1 } */
      25    res += __builtin_goacc_parlevel_id (GOMP_DIM_WORKER);
      26    res += __builtin_goacc_parlevel_id (GOMP_DIM_VECTOR);
      27  
      28    res += __builtin_goacc_parlevel_size (GOMP_DIM_GANG);
      29    res += __builtin_goacc_parlevel_size (GOMP_DIM_WORKER);
      30    res += __builtin_goacc_parlevel_size (GOMP_DIM_VECTOR);
      31  
      32    return res;
      33  }
      34  
      35  void
      36  foo2 (void)
      37  {
      38    int res;
      39  
      40  #pragma acc parallel
      41    /* implicit 'firstprivate (res)'
      42       { dg-warning {'res' is used uninitialized} TODO { xfail *-*-* } .-2 } */
      43    {
      44      __builtin_goacc_parlevel_id (GOMP_DIM_GANG);
      45      __builtin_goacc_parlevel_id (GOMP_DIM_WORKER);
      46      __builtin_goacc_parlevel_id (GOMP_DIM_VECTOR);
      47  
      48      __builtin_goacc_parlevel_size (GOMP_DIM_GANG);
      49      __builtin_goacc_parlevel_size (GOMP_DIM_WORKER);
      50      __builtin_goacc_parlevel_size (GOMP_DIM_VECTOR);
      51  
      52      res += __builtin_goacc_parlevel_id (GOMP_DIM_GANG);
      53      res += __builtin_goacc_parlevel_id (GOMP_DIM_WORKER);
      54      res += __builtin_goacc_parlevel_id (GOMP_DIM_VECTOR);
      55  
      56      res += __builtin_goacc_parlevel_size (GOMP_DIM_GANG);
      57      res += __builtin_goacc_parlevel_size (GOMP_DIM_WORKER);
      58      res += __builtin_goacc_parlevel_size (GOMP_DIM_VECTOR);
      59    }
      60  }
      61  
      62  void
      63  foo3 (void)
      64  {
      65    int res;
      66  
      67  #pragma acc kernels
      68    /* implicit 'copy (res)'
      69       { dg-warning {'res' is used uninitialized} TODO { xfail *-*-* } .-2 } */
      70    {
      71      __builtin_goacc_parlevel_id (GOMP_DIM_GANG);
      72      __builtin_goacc_parlevel_id (GOMP_DIM_WORKER);
      73      __builtin_goacc_parlevel_id (GOMP_DIM_VECTOR);
      74  
      75      __builtin_goacc_parlevel_size (GOMP_DIM_GANG);
      76      __builtin_goacc_parlevel_size (GOMP_DIM_WORKER);
      77      __builtin_goacc_parlevel_size (GOMP_DIM_VECTOR);
      78  
      79      res += __builtin_goacc_parlevel_id (GOMP_DIM_GANG);
      80      res += __builtin_goacc_parlevel_id (GOMP_DIM_WORKER);
      81      res += __builtin_goacc_parlevel_id (GOMP_DIM_VECTOR);
      82  
      83      res += __builtin_goacc_parlevel_size (GOMP_DIM_GANG);
      84      res += __builtin_goacc_parlevel_size (GOMP_DIM_WORKER);
      85      res += __builtin_goacc_parlevel_size (GOMP_DIM_VECTOR);
      86    }
      87  }