From 33a7a93218b1393d0135e3c4a9ad9ced87808f5e Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Thu, 28 Jan 2021 10:13:46 +0100 Subject: [PATCH] PR fortran/86470 - ICE with OpenMP, class(*) allocatable gfc_call_malloc should malloc an area of size 1 if no size given. gcc/fortran/ChangeLog: PR fortran/86470 * trans.c (gfc_call_malloc): Allocate area of size 1 if passed size is NULL (as documented). gcc/testsuite/ChangeLog: PR fortran/86470 * gfortran.dg/gomp/pr86470.f90: New test. --- gcc/fortran/trans.c | 3 +++ gcc/testsuite/gfortran.dg/gomp/pr86470.f90 | 12 ++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/gomp/pr86470.f90 diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c index a2376917635..ab53fc5f441 100644 --- a/gcc/fortran/trans.c +++ b/gcc/fortran/trans.c @@ -689,6 +689,9 @@ gfc_call_malloc (stmtblock_t * block, tree type, tree size) /* Call malloc. */ gfc_start_block (&block2); + if (size == NULL_TREE) + size = build_int_cst (size_type_node, 1); + size = fold_convert (size_type_node, size); size = fold_build2_loc (input_location, MAX_EXPR, size_type_node, size, build_int_cst (size_type_node, 1)); diff --git a/gcc/testsuite/gfortran.dg/gomp/pr86470.f90 b/gcc/testsuite/gfortran.dg/gomp/pr86470.f90 new file mode 100644 index 00000000000..7e04437548c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/pr86470.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! PR fortran/86470 - ICE with OpenMP, class(*) + +program p + implicit none + class(*), allocatable :: val +!$OMP PARALLEL private(val) + allocate(integer::val) + val = 1 + deallocate(val) +!$OMP END PARALLEL +end -- 2.30.2