Commit 2e0bffaf by Tobias Burnus Committed by Tobias Burnus

re PR fortran/51652 (Allocate with type-spec and source-expr: check whether…

re PR fortran/51652 (Allocate with type-spec and source-expr: check whether length type-parameter is the same is lacking)

2012-01-10  Tobias Burnus  <burnus@net-b.de>

        PR fortran/51652
        * resolve.c (resolve_allocate_expr): For non-deferred char
        lengths, check whether type-spec matches declaration.

2012-01-10  Tobias Burnus  <burnus@net-b.de>

        PR fortran/51652
        * gfortran.dg/allocate_with_typespec_5.f90: New.

From-SVN: r183061
parent c9423ca3
2012-01-10 Tobias Burnus <burnus@net-b.de>
PR fortran/51652
* resolve.c (resolve_allocate_expr): For non-deferred char lengths,
check whether type-spec matches declaration.
2012-01-10 Tobias Burnus <burnus@net-b.de>
* resolve.c (resolve_ordinary_assign): Improve error wording.
2012-01-09 Paul Thomas <pault@gcc.gnu.org>
......
......@@ -6989,6 +6989,19 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code)
goto failure;
}
if (code->ext.alloc.ts.type == BT_CHARACTER && !e->ts.deferred)
{
int cmp = gfc_dep_compare_expr (e->ts.u.cl->length,
code->ext.alloc.ts.u.cl->length);
if (cmp == 1 || cmp == -1 || cmp == -3)
{
gfc_error ("Allocating %s at %L with type-spec requires the same "
"character-length parameter as in the declaration",
sym->name, &e->where);
goto failure;
}
}
/* In the variable definition context checks, gfc_expr_attr is used
on the expression. This is fooled by the array specification
present in e, thus we have to eliminate that one temporarily. */
......
2012-01-10 Tobias Burnus <burnus@net-b.de>
PR fortran/51652
* gfortran.dg/allocate_with_typespec_5.f90: New.
2012-01-10 Tobias Burnus <burnus@net-b.de>
* gfortran.dg/class_39.f03: Update dg-error string.
2012-01-10 Richard Guenther <rguenther@suse.de>
......
! { dg-do compile }
!
! PR fortran/51652
!
! Contributed by David Kinniburgh
!
module settings
type keyword
character(60), allocatable :: c(:)
end type keyword
type(keyword) :: kw(10)
contains
subroutine save_kw
allocate(character(80) :: kw(1)%c(10)) ! { dg-error "with type-spec requires the same character-length parameter" }
end subroutine save_kw
subroutine foo(n)
character(len=n+2), allocatable :: x
allocate (character(len=n+3) :: x) ! { dg-error "type-spec requires the same character-length parameter" }
end subroutine foo
end module settings
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