https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111691

            Bug ID: 111691
           Summary: [OpenMP][5.2] C/C++ handle 'omp declare
                    variant([base–name:]variant-name)' - i.e. with
                    'base-name'
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Keywords: openmp, rejects-valid
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: burnus at gcc dot gnu.org
  Target Milestone: ---

OpenMP 5.2 has:
  omp declare variant([base–name:]variant-name)

for C/C++/Fortran; in OpenMP 5.1, the 'base-name:' was Fortran, only.

(Example loosely based on
https://github.com/SOLLVE/sollve_vv/blob/master/tests/5.1/declare_variant/test_begin_end_declare_variant.c
)



It seems as if the following should be valid:

void add(int *arr){
   for (int i = 0; i < N; i++){ // Base function adds 1 to array values
      arr[i] = i+1;
   }
}

#pragma omp begin declare variant match(construct={parallel})
void add(int *arr){
   #pragma omp for
   for (int i = 0; i < N; i++){
      arr[i] = i + 2;
   } 
}

void add_my(int *arr){
   #pragma omp for
   for (int i = 0; i < N; i++){
      arr[i] = i + 3;
   }
}
#pragma omp declare variant(add : add_my) match(construct={target})

#pragma omp end declare variant  // Note: delimited declare variant ending
here!

Reply via email to