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> 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. * resolve.c (resolve_ordinary_assign): Improve error wording.
2012-01-09 Paul Thomas <pault@gcc.gnu.org> 2012-01-09 Paul Thomas <pault@gcc.gnu.org>
......
...@@ -6989,6 +6989,19 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code) ...@@ -6989,6 +6989,19 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code)
goto failure; 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 /* In the variable definition context checks, gfc_expr_attr is used
on the expression. This is fooled by the array specification on the expression. This is fooled by the array specification
present in e, thus we have to eliminate that one temporarily. */ present in e, thus we have to eliminate that one temporarily. */
......
2012-01-10 Tobias Burnus <burnus@net-b.de> 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. * gfortran.dg/class_39.f03: Update dg-error string.
2012-01-10 Richard Guenther <rguenther@suse.de> 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