re PR fortran/91727 (ICE in conformable_arrays, at fortran/resolve.c:7490)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Sun, 15 Sep 2019 17:49:44 +0000 (17:49 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Sun, 15 Sep 2019 17:49:44 +0000 (17:49 +0000)
2019-09-15  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/91727
* resolve.c (conformable_arrays):  If array-spec is NULL, then
allocate-object is a scalar.  a conformability check only occurs
for an array source-expr.

2019-09-15  Steven G. Kargl  <kargl@gcc.gnu.org>

PR fortran/91727
* gfortran.dg/pr91727.f90: New test.

From-SVN: r275731

gcc/fortran/ChangeLog
gcc/fortran/resolve.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/pr91727.f90 [new file with mode: 0644]

index 1006cbda2f4e72abf7e9c4a31b7b6b15193cce20..7b383b3a4f3dc9002d89fc8336532cc1cbce33a5 100644 (file)
@@ -1,3 +1,10 @@
+2019-09-15  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/91727
+       * resolve.c (conformable_arrays):  If array-spec is NULL, then
+       allocate-object is a scalar.  a conformability check only occurs
+       for an array source-expr.
+
 2019-09-15  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/91550
index ce192bbb1895499f49776702c193871a84802ffe..f1de7dd76c611760332b86f6e8eeaab2403b144e 100644 (file)
@@ -7485,7 +7485,7 @@ 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 && (!tail->u.ar.as || e1->rank != tail->u.ar.as->rank))
       || (!tail && e1->rank != e2->rank))
     {
       gfc_error ("Source-expr at %L must be scalar or have the "
index c06029ac75c7420a9edd3c42642f2e634b2ab64a..786e6a43b1ab95e6fb6f0820d508669525a1761b 100644 (file)
@@ -1,3 +1,8 @@
+2019-09-15  Steven G. Kargl  <kargl@gcc.gnu.org>
+
+       PR fortran/91727
+       * gfortran.dg/pr91727.f90: New test.
+
 2019-09-15  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/91550
diff --git a/gcc/testsuite/gfortran.dg/pr91727.f90 b/gcc/testsuite/gfortran.dg/pr91727.f90
new file mode 100644 (file)
index 0000000..54276b4
--- /dev/null
@@ -0,0 +1,9 @@
+! { dg-do compile }
+! Code contributed by Gerhard Steinmetz.
+program p
+   type t
+      class(*), allocatable :: a
+   end type
+   type(t) :: x
+   allocate (x%a, source=[1]) ! { dg-error "have the same rank as" }
+end