Commit 8cd119d8 by Paul Thomas

re PR fortran/82934 (Segfault on assumed character length in allocate)

2017-11-10  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/82934
	* trans-stmt.c (gfc_trans_allocate): Remove the gcc_assert on
	null string length for assumed length typespec and set
	expr3_esize to NULL_TREE;

2017-11-10  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/82934
	* gfortran.dg/allocate_assumed_charlen_1.f90: New test.

From-SVN: r254624
parent 9e875fd8
2017-11-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/82934
* trans-stmt.c (gfc_trans_allocate): Remove the gcc_assert on
null string length for assumed length typespec and set
expr3_esize to NULL_TREE;
2017-11-09 Paul Thomas <pault@gcc.gnu.org> 2017-11-09 Paul Thomas <pault@gcc.gnu.org>
PR fortran/78619 PR fortran/78619
......
...@@ -5913,10 +5913,9 @@ gfc_trans_allocate (gfc_code * code) ...@@ -5913,10 +5913,9 @@ gfc_trans_allocate (gfc_code * code)
if (code->ext.alloc.ts.type != BT_CHARACTER) if (code->ext.alloc.ts.type != BT_CHARACTER)
expr3_esize = TYPE_SIZE_UNIT ( expr3_esize = TYPE_SIZE_UNIT (
gfc_typenode_for_spec (&code->ext.alloc.ts)); gfc_typenode_for_spec (&code->ext.alloc.ts));
else else if (code->ext.alloc.ts.u.cl->length != NULL)
{ {
gfc_expr *sz; gfc_expr *sz;
gcc_assert (code->ext.alloc.ts.u.cl->length != NULL);
sz = gfc_copy_expr (code->ext.alloc.ts.u.cl->length); sz = gfc_copy_expr (code->ext.alloc.ts.u.cl->length);
gfc_init_se (&se_sz, NULL); gfc_init_se (&se_sz, NULL);
gfc_conv_expr (&se_sz, sz); gfc_conv_expr (&se_sz, sz);
...@@ -5930,6 +5929,8 @@ gfc_trans_allocate (gfc_code * code) ...@@ -5930,6 +5929,8 @@ gfc_trans_allocate (gfc_code * code)
tmp, se_sz.expr); tmp, se_sz.expr);
expr3_esize = gfc_evaluate_now (expr3_esize, &block); expr3_esize = gfc_evaluate_now (expr3_esize, &block);
} }
else
expr3_esize = NULL_TREE;
} }
/* The routine gfc_trans_assignment () already implements all /* The routine gfc_trans_assignment () already implements all
......
2017-11-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/82934
* gfortran.dg/allocate_assumed_charlen_1.f90: New test.
2017-11-10 Jakub Jelinek <jakub@redhat.com> 2017-11-10 Jakub Jelinek <jakub@redhat.com>
PR bootstrap/82916 PR bootstrap/82916
......
! { dg-do run }
!
! PR82934: Segfault on compilation in trans-stmt.c:5919(8.0.0).
! The original report only had one item in the allocate list. This
! has been doubled up to verify that the correct string length is
! is used in the allocation.
!
! Contributed by FortranFan on clf.
!
character(len=42), allocatable :: foo
character(len=22), allocatable :: foofoo
call alloc( foo , foofoo)
if (len(foo) .ne. 42) call abort
if (len(foofoo) .ne. 22) call abort
contains
subroutine alloc( bar, barbar )
character(len=*), allocatable :: bar, barbar
allocate( character(len=*) :: bar , barbar) ! <= Here!
end subroutine
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment