re PR fortran/38887 (run-time abort for MVBITS with run-time zero sized array arguments)
2009-01-21 Daniel Kraft <d@domob.eu> * trans-stmt.c (gfc_conv_elemental_dependencies): Cleaned up comment. 2009-01-21 Daniel Kraft <d@domob.eu> PR fortran/38887 * runtime/in_unpack_generic.c (internal_unpack): Return instead of abort when called with empty array. * m4/in_unpack.m4: Ditto. * generated/in_unpack_i1.c: Regenerated. * generated/in_unpack_i2.c: Regenerated. * generated/in_unpack_i4.c: Regenerated. * generated/in_unpack_i8.c: Regenerated. * generated/in_unpack_i16.c: Regenerated. * generated/in_unpack_r4.c: Regenerated. * generated/in_unpack_r8.c: Regenerated. * generated/in_unpack_r10.c: Regenerated. * generated/in_unpack_r16.c: Regenerated. * generated/in_unpack_c4.c: Regenerated. * generated/in_unpack_c8.c: Regenerated. * generated/in_unpack_c10.c: Regenerated. * generated/in_unpack_c16.c: Regenerated. 2009-01-21 Daniel Kraft <d@domob.eu> PR fortran/38887 * gfortran.dg/mvbits_5.f90: New test. From-SVN: r143541
This commit is contained in:
parent
71a6fe66e7
commit
210879b85b
20 changed files with 91 additions and 48 deletions
|
@ -1,3 +1,7 @@
|
|||
2009-01-21 Daniel Kraft <d@domob.eu>
|
||||
|
||||
* trans-stmt.c (gfc_conv_elemental_dependencies): Cleaned up comment.
|
||||
|
||||
2009-01-20 Paul Thomas <pault@gcc.gnu.org>
|
||||
|
||||
PR fortran/38907
|
||||
|
|
|
@ -311,14 +311,11 @@ gfc_conv_elemental_dependencies (gfc_se * se, gfc_se * loopse,
|
|||
info->offset = gfc_create_var (gfc_array_index_type, NULL);
|
||||
gfc_add_modify (&se->pre, info->offset, offset);
|
||||
|
||||
|
||||
/* Copy the result back using unpack. */
|
||||
tmp = build_call_expr (gfor_fndecl_in_unpack, 2, parmse.expr, data);
|
||||
gfc_add_expr_to_block (&se->post, tmp);
|
||||
|
||||
/* XXX: This is possibly not needed; but isn't it cleaner this way? */
|
||||
gfc_add_block_to_block (&se->pre, &parmse.pre);
|
||||
|
||||
gfc_add_block_to_block (&se->post, &parmse.post);
|
||||
gfc_add_block_to_block (&se->post, &temp_post);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2009-01-21 Daniel Kraft <d@domob.eu>
|
||||
|
||||
PR fortran/38887
|
||||
* gfortran.dg/mvbits_5.f90: New test.
|
||||
|
||||
2009-01-21 Bingfeng Mei <bmei@broadcom.com>
|
||||
|
||||
* gcc.dg/sms-6.c: New test.
|
||||
|
|
17
gcc/testsuite/gfortran.dg/mvbits_5.f90
Normal file
17
gcc/testsuite/gfortran.dg/mvbits_5.f90
Normal file
|
@ -0,0 +1,17 @@
|
|||
! { dg-do run }
|
||||
|
||||
! PR fortran/38887
|
||||
! This aborted at runtime for the runtime zero-sized array arguments.
|
||||
|
||||
! Contributed by Dick Hendrickson <dick.hendrickson@gmail.com>
|
||||
|
||||
program try_ya0013
|
||||
integer ida(9)
|
||||
call ya0013(ida,1,5,6)
|
||||
end program
|
||||
|
||||
SUBROUTINE YA0013(IDA,nf1,nf5,nf6)
|
||||
INTEGER IDA(9)
|
||||
IDA = 1
|
||||
CALL MVBITS(IDA(NF5:NF1), 0, 1, IDA(NF6:NF1),2)
|
||||
END SUBROUTINE
|
|
@ -1,3 +1,23 @@
|
|||
2009-01-21 Daniel Kraft <d@domob.eu>
|
||||
|
||||
PR fortran/38887
|
||||
* runtime/in_unpack_generic.c (internal_unpack): Return instead of
|
||||
abort when called with empty array.
|
||||
* m4/in_unpack.m4: Ditto.
|
||||
* generated/in_unpack_i1.c: Regenerated.
|
||||
* generated/in_unpack_i2.c: Regenerated.
|
||||
* generated/in_unpack_i4.c: Regenerated.
|
||||
* generated/in_unpack_i8.c: Regenerated.
|
||||
* generated/in_unpack_i16.c: Regenerated.
|
||||
* generated/in_unpack_r4.c: Regenerated.
|
||||
* generated/in_unpack_r8.c: Regenerated.
|
||||
* generated/in_unpack_r10.c: Regenerated.
|
||||
* generated/in_unpack_r16.c: Regenerated.
|
||||
* generated/in_unpack_c4.c: Regenerated.
|
||||
* generated/in_unpack_c8.c: Regenerated.
|
||||
* generated/in_unpack_c10.c: Regenerated.
|
||||
* generated/in_unpack_c16.c: Regenerated.
|
||||
|
||||
2009-01-12 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||
|
||||
PR libfortran/38772
|
||||
|
|
|
@ -60,12 +60,12 @@ internal_unpack_c10 (gfc_array_c10 * d, const GFC_COMPLEX_10 * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -60,12 +60,12 @@ internal_unpack_c16 (gfc_array_c16 * d, const GFC_COMPLEX_16 * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -60,12 +60,12 @@ internal_unpack_c4 (gfc_array_c4 * d, const GFC_COMPLEX_4 * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -60,12 +60,12 @@ internal_unpack_c8 (gfc_array_c8 * d, const GFC_COMPLEX_8 * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -60,12 +60,12 @@ internal_unpack_1 (gfc_array_i1 * d, const GFC_INTEGER_1 * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -60,12 +60,12 @@ internal_unpack_16 (gfc_array_i16 * d, const GFC_INTEGER_16 * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -60,12 +60,12 @@ internal_unpack_2 (gfc_array_i2 * d, const GFC_INTEGER_2 * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -60,12 +60,12 @@ internal_unpack_4 (gfc_array_i4 * d, const GFC_INTEGER_4 * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -60,12 +60,12 @@ internal_unpack_8 (gfc_array_i8 * d, const GFC_INTEGER_8 * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -60,12 +60,12 @@ internal_unpack_r10 (gfc_array_r10 * d, const GFC_REAL_10 * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -60,12 +60,12 @@ internal_unpack_r16 (gfc_array_r16 * d, const GFC_REAL_16 * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -60,12 +60,12 @@ internal_unpack_r4 (gfc_array_r4 * d, const GFC_REAL_4 * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -60,12 +60,12 @@ internal_unpack_r8 (gfc_array_r8 * d, const GFC_REAL_8 * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -63,12 +63,12 @@ internal_unpack_'rtype_ccode` ('rtype` * d, const 'rtype_name` * src)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
if (dsize != 0)
|
||||
|
|
|
@ -178,12 +178,12 @@ internal_unpack (gfc_array_char * d, const void * s)
|
|||
stride[n] = d->dim[n].stride;
|
||||
extent[n] = d->dim[n].ubound + 1 - d->dim[n].lbound;
|
||||
if (extent[n] <= 0)
|
||||
abort ();
|
||||
return;
|
||||
|
||||
if (dsize == stride[n])
|
||||
dsize *= extent[n];
|
||||
dsize *= extent[n];
|
||||
else
|
||||
dsize = 0;
|
||||
dsize = 0;
|
||||
}
|
||||
|
||||
src = s;
|
||||
|
|
Loading…
Add table
Reference in a new issue