backport: re PR fortran/82841 (Segfault in gfc_simplify_transfer)
2018-01-10 Steven G. Kargl <kargl@kgcc.gnu.org> Backport r254555 from trunk PR Fortran/82841 * gfortran.dg/transfer_simplify_11.f90: New test. 2018-01-10 Steven G. Kargl <kargl@kgcc.gnu.org> Backport r254555 from trunk PR Fortran/82841 * simplify.c(gfc_simplify_transfer): Do not dereference a NULL pointer. Unwrap a short line. From-SVN: r256445
This commit is contained in:
parent
df18d5afa6
commit
ee30b822e5
|
@ -1,3 +1,10 @@
|
|||
2018-01-10 Steven G. Kargl <kargl@kgcc.gnu.org>
|
||||
|
||||
Backport r254555 from trunk
|
||||
PR Fortran/82841
|
||||
* simplify.c(gfc_simplify_transfer): Do not dereference a NULL pointer.
|
||||
Unwrap a short line.
|
||||
|
||||
2018-01-04 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
PR Fortran/83679
|
||||
|
|
|
@ -6577,8 +6577,7 @@ gfc_simplify_transfer (gfc_expr *source, gfc_expr *mold, gfc_expr *size)
|
|||
return NULL;
|
||||
|
||||
/* Calculate the size of the source. */
|
||||
if (source->expr_type == EXPR_ARRAY
|
||||
&& !gfc_array_size (source, &tmp))
|
||||
if (source->expr_type == EXPR_ARRAY && !gfc_array_size (source, &tmp))
|
||||
gfc_internal_error ("Failure getting length of a constant array.");
|
||||
|
||||
/* Create an empty new expression with the appropriate characteristics. */
|
||||
|
@ -6586,7 +6585,7 @@ gfc_simplify_transfer (gfc_expr *source, gfc_expr *mold, gfc_expr *size)
|
|||
&source->where);
|
||||
result->ts = mold->ts;
|
||||
|
||||
mold_element = mold->expr_type == EXPR_ARRAY
|
||||
mold_element = (mold->expr_type == EXPR_ARRAY && mold->value.constructor)
|
||||
? gfc_constructor_first (mold->value.constructor)->expr
|
||||
: mold;
|
||||
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
2018-01-10 Steven G. Kargl <kargl@kgcc.gnu.org>
|
||||
|
||||
Backport r254555 from trunk
|
||||
PR Fortran/82841
|
||||
* gfortran.dg/transfer_simplify_11.f90: New test.
|
||||
|
||||
2018-01-09 Richard Biener <rguenther@suse.de>
|
||||
|
||||
Backport from mainline
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
! { dg-do run }
|
||||
! PR Fortran/82841
|
||||
!
|
||||
integer, parameter :: N = 2
|
||||
character(len=1) :: chr(N)
|
||||
chr = transfer(repeat("x",ncopies=N),[character(len=1) ::], N)
|
||||
if (chr(1) /= 'x' .and. chr(2) /= 'x') call abort
|
||||
end
|
Loading…
Reference in New Issue