diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2018-12-31 14:59:46 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2018-12-31 14:59:46 +0000 |
commit | 2ea47ee9fd022b611cf238f0b58aafd8472b6913 (patch) | |
tree | 824955b15d51902f297b77d070bd8eb211c3d4d2 /libgfortran/m4 | |
parent | 4d73e47bf8dbe9829a5d3bec2a5d5df4c62ec11f (diff) | |
download | gcc-2ea47ee9fd022b611cf238f0b58aafd8472b6913.zip gcc-2ea47ee9fd022b611cf238f0b58aafd8472b6913.tar.gz gcc-2ea47ee9fd022b611cf238f0b58aafd8472b6913.tar.bz2 |
re PR fortran/82995 (Segmentation fault passing optional argument to intrinsic sum function)
2018-12-31 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/82995
* trans-expr.c (gfc_conv_procedure_call): Pass NULL pointer
for missing optional dummy arguments for library routines.
* trans-intinsic.c (conv_mask_condition): New function.
(gfc_conv_intrinsic_arith): Detect and handle optional mask.
(gfc_conv_intrinsic_minmaxloc): Likewise.
(gfc_conv_intrinsic_findloc): Likewise.
(gfc_conv_intrinsic_minmaxval): Likewise.
(gfc_inline_intrinsic_function_p): Do not inline for rank > 1 if
an optional mask is present.
2018-12-31 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/82995
* m4/ifindloc0.m4: Handle case of absend optional argument, passed
as a NULL pointer. Correct allocation of retarray->base_addr.
* m4/ifindloc1.m4: Likewise.
* m4/ifindloc2.m4: Handle case of absend optional argument, passed
as a NULL pointer.
* m4/iforeach-s.m4: Likewise.
* m4/iforeach-s2.m4: Likewise.
* m4/iforeach.m4: Likewise.
* m4/ifunction-s.m4: Likewise.
* m4/ifunction-s2.m4: Likewise.
* m4/ifunction.m4: Likewise.
* generated/findloc0_c16.c: Regenerated.
* generated/findloc0_c4.c: Regenerated.
* generated/findloc0_c8.c: Regenerated.
* generated/findloc0_i1.c: Regenerated.
* generated/findloc0_i16.c: Regenerated.
* generated/findloc0_i2.c: Regenerated.
* generated/findloc0_i4.c: Regenerated.
* generated/findloc0_i8.c: Regenerated.
* generated/findloc0_r16.c: Regenerated.
* generated/findloc0_r4.c: Regenerated.
* generated/findloc0_r8.c: Regenerated.
* generated/findloc0_s1.c: Regenerated.
* generated/findloc0_s4.c: Regenerated.
* generated/findloc1_c16.c: Regenerated.
* generated/findloc1_c4.c: Regenerated.
* generated/findloc1_c8.c: Regenerated.
* generated/findloc1_i1.c: Regenerated.
* generated/findloc1_i16.c: Regenerated.
* generated/findloc1_i2.c: Regenerated.
* generated/findloc1_i4.c: Regenerated.
* generated/findloc1_i8.c: Regenerated.
* generated/findloc1_r16.c: Regenerated.
* generated/findloc1_r4.c: Regenerated.
* generated/findloc1_r8.c: Regenerated.
* generated/findloc1_s1.c: Regenerated.
* generated/findloc1_s4.c: Regenerated.
* generated/findloc2_s1.c: Regenerated.
* generated/findloc2_s4.c: Regenerated.
* generated/iall_i1.c: Regenerated.
* generated/iall_i16.c: Regenerated.
* generated/iall_i2.c: Regenerated.
* generated/iall_i4.c: Regenerated.
* generated/iall_i8.c: Regenerated.
* generated/iany_i1.c: Regenerated.
* generated/iany_i16.c: Regenerated.
* generated/iany_i2.c: Regenerated.
* generated/iany_i4.c: Regenerated.
* generated/iany_i8.c: Regenerated.
* generated/iparity_i1.c: Regenerated.
* generated/iparity_i16.c: Regenerated.
* generated/iparity_i2.c: Regenerated.
* generated/iparity_i4.c: Regenerated.
* generated/iparity_i8.c: Regenerated.
* generated/maxloc0_16_i1.c: Regenerated.
* generated/maxloc0_16_i16.c: Regenerated.
* generated/maxloc0_16_i2.c: Regenerated.
* generated/maxloc0_16_i4.c: Regenerated.
* generated/maxloc0_16_i8.c: Regenerated.
* generated/maxloc0_16_r10.c: Regenerated.
* generated/maxloc0_16_r16.c: Regenerated.
* generated/maxloc0_16_r4.c: Regenerated.
* generated/maxloc0_16_r8.c: Regenerated.
* generated/maxloc0_16_s1.c: Regenerated.
* generated/maxloc0_16_s4.c: Regenerated.
* generated/maxloc0_4_i1.c: Regenerated.
* generated/maxloc0_4_i16.c: Regenerated.
* generated/maxloc0_4_i2.c: Regenerated.
* generated/maxloc0_4_i4.c: Regenerated.
* generated/maxloc0_4_i8.c: Regenerated.
* generated/maxloc0_4_r10.c: Regenerated.
* generated/maxloc0_4_r16.c: Regenerated.
* generated/maxloc0_4_r4.c: Regenerated.
* generated/maxloc0_4_r8.c: Regenerated.
* generated/maxloc0_4_s1.c: Regenerated.
* generated/maxloc0_4_s4.c: Regenerated.
* generated/maxloc0_8_i1.c: Regenerated.
* generated/maxloc0_8_i16.c: Regenerated.
* generated/maxloc0_8_i2.c: Regenerated.
* generated/maxloc0_8_i4.c: Regenerated.
* generated/maxloc0_8_i8.c: Regenerated.
* generated/maxloc0_8_r10.c: Regenerated.
* generated/maxloc0_8_r16.c: Regenerated.
* generated/maxloc0_8_r4.c: Regenerated.
* generated/maxloc0_8_r8.c: Regenerated.
* generated/maxloc0_8_s1.c: Regenerated.
* generated/maxloc0_8_s4.c: Regenerated.
* generated/maxloc1_16_i1.c: Regenerated.
* generated/maxloc1_16_i16.c: Regenerated.
* generated/maxloc1_16_i2.c: Regenerated.
* generated/maxloc1_16_i4.c: Regenerated.
* generated/maxloc1_16_i8.c: Regenerated.
* generated/maxloc1_16_r10.c: Regenerated.
* generated/maxloc1_16_r16.c: Regenerated.
* generated/maxloc1_16_r4.c: Regenerated.
* generated/maxloc1_16_r8.c: Regenerated.
* generated/maxloc1_16_s1.c: Regenerated.
* generated/maxloc1_16_s4.c: Regenerated.
* generated/maxloc1_4_i1.c: Regenerated.
* generated/maxloc1_4_i16.c: Regenerated.
* generated/maxloc1_4_i2.c: Regenerated.
* generated/maxloc1_4_i4.c: Regenerated.
* generated/maxloc1_4_i8.c: Regenerated.
* generated/maxloc1_4_r10.c: Regenerated.
* generated/maxloc1_4_r16.c: Regenerated.
* generated/maxloc1_4_r4.c: Regenerated.
* generated/maxloc1_4_r8.c: Regenerated.
* generated/maxloc1_4_s1.c: Regenerated.
* generated/maxloc1_4_s4.c: Regenerated.
* generated/maxloc1_8_i1.c: Regenerated.
* generated/maxloc1_8_i16.c: Regenerated.
* generated/maxloc1_8_i2.c: Regenerated.
* generated/maxloc1_8_i4.c: Regenerated.
* generated/maxloc1_8_i8.c: Regenerated.
* generated/maxloc1_8_r10.c: Regenerated.
* generated/maxloc1_8_r16.c: Regenerated.
* generated/maxloc1_8_r4.c: Regenerated.
* generated/maxloc1_8_r8.c: Regenerated.
* generated/maxloc1_8_s1.c: Regenerated.
* generated/maxloc1_8_s4.c: Regenerated.
* generated/maxval0_s1.c: Regenerated.
* generated/maxval0_s4.c: Regenerated.
* generated/maxval1_s1.c: Regenerated.
* generated/maxval1_s4.c: Regenerated.
* generated/maxval_i1.c: Regenerated.
* generated/maxval_i16.c: Regenerated.
* generated/maxval_i2.c: Regenerated.
* generated/maxval_i4.c: Regenerated.
* generated/maxval_i8.c: Regenerated.
* generated/maxval_r10.c: Regenerated.
* generated/maxval_r16.c: Regenerated.
* generated/maxval_r4.c: Regenerated.
* generated/maxval_r8.c: Regenerated.
* generated/minloc0_16_i1.c: Regenerated.
* generated/minloc0_16_i16.c: Regenerated.
* generated/minloc0_16_i2.c: Regenerated.
* generated/minloc0_16_i4.c: Regenerated.
* generated/minloc0_16_i8.c: Regenerated.
* generated/minloc0_16_r10.c: Regenerated.
* generated/minloc0_16_r16.c: Regenerated.
* generated/minloc0_16_r4.c: Regenerated.
* generated/minloc0_16_r8.c: Regenerated.
* generated/minloc0_16_s1.c: Regenerated.
* generated/minloc0_16_s4.c: Regenerated.
* generated/minloc0_4_i1.c: Regenerated.
* generated/minloc0_4_i16.c: Regenerated.
* generated/minloc0_4_i2.c: Regenerated.
* generated/minloc0_4_i4.c: Regenerated.
* generated/minloc0_4_i8.c: Regenerated.
* generated/minloc0_4_r10.c: Regenerated.
* generated/minloc0_4_r16.c: Regenerated.
* generated/minloc0_4_r4.c: Regenerated.
* generated/minloc0_4_r8.c: Regenerated.
* generated/minloc0_4_s1.c: Regenerated.
* generated/minloc0_4_s4.c: Regenerated.
* generated/minloc0_8_i1.c: Regenerated.
* generated/minloc0_8_i16.c: Regenerated.
* generated/minloc0_8_i2.c: Regenerated.
* generated/minloc0_8_i4.c: Regenerated.
* generated/minloc0_8_i8.c: Regenerated.
* generated/minloc0_8_r10.c: Regenerated.
* generated/minloc0_8_r16.c: Regenerated.
* generated/minloc0_8_r4.c: Regenerated.
* generated/minloc0_8_r8.c: Regenerated.
* generated/minloc0_8_s1.c: Regenerated.
* generated/minloc0_8_s4.c: Regenerated.
* generated/minloc1_16_i1.c: Regenerated.
* generated/minloc1_16_i16.c: Regenerated.
* generated/minloc1_16_i2.c: Regenerated.
* generated/minloc1_16_i4.c: Regenerated.
* generated/minloc1_16_i8.c: Regenerated.
* generated/minloc1_16_r10.c: Regenerated.
* generated/minloc1_16_r16.c: Regenerated.
* generated/minloc1_16_r4.c: Regenerated.
* generated/minloc1_16_r8.c: Regenerated.
* generated/minloc1_16_s1.c: Regenerated.
* generated/minloc1_16_s4.c: Regenerated.
* generated/minloc1_4_i1.c: Regenerated.
* generated/minloc1_4_i16.c: Regenerated.
* generated/minloc1_4_i2.c: Regenerated.
* generated/minloc1_4_i4.c: Regenerated.
* generated/minloc1_4_i8.c: Regenerated.
* generated/minloc1_4_r10.c: Regenerated.
* generated/minloc1_4_r16.c: Regenerated.
* generated/minloc1_4_r4.c: Regenerated.
* generated/minloc1_4_r8.c: Regenerated.
* generated/minloc1_4_s1.c: Regenerated.
* generated/minloc1_4_s4.c: Regenerated.
* generated/minloc1_8_i1.c: Regenerated.
* generated/minloc1_8_i16.c: Regenerated.
* generated/minloc1_8_i2.c: Regenerated.
* generated/minloc1_8_i4.c: Regenerated.
* generated/minloc1_8_i8.c: Regenerated.
* generated/minloc1_8_r10.c: Regenerated.
* generated/minloc1_8_r16.c: Regenerated.
* generated/minloc1_8_r4.c: Regenerated.
* generated/minloc1_8_r8.c: Regenerated.
* generated/minloc1_8_s1.c: Regenerated.
* generated/minloc1_8_s4.c: Regenerated.
* generated/minval0_s1.c: Regenerated.
* generated/minval0_s4.c: Regenerated.
* generated/minval1_s1.c: Regenerated.
* generated/minval1_s4.c: Regenerated.
* generated/minval_i1.c: Regenerated.
* generated/minval_i16.c: Regenerated.
* generated/minval_i2.c: Regenerated.
* generated/minval_i4.c: Regenerated.
* generated/minval_i8.c: Regenerated.
* generated/minval_r10.c: Regenerated.
* generated/minval_r16.c: Regenerated.
* generated/minval_r4.c: Regenerated.
* generated/minval_r8.c: Regenerated.
* generated/product_c10.c: Regenerated.
* generated/product_c16.c: Regenerated.
* generated/product_c4.c: Regenerated.
* generated/product_c8.c: Regenerated.
* generated/product_i1.c: Regenerated.
* generated/product_i16.c: Regenerated.
* generated/product_i2.c: Regenerated.
* generated/product_i4.c: Regenerated.
* generated/product_i8.c: Regenerated.
* generated/product_r10.c: Regenerated.
* generated/product_r16.c: Regenerated.
* generated/product_r4.c: Regenerated.
* generated/product_r8.c: Regenerated.
* generated/sum_c10.c: Regenerated.
* generated/sum_c16.c: Regenerated.
* generated/sum_c4.c: Regenerated.
* generated/sum_c8.c: Regenerated.
* generated/sum_i1.c: Regenerated.
* generated/sum_i16.c: Regenerated.
* generated/sum_i2.c: Regenerated.
* generated/sum_i4.c: Regenerated.
* generated/sum_i8.c: Regenerated.
* generated/sum_r10.c: Regenerated.
* generated/sum_r16.c: Regenerated.
* generated/sum_r4.c: Regenerated.
* generated/sum_r8.c: Regenerated.
2018-12-31 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/82995
* gfortran.dg/optional_absent_4.f90: New test.
* gfortran.dg/optional_absent_5.f90: New test.
From-SVN: r267487
Diffstat (limited to 'libgfortran/m4')
-rw-r--r-- | libgfortran/m4/ifindloc0.m4 | 8 | ||||
-rw-r--r-- | libgfortran/m4/ifindloc1.m4 | 8 | ||||
-rw-r--r-- | libgfortran/m4/ifindloc2.m4 | 2 | ||||
-rw-r--r-- | libgfortran/m4/iforeach-s.m4 | 12 | ||||
-rw-r--r-- | libgfortran/m4/iforeach-s2.m4 | 8 | ||||
-rw-r--r-- | libgfortran/m4/iforeach.m4 | 9 | ||||
-rw-r--r-- | libgfortran/m4/ifunction-s.m4 | 12 | ||||
-rw-r--r-- | libgfortran/m4/ifunction-s2.m4 | 8 | ||||
-rw-r--r-- | libgfortran/m4/ifunction.m4 | 12 |
9 files changed, 64 insertions, 15 deletions
diff --git a/libgfortran/m4/ifindloc0.m4 b/libgfortran/m4/ifindloc0.m4 index 94937f1..75ec531 100644 --- a/libgfortran/m4/ifindloc0.m4 +++ b/libgfortran/m4/ifindloc0.m4 @@ -48,7 +48,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1); retarray->dtype.rank = 1; retarray->offset = 0; - retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4)); + retarray->base_addr = xmallocarray (rank, sizeof (index_type)); } else { @@ -179,7 +179,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1); retarray->dtype.rank = 1; retarray->offset = 0; - retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4)); + retarray->base_addr = xmallocarray (rank, sizeof (index_type)); } else { @@ -317,7 +317,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see index_type * restrict dest; index_type n; - if (*mask) + if (mask == NULL || *mask) { findloc0_'atype_code` (retarray, array, value, back'len_arg`); return; @@ -333,7 +333,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1); retarray->dtype.rank = 1; retarray->offset = 0; - retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4)); + retarray->base_addr = xmallocarray (rank, sizeof (index_type)); } else if (unlikely (compile_options.bounds_check)) { diff --git a/libgfortran/m4/ifindloc1.m4 b/libgfortran/m4/ifindloc1.m4 index 70638be..f4a7099 100644 --- a/libgfortran/m4/ifindloc1.m4 +++ b/libgfortran/m4/ifindloc1.m4 @@ -95,7 +95,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]; - retarray->base_addr = xmallocarray (alloc_size, sizeof (GFC_INTEGER_4)); + retarray->base_addr = xmallocarray (alloc_size, sizeof (index_type)); if (alloc_size == 0) { /* Make sure we have a zero-sized array. */ @@ -273,7 +273,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]; - retarray->base_addr = xmallocarray (alloc_size, sizeof (GFC_INTEGER_4)); + retarray->base_addr = xmallocarray (alloc_size, sizeof (index_type)); if (alloc_size == 0) { /* Make sure we have a zero-sized array. */ @@ -379,7 +379,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see index_type dim; bool continue_loop; - if (*mask) + if (mask == NULL || *mask) { findloc1_'atype_code`'` (retarray, array, value, pdim, back'len_arg`'`); return; @@ -436,7 +436,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]; - retarray->base_addr = xmallocarray (alloc_size, sizeof (GFC_INTEGER_4)); + retarray->base_addr = xmallocarray (alloc_size, sizeof (index_type)); if (alloc_size == 0) { /* Make sure we have a zero-sized array. */ diff --git a/libgfortran/m4/ifindloc2.m4 b/libgfortran/m4/ifindloc2.m4 index ede7041..d6d7851 100644 --- a/libgfortran/m4/ifindloc2.m4 +++ b/libgfortran/m4/ifindloc2.m4 @@ -117,7 +117,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see } 'header3`'` { - if (*mask) + if (mask == NULL || *mask) { return findloc2_'atype_code` (array, value, back, len_array, len_value); } diff --git a/libgfortran/m4/iforeach-s.m4 b/libgfortran/m4/iforeach-s.m4 index 19bb23b..b841d15 100644 --- a/libgfortran/m4/iforeach-s.m4 +++ b/libgfortran/m4/iforeach-s.m4 @@ -135,6 +135,16 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray, index_type n; int mask_kind; + if (mask == NULL) + { +#ifdef HAVE_BACK_ARG + name`'rtype_qual`_'atype_code (retarray, array, back, len); +#else + name`'rtype_qual`_'atype_code (retarray, array, len); +#endif + return; + } + rank = GFC_DESCRIPTOR_RANK (array); if (rank <= 0) runtime_error ("Rank of array needs to be > 0"); @@ -261,7 +271,7 @@ void index_type n; 'rtype_name *dest; - if (*mask) + if (mask == NULL || *mask) { #ifdef HAVE_BACK_ARG name`'rtype_qual`_'atype_code (retarray, array, back, len); diff --git a/libgfortran/m4/iforeach-s2.m4 b/libgfortran/m4/iforeach-s2.m4 index 19d016f..63fde45 100644 --- a/libgfortran/m4/iforeach-s2.m4 +++ b/libgfortran/m4/iforeach-s2.m4 @@ -116,6 +116,12 @@ void index_type n; int mask_kind; + if (mask == NULL) + { + name`'rtype_qual`_'atype_code (ret, xlen, array, len); + return; + } + rank = GFC_DESCRIPTOR_RANK (array); if (rank <= 0) runtime_error ("Rank of array needs to be > 0"); @@ -213,7 +219,7 @@ void GFC_LOGICAL_4 *mask, gfc_charlen_type len) { - if (*mask) + if (mask == NULL || *mask) { name`'rtype_qual`_'atype_code (ret, xlen, array, len); return; diff --git a/libgfortran/m4/iforeach.m4 b/libgfortran/m4/iforeach.m4 index dff9f8b..ede4a7f 100644 --- a/libgfortran/m4/iforeach.m4 +++ b/libgfortran/m4/iforeach.m4 @@ -123,6 +123,13 @@ void index_type n; int mask_kind; + + if (mask == NULL) + { + name`'rtype_qual`_'atype_code (retarray, array, back); + return; + } + rank = GFC_DESCRIPTOR_RANK (array); if (rank <= 0) runtime_error ("Rank of array needs to be > 0"); @@ -247,7 +254,7 @@ void index_type n; rtype_name *dest; - if (*mask) + if (mask == NULL || *mask) { name`'rtype_qual`_'atype_code (retarray, array, back); return; diff --git a/libgfortran/m4/ifunction-s.m4 b/libgfortran/m4/ifunction-s.m4 index 55d6b18..16615aa 100644 --- a/libgfortran/m4/ifunction-s.m4 +++ b/libgfortran/m4/ifunction-s.m4 @@ -222,6 +222,16 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray, index_type mdelta; int mask_kind; + if (mask == NULL) + { +#ifdef HAVE_BACK_ARG + name`'rtype_qual`_'atype_code (retarray, array, pdim, back, string_len); +#else + name`'rtype_qual`_'atype_code (retarray, array, pdim, string_len); +#endif + return; + } + dim = (*pdim) - 1; rank = GFC_DESCRIPTOR_RANK (array) - 1; @@ -400,7 +410,7 @@ s'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray, index_type dim; - if (*mask) + if (mask == NULL || *mask) { #ifdef HAVE_BACK_ARG name`'rtype_qual`_'atype_code (retarray, array, pdim, back, string_len); diff --git a/libgfortran/m4/ifunction-s2.m4 b/libgfortran/m4/ifunction-s2.m4 index b4ce650..4d31c20 100644 --- a/libgfortran/m4/ifunction-s2.m4 +++ b/libgfortran/m4/ifunction-s2.m4 @@ -225,6 +225,12 @@ void index_type mdelta; int mask_kind; + if (mask == NULL) + { + name`'rtype_qual`_'atype_code (retarray, xlen, array, pdim, string_len); + return; + } + assert (xlen == string_len); dim = (*pdim) - 1; @@ -408,7 +414,7 @@ void index_type dim; - if (*mask) + if (mask == NULL || *mask) { name`'rtype_qual`_'atype_code (retarray, xlen, array, pdim, string_len); return; diff --git a/libgfortran/m4/ifunction.m4 b/libgfortran/m4/ifunction.m4 index 3b8d702..c64217e 100644 --- a/libgfortran/m4/ifunction.m4 +++ b/libgfortran/m4/ifunction.m4 @@ -210,6 +210,16 @@ m'name`'rtype_qual`_'atype_code` ('rtype` * const restrict retarray, index_type mdelta; int mask_kind; + if (mask == NULL) + { +#ifdef HAVE_BACK_ARG + name`'rtype_qual`_'atype_code (retarray, array, pdim, back); +#else + name`'rtype_qual`_'atype_code (retarray, array, pdim); +#endif + return; + } + dim = (*pdim) - 1; rank = GFC_DESCRIPTOR_RANK (array) - 1; @@ -388,7 +398,7 @@ void index_type dim; - if (*mask) + if (mask == NULL || *mask) { #ifdef HAVE_BACK_ARG name`'rtype_qual`_'atype_code (retarray, array, pdim, back); |