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

            Bug ID: 88967
           Summary: [9 regression] openmp default(none) broken
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: objc
          Assignee: unassigned at gcc dot gnu.org
          Reporter: lebedev.ri at gmail dot com
  Target Milestone: ---

https://godbolt.org/z/8WHddH

void foo(int *x);

void test1(int * const begin, const int len) {
#pragma omp parallel default(none)
#pragma omp for
for(int x = 0; x < len; x++)
    foo(begin + x);
}

gcc 8.2, clang trunk is ok with that code.
gcc trunk says:

<source>: In function 'void test1(int*, int)':
<source>:5:9: error: 'len' not specified in enclosing 'parallel'
    5 | #pragma omp for
      |         ^~~
<source>:4:9: error: enclosing 'parallel'
    4 | #pragma omp parallel default(none)
      |         ^~~
<source>:7:9: error: 'begin' not specified in enclosing 'parallel'
    7 |     foo(begin + x);
      |         ^~~~~
<source>:4:9: error: enclosing 'parallel'
    4 | #pragma omp parallel default(none)
      |         ^~~
Compiler returned: 1

Since 'default(none)' is specified, i fail to see how they are not specified..

I'm also not really seeing the reasoning in the openmp 4.0 "2.14.3.1 default
clause".
Did this change in newer openmp versions?

Reply via email to