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

            Bug ID: 100471
           Summary: #pragma omp taskloop with
           Product: gcc
           Version: 11.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tom.vanderaa at gmail dot com
  Target Milestone: ---

Created attachment 50774
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50774&action=edit
Preprocessed source code

Code in attach contains a #pragma omp taskloop with a custom reduction
operator.

#pragma omp taskloop default(none) shared(c) reduction(ArrayPlus: aa)

It seems that the code generated for the #pragma omp is incorrect, as the code
segfaults at

    0x100003cea <+187>: movq   %rbx, %rdx
->  0x100003ced <+190>: movzbl 0x28(%rdx), %eax

with the #pragma line above as source ref in my debugger.

Looing at taskloop_customreduce.c.007t.omplower output I'm GUESSING(!!) this
corresponds to this line (marked --->):

                #pragma omp taskloop _reductemp_(D.2068) _looptemp_(D.2067)
_looptemp_(D.2066) firstprivate(D.2062) reduction(aa) default(none) private(j)
[child fn: taskloop_reduce._omp_fn.0 (.omp_data_o.2)]
                  {
                    .omp_data_i = (struct  & restrict) &.omp_data_o.2;
                    D.2074 = .omp_data_i->D.2073;
                    D.2076 = .omp_data_i->D.2075;
                    D.2078 = .omp_data_i->D.2077;
                    D.2080 = .omp_data_i->D.2079;
                    D.2099 = __builtin_omp_get_thread_num ();
                    D.2100 = (sizetype) D.2099;
                    D.2101 = D.2100 * 64;
                    D.2102 = MEM[(unsigned long *)D.2074 + 16B];
                    D.2103 = (void *) D.2102;
                    D.2104 = D.2103 + D.2101;
                    D.2105 = D.2104;
                    D.2106 = D.2105 + 40;
  ----->            D.2107 = *D.2106;
                    if (D.2107 != 0) goto <D.2109>; else goto <D.2108>;

Tracing back this load through the gimple tree does not seem to lead to correct
struct. 

Compile command:

gcc -v -save-temps -fdump-tree-all -O0 -g -fopenmp  -o taskloop_customreduce
taskloop_customreduce.c

Tested with gcc 10.2.0 on macOS.
Tested with 9.3.0, 10.3.0 and 11.1.0 on Linux

Reply via email to