Hi all,

attached is a small patch which fixes accepts-invalid and
ICE-on-invalid problems on allocation with source. Regtested on
x86_64-unknown-linux-gnu. Ok for trunk?

Cheers,
Janus


2013-12-11  Janus Weil  <ja...@gcc.gnu.org>

    PR fortran/58916
    * resolve.c (conformable_arrays): Treat scalar 'e2'.
    (resolve_allocate_expr): Check rank also for unlimited-polymorphic
    variables.


2013-12-11  Janus Weil  <ja...@gcc.gnu.org>

    PR fortran/58916
    * gfortran.dg/allocate_with_source_4.f90: New.
Index: gcc/fortran/resolve.c
===================================================================
--- gcc/fortran/resolve.c       (revision 205872)
+++ gcc/fortran/resolve.c       (working copy)
@@ -6597,7 +6597,8 @@ conformable_arrays (gfc_expr *e1, gfc_expr *e2)
   for (tail = e2->ref; tail && tail->next; tail = tail->next);
 
   /* First compare rank.  */
-  if (tail && e1->rank != tail->u.ar.as->rank)
+  if ((tail && e1->rank != tail->u.ar.as->rank)
+      || (!tail && e1->rank != e2->rank))
     {
       gfc_error ("Source-expr at %L must be scalar or have the "
                 "same rank as the allocate-object at %L",
@@ -6794,8 +6795,7 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code
        }
 
       /* Check F03:C632 and restriction following Note 6.18.  */
-      if (code->expr3->rank > 0 && !unlimited
-         && !conformable_arrays (code->expr3, e))
+      if (code->expr3->rank > 0 && !conformable_arrays (code->expr3, e))
        goto failure;
 
       /* Check F03:C633.  */
! { dg-do compile }
!
! PR 58916: [F03] Allocation of scalar with array source not rejected
!
! Contributed by Vladimir Fuka <vladimir.f...@gmail.com>

  class(*), allocatable :: a1
  real, allocatable :: a2  
  real b(1)
  allocate(a1, source=b)  ! { dg-error "must be scalar or have the same rank" }
  allocate(a2, source=b)  ! { dg-error "must be scalar or have the same rank" }
end

Reply via email to