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
This commit is contained in:
parent
c9423ca3fa
commit
2e0bffaf8c
|
@ -1,3 +1,9 @@
|
|||
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.
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
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.
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
! { 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
|
Loading…
Reference in New Issue