This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug middle-end/70680] New: [5/6 Regression] OpenMP SIMD linear variable privatized too eagerly


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

            Bug ID: 70680
           Summary: [5/6 Regression] OpenMP SIMD linear variable
                    privatized too eagerly
           Product: gcc
           Version: 5.1.0
            Status: UNCONFIRMED
          Keywords: openmp
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: amonakov at gcc dot gnu.org
  Target Milestone: ---

#include <stdio.h>
int main()
{
  int i=0;
#pragma omp task default(shared) if(0)
  {
#pragma omp simd
  for (i=0; i<100; i++)
    ;
#ifdef USE
  asm("" : : "r"(i));
#endif
  }
  printf("%d\n", i);
}

Per my understanding of the OpenMP spec, this program should always print
'100'; indeed, that is observed with gcc-4.9, but gcc-5 does not share 'i' with
the task region, unless a dummy use is injected after the openmp-simd loop:

$ gcc-4.9 -O2 -fopenmp t.c && ./a.out
100

$ gcc-5.1 -O2 -fopenmp t.c && ./a.out
0

$ gcc-5.1 -DUSE -O2 -fopenmp t.c && ./a.out
100

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]