From 3ba7edcfcccc8c37983e89ee9d80287e6e3bb0f4 Mon Sep 17 00:00:00 2001 From: Thomas Koenig Date: Thu, 21 Oct 2010 12:25:12 +0000 Subject: re PR fortran/46007 (wrong code for SHAPE in a scalarized loop) 2010-10-21 Thomas Koenig PR fortran/46007 * m4/shape.m4 (shape_'rtype_kind`): Use variable for rank. Allocate return array if unallocated. * generated/shape_i4.c: Regenerated. * generated/shape_i8.c: Regenerated. * generated/shape_i16.c: Regenerated. 2010-10-21 Thomas Koenig PR fortran/46007 * gfortran.dg/shape_5.f90: New test case. From-SVN: r165770 --- libgfortran/generated/shape_i16.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'libgfortran/generated/shape_i16.c') diff --git a/libgfortran/generated/shape_i16.c b/libgfortran/generated/shape_i16.c index 9ce2857..c2c5200 100644 --- a/libgfortran/generated/shape_i16.c +++ b/libgfortran/generated/shape_i16.c @@ -41,13 +41,23 @@ shape_16 (gfc_array_i16 * const restrict ret, int n; index_type stride; index_type extent; + int rank; + + rank = GFC_DESCRIPTOR_RANK (array); + + if (ret->data == NULL) + { + GFC_DIMENSION_SET(ret->dim[0], 0, rank - 1, 1); + ret->offset = 0; + ret->data = internal_malloc_size (sizeof (GFC_INTEGER_16) * rank); + } stride = GFC_DESCRIPTOR_STRIDE(ret,0); if (GFC_DESCRIPTOR_EXTENT(ret,0) < 1) return; - for (n = 0; n < GFC_DESCRIPTOR_RANK (array); n++) + for (n = 0; n < rank; n++) { extent = GFC_DESCRIPTOR_EXTENT(array,n); ret->data[n * stride] = extent > 0 ? extent : 0 ; -- cgit v1.1