summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2020-05-30 14:02:56 +0200
committerJakub Jelinek <jakub@redhat.com>2020-05-30 14:02:56 +0200
commit05e4db63d044ee235d2fbfab8b0bb9fbdfb18315 (patch)
tree9fced1a49c8dd58c725d9c8a5bcf98164da2b830
parent850533ab160ef40eccfd039e1e3b138cf26e76b8 (diff)
openmp: omp_alloc(0, ...) should return NULL.
2020-05-30 Jakub Jelinek <jakub@redhat.com> * allocator.c (omp_alloc): For size == 0, return NULL early. * testsuite/libgomp.c-c++-common/alloc-4.c: New test.
-rw-r--r--libgomp/allocator.c3
-rw-r--r--libgomp/testsuite/libgomp.c-c++-common/alloc-4.c25
2 files changed, 28 insertions, 0 deletions
diff --git a/libgomp/allocator.c b/libgomp/allocator.c
index 8592de6e2b5..66308ab6669 100644
--- a/libgomp/allocator.c
+++ b/libgomp/allocator.c
@@ -201,6 +201,9 @@ omp_alloc (size_t size, omp_allocator_handle_t allocator)
size_t alignment, new_size;
void *ptr, *ret;
+ if (__builtin_expect (size == 0, 0))
+ return NULL;
+
retry:
if (allocator == omp_null_allocator)
{
diff --git a/libgomp/testsuite/libgomp.c-c++-common/alloc-4.c b/libgomp/testsuite/libgomp.c-c++-common/alloc-4.c
new file mode 100644
index 00000000000..841e1bcc201
--- /dev/null
+++ b/libgomp/testsuite/libgomp.c-c++-common/alloc-4.c
@@ -0,0 +1,25 @@
+#include <omp.h>
+#include <stdlib.h>
+
+const omp_alloctrait_t traits[]
+= { { omp_atk_pool_size, 1 },
+ { omp_atk_fallback, omp_atv_abort_fb } };
+
+int
+main ()
+{
+ omp_allocator_handle_t a;
+
+ if (omp_alloc (0, omp_null_allocator) != NULL)
+ abort ();
+ a = omp_init_allocator (omp_default_mem_space, 2, traits);
+ if (a != omp_null_allocator)
+ {
+ if (omp_alloc (0, a) != NULL
+ || omp_alloc (0, a) != NULL
+ || omp_alloc (0, a) != NULL)
+ abort ();
+ omp_destroy_allocator (a);
+ }
+ return 0;
+}