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/35549] New: Invalid use of copy-in/out for shared vars in nested parallels


extern void abort (void);

int
main (void)
{
  int i = 6, n = 0;
  omp_set_dynamic (0);
  omp_set_nested (1);
  #pragma omp parallel shared (i) num_threads (3)
  {
    if (omp_get_num_threads () != 3)
      #pragma omp atomic
        n += 1;
    #pragma omp parallel shared (i) num_threads (4)
    {
      if (omp_get_num_threads () != 4)
        #pragma omp atomic
          n += 1;
      #pragma omp critical
      i += 1;
    }
  }
  if (n == 0 && i != 6 + 3 * 4)
    abort ();
  return 0;
}

is miscompiled.  While we can use copy-in/out for the outer parallel's
shared(i),
it can't be used for the inner parallel's shared(i), as multiple threads would
have their own copied copies of the shared var, rendering the variable
effectively not shared.


-- 
           Summary: Invalid use of copy-in/out for shared vars in nested
                    parallels
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Keywords: openmp
          Severity: normal
          Priority: P3
         Component: middle-end
        AssignedTo: jakub at gcc dot gnu dot org
        ReportedBy: jakub at gcc dot gnu dot org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35549


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