From: Thomas Koenig Date: Sat, 24 Nov 2012 22:17:35 +0000 (+0000) Subject: re PR fortran/55314 (Rejects some valid ALLOCATE statements) X-Git-Tag: releases/gcc-4.6.4~270 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3c7c86ca7e94b3ec084ae73ffca9159596325cf9;p=thirdparty%2Fgcc.git re PR fortran/55314 (Rejects some valid ALLOCATE statements) 2012-11-24 Thomas Koenig PR fortran/55314 Backport from trunk * resolve.c (resolve_allocate_deallocate): Compare all subscripts when deciding if to reject a (de)allocate statement. 2012-11-24 Thomas Koenig PR fortran/55314 Backport from trunk * gfortran.dg/allocate_error_4.f90: New test. From-SVN: r193784 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index bbe781294f84..13bec3d30266 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2012-11-24 Thomas Koenig + + PR fortran/55314 + Backport from trunk + * resolve.c (resolve_allocate_deallocate): Compare all + subscripts when deciding if to reject a (de)allocate + statement. + 2012-09-13 Tobias Burnus PR fortran/54225 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 344ef8ff3546..f31e9162ed51 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -7087,11 +7087,18 @@ resolve_allocate_deallocate (gfc_code *code, const char *fcn) if (pr->next && qr->next) { + int i; gfc_array_ref *par = &(pr->u.ar); gfc_array_ref *qar = &(qr->u.ar); - if (gfc_dep_compare_expr (par->start[0], - qar->start[0]) != 0) - break; + + for (i=0; idimen; i++) + { + if ((par->start[i] != NULL + || qar->start[i] != NULL) + && gfc_dep_compare_expr (par->start[i], + qar->start[i]) != 0) + goto break_label; + } } } else @@ -7103,6 +7110,8 @@ resolve_allocate_deallocate (gfc_code *code, const char *fcn) pr = pr->next; qr = qr->next; } + break_label: + ; } } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1637989fe2b2..6a1e3e4a1338 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2012-11-24 Thomas Koenig + + PR fortran/55314 + Backport from trunk + * gfortran.dg/allocate_error_4.f90: New test. + 2012-11-07 Eric Botcazou * gcc.c-torture/compile/20121107-1.c: New test. diff --git a/gcc/testsuite/gfortran.dg/allocate_error_4.f90 b/gcc/testsuite/gfortran.dg/allocate_error_4.f90 new file mode 100644 index 000000000000..6652b472f49c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/allocate_error_4.f90 @@ -0,0 +1,16 @@ +! { dg-do compile } +! PR fortran/55314 - the second allocate statement was rejected. + +program main + implicit none + integer :: max_nb + type comm_mask + integer(4), pointer :: mask(:) + end type comm_mask + type (comm_mask), allocatable, save :: encode(:,:) + max_nb=2 + allocate( encode(1:1,1:max_nb)) + allocate( encode(1,1)%mask(1),encode(1,2)%mask(1)) + deallocate( encode(1,1)%mask,encode(1,2)%mask) + allocate( encode(1,1)%mask(1),encode(1,1)%mask(1)) ! { dg-error "also appears at" } +end program main