From patchwork Thu Oct 21 11:37:27 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [fortran] Fix PR 46007, segfault with shape From: Thomas Koenig X-Patchwork-Id: 68594 Message-Id: <1287661047.3660.12.camel@linux-fd1f.site> To: fortran@gcc.gnu.org Cc: gcc-patches@gcc.gnu.org Date: Thu, 21 Oct 2010 13:37:27 +0200 Hello world, this rather straightforward patch fixes PR 46007. Regression-tested on trunk. OK for trunk? Also OK for 4.5 after regression-testing there? Thomas 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. Index: m4/shape.m4 =================================================================== --- m4/shape.m4 (Revision 165561) +++ m4/shape.m4 (Arbeitskopie) @@ -42,13 +42,23 @@ shape_'rtype_kind` ('rtype` * 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 ('rtype_name`) * 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 ;