diff options
author | Jakub Jelinek <jakub@redhat.com> | 2020-05-30 14:02:56 +0200 |
---|---|---|
committer | Giuliano Belinassi <giuliano.belinassi@usp.br> | 2020-08-17 13:09:24 -0300 |
commit | 85169d9f15c3e16df5802cb3a9e90e10746f2a3d (patch) | |
tree | fee748171dad927e43ae8f22618a2ce7726ce403 | |
parent | d17fcc72e4a2f4b7afb9ee739680b2f56669a841 (diff) | |
download | gcc-85169d9f15c3e16df5802cb3a9e90e10746f2a3d.zip gcc-85169d9f15c3e16df5802cb3a9e90e10746f2a3d.tar.gz gcc-85169d9f15c3e16df5802cb3a9e90e10746f2a3d.tar.bz2 |
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.c | 3 | ||||
-rw-r--r-- | libgomp/testsuite/libgomp.c-c++-common/alloc-4.c | 25 |
2 files changed, 28 insertions, 0 deletions
diff --git a/libgomp/allocator.c b/libgomp/allocator.c index 8592de6..66308ab 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 0000000..841e1bc --- /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; +} |