From ec543c9833c2d9283c035cd8430849eb4ec04406 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Tue, 25 Jan 2022 21:56:39 +0100 Subject: [PATCH] Fortran: MOLD argument to TRANSFER intrinsic having storage size zero gcc/fortran/ChangeLog: PR fortran/104227 * check.cc (gfc_calculate_transfer_sizes): Fix checking of arrays passed as MOLD argument to the TRANSFER intrinsic for having storage size zero. gcc/testsuite/ChangeLog: PR fortran/104227 * gfortran.dg/transfer_check_6.f90: New test. --- gcc/fortran/check.cc | 2 +- gcc/testsuite/gfortran.dg/transfer_check_6.f90 | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/transfer_check_6.f90 diff --git a/gcc/fortran/check.cc b/gcc/fortran/check.cc index 4fa05ee7e9b..d6c6767ae9e 100644 --- a/gcc/fortran/check.cc +++ b/gcc/fortran/check.cc @@ -6151,7 +6151,7 @@ gfc_calculate_transfer_sizes (gfc_expr *source, gfc_expr *mold, gfc_expr *size, * If SIZE is present, the result is an array of rank one and size SIZE. */ if (result_elt_size == 0 && *source_size > 0 && !size - && mold->expr_type == EXPR_ARRAY) + && (mold->expr_type == EXPR_ARRAY || mold->rank)) { gfc_error ("% argument of % intrinsic at %L is an " "array and shall not have storage size 0 when % " diff --git a/gcc/testsuite/gfortran.dg/transfer_check_6.f90 b/gcc/testsuite/gfortran.dg/transfer_check_6.f90 new file mode 100644 index 00000000000..dffd0913f0d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/transfer_check_6.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! PR fortran/104227 - ICE virtual memory exhausted +! Contributed by G.Steinmetz + +program p + type t + end type + type(t) :: x(2) + print *, transfer(1, x) ! { dg-error "shall not have storage size 0" } + x = transfer(1, x) ! { dg-error "shall not have storage size 0" } +end -- 2.31.1