This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch, fortran] Fix PR 55314, rejects-valid regression


Hello world,

the attached patch fixes a 4.6/4.7/4.8 rejects-valid regression.
OK for trunk?

Thomas

2012-11-24 Thomas Koenig <tkoenig@gcc.gnu.org>

        PR fortran/55314
        * resolve.c (resolve_allocate_deallocate):  Compare all
        subscripts when deciding if to reject a (de)allocate
        statement.

2012-11-24 Thomas Koenig <tkoenig@gcc.gnu.org>

        PR fortran/55314
        * gfortran.dg/allocate_error_4.f90:  New test.
! { 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
Index: resolve.c
===================================================================
--- resolve.c	(Revision 192894)
+++ resolve.c	(Arbeitskopie)
@@ -7618,12 +7618,18 @@ resolve_allocate_deallocate (gfc_code *code, const
 
 		      if (pr->next && qr->next)
 			{
+			  int i;
 			  gfc_array_ref *par = &(pr->u.ar);
 			  gfc_array_ref *qar = &(qr->u.ar);
-			  if ((par->start[0] != NULL || qar->start[0] != NULL)
-			      && gfc_dep_compare_expr (par->start[0],
-						       qar->start[0]) != 0)
-			    break;
+
+			  for (i=0; i<par->dimen; 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
@@ -7635,6 +7641,8 @@ resolve_allocate_deallocate (gfc_code *code, const
 		  pr = pr->next;
 		  qr = qr->next;
 		}
+	    break_label:
+	      ;
 	    }
 	}
     }

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]