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

            Bug ID: 118909
           Summary: OpenMP reduction array is always allocated on stack,
                    cause stack overflow with large array reduction.
           Product: gcc
           Version: 14.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libgomp
          Assignee: unassigned at gcc dot gnu.org
          Reporter: z00823823 at outlook dot com
                CC: jakub at gcc dot gnu.org
  Target Milestone: ---

Dear maintainer:

The openmp always alloc the recution array on stack, cause stack overflow with
large array. Here is an example:

```c
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
  double *test = NULL;
  for (size_t size = 1;; size += 1024) {
    test = malloc(size * sizeof(double));
    if (test == NULL) {
      printf("Failed to allocate %zu doubles\n", size);
      break;
    }
    printf("test: %p\n", test);
#pragma omp parallel reduction(+ : test[0 : size]) num_threads(2)
    {
      test[0] = 0;
#pragma omp critical
      {
        printf("frame address: %p\n", __builtin_frame_address(0));
        printf("test: %p\n", test);
      }
    }
    free(test);
    printf("Allocated %zu doubles\n\n", size);
  }
}
```

Run it for a while until it crashs. On my laptop it crashs with size > 1046529
(approximately 8MB). 

An online version can be found here: https://godbolt.org/z/v1o6K9a1b

Reply via email to