mirror of git://gcc.gnu.org/git/gcc.git
re PR fortran/51055 (deferred length character allocation: allocate(character(len=i)::s) rejected)
2012-05-23 Tobias Burnus <burnus@net-b.de>
PR fortran/51055
PR fortran/45170
* match.c (gfc_match_allocate): Set length_from_typespec
for characters.
* resolve.c (resolve_charlen): If set, don't check whether
the len is a specification expression.
2012-05-23 Tobias Burnus <burnus@net-b.de>
PR fortran/51055
PR fortran/45170
* gfortran.dg/allocate_with_typespec_6.f90: New.
From-SVN: r187811
This commit is contained in:
parent
2e74510357
commit
239b48db1b
|
|
@ -1,3 +1,12 @@
|
||||||
|
2012-05-23 Tobias Burnus <burnus@net-b.de>
|
||||||
|
|
||||||
|
PR fortran/51055
|
||||||
|
PR fortran/45170
|
||||||
|
* match.c (gfc_match_allocate): Set length_from_typespec
|
||||||
|
for characters.
|
||||||
|
* resolve.c (resolve_charlen): If set, don't check whether
|
||||||
|
the len is a specification expression.
|
||||||
|
|
||||||
2012-05-22 Tobias Burnus <burnus@net-b.de>
|
2012-05-22 Tobias Burnus <burnus@net-b.de>
|
||||||
|
|
||||||
PR fortran/53389
|
PR fortran/53389
|
||||||
|
|
|
||||||
|
|
@ -3466,6 +3466,9 @@ gfc_match_allocate (void)
|
||||||
"type parameter", &old_locus);
|
"type parameter", &old_locus);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ts.type == BT_CHARACTER)
|
||||||
|
ts.u.cl->length_from_typespec = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -9945,12 +9945,24 @@ resolve_charlen (gfc_charlen *cl)
|
||||||
|
|
||||||
cl->resolved = 1;
|
cl->resolved = 1;
|
||||||
|
|
||||||
specification_expr = 1;
|
|
||||||
|
|
||||||
if (resolve_index_expr (cl->length) == FAILURE)
|
if (cl->length_from_typespec)
|
||||||
{
|
{
|
||||||
specification_expr = 0;
|
if (gfc_resolve_expr (cl->length) == FAILURE)
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
|
|
||||||
|
if (gfc_simplify_expr (cl->length, 0) == FAILURE)
|
||||||
|
return FAILURE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
specification_expr = 1;
|
||||||
|
|
||||||
|
if (resolve_index_expr (cl->length) == FAILURE)
|
||||||
|
{
|
||||||
|
specification_expr = 0;
|
||||||
|
return FAILURE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* "If the character length parameter value evaluates to a negative
|
/* "If the character length parameter value evaluates to a negative
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,9 @@
|
||||||
|
2012-05-23 Tobias Burnus <burnus@net-b.de>
|
||||||
|
|
||||||
|
PR fortran/51055
|
||||||
|
PR fortran/45170
|
||||||
|
* gfortran.dg/allocate_with_typespec_6.f90: New.
|
||||||
|
|
||||||
2012-05-23 Paolo Carlini <paolo.carlini@oracle.com>
|
2012-05-23 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR c++/29185
|
PR c++/29185
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
! { dg-do compile }
|
||||||
|
!
|
||||||
|
! PR fortran/51055
|
||||||
|
! PR fortran/45170 comment 14
|
||||||
|
!
|
||||||
|
! Contributed by Juha Ruokolainen
|
||||||
|
! and Hans-Werner Boschmann
|
||||||
|
!
|
||||||
|
! gfortran was before checking whether the length
|
||||||
|
! was a specification expression.
|
||||||
|
!
|
||||||
|
|
||||||
|
program a
|
||||||
|
character(len=:), allocatable :: s
|
||||||
|
integer :: i=10
|
||||||
|
allocate(character(len=i)::s)
|
||||||
|
end program a
|
||||||
Loading…
Reference in New Issue