diff mbox series

[Committed] PR fortran/85975,85816 -- Array descriptor fix-up

Message ID 20180601202425.GA37683@troutmask.apl.washington.edu
State New
Headers show
Series [Committed] PR fortran/85975,85816 -- Array descriptor fix-up | expand

Commit Message

Steve Kargl June 1, 2018, 8:24 p.m. UTC
In PR fortran/85975, Stephan Kramer identified a deficiency in the
array descriptor reform patch recently committed by pault.  I've
implied the patch required to fix the problem, and pault has asked
that I commit in the PR audit trail.  Thus, I've committed the
attached patch.

2018-06-01  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/85816
	PR fortran/85975
	* libgfortran.h: Remove the GFC_DTYPE_COPY_SETRANK macro.
	* intrinsics/reshape_generic.c: Directly assign rank.
	* intrinsics/spread_generic.c: Ditto.
	* m4/iforeach-s.m4: Ditto.
	* m4/iforeach.m4: Ditto.
	* m4/ifunction-s.m4: Ditto.
	* m4/ifunction-s2.m4: Ditto.
	* m4/ifunction.m4: Ditto.
	* m4/ifunction_logical.m4: Ditto.
	* m4/reshape.m4: Ditto.
	* m4/spread.m4: Ditto.
	* generated/all_l1.c: Regenerated from m4 files.
	* generated/all_l16.c: Ditto.
	* generated/all_l2.c: Ditto.
	* generated/all_l4.c: Ditto.
	* generated/all_l8.c: Ditto.
	* generated/any_l1.c: Ditto.
	* generated/any_l16.c: Ditto.
	* generated/any_l2.c: Ditto.
	* generated/any_l4.c: Ditto.
	* generated/any_l8.c: Ditto.
	* generated/count_16_l.c: Ditto.
	* generated/count_1_l.c: Ditto.
	* generated/count_2_l.c: Ditto.
	* generated/count_4_l.c: Ditto.
	* generated/count_8_l.c: Ditto.
	* generated/iall_i1.c: Ditto.
	* generated/iall_i16.c: Ditto.
	* generated/iall_i2.c: Ditto.
	* generated/iall_i4.c: Ditto.
	* generated/iall_i8.c: Ditto.
	* generated/iany_i1.c: Ditto.
	* generated/iany_i16.c: Ditto.
	* generated/iany_i2.c: Ditto.
	* generated/iany_i4.c: Ditto.
	* generated/iany_i8.c: Ditto.
	* generated/iparity_i1.c: Ditto.
	* generated/iparity_i16.c: Ditto.
	* generated/iparity_i2.c: Ditto.
	* generated/iparity_i4.c: Ditto.
	* generated/iparity_i8.c: Ditto.
	* generated/maxloc0_16_i1.c: Ditto.
	* generated/maxloc0_16_i16.c: Ditto.
	* generated/maxloc0_16_i2.c: Ditto.
	* generated/maxloc0_16_i4.c: Ditto.
	* generated/maxloc0_16_i8.c: Ditto.
	* generated/maxloc0_16_r10.c: Ditto.
	* generated/maxloc0_16_r16.c: Ditto.
	* generated/maxloc0_16_r4.c: Ditto.
	* generated/maxloc0_16_r8.c: Ditto.
	* generated/maxloc0_16_s1.c: Ditto.
	* generated/maxloc0_16_s4.c: Ditto.
	* generated/maxloc0_4_i1.c: Ditto.
	* generated/maxloc0_4_i16.c: Ditto.
	* generated/maxloc0_4_i2.c: Ditto.
	* generated/maxloc0_4_i4.c: Ditto.
	* generated/maxloc0_4_i8.c: Ditto.
	* generated/maxloc0_4_r10.c: Ditto.
	* generated/maxloc0_4_r16.c: Ditto.
	* generated/maxloc0_4_r4.c: Ditto.
	* generated/maxloc0_4_r8.c: Ditto.
	* generated/maxloc0_4_s1.c: Ditto.
	* generated/maxloc0_4_s4.c: Ditto.
	* generated/maxloc0_8_i1.c: Ditto.
	* generated/maxloc0_8_i16.c: Ditto.
	* generated/maxloc0_8_i2.c: Ditto.
	* generated/maxloc0_8_i4.c: Ditto.
	* generated/maxloc0_8_i8.c: Ditto.
	* generated/maxloc0_8_r10.c: Ditto.
	* generated/maxloc0_8_r16.c: Ditto.
	* generated/maxloc0_8_r4.c: Ditto.
	* generated/maxloc0_8_r8.c: Ditto.
	* generated/maxloc0_8_s1.c: Ditto.
	* generated/maxloc0_8_s4.c: Ditto.
	* generated/maxloc1_16_i1.c: Ditto.
	* generated/maxloc1_16_i16.c: Ditto.
	* generated/maxloc1_16_i2.c: Ditto.
	* generated/maxloc1_16_i4.c: Ditto.
	* generated/maxloc1_16_i8.c: Ditto.
	* generated/maxloc1_16_r10.c: Ditto.
	* generated/maxloc1_16_r16.c: Ditto.
	* generated/maxloc1_16_r4.c: Ditto.
	* generated/maxloc1_16_r8.c: Ditto.
	* generated/maxloc1_16_s1.c: Ditto.
	* generated/maxloc1_16_s4.c: Ditto.
	* generated/maxloc1_4_i1.c: Ditto.
	* generated/maxloc1_4_i16.c: Ditto.
	* generated/maxloc1_4_i2.c: Ditto.
	* generated/maxloc1_4_i4.c: Ditto.
	* generated/maxloc1_4_i8.c: Ditto.
	* generated/maxloc1_4_r10.c: Ditto.
	* generated/maxloc1_4_r16.c: Ditto.
	* generated/maxloc1_4_r4.c: Ditto.
	* generated/maxloc1_4_r8.c: Ditto.
	* generated/maxloc1_4_s1.c: Ditto.
	* generated/maxloc1_4_s4.c: Ditto.
	* generated/maxloc1_8_i1.c: Ditto.
	* generated/maxloc1_8_i16.c: Ditto.
	* generated/maxloc1_8_i2.c: Ditto.
	* generated/maxloc1_8_i4.c: Ditto.
	* generated/maxloc1_8_i8.c: Ditto.
	* generated/maxloc1_8_r10.c: Ditto.
	* generated/maxloc1_8_r16.c: Ditto.
	* generated/maxloc1_8_r4.c: Ditto.
	* generated/maxloc1_8_r8.c: Ditto.
	* generated/maxloc1_8_s1.c: Ditto.
	* generated/maxloc1_8_s4.c: Ditto.
	* generated/maxval1_s1.c: Ditto.
	* generated/maxval1_s4.c: Ditto.
	* generated/maxval_i1.c: Ditto.
	* generated/maxval_i16.c: Ditto.
	* generated/maxval_i2.c: Ditto.
	* generated/maxval_i4.c: Ditto.
	* generated/maxval_i8.c: Ditto.
	* generated/maxval_r10.c: Ditto.
	* generated/maxval_r16.c: Ditto.
	* generated/maxval_r4.c: Ditto.
	* generated/maxval_r8.c: Ditto.
	* generated/minloc0_16_i1.c: Ditto.
	* generated/minloc0_16_i16.c: Ditto.
	* generated/minloc0_16_i2.c: Ditto.
	* generated/minloc0_16_i4.c: Ditto.
	* generated/minloc0_16_i8.c: Ditto.
	* generated/minloc0_16_r10.c: Ditto.
	* generated/minloc0_16_r16.c: Ditto.
	* generated/minloc0_16_r4.c: Ditto.
	* generated/minloc0_16_r8.c: Ditto.
	* generated/minloc0_16_s1.c: Ditto.
	* generated/minloc0_16_s4.c: Ditto.
	* generated/minloc0_4_i1.c: Ditto.
	* generated/minloc0_4_i16.c: Ditto.
	* generated/minloc0_4_i2.c: Ditto.
	* generated/minloc0_4_i4.c: Ditto.
	* generated/minloc0_4_i8.c: Ditto.
	* generated/minloc0_4_r10.c: Ditto.
	* generated/minloc0_4_r16.c: Ditto.
	* generated/minloc0_4_r4.c: Ditto.
	* generated/minloc0_4_r8.c: Ditto.
	* generated/minloc0_4_s1.c: Ditto.
	* generated/minloc0_4_s4.c: Ditto.
	* generated/minloc0_8_i1.c: Ditto.
	* generated/minloc0_8_i16.c: Ditto.
	* generated/minloc0_8_i2.c: Ditto.
	* generated/minloc0_8_i4.c: Ditto.
	* generated/minloc0_8_i8.c: Ditto.
	* generated/minloc0_8_r10.c: Ditto.
	* generated/minloc0_8_r16.c: Ditto.
	* generated/minloc0_8_r4.c: Ditto.
	* generated/minloc0_8_r8.c: Ditto.
	* generated/minloc0_8_s1.c: Ditto.
	* generated/minloc0_8_s4.c: Ditto.
	* generated/minloc1_16_i1.c: Ditto.
	* generated/minloc1_16_i16.c: Ditto.
	* generated/minloc1_16_i2.c: Ditto.
	* generated/minloc1_16_i4.c: Ditto.
	* generated/minloc1_16_i8.c: Ditto.
	* generated/minloc1_16_r10.c: Ditto.
	* generated/minloc1_16_r16.c: Ditto.
	* generated/minloc1_16_r4.c: Ditto.
	* generated/minloc1_16_r8.c: Ditto.
	* generated/minloc1_16_s1.c: Ditto.
	* generated/minloc1_16_s4.c: Ditto.
	* generated/minloc1_4_i1.c: Ditto.
	* generated/minloc1_4_i16.c: Ditto.
	* generated/minloc1_4_i2.c: Ditto.
	* generated/minloc1_4_i4.c: Ditto.
	* generated/minloc1_4_i8.c: Ditto.
	* generated/minloc1_4_r10.c: Ditto.
	* generated/minloc1_4_r16.c: Ditto.
	* generated/minloc1_4_r4.c: Ditto.
	* generated/minloc1_4_r8.c: Ditto.
	* generated/minloc1_4_s1.c: Ditto.
	* generated/minloc1_4_s4.c: Ditto.
	* generated/minloc1_8_i1.c: Ditto.
	* generated/minloc1_8_i16.c: Ditto.
	* generated/minloc1_8_i2.c: Ditto.
	* generated/minloc1_8_i4.c: Ditto.
	* generated/minloc1_8_i8.c: Ditto.
	* generated/minloc1_8_r10.c: Ditto.
	* generated/minloc1_8_r16.c: Ditto.
	* generated/minloc1_8_r4.c: Ditto.
	* generated/minloc1_8_r8.c: Ditto.
	* generated/minloc1_8_s1.c: Ditto.
	* generated/minloc1_8_s4.c: Ditto.
	* generated/minval1_s1.c: Ditto.
	* generated/minval1_s4.c: Ditto.
	* generated/minval_i1.c: Ditto.
	* generated/minval_i16.c: Ditto.
	* generated/minval_i2.c: Ditto.
	* generated/minval_i4.c: Ditto.
	* generated/minval_i8.c: Ditto.
	* generated/minval_r10.c: Ditto.
	* generated/minval_r16.c: Ditto.
	* generated/minval_r4.c: Ditto.
	* generated/minval_r8.c: Ditto.
	* generated/norm2_r10.c: Ditto.
	* generated/norm2_r16.c: Ditto.
	* generated/norm2_r4.c: Ditto.
	* generated/norm2_r8.c: Ditto.
	* generated/parity_l1.c: Ditto.
	* generated/parity_l16.c: Ditto.
	* generated/parity_l2.c: Ditto.
	* generated/parity_l4.c: Ditto.
	* generated/parity_l8.c: Ditto.
	* generated/product_c10.c: Ditto.
	* generated/product_c16.c: Ditto.
	* generated/product_c4.c: Ditto.
	* generated/product_c8.c: Ditto.
	* generated/product_i1.c: Ditto.
	* generated/product_i16.c: Ditto.
	* generated/product_i2.c: Ditto.
	* generated/product_i4.c: Ditto.
	* generated/product_i8.c: Ditto.
	* generated/product_r10.c: Ditto.
	* generated/product_r16.c: Ditto.
	* generated/product_r4.c: Ditto.
	* generated/product_r8.c: Ditto.
	* generated/reshape_c10.c: Ditto.
	* generated/reshape_c16.c: Ditto.
	* generated/reshape_c4.c: Ditto.
	* generated/reshape_c8.c: Ditto.
	* generated/reshape_i16.c: Ditto.
	* generated/reshape_i4.c: Ditto.
	* generated/reshape_i8.c: Ditto.
	* generated/reshape_r10.c: Ditto.
	* generated/reshape_r16.c: Ditto.
	* generated/reshape_r4.c: Ditto.
	* generated/reshape_r8.c: Ditto.
	* generated/spread_c10.c: Ditto.
	* generated/spread_c16.c: Ditto.
	* generated/spread_c4.c: Ditto.
	* generated/spread_c8.c: Ditto.
	* generated/spread_i1.c: Ditto.
	* generated/spread_i16.c: Ditto.
	* generated/spread_i2.c: Ditto.
	* generated/spread_i4.c: Ditto.
	* generated/spread_i8.c: Ditto.
	* generated/spread_r10.c: Ditto.
	* generated/spread_r16.c: Ditto.
	* generated/spread_r4.c: Ditto.
	* generated/spread_r8.c: Ditto.
	* generated/sum_c10.c: Ditto.
	* generated/sum_c16.c: Ditto.
	* generated/sum_c4.c: Ditto.
	* generated/sum_c8.c: Ditto.
	* generated/sum_i1.c: Ditto.
	* generated/sum_i16.c: Ditto.
	* generated/sum_i2.c: Ditto.
	* generated/sum_i4.c: Ditto.
	* generated/sum_i8.c: Ditto.
	* generated/sum_r10.c: Ditto.
	* generated/sum_r16.c: Ditto.
	* generated/sum_r4.c: Ditto.
	* generated/sum_r8.c: Ditto.

2018-06-01  Steven G. Kargl  <kargl@gcc.gnu.org>

	PR fortran/85816
	PR fortran/85975
	* gfortran.dg/pr85816.f90: New test.
	* gfortran.dg/pr85975.f90: New test.
diff mbox series

Patch

Index: gcc/testsuite/gfortran.dg/pr85816.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr85816.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr85816.f90	(working copy)
@@ -0,0 +1,19 @@ 
+! { dg-do compile }
+! PR fortran/85816
+! Original code from Martin Diehl <m.diehl at mpie dot de>
+!
+! Prior to fixing the problem with the array descriptor, gfortran died with
+! Operating system error: Cannot allocate memory
+! Integer overflow in xmallocarray
+!
+program test
+  implicit none
+  real(8) :: tensor(3,3) = 4
+  integer :: grid(3) = 16
+  ! ok
+  write(6,*) spread(spread(tensor,3,grid(1)),4,grid(1))
+  ! ok (note the brackets)
+  write(6,*) spread((spread(spread(tensor,3,grid(1)),4,grid(2))),5,grid(3))
+  ! not ok 
+  write(6,*) spread(spread(spread(tensor,3,grid(1)),4,grid(2)),5,grid(3))
+end program
Index: gcc/testsuite/gfortran.dg/pr85975.f90
===================================================================
--- gcc/testsuite/gfortran.dg/pr85975.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr85975.f90	(working copy)
@@ -0,0 +1,24 @@ 
+! { dg-do run }
+! PR fortran/85976
+! Original code from Stephan Kramer <stephan.kramer at imperial dot ac.uk>
+program foo
+
+  implicit none
+
+  call bar(2, 3, 5, 7)
+
+  contains
+
+  subroutine bar(k, l, m, n)
+
+    integer, intent(in) :: k, l, m, n
+    real :: a(k), b(k,l), c(k,l,m), d(k,l,m,n)
+
+    if (size(spread(A, 1, 1)) /= k) stop 1
+    if (size(spread(b, 1, 1)) /= k * l) stop 2
+    if (size(spread(c, 1, 1)) /= k * l * m) stop 3
+    if (size(spread(d, 1, 1)) /= k * l * m * n) stop 4
+
+  end subroutine
+
+end program
Index: libgfortran/generated/all_l1.c
===================================================================
--- libgfortran/generated/all_l1.c	(revision 261075)
+++ libgfortran/generated/all_l1.c	(working copy)
@@ -97,7 +97,7 @@  all_l1 (gfc_array_l1 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/all_l16.c
===================================================================
--- libgfortran/generated/all_l16.c	(revision 261075)
+++ libgfortran/generated/all_l16.c	(working copy)
@@ -97,7 +97,7 @@  all_l16 (gfc_array_l16 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/all_l2.c
===================================================================
--- libgfortran/generated/all_l2.c	(revision 261075)
+++ libgfortran/generated/all_l2.c	(working copy)
@@ -97,7 +97,7 @@  all_l2 (gfc_array_l2 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/all_l4.c
===================================================================
--- libgfortran/generated/all_l4.c	(revision 261075)
+++ libgfortran/generated/all_l4.c	(working copy)
@@ -97,7 +97,7 @@  all_l4 (gfc_array_l4 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/all_l8.c
===================================================================
--- libgfortran/generated/all_l8.c	(revision 261075)
+++ libgfortran/generated/all_l8.c	(working copy)
@@ -97,7 +97,7 @@  all_l8 (gfc_array_l8 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/any_l1.c
===================================================================
--- libgfortran/generated/any_l1.c	(revision 261075)
+++ libgfortran/generated/any_l1.c	(working copy)
@@ -97,7 +97,7 @@  any_l1 (gfc_array_l1 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/any_l16.c
===================================================================
--- libgfortran/generated/any_l16.c	(revision 261075)
+++ libgfortran/generated/any_l16.c	(working copy)
@@ -97,7 +97,7 @@  any_l16 (gfc_array_l16 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/any_l2.c
===================================================================
--- libgfortran/generated/any_l2.c	(revision 261075)
+++ libgfortran/generated/any_l2.c	(working copy)
@@ -97,7 +97,7 @@  any_l2 (gfc_array_l2 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/any_l4.c
===================================================================
--- libgfortran/generated/any_l4.c	(revision 261075)
+++ libgfortran/generated/any_l4.c	(working copy)
@@ -97,7 +97,7 @@  any_l4 (gfc_array_l4 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/any_l8.c
===================================================================
--- libgfortran/generated/any_l8.c	(revision 261075)
+++ libgfortran/generated/any_l8.c	(working copy)
@@ -97,7 +97,7 @@  any_l8 (gfc_array_l8 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/count_16_l.c
===================================================================
--- libgfortran/generated/count_16_l.c	(revision 261075)
+++ libgfortran/generated/count_16_l.c	(working copy)
@@ -97,7 +97,7 @@  count_16_l (gfc_array_i16 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/count_1_l.c
===================================================================
--- libgfortran/generated/count_1_l.c	(revision 261075)
+++ libgfortran/generated/count_1_l.c	(working copy)
@@ -97,7 +97,7 @@  count_1_l (gfc_array_i1 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/count_2_l.c
===================================================================
--- libgfortran/generated/count_2_l.c	(revision 261075)
+++ libgfortran/generated/count_2_l.c	(working copy)
@@ -97,7 +97,7 @@  count_2_l (gfc_array_i2 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/count_4_l.c
===================================================================
--- libgfortran/generated/count_4_l.c	(revision 261075)
+++ libgfortran/generated/count_4_l.c	(working copy)
@@ -97,7 +97,7 @@  count_4_l (gfc_array_i4 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/count_8_l.c
===================================================================
--- libgfortran/generated/count_8_l.c	(revision 261075)
+++ libgfortran/generated/count_8_l.c	(working copy)
@@ -97,7 +97,7 @@  count_8_l (gfc_array_i8 * const restrict retarray, 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iall_i1.c
===================================================================
--- libgfortran/generated/iall_i1.c	(revision 261075)
+++ libgfortran/generated/iall_i1.c	(working copy)
@@ -100,7 +100,7 @@  iall_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miall_i1 (gfc_array_i1 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siall_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iall_i16.c
===================================================================
--- libgfortran/generated/iall_i16.c	(revision 261075)
+++ libgfortran/generated/iall_i16.c	(working copy)
@@ -100,7 +100,7 @@  iall_i16 (gfc_array_i16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miall_i16 (gfc_array_i16 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siall_i16 (gfc_array_i16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iall_i2.c
===================================================================
--- libgfortran/generated/iall_i2.c	(revision 261075)
+++ libgfortran/generated/iall_i2.c	(working copy)
@@ -100,7 +100,7 @@  iall_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miall_i2 (gfc_array_i2 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siall_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iall_i4.c
===================================================================
--- libgfortran/generated/iall_i4.c	(revision 261075)
+++ libgfortran/generated/iall_i4.c	(working copy)
@@ -100,7 +100,7 @@  iall_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miall_i4 (gfc_array_i4 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siall_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iall_i8.c
===================================================================
--- libgfortran/generated/iall_i8.c	(revision 261075)
+++ libgfortran/generated/iall_i8.c	(working copy)
@@ -100,7 +100,7 @@  iall_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miall_i8 (gfc_array_i8 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siall_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iany_i1.c
===================================================================
--- libgfortran/generated/iany_i1.c	(revision 261075)
+++ libgfortran/generated/iany_i1.c	(working copy)
@@ -100,7 +100,7 @@  iany_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miany_i1 (gfc_array_i1 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siany_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iany_i16.c
===================================================================
--- libgfortran/generated/iany_i16.c	(revision 261075)
+++ libgfortran/generated/iany_i16.c	(working copy)
@@ -100,7 +100,7 @@  iany_i16 (gfc_array_i16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miany_i16 (gfc_array_i16 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siany_i16 (gfc_array_i16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iany_i2.c
===================================================================
--- libgfortran/generated/iany_i2.c	(revision 261075)
+++ libgfortran/generated/iany_i2.c	(working copy)
@@ -100,7 +100,7 @@  iany_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miany_i2 (gfc_array_i2 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siany_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iany_i4.c
===================================================================
--- libgfortran/generated/iany_i4.c	(revision 261075)
+++ libgfortran/generated/iany_i4.c	(working copy)
@@ -100,7 +100,7 @@  iany_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miany_i4 (gfc_array_i4 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siany_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iany_i8.c
===================================================================
--- libgfortran/generated/iany_i8.c	(revision 261075)
+++ libgfortran/generated/iany_i8.c	(working copy)
@@ -100,7 +100,7 @@  iany_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miany_i8 (gfc_array_i8 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siany_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iparity_i1.c
===================================================================
--- libgfortran/generated/iparity_i1.c	(revision 261075)
+++ libgfortran/generated/iparity_i1.c	(working copy)
@@ -100,7 +100,7 @@  iparity_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miparity_i1 (gfc_array_i1 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siparity_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iparity_i16.c
===================================================================
--- libgfortran/generated/iparity_i16.c	(revision 261075)
+++ libgfortran/generated/iparity_i16.c	(working copy)
@@ -100,7 +100,7 @@  iparity_i16 (gfc_array_i16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miparity_i16 (gfc_array_i16 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siparity_i16 (gfc_array_i16 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iparity_i2.c
===================================================================
--- libgfortran/generated/iparity_i2.c	(revision 261075)
+++ libgfortran/generated/iparity_i2.c	(working copy)
@@ -100,7 +100,7 @@  iparity_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miparity_i2 (gfc_array_i2 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siparity_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iparity_i4.c
===================================================================
--- libgfortran/generated/iparity_i4.c	(revision 261075)
+++ libgfortran/generated/iparity_i4.c	(working copy)
@@ -100,7 +100,7 @@  iparity_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miparity_i4 (gfc_array_i4 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siparity_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/iparity_i8.c
===================================================================
--- libgfortran/generated/iparity_i8.c	(revision 261075)
+++ libgfortran/generated/iparity_i8.c	(working copy)
@@ -100,7 +100,7 @@  iparity_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  miparity_i8 (gfc_array_i8 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  siparity_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc0_16_i1.c
===================================================================
--- libgfortran/generated/maxloc0_16_i1.c	(revision 261075)
+++ libgfortran/generated/maxloc0_16_i1.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_16_i1 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mmaxloc0_16_i1 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -383,7 +383,7 @@  smaxloc0_16_i1 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/maxloc0_16_i16.c
===================================================================
--- libgfortran/generated/maxloc0_16_i16.c	(revision 261075)
+++ libgfortran/generated/maxloc0_16_i16.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_16_i16 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mmaxloc0_16_i16 (gfc_array_i16 * const restrict retarr
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -383,7 +383,7 @@  smaxloc0_16_i16 (gfc_array_i16 * const restrict retarr
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/maxloc0_16_i2.c
===================================================================
--- libgfortran/generated/maxloc0_16_i2.c	(revision 261075)
+++ libgfortran/generated/maxloc0_16_i2.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_16_i2 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mmaxloc0_16_i2 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -383,7 +383,7 @@  smaxloc0_16_i2 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/maxloc0_16_i4.c
===================================================================
--- libgfortran/generated/maxloc0_16_i4.c	(revision 261075)
+++ libgfortran/generated/maxloc0_16_i4.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_16_i4 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mmaxloc0_16_i4 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -383,7 +383,7 @@  smaxloc0_16_i4 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/maxloc0_16_i8.c
===================================================================
--- libgfortran/generated/maxloc0_16_i8.c	(revision 261075)
+++ libgfortran/generated/maxloc0_16_i8.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_16_i8 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mmaxloc0_16_i8 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -383,7 +383,7 @@  smaxloc0_16_i8 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/maxloc0_16_r10.c
===================================================================
--- libgfortran/generated/maxloc0_16_r10.c	(revision 261075)
+++ libgfortran/generated/maxloc0_16_r10.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_16_r10 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mmaxloc0_16_r10 (gfc_array_i16 * const restrict retarr
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -383,7 +383,7 @@  smaxloc0_16_r10 (gfc_array_i16 * const restrict retarr
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/maxloc0_16_r16.c
===================================================================
--- libgfortran/generated/maxloc0_16_r16.c	(revision 261075)
+++ libgfortran/generated/maxloc0_16_r16.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_16_r16 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mmaxloc0_16_r16 (gfc_array_i16 * const restrict retarr
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -383,7 +383,7 @@  smaxloc0_16_r16 (gfc_array_i16 * const restrict retarr
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/maxloc0_16_r4.c
===================================================================
--- libgfortran/generated/maxloc0_16_r4.c	(revision 261075)
+++ libgfortran/generated/maxloc0_16_r4.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_16_r4 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mmaxloc0_16_r4 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -383,7 +383,7 @@  smaxloc0_16_r4 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/maxloc0_16_r8.c
===================================================================
--- libgfortran/generated/maxloc0_16_r8.c	(revision 261075)
+++ libgfortran/generated/maxloc0_16_r8.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_16_r8 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mmaxloc0_16_r8 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -383,7 +383,7 @@  smaxloc0_16_r8 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/maxloc0_16_s1.c
===================================================================
--- libgfortran/generated/maxloc0_16_s1.c	(revision 261075)
+++ libgfortran/generated/maxloc0_16_s1.c	(working copy)
@@ -68,7 +68,7 @@  maxloc0_16_s1 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -181,7 +181,7 @@  mmaxloc0_16_s1 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -322,7 +322,7 @@  smaxloc0_16_s1 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/maxloc0_16_s4.c
===================================================================
--- libgfortran/generated/maxloc0_16_s4.c	(revision 261075)
+++ libgfortran/generated/maxloc0_16_s4.c	(working copy)
@@ -68,7 +68,7 @@  maxloc0_16_s4 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -181,7 +181,7 @@  mmaxloc0_16_s4 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -322,7 +322,7 @@  smaxloc0_16_s4 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/maxloc0_4_i1.c
===================================================================
--- libgfortran/generated/maxloc0_4_i1.c	(revision 261075)
+++ libgfortran/generated/maxloc0_4_i1.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_4_i1 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mmaxloc0_4_i1 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -383,7 +383,7 @@  smaxloc0_4_i1 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/maxloc0_4_i16.c
===================================================================
--- libgfortran/generated/maxloc0_4_i16.c	(revision 261075)
+++ libgfortran/generated/maxloc0_4_i16.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_4_i16 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mmaxloc0_4_i16 (gfc_array_i4 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -383,7 +383,7 @@  smaxloc0_4_i16 (gfc_array_i4 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/maxloc0_4_i2.c
===================================================================
--- libgfortran/generated/maxloc0_4_i2.c	(revision 261075)
+++ libgfortran/generated/maxloc0_4_i2.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_4_i2 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mmaxloc0_4_i2 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -383,7 +383,7 @@  smaxloc0_4_i2 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/maxloc0_4_i4.c
===================================================================
--- libgfortran/generated/maxloc0_4_i4.c	(revision 261075)
+++ libgfortran/generated/maxloc0_4_i4.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_4_i4 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mmaxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -383,7 +383,7 @@  smaxloc0_4_i4 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/maxloc0_4_i8.c
===================================================================
--- libgfortran/generated/maxloc0_4_i8.c	(revision 261075)
+++ libgfortran/generated/maxloc0_4_i8.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_4_i8 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mmaxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -383,7 +383,7 @@  smaxloc0_4_i8 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/maxloc0_4_r10.c
===================================================================
--- libgfortran/generated/maxloc0_4_r10.c	(revision 261075)
+++ libgfortran/generated/maxloc0_4_r10.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_4_r10 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mmaxloc0_4_r10 (gfc_array_i4 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -383,7 +383,7 @@  smaxloc0_4_r10 (gfc_array_i4 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/maxloc0_4_r16.c
===================================================================
--- libgfortran/generated/maxloc0_4_r16.c	(revision 261075)
+++ libgfortran/generated/maxloc0_4_r16.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_4_r16 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mmaxloc0_4_r16 (gfc_array_i4 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -383,7 +383,7 @@  smaxloc0_4_r16 (gfc_array_i4 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/maxloc0_4_r4.c
===================================================================
--- libgfortran/generated/maxloc0_4_r4.c	(revision 261075)
+++ libgfortran/generated/maxloc0_4_r4.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_4_r4 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mmaxloc0_4_r4 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -383,7 +383,7 @@  smaxloc0_4_r4 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/maxloc0_4_r8.c
===================================================================
--- libgfortran/generated/maxloc0_4_r8.c	(revision 261075)
+++ libgfortran/generated/maxloc0_4_r8.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_4_r8 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mmaxloc0_4_r8 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -383,7 +383,7 @@  smaxloc0_4_r8 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/maxloc0_4_s1.c
===================================================================
--- libgfortran/generated/maxloc0_4_s1.c	(revision 261075)
+++ libgfortran/generated/maxloc0_4_s1.c	(working copy)
@@ -68,7 +68,7 @@  maxloc0_4_s1 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -181,7 +181,7 @@  mmaxloc0_4_s1 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -322,7 +322,7 @@  smaxloc0_4_s1 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/maxloc0_4_s4.c
===================================================================
--- libgfortran/generated/maxloc0_4_s4.c	(revision 261075)
+++ libgfortran/generated/maxloc0_4_s4.c	(working copy)
@@ -68,7 +68,7 @@  maxloc0_4_s4 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -181,7 +181,7 @@  mmaxloc0_4_s4 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -322,7 +322,7 @@  smaxloc0_4_s4 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/maxloc0_8_i1.c
===================================================================
--- libgfortran/generated/maxloc0_8_i1.c	(revision 261075)
+++ libgfortran/generated/maxloc0_8_i1.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_8_i1 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mmaxloc0_8_i1 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -383,7 +383,7 @@  smaxloc0_8_i1 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/maxloc0_8_i16.c
===================================================================
--- libgfortran/generated/maxloc0_8_i16.c	(revision 261075)
+++ libgfortran/generated/maxloc0_8_i16.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_8_i16 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mmaxloc0_8_i16 (gfc_array_i8 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -383,7 +383,7 @@  smaxloc0_8_i16 (gfc_array_i8 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/maxloc0_8_i2.c
===================================================================
--- libgfortran/generated/maxloc0_8_i2.c	(revision 261075)
+++ libgfortran/generated/maxloc0_8_i2.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_8_i2 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mmaxloc0_8_i2 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -383,7 +383,7 @@  smaxloc0_8_i2 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/maxloc0_8_i4.c
===================================================================
--- libgfortran/generated/maxloc0_8_i4.c	(revision 261075)
+++ libgfortran/generated/maxloc0_8_i4.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_8_i4 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mmaxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -383,7 +383,7 @@  smaxloc0_8_i4 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/maxloc0_8_i8.c
===================================================================
--- libgfortran/generated/maxloc0_8_i8.c	(revision 261075)
+++ libgfortran/generated/maxloc0_8_i8.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_8_i8 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mmaxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -383,7 +383,7 @@  smaxloc0_8_i8 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/maxloc0_8_r10.c
===================================================================
--- libgfortran/generated/maxloc0_8_r10.c	(revision 261075)
+++ libgfortran/generated/maxloc0_8_r10.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_8_r10 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mmaxloc0_8_r10 (gfc_array_i8 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -383,7 +383,7 @@  smaxloc0_8_r10 (gfc_array_i8 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/maxloc0_8_r16.c
===================================================================
--- libgfortran/generated/maxloc0_8_r16.c	(revision 261075)
+++ libgfortran/generated/maxloc0_8_r16.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_8_r16 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mmaxloc0_8_r16 (gfc_array_i8 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -383,7 +383,7 @@  smaxloc0_8_r16 (gfc_array_i8 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/maxloc0_8_r4.c
===================================================================
--- libgfortran/generated/maxloc0_8_r4.c	(revision 261075)
+++ libgfortran/generated/maxloc0_8_r4.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_8_r4 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mmaxloc0_8_r4 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -383,7 +383,7 @@  smaxloc0_8_r4 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/maxloc0_8_r8.c
===================================================================
--- libgfortran/generated/maxloc0_8_r8.c	(revision 261075)
+++ libgfortran/generated/maxloc0_8_r8.c	(working copy)
@@ -54,7 +54,7 @@  maxloc0_8_r8 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mmaxloc0_8_r8 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -383,7 +383,7 @@  smaxloc0_8_r8 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/maxloc0_8_s1.c
===================================================================
--- libgfortran/generated/maxloc0_8_s1.c	(revision 261075)
+++ libgfortran/generated/maxloc0_8_s1.c	(working copy)
@@ -68,7 +68,7 @@  maxloc0_8_s1 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -181,7 +181,7 @@  mmaxloc0_8_s1 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -322,7 +322,7 @@  smaxloc0_8_s1 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/maxloc0_8_s4.c
===================================================================
--- libgfortran/generated/maxloc0_8_s4.c	(revision 261075)
+++ libgfortran/generated/maxloc0_8_s4.c	(working copy)
@@ -68,7 +68,7 @@  maxloc0_8_s4 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -181,7 +181,7 @@  mmaxloc0_8_s4 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -322,7 +322,7 @@  smaxloc0_8_s4 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/maxloc1_16_i1.c
===================================================================
--- libgfortran/generated/maxloc1_16_i1.c	(revision 261075)
+++ libgfortran/generated/maxloc1_16_i1.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_16_i1 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_16_i1 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_16_i1 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_16_i16.c
===================================================================
--- libgfortran/generated/maxloc1_16_i16.c	(revision 261075)
+++ libgfortran/generated/maxloc1_16_i16.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_16_i16 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_16_i16 (gfc_array_i16 * const restrict retarr
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_16_i16 (gfc_array_i16 * const restrict retarr
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_16_i2.c
===================================================================
--- libgfortran/generated/maxloc1_16_i2.c	(revision 261075)
+++ libgfortran/generated/maxloc1_16_i2.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_16_i2 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_16_i2 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_16_i2 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_16_i4.c
===================================================================
--- libgfortran/generated/maxloc1_16_i4.c	(revision 261075)
+++ libgfortran/generated/maxloc1_16_i4.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_16_i4 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_16_i4 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_16_i4 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_16_i8.c
===================================================================
--- libgfortran/generated/maxloc1_16_i8.c	(revision 261075)
+++ libgfortran/generated/maxloc1_16_i8.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_16_i8 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_16_i8 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_16_i8 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_16_r10.c
===================================================================
--- libgfortran/generated/maxloc1_16_r10.c	(revision 261075)
+++ libgfortran/generated/maxloc1_16_r10.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_16_r10 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_16_r10 (gfc_array_i16 * const restrict retarr
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_16_r10 (gfc_array_i16 * const restrict retarr
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_16_r16.c
===================================================================
--- libgfortran/generated/maxloc1_16_r16.c	(revision 261075)
+++ libgfortran/generated/maxloc1_16_r16.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_16_r16 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_16_r16 (gfc_array_i16 * const restrict retarr
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_16_r16 (gfc_array_i16 * const restrict retarr
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_16_r4.c
===================================================================
--- libgfortran/generated/maxloc1_16_r4.c	(revision 261075)
+++ libgfortran/generated/maxloc1_16_r4.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_16_r4 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_16_r4 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_16_r4 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_16_r8.c
===================================================================
--- libgfortran/generated/maxloc1_16_r8.c	(revision 261075)
+++ libgfortran/generated/maxloc1_16_r8.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_16_r8 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_16_r8 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_16_r8 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_16_s1.c
===================================================================
--- libgfortran/generated/maxloc1_16_s1.c	(revision 261075)
+++ libgfortran/generated/maxloc1_16_s1.c	(working copy)
@@ -115,7 +115,7 @@  maxloc1_16_s1 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -310,7 +310,7 @@  mmaxloc1_16_s1 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -489,7 +489,7 @@  smaxloc1_16_s1 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_16_s4.c
===================================================================
--- libgfortran/generated/maxloc1_16_s4.c	(revision 261075)
+++ libgfortran/generated/maxloc1_16_s4.c	(working copy)
@@ -115,7 +115,7 @@  maxloc1_16_s4 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -310,7 +310,7 @@  mmaxloc1_16_s4 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -489,7 +489,7 @@  smaxloc1_16_s4 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_4_i1.c
===================================================================
--- libgfortran/generated/maxloc1_4_i1.c	(revision 261075)
+++ libgfortran/generated/maxloc1_4_i1.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_4_i1 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_4_i1 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_4_i16.c
===================================================================
--- libgfortran/generated/maxloc1_4_i16.c	(revision 261075)
+++ libgfortran/generated/maxloc1_4_i16.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_4_i16 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_4_i16 (gfc_array_i4 * const restrict retarray
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_4_i16 (gfc_array_i4 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_4_i2.c
===================================================================
--- libgfortran/generated/maxloc1_4_i2.c	(revision 261075)
+++ libgfortran/generated/maxloc1_4_i2.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_4_i2 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_4_i2 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_4_i4.c
===================================================================
--- libgfortran/generated/maxloc1_4_i4.c	(revision 261075)
+++ libgfortran/generated/maxloc1_4_i4.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_4_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_4_i4 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_4_i8.c
===================================================================
--- libgfortran/generated/maxloc1_4_i8.c	(revision 261075)
+++ libgfortran/generated/maxloc1_4_i8.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_4_i8 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_4_i8 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_4_r10.c
===================================================================
--- libgfortran/generated/maxloc1_4_r10.c	(revision 261075)
+++ libgfortran/generated/maxloc1_4_r10.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_4_r10 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_4_r10 (gfc_array_i4 * const restrict retarray
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_4_r10 (gfc_array_i4 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_4_r16.c
===================================================================
--- libgfortran/generated/maxloc1_4_r16.c	(revision 261075)
+++ libgfortran/generated/maxloc1_4_r16.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_4_r16 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_4_r16 (gfc_array_i4 * const restrict retarray
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_4_r16 (gfc_array_i4 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_4_r4.c
===================================================================
--- libgfortran/generated/maxloc1_4_r4.c	(revision 261075)
+++ libgfortran/generated/maxloc1_4_r4.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_4_r4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_4_r4 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_4_r8.c
===================================================================
--- libgfortran/generated/maxloc1_4_r8.c	(revision 261075)
+++ libgfortran/generated/maxloc1_4_r8.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_4_r8 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_4_r8 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_4_s1.c
===================================================================
--- libgfortran/generated/maxloc1_4_s1.c	(revision 261075)
+++ libgfortran/generated/maxloc1_4_s1.c	(working copy)
@@ -115,7 +115,7 @@  maxloc1_4_s1 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -310,7 +310,7 @@  mmaxloc1_4_s1 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -489,7 +489,7 @@  smaxloc1_4_s1 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_4_s4.c
===================================================================
--- libgfortran/generated/maxloc1_4_s4.c	(revision 261075)
+++ libgfortran/generated/maxloc1_4_s4.c	(working copy)
@@ -115,7 +115,7 @@  maxloc1_4_s4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -310,7 +310,7 @@  mmaxloc1_4_s4 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -489,7 +489,7 @@  smaxloc1_4_s4 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_8_i1.c
===================================================================
--- libgfortran/generated/maxloc1_8_i1.c	(revision 261075)
+++ libgfortran/generated/maxloc1_8_i1.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_8_i1 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_8_i1 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_8_i16.c
===================================================================
--- libgfortran/generated/maxloc1_8_i16.c	(revision 261075)
+++ libgfortran/generated/maxloc1_8_i16.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_8_i16 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_8_i16 (gfc_array_i8 * const restrict retarray
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_8_i16 (gfc_array_i8 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_8_i2.c
===================================================================
--- libgfortran/generated/maxloc1_8_i2.c	(revision 261075)
+++ libgfortran/generated/maxloc1_8_i2.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_8_i2 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_8_i2 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_8_i4.c
===================================================================
--- libgfortran/generated/maxloc1_8_i4.c	(revision 261075)
+++ libgfortran/generated/maxloc1_8_i4.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_8_i4 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_8_i4 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_8_i8.c
===================================================================
--- libgfortran/generated/maxloc1_8_i8.c	(revision 261075)
+++ libgfortran/generated/maxloc1_8_i8.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_8_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_8_i8 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_8_r10.c
===================================================================
--- libgfortran/generated/maxloc1_8_r10.c	(revision 261075)
+++ libgfortran/generated/maxloc1_8_r10.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_8_r10 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_8_r10 (gfc_array_i8 * const restrict retarray
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_8_r10 (gfc_array_i8 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_8_r16.c
===================================================================
--- libgfortran/generated/maxloc1_8_r16.c	(revision 261075)
+++ libgfortran/generated/maxloc1_8_r16.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_8_r16 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_8_r16 (gfc_array_i8 * const restrict retarray
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_8_r16 (gfc_array_i8 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_8_r4.c
===================================================================
--- libgfortran/generated/maxloc1_8_r4.c	(revision 261075)
+++ libgfortran/generated/maxloc1_8_r4.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_8_r4 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_8_r4 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_8_r8.c
===================================================================
--- libgfortran/generated/maxloc1_8_r8.c	(revision 261075)
+++ libgfortran/generated/maxloc1_8_r8.c	(working copy)
@@ -103,7 +103,7 @@  maxloc1_8_r8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -317,7 +317,7 @@  mmaxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -523,7 +523,7 @@  smaxloc1_8_r8 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_8_s1.c
===================================================================
--- libgfortran/generated/maxloc1_8_s1.c	(revision 261075)
+++ libgfortran/generated/maxloc1_8_s1.c	(working copy)
@@ -115,7 +115,7 @@  maxloc1_8_s1 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -310,7 +310,7 @@  mmaxloc1_8_s1 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -489,7 +489,7 @@  smaxloc1_8_s1 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxloc1_8_s4.c
===================================================================
--- libgfortran/generated/maxloc1_8_s4.c	(revision 261075)
+++ libgfortran/generated/maxloc1_8_s4.c	(working copy)
@@ -115,7 +115,7 @@  maxloc1_8_s4 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -310,7 +310,7 @@  mmaxloc1_8_s4 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -489,7 +489,7 @@  smaxloc1_8_s4 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxval1_s1.c
===================================================================
--- libgfortran/generated/maxval1_s1.c	(revision 261075)
+++ libgfortran/generated/maxval1_s1.c	(working copy)
@@ -114,7 +114,7 @@  maxval1_s1 (gfc_array_s1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]
       		 * string_len;
@@ -310,7 +310,7 @@  mmaxval1_s1 (gfc_array_s1 * const restrict retarray, 
       		 * string_len;
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -485,7 +485,7 @@  smaxval1_s1 (gfc_array_s1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]
       		 * string_len;
Index: libgfortran/generated/maxval1_s4.c
===================================================================
--- libgfortran/generated/maxval1_s4.c	(revision 261075)
+++ libgfortran/generated/maxval1_s4.c	(working copy)
@@ -114,7 +114,7 @@  maxval1_s4 (gfc_array_s4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]
       		 * string_len;
@@ -310,7 +310,7 @@  mmaxval1_s4 (gfc_array_s4 * const restrict retarray, 
       		 * string_len;
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -485,7 +485,7 @@  smaxval1_s4 (gfc_array_s4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]
       		 * string_len;
Index: libgfortran/generated/maxval_i1.c
===================================================================
--- libgfortran/generated/maxval_i1.c	(revision 261075)
+++ libgfortran/generated/maxval_i1.c	(working copy)
@@ -100,7 +100,7 @@  maxval_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mmaxval_i1 (gfc_array_i1 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  smaxval_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxval_i16.c
===================================================================
--- libgfortran/generated/maxval_i16.c	(revision 261075)
+++ libgfortran/generated/maxval_i16.c	(working copy)
@@ -100,7 +100,7 @@  maxval_i16 (gfc_array_i16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mmaxval_i16 (gfc_array_i16 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  smaxval_i16 (gfc_array_i16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxval_i2.c
===================================================================
--- libgfortran/generated/maxval_i2.c	(revision 261075)
+++ libgfortran/generated/maxval_i2.c	(working copy)
@@ -100,7 +100,7 @@  maxval_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mmaxval_i2 (gfc_array_i2 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  smaxval_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxval_i4.c
===================================================================
--- libgfortran/generated/maxval_i4.c	(revision 261075)
+++ libgfortran/generated/maxval_i4.c	(working copy)
@@ -100,7 +100,7 @@  maxval_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mmaxval_i4 (gfc_array_i4 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  smaxval_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxval_i8.c
===================================================================
--- libgfortran/generated/maxval_i8.c	(revision 261075)
+++ libgfortran/generated/maxval_i8.c	(working copy)
@@ -100,7 +100,7 @@  maxval_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mmaxval_i8 (gfc_array_i8 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  smaxval_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxval_r10.c
===================================================================
--- libgfortran/generated/maxval_r10.c	(revision 261075)
+++ libgfortran/generated/maxval_r10.c	(working copy)
@@ -100,7 +100,7 @@  maxval_r10 (gfc_array_r10 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mmaxval_r10 (gfc_array_r10 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  smaxval_r10 (gfc_array_r10 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxval_r16.c
===================================================================
--- libgfortran/generated/maxval_r16.c	(revision 261075)
+++ libgfortran/generated/maxval_r16.c	(working copy)
@@ -100,7 +100,7 @@  maxval_r16 (gfc_array_r16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mmaxval_r16 (gfc_array_r16 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  smaxval_r16 (gfc_array_r16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxval_r4.c
===================================================================
--- libgfortran/generated/maxval_r4.c	(revision 261075)
+++ libgfortran/generated/maxval_r4.c	(working copy)
@@ -100,7 +100,7 @@  maxval_r4 (gfc_array_r4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mmaxval_r4 (gfc_array_r4 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  smaxval_r4 (gfc_array_r4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/maxval_r8.c
===================================================================
--- libgfortran/generated/maxval_r8.c	(revision 261075)
+++ libgfortran/generated/maxval_r8.c	(working copy)
@@ -100,7 +100,7 @@  maxval_r8 (gfc_array_r8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mmaxval_r8 (gfc_array_r8 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  smaxval_r8 (gfc_array_r8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc0_16_i1.c
===================================================================
--- libgfortran/generated/minloc0_16_i1.c	(revision 261075)
+++ libgfortran/generated/minloc0_16_i1.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_16_i1 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mminloc0_16_i1 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -382,7 +382,7 @@  sminloc0_16_i1 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/minloc0_16_i16.c
===================================================================
--- libgfortran/generated/minloc0_16_i16.c	(revision 261075)
+++ libgfortran/generated/minloc0_16_i16.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_16_i16 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mminloc0_16_i16 (gfc_array_i16 * const restrict retarr
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -382,7 +382,7 @@  sminloc0_16_i16 (gfc_array_i16 * const restrict retarr
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/minloc0_16_i2.c
===================================================================
--- libgfortran/generated/minloc0_16_i2.c	(revision 261075)
+++ libgfortran/generated/minloc0_16_i2.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_16_i2 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mminloc0_16_i2 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -382,7 +382,7 @@  sminloc0_16_i2 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/minloc0_16_i4.c
===================================================================
--- libgfortran/generated/minloc0_16_i4.c	(revision 261075)
+++ libgfortran/generated/minloc0_16_i4.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_16_i4 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mminloc0_16_i4 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -382,7 +382,7 @@  sminloc0_16_i4 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/minloc0_16_i8.c
===================================================================
--- libgfortran/generated/minloc0_16_i8.c	(revision 261075)
+++ libgfortran/generated/minloc0_16_i8.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_16_i8 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mminloc0_16_i8 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -382,7 +382,7 @@  sminloc0_16_i8 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/minloc0_16_r10.c
===================================================================
--- libgfortran/generated/minloc0_16_r10.c	(revision 261075)
+++ libgfortran/generated/minloc0_16_r10.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_16_r10 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mminloc0_16_r10 (gfc_array_i16 * const restrict retarr
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -382,7 +382,7 @@  sminloc0_16_r10 (gfc_array_i16 * const restrict retarr
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/minloc0_16_r16.c
===================================================================
--- libgfortran/generated/minloc0_16_r16.c	(revision 261075)
+++ libgfortran/generated/minloc0_16_r16.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_16_r16 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mminloc0_16_r16 (gfc_array_i16 * const restrict retarr
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -382,7 +382,7 @@  sminloc0_16_r16 (gfc_array_i16 * const restrict retarr
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/minloc0_16_r4.c
===================================================================
--- libgfortran/generated/minloc0_16_r4.c	(revision 261075)
+++ libgfortran/generated/minloc0_16_r4.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_16_r4 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mminloc0_16_r4 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -382,7 +382,7 @@  sminloc0_16_r4 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/minloc0_16_r8.c
===================================================================
--- libgfortran/generated/minloc0_16_r8.c	(revision 261075)
+++ libgfortran/generated/minloc0_16_r8.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_16_r8 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -205,7 +205,7 @@  mminloc0_16_r8 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -382,7 +382,7 @@  sminloc0_16_r8 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/minloc0_16_s1.c
===================================================================
--- libgfortran/generated/minloc0_16_s1.c	(revision 261075)
+++ libgfortran/generated/minloc0_16_s1.c	(working copy)
@@ -68,7 +68,7 @@  minloc0_16_s1 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -181,7 +181,7 @@  mminloc0_16_s1 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -322,7 +322,7 @@  sminloc0_16_s1 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/minloc0_16_s4.c
===================================================================
--- libgfortran/generated/minloc0_16_s4.c	(revision 261075)
+++ libgfortran/generated/minloc0_16_s4.c	(working copy)
@@ -68,7 +68,7 @@  minloc0_16_s4 (gfc_array_i16 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -181,7 +181,7 @@  mminloc0_16_s4 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
@@ -322,7 +322,7 @@  sminloc0_16_s4 (gfc_array_i16 * const restrict retarra
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_16));
     }
Index: libgfortran/generated/minloc0_4_i1.c
===================================================================
--- libgfortran/generated/minloc0_4_i1.c	(revision 261075)
+++ libgfortran/generated/minloc0_4_i1.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_4_i1 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mminloc0_4_i1 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -382,7 +382,7 @@  sminloc0_4_i1 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/minloc0_4_i16.c
===================================================================
--- libgfortran/generated/minloc0_4_i16.c	(revision 261075)
+++ libgfortran/generated/minloc0_4_i16.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_4_i16 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mminloc0_4_i16 (gfc_array_i4 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -382,7 +382,7 @@  sminloc0_4_i16 (gfc_array_i4 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/minloc0_4_i2.c
===================================================================
--- libgfortran/generated/minloc0_4_i2.c	(revision 261075)
+++ libgfortran/generated/minloc0_4_i2.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_4_i2 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mminloc0_4_i2 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -382,7 +382,7 @@  sminloc0_4_i2 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/minloc0_4_i4.c
===================================================================
--- libgfortran/generated/minloc0_4_i4.c	(revision 261075)
+++ libgfortran/generated/minloc0_4_i4.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_4_i4 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mminloc0_4_i4 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -382,7 +382,7 @@  sminloc0_4_i4 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/minloc0_4_i8.c
===================================================================
--- libgfortran/generated/minloc0_4_i8.c	(revision 261075)
+++ libgfortran/generated/minloc0_4_i8.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_4_i8 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mminloc0_4_i8 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -382,7 +382,7 @@  sminloc0_4_i8 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/minloc0_4_r10.c
===================================================================
--- libgfortran/generated/minloc0_4_r10.c	(revision 261075)
+++ libgfortran/generated/minloc0_4_r10.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_4_r10 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mminloc0_4_r10 (gfc_array_i4 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -382,7 +382,7 @@  sminloc0_4_r10 (gfc_array_i4 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/minloc0_4_r16.c
===================================================================
--- libgfortran/generated/minloc0_4_r16.c	(revision 261075)
+++ libgfortran/generated/minloc0_4_r16.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_4_r16 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mminloc0_4_r16 (gfc_array_i4 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -382,7 +382,7 @@  sminloc0_4_r16 (gfc_array_i4 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/minloc0_4_r4.c
===================================================================
--- libgfortran/generated/minloc0_4_r4.c	(revision 261075)
+++ libgfortran/generated/minloc0_4_r4.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_4_r4 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mminloc0_4_r4 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -382,7 +382,7 @@  sminloc0_4_r4 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/minloc0_4_r8.c
===================================================================
--- libgfortran/generated/minloc0_4_r8.c	(revision 261075)
+++ libgfortran/generated/minloc0_4_r8.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_4_r8 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -205,7 +205,7 @@  mminloc0_4_r8 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -382,7 +382,7 @@  sminloc0_4_r8 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/minloc0_4_s1.c
===================================================================
--- libgfortran/generated/minloc0_4_s1.c	(revision 261075)
+++ libgfortran/generated/minloc0_4_s1.c	(working copy)
@@ -68,7 +68,7 @@  minloc0_4_s1 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -181,7 +181,7 @@  mminloc0_4_s1 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -322,7 +322,7 @@  sminloc0_4_s1 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/minloc0_4_s4.c
===================================================================
--- libgfortran/generated/minloc0_4_s4.c	(revision 261075)
+++ libgfortran/generated/minloc0_4_s4.c	(working copy)
@@ -68,7 +68,7 @@  minloc0_4_s4 (gfc_array_i4 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -181,7 +181,7 @@  mminloc0_4_s4 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
@@ -322,7 +322,7 @@  sminloc0_4_s4 (gfc_array_i4 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_4));
     }
Index: libgfortran/generated/minloc0_8_i1.c
===================================================================
--- libgfortran/generated/minloc0_8_i1.c	(revision 261075)
+++ libgfortran/generated/minloc0_8_i1.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_8_i1 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mminloc0_8_i1 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -382,7 +382,7 @@  sminloc0_8_i1 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/minloc0_8_i16.c
===================================================================
--- libgfortran/generated/minloc0_8_i16.c	(revision 261075)
+++ libgfortran/generated/minloc0_8_i16.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_8_i16 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mminloc0_8_i16 (gfc_array_i8 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -382,7 +382,7 @@  sminloc0_8_i16 (gfc_array_i8 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/minloc0_8_i2.c
===================================================================
--- libgfortran/generated/minloc0_8_i2.c	(revision 261075)
+++ libgfortran/generated/minloc0_8_i2.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_8_i2 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mminloc0_8_i2 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -382,7 +382,7 @@  sminloc0_8_i2 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/minloc0_8_i4.c
===================================================================
--- libgfortran/generated/minloc0_8_i4.c	(revision 261075)
+++ libgfortran/generated/minloc0_8_i4.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_8_i4 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mminloc0_8_i4 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -382,7 +382,7 @@  sminloc0_8_i4 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/minloc0_8_i8.c
===================================================================
--- libgfortran/generated/minloc0_8_i8.c	(revision 261075)
+++ libgfortran/generated/minloc0_8_i8.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_8_i8 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mminloc0_8_i8 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -382,7 +382,7 @@  sminloc0_8_i8 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/minloc0_8_r10.c
===================================================================
--- libgfortran/generated/minloc0_8_r10.c	(revision 261075)
+++ libgfortran/generated/minloc0_8_r10.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_8_r10 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mminloc0_8_r10 (gfc_array_i8 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -382,7 +382,7 @@  sminloc0_8_r10 (gfc_array_i8 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/minloc0_8_r16.c
===================================================================
--- libgfortran/generated/minloc0_8_r16.c	(revision 261075)
+++ libgfortran/generated/minloc0_8_r16.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_8_r16 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mminloc0_8_r16 (gfc_array_i8 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -382,7 +382,7 @@  sminloc0_8_r16 (gfc_array_i8 * const restrict retarray
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/minloc0_8_r4.c
===================================================================
--- libgfortran/generated/minloc0_8_r4.c	(revision 261075)
+++ libgfortran/generated/minloc0_8_r4.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_8_r4 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mminloc0_8_r4 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -382,7 +382,7 @@  sminloc0_8_r4 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/minloc0_8_r8.c
===================================================================
--- libgfortran/generated/minloc0_8_r8.c	(revision 261075)
+++ libgfortran/generated/minloc0_8_r8.c	(working copy)
@@ -54,7 +54,7 @@  minloc0_8_r8 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -205,7 +205,7 @@  mminloc0_8_r8 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -382,7 +382,7 @@  sminloc0_8_r8 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/minloc0_8_s1.c
===================================================================
--- libgfortran/generated/minloc0_8_s1.c	(revision 261075)
+++ libgfortran/generated/minloc0_8_s1.c	(working copy)
@@ -68,7 +68,7 @@  minloc0_8_s1 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -181,7 +181,7 @@  mminloc0_8_s1 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -322,7 +322,7 @@  sminloc0_8_s1 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/minloc0_8_s4.c
===================================================================
--- libgfortran/generated/minloc0_8_s4.c	(revision 261075)
+++ libgfortran/generated/minloc0_8_s4.c	(working copy)
@@ -68,7 +68,7 @@  minloc0_8_s4 (gfc_array_i8 * const restrict retarray, 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -181,7 +181,7 @@  mminloc0_8_s4 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
@@ -322,7 +322,7 @@  sminloc0_8_s4 (gfc_array_i8 * const restrict retarray,
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (GFC_INTEGER_8));
     }
Index: libgfortran/generated/minloc1_16_i1.c
===================================================================
--- libgfortran/generated/minloc1_16_i1.c	(revision 261075)
+++ libgfortran/generated/minloc1_16_i1.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_16_i1 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_16_i1 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_16_i1 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_16_i16.c
===================================================================
--- libgfortran/generated/minloc1_16_i16.c	(revision 261075)
+++ libgfortran/generated/minloc1_16_i16.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_16_i16 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_16_i16 (gfc_array_i16 * const restrict retarr
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_16_i16 (gfc_array_i16 * const restrict retarr
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_16_i2.c
===================================================================
--- libgfortran/generated/minloc1_16_i2.c	(revision 261075)
+++ libgfortran/generated/minloc1_16_i2.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_16_i2 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_16_i2 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_16_i2 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_16_i4.c
===================================================================
--- libgfortran/generated/minloc1_16_i4.c	(revision 261075)
+++ libgfortran/generated/minloc1_16_i4.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_16_i4 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_16_i4 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_16_i4 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_16_i8.c
===================================================================
--- libgfortran/generated/minloc1_16_i8.c	(revision 261075)
+++ libgfortran/generated/minloc1_16_i8.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_16_i8 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_16_i8 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_16_i8 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_16_r10.c
===================================================================
--- libgfortran/generated/minloc1_16_r10.c	(revision 261075)
+++ libgfortran/generated/minloc1_16_r10.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_16_r10 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_16_r10 (gfc_array_i16 * const restrict retarr
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_16_r10 (gfc_array_i16 * const restrict retarr
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_16_r16.c
===================================================================
--- libgfortran/generated/minloc1_16_r16.c	(revision 261075)
+++ libgfortran/generated/minloc1_16_r16.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_16_r16 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_16_r16 (gfc_array_i16 * const restrict retarr
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_16_r16 (gfc_array_i16 * const restrict retarr
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_16_r4.c
===================================================================
--- libgfortran/generated/minloc1_16_r4.c	(revision 261075)
+++ libgfortran/generated/minloc1_16_r4.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_16_r4 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_16_r4 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_16_r4 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_16_r8.c
===================================================================
--- libgfortran/generated/minloc1_16_r8.c	(revision 261075)
+++ libgfortran/generated/minloc1_16_r8.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_16_r8 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_16_r8 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_16_r8 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_16_s1.c
===================================================================
--- libgfortran/generated/minloc1_16_s1.c	(revision 261075)
+++ libgfortran/generated/minloc1_16_s1.c	(working copy)
@@ -115,7 +115,7 @@  minloc1_16_s1 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -310,7 +310,7 @@  mminloc1_16_s1 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -489,7 +489,7 @@  sminloc1_16_s1 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_16_s4.c
===================================================================
--- libgfortran/generated/minloc1_16_s4.c	(revision 261075)
+++ libgfortran/generated/minloc1_16_s4.c	(working copy)
@@ -115,7 +115,7 @@  minloc1_16_s4 (gfc_array_i16 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -310,7 +310,7 @@  mminloc1_16_s4 (gfc_array_i16 * const restrict retarra
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -489,7 +489,7 @@  sminloc1_16_s4 (gfc_array_i16 * const restrict retarra
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_4_i1.c
===================================================================
--- libgfortran/generated/minloc1_4_i1.c	(revision 261075)
+++ libgfortran/generated/minloc1_4_i1.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_4_i1 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_4_i1 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_4_i1 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_4_i16.c
===================================================================
--- libgfortran/generated/minloc1_4_i16.c	(revision 261075)
+++ libgfortran/generated/minloc1_4_i16.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_4_i16 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_4_i16 (gfc_array_i4 * const restrict retarray
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_4_i16 (gfc_array_i4 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_4_i2.c
===================================================================
--- libgfortran/generated/minloc1_4_i2.c	(revision 261075)
+++ libgfortran/generated/minloc1_4_i2.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_4_i2 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_4_i2 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_4_i2 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_4_i4.c
===================================================================
--- libgfortran/generated/minloc1_4_i4.c	(revision 261075)
+++ libgfortran/generated/minloc1_4_i4.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_4_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_4_i4 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_4_i4 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_4_i8.c
===================================================================
--- libgfortran/generated/minloc1_4_i8.c	(revision 261075)
+++ libgfortran/generated/minloc1_4_i8.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_4_i8 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_4_i8 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_4_i8 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_4_r10.c
===================================================================
--- libgfortran/generated/minloc1_4_r10.c	(revision 261075)
+++ libgfortran/generated/minloc1_4_r10.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_4_r10 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_4_r10 (gfc_array_i4 * const restrict retarray
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_4_r10 (gfc_array_i4 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_4_r16.c
===================================================================
--- libgfortran/generated/minloc1_4_r16.c	(revision 261075)
+++ libgfortran/generated/minloc1_4_r16.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_4_r16 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_4_r16 (gfc_array_i4 * const restrict retarray
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_4_r16 (gfc_array_i4 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_4_r4.c
===================================================================
--- libgfortran/generated/minloc1_4_r4.c	(revision 261075)
+++ libgfortran/generated/minloc1_4_r4.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_4_r4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_4_r4 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_4_r4 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_4_r8.c
===================================================================
--- libgfortran/generated/minloc1_4_r8.c	(revision 261075)
+++ libgfortran/generated/minloc1_4_r8.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_4_r8 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_4_r8 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_4_r8 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_4_s1.c
===================================================================
--- libgfortran/generated/minloc1_4_s1.c	(revision 261075)
+++ libgfortran/generated/minloc1_4_s1.c	(working copy)
@@ -115,7 +115,7 @@  minloc1_4_s1 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -310,7 +310,7 @@  mminloc1_4_s1 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -489,7 +489,7 @@  sminloc1_4_s1 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_4_s4.c
===================================================================
--- libgfortran/generated/minloc1_4_s4.c	(revision 261075)
+++ libgfortran/generated/minloc1_4_s4.c	(working copy)
@@ -115,7 +115,7 @@  minloc1_4_s4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -310,7 +310,7 @@  mminloc1_4_s4 (gfc_array_i4 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -489,7 +489,7 @@  sminloc1_4_s4 (gfc_array_i4 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_8_i1.c
===================================================================
--- libgfortran/generated/minloc1_8_i1.c	(revision 261075)
+++ libgfortran/generated/minloc1_8_i1.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_8_i1 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_8_i1 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_8_i1 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_8_i16.c
===================================================================
--- libgfortran/generated/minloc1_8_i16.c	(revision 261075)
+++ libgfortran/generated/minloc1_8_i16.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_8_i16 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_8_i16 (gfc_array_i8 * const restrict retarray
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_8_i16 (gfc_array_i8 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_8_i2.c
===================================================================
--- libgfortran/generated/minloc1_8_i2.c	(revision 261075)
+++ libgfortran/generated/minloc1_8_i2.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_8_i2 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_8_i2 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_8_i2 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_8_i4.c
===================================================================
--- libgfortran/generated/minloc1_8_i4.c	(revision 261075)
+++ libgfortran/generated/minloc1_8_i4.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_8_i4 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_8_i4 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_8_i4 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_8_i8.c
===================================================================
--- libgfortran/generated/minloc1_8_i8.c	(revision 261075)
+++ libgfortran/generated/minloc1_8_i8.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_8_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_8_i8 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_8_i8 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_8_r10.c
===================================================================
--- libgfortran/generated/minloc1_8_r10.c	(revision 261075)
+++ libgfortran/generated/minloc1_8_r10.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_8_r10 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_8_r10 (gfc_array_i8 * const restrict retarray
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_8_r10 (gfc_array_i8 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_8_r16.c
===================================================================
--- libgfortran/generated/minloc1_8_r16.c	(revision 261075)
+++ libgfortran/generated/minloc1_8_r16.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_8_r16 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_8_r16 (gfc_array_i8 * const restrict retarray
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_8_r16 (gfc_array_i8 * const restrict retarray
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_8_r4.c
===================================================================
--- libgfortran/generated/minloc1_8_r4.c	(revision 261075)
+++ libgfortran/generated/minloc1_8_r4.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_8_r4 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_8_r4 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_8_r4 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_8_r8.c
===================================================================
--- libgfortran/generated/minloc1_8_r8.c	(revision 261075)
+++ libgfortran/generated/minloc1_8_r8.c	(working copy)
@@ -103,7 +103,7 @@  minloc1_8_r8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -327,7 +327,7 @@  mminloc1_8_r8 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -533,7 +533,7 @@  sminloc1_8_r8 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_8_s1.c
===================================================================
--- libgfortran/generated/minloc1_8_s1.c	(revision 261075)
+++ libgfortran/generated/minloc1_8_s1.c	(working copy)
@@ -115,7 +115,7 @@  minloc1_8_s1 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -310,7 +310,7 @@  mminloc1_8_s1 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -489,7 +489,7 @@  sminloc1_8_s1 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minloc1_8_s4.c
===================================================================
--- libgfortran/generated/minloc1_8_s4.c	(revision 261075)
+++ libgfortran/generated/minloc1_8_s4.c	(working copy)
@@ -115,7 +115,7 @@  minloc1_8_s4 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -310,7 +310,7 @@  mminloc1_8_s4 (gfc_array_i8 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -489,7 +489,7 @@  sminloc1_8_s4 (gfc_array_i8 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minval1_s1.c
===================================================================
--- libgfortran/generated/minval1_s1.c	(revision 261075)
+++ libgfortran/generated/minval1_s1.c	(working copy)
@@ -114,7 +114,7 @@  minval1_s1 (gfc_array_s1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]
       		 * string_len;
@@ -310,7 +310,7 @@  mminval1_s1 (gfc_array_s1 * const restrict retarray, 
       		 * string_len;
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -485,7 +485,7 @@  sminval1_s1 (gfc_array_s1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]
       		 * string_len;
Index: libgfortran/generated/minval1_s4.c
===================================================================
--- libgfortran/generated/minval1_s4.c	(revision 261075)
+++ libgfortran/generated/minval1_s4.c	(working copy)
@@ -114,7 +114,7 @@  minval1_s4 (gfc_array_s4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]
       		 * string_len;
@@ -310,7 +310,7 @@  mminval1_s4 (gfc_array_s4 * const restrict retarray, 
       		 * string_len;
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -485,7 +485,7 @@  sminval1_s4 (gfc_array_s4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]
       		 * string_len;
Index: libgfortran/generated/minval_i1.c
===================================================================
--- libgfortran/generated/minval_i1.c	(revision 261075)
+++ libgfortran/generated/minval_i1.c	(working copy)
@@ -100,7 +100,7 @@  minval_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mminval_i1 (gfc_array_i1 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  sminval_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minval_i16.c
===================================================================
--- libgfortran/generated/minval_i16.c	(revision 261075)
+++ libgfortran/generated/minval_i16.c	(working copy)
@@ -100,7 +100,7 @@  minval_i16 (gfc_array_i16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mminval_i16 (gfc_array_i16 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  sminval_i16 (gfc_array_i16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minval_i2.c
===================================================================
--- libgfortran/generated/minval_i2.c	(revision 261075)
+++ libgfortran/generated/minval_i2.c	(working copy)
@@ -100,7 +100,7 @@  minval_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mminval_i2 (gfc_array_i2 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  sminval_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minval_i4.c
===================================================================
--- libgfortran/generated/minval_i4.c	(revision 261075)
+++ libgfortran/generated/minval_i4.c	(working copy)
@@ -100,7 +100,7 @@  minval_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mminval_i4 (gfc_array_i4 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  sminval_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minval_i8.c
===================================================================
--- libgfortran/generated/minval_i8.c	(revision 261075)
+++ libgfortran/generated/minval_i8.c	(working copy)
@@ -100,7 +100,7 @@  minval_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mminval_i8 (gfc_array_i8 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  sminval_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minval_r10.c
===================================================================
--- libgfortran/generated/minval_r10.c	(revision 261075)
+++ libgfortran/generated/minval_r10.c	(working copy)
@@ -100,7 +100,7 @@  minval_r10 (gfc_array_r10 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mminval_r10 (gfc_array_r10 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  sminval_r10 (gfc_array_r10 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minval_r16.c
===================================================================
--- libgfortran/generated/minval_r16.c	(revision 261075)
+++ libgfortran/generated/minval_r16.c	(working copy)
@@ -100,7 +100,7 @@  minval_r16 (gfc_array_r16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mminval_r16 (gfc_array_r16 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  sminval_r16 (gfc_array_r16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minval_r4.c
===================================================================
--- libgfortran/generated/minval_r4.c	(revision 261075)
+++ libgfortran/generated/minval_r4.c	(working copy)
@@ -100,7 +100,7 @@  minval_r4 (gfc_array_r4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mminval_r4 (gfc_array_r4 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  sminval_r4 (gfc_array_r4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/minval_r8.c
===================================================================
--- libgfortran/generated/minval_r8.c	(revision 261075)
+++ libgfortran/generated/minval_r8.c	(working copy)
@@ -100,7 +100,7 @@  minval_r8 (gfc_array_r8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -303,7 +303,7 @@  mminval_r8 (gfc_array_r8 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -494,7 +494,7 @@  sminval_r8 (gfc_array_r8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/norm2_r10.c
===================================================================
--- libgfortran/generated/norm2_r10.c	(revision 261075)
+++ libgfortran/generated/norm2_r10.c	(working copy)
@@ -103,7 +103,7 @@  norm2_r10 (gfc_array_r10 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/norm2_r16.c
===================================================================
--- libgfortran/generated/norm2_r16.c	(revision 261075)
+++ libgfortran/generated/norm2_r16.c	(working copy)
@@ -107,7 +107,7 @@  norm2_r16 (gfc_array_r16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/norm2_r4.c
===================================================================
--- libgfortran/generated/norm2_r4.c	(revision 261075)
+++ libgfortran/generated/norm2_r4.c	(working copy)
@@ -103,7 +103,7 @@  norm2_r4 (gfc_array_r4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/norm2_r8.c
===================================================================
--- libgfortran/generated/norm2_r8.c	(revision 261075)
+++ libgfortran/generated/norm2_r8.c	(working copy)
@@ -103,7 +103,7 @@  norm2_r8 (gfc_array_r8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/parity_l1.c
===================================================================
--- libgfortran/generated/parity_l1.c	(revision 261075)
+++ libgfortran/generated/parity_l1.c	(working copy)
@@ -100,7 +100,7 @@  parity_l1 (gfc_array_l1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/parity_l16.c
===================================================================
--- libgfortran/generated/parity_l16.c	(revision 261075)
+++ libgfortran/generated/parity_l16.c	(working copy)
@@ -100,7 +100,7 @@  parity_l16 (gfc_array_l16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/parity_l2.c
===================================================================
--- libgfortran/generated/parity_l2.c	(revision 261075)
+++ libgfortran/generated/parity_l2.c	(working copy)
@@ -100,7 +100,7 @@  parity_l2 (gfc_array_l2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/parity_l4.c
===================================================================
--- libgfortran/generated/parity_l4.c	(revision 261075)
+++ libgfortran/generated/parity_l4.c	(working copy)
@@ -100,7 +100,7 @@  parity_l4 (gfc_array_l4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/parity_l8.c
===================================================================
--- libgfortran/generated/parity_l8.c	(revision 261075)
+++ libgfortran/generated/parity_l8.c	(working copy)
@@ -100,7 +100,7 @@  parity_l8 (gfc_array_l8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/product_c10.c
===================================================================
--- libgfortran/generated/product_c10.c	(revision 261075)
+++ libgfortran/generated/product_c10.c	(working copy)
@@ -100,7 +100,7 @@  product_c10 (gfc_array_c10 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  mproduct_c10 (gfc_array_c10 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  sproduct_c10 (gfc_array_c10 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/product_c16.c
===================================================================
--- libgfortran/generated/product_c16.c	(revision 261075)
+++ libgfortran/generated/product_c16.c	(working copy)
@@ -100,7 +100,7 @@  product_c16 (gfc_array_c16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  mproduct_c16 (gfc_array_c16 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  sproduct_c16 (gfc_array_c16 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/product_c4.c
===================================================================
--- libgfortran/generated/product_c4.c	(revision 261075)
+++ libgfortran/generated/product_c4.c	(working copy)
@@ -100,7 +100,7 @@  product_c4 (gfc_array_c4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  mproduct_c4 (gfc_array_c4 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  sproduct_c4 (gfc_array_c4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/product_c8.c
===================================================================
--- libgfortran/generated/product_c8.c	(revision 261075)
+++ libgfortran/generated/product_c8.c	(working copy)
@@ -100,7 +100,7 @@  product_c8 (gfc_array_c8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  mproduct_c8 (gfc_array_c8 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  sproduct_c8 (gfc_array_c8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/product_i1.c
===================================================================
--- libgfortran/generated/product_i1.c	(revision 261075)
+++ libgfortran/generated/product_i1.c	(working copy)
@@ -100,7 +100,7 @@  product_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  mproduct_i1 (gfc_array_i1 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  sproduct_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/product_i16.c
===================================================================
--- libgfortran/generated/product_i16.c	(revision 261075)
+++ libgfortran/generated/product_i16.c	(working copy)
@@ -100,7 +100,7 @@  product_i16 (gfc_array_i16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  mproduct_i16 (gfc_array_i16 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  sproduct_i16 (gfc_array_i16 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/product_i2.c
===================================================================
--- libgfortran/generated/product_i2.c	(revision 261075)
+++ libgfortran/generated/product_i2.c	(working copy)
@@ -100,7 +100,7 @@  product_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  mproduct_i2 (gfc_array_i2 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  sproduct_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/product_i4.c
===================================================================
--- libgfortran/generated/product_i4.c	(revision 261075)
+++ libgfortran/generated/product_i4.c	(working copy)
@@ -100,7 +100,7 @@  product_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  mproduct_i4 (gfc_array_i4 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  sproduct_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/product_i8.c
===================================================================
--- libgfortran/generated/product_i8.c	(revision 261075)
+++ libgfortran/generated/product_i8.c	(working copy)
@@ -100,7 +100,7 @@  product_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  mproduct_i8 (gfc_array_i8 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  sproduct_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/product_r10.c
===================================================================
--- libgfortran/generated/product_r10.c	(revision 261075)
+++ libgfortran/generated/product_r10.c	(working copy)
@@ -100,7 +100,7 @@  product_r10 (gfc_array_r10 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  mproduct_r10 (gfc_array_r10 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  sproduct_r10 (gfc_array_r10 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/product_r16.c
===================================================================
--- libgfortran/generated/product_r16.c	(revision 261075)
+++ libgfortran/generated/product_r16.c	(working copy)
@@ -100,7 +100,7 @@  product_r16 (gfc_array_r16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  mproduct_r16 (gfc_array_r16 * const restrict retarray,
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  sproduct_r16 (gfc_array_r16 * const restrict retarray,
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/product_r4.c
===================================================================
--- libgfortran/generated/product_r4.c	(revision 261075)
+++ libgfortran/generated/product_r4.c	(working copy)
@@ -100,7 +100,7 @@  product_r4 (gfc_array_r4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  mproduct_r4 (gfc_array_r4 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  sproduct_r4 (gfc_array_r4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/product_r8.c
===================================================================
--- libgfortran/generated/product_r8.c	(revision 261075)
+++ libgfortran/generated/product_r8.c	(working copy)
@@ -100,7 +100,7 @@  product_r8 (gfc_array_r8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  mproduct_r8 (gfc_array_r8 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  sproduct_r8 (gfc_array_r8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/reshape_c10.c
===================================================================
--- libgfortran/generated/reshape_c10.c	(revision 261075)
+++ libgfortran/generated/reshape_c10.c	(working copy)
@@ -116,7 +116,7 @@  reshape_c10 (gfc_array_c10 * const restrict ret, 
         alloc_size = rs;
 
       ret->base_addr = xmallocarray (alloc_size, sizeof (GFC_COMPLEX_10));
-      GFC_DTYPE_COPY_SETRANK(ret,source,rdim);
+      ret->dtype.rank = rdim;
     }
 
   if (shape_empty)
Index: libgfortran/generated/reshape_c16.c
===================================================================
--- libgfortran/generated/reshape_c16.c	(revision 261075)
+++ libgfortran/generated/reshape_c16.c	(working copy)
@@ -116,7 +116,7 @@  reshape_c16 (gfc_array_c16 * const restrict ret, 
         alloc_size = rs;
 
       ret->base_addr = xmallocarray (alloc_size, sizeof (GFC_COMPLEX_16));
-      GFC_DTYPE_COPY_SETRANK(ret,source,rdim);
+      ret->dtype.rank = rdim;
     }
 
   if (shape_empty)
Index: libgfortran/generated/reshape_c4.c
===================================================================
--- libgfortran/generated/reshape_c4.c	(revision 261075)
+++ libgfortran/generated/reshape_c4.c	(working copy)
@@ -116,7 +116,7 @@  reshape_c4 (gfc_array_c4 * const restrict ret, 
         alloc_size = rs;
 
       ret->base_addr = xmallocarray (alloc_size, sizeof (GFC_COMPLEX_4));
-      GFC_DTYPE_COPY_SETRANK(ret,source,rdim);
+      ret->dtype.rank = rdim;
     }
 
   if (shape_empty)
Index: libgfortran/generated/reshape_c8.c
===================================================================
--- libgfortran/generated/reshape_c8.c	(revision 261075)
+++ libgfortran/generated/reshape_c8.c	(working copy)
@@ -116,7 +116,7 @@  reshape_c8 (gfc_array_c8 * const restrict ret, 
         alloc_size = rs;
 
       ret->base_addr = xmallocarray (alloc_size, sizeof (GFC_COMPLEX_8));
-      GFC_DTYPE_COPY_SETRANK(ret,source,rdim);
+      ret->dtype.rank = rdim;
     }
 
   if (shape_empty)
Index: libgfortran/generated/reshape_i16.c
===================================================================
--- libgfortran/generated/reshape_i16.c	(revision 261075)
+++ libgfortran/generated/reshape_i16.c	(working copy)
@@ -116,7 +116,7 @@  reshape_16 (gfc_array_i16 * const restrict ret, 
         alloc_size = rs;
 
       ret->base_addr = xmallocarray (alloc_size, sizeof (GFC_INTEGER_16));
-      GFC_DTYPE_COPY_SETRANK(ret,source,rdim);
+      ret->dtype.rank = rdim;
     }
 
   if (shape_empty)
Index: libgfortran/generated/reshape_i4.c
===================================================================
--- libgfortran/generated/reshape_i4.c	(revision 261075)
+++ libgfortran/generated/reshape_i4.c	(working copy)
@@ -116,7 +116,7 @@  reshape_4 (gfc_array_i4 * const restrict ret, 
         alloc_size = rs;
 
       ret->base_addr = xmallocarray (alloc_size, sizeof (GFC_INTEGER_4));
-      GFC_DTYPE_COPY_SETRANK(ret,source,rdim);
+      ret->dtype.rank = rdim;
     }
 
   if (shape_empty)
Index: libgfortran/generated/reshape_i8.c
===================================================================
--- libgfortran/generated/reshape_i8.c	(revision 261075)
+++ libgfortran/generated/reshape_i8.c	(working copy)
@@ -116,7 +116,7 @@  reshape_8 (gfc_array_i8 * const restrict ret, 
         alloc_size = rs;
 
       ret->base_addr = xmallocarray (alloc_size, sizeof (GFC_INTEGER_8));
-      GFC_DTYPE_COPY_SETRANK(ret,source,rdim);
+      ret->dtype.rank = rdim;
     }
 
   if (shape_empty)
Index: libgfortran/generated/reshape_r10.c
===================================================================
--- libgfortran/generated/reshape_r10.c	(revision 261075)
+++ libgfortran/generated/reshape_r10.c	(working copy)
@@ -116,7 +116,7 @@  reshape_r10 (gfc_array_r10 * const restrict ret, 
         alloc_size = rs;
 
       ret->base_addr = xmallocarray (alloc_size, sizeof (GFC_REAL_10));
-      GFC_DTYPE_COPY_SETRANK(ret,source,rdim);
+      ret->dtype.rank = rdim;
     }
 
   if (shape_empty)
Index: libgfortran/generated/reshape_r16.c
===================================================================
--- libgfortran/generated/reshape_r16.c	(revision 261075)
+++ libgfortran/generated/reshape_r16.c	(working copy)
@@ -116,7 +116,7 @@  reshape_r16 (gfc_array_r16 * const restrict ret, 
         alloc_size = rs;
 
       ret->base_addr = xmallocarray (alloc_size, sizeof (GFC_REAL_16));
-      GFC_DTYPE_COPY_SETRANK(ret,source,rdim);
+      ret->dtype.rank = rdim;
     }
 
   if (shape_empty)
Index: libgfortran/generated/reshape_r4.c
===================================================================
--- libgfortran/generated/reshape_r4.c	(revision 261075)
+++ libgfortran/generated/reshape_r4.c	(working copy)
@@ -116,7 +116,7 @@  reshape_r4 (gfc_array_r4 * const restrict ret, 
         alloc_size = rs;
 
       ret->base_addr = xmallocarray (alloc_size, sizeof (GFC_REAL_4));
-      GFC_DTYPE_COPY_SETRANK(ret,source,rdim);
+      ret->dtype.rank = rdim;
     }
 
   if (shape_empty)
Index: libgfortran/generated/reshape_r8.c
===================================================================
--- libgfortran/generated/reshape_r8.c	(revision 261075)
+++ libgfortran/generated/reshape_r8.c	(working copy)
@@ -116,7 +116,7 @@  reshape_r8 (gfc_array_r8 * const restrict ret, 
         alloc_size = rs;
 
       ret->base_addr = xmallocarray (alloc_size, sizeof (GFC_REAL_8));
-      GFC_DTYPE_COPY_SETRANK(ret,source,rdim);
+      ret->dtype.rank = rdim;
     }
 
   if (shape_empty)
Index: libgfortran/generated/spread_c10.c
===================================================================
--- libgfortran/generated/spread_c10.c	(revision 261075)
+++ libgfortran/generated/spread_c10.c	(working copy)
@@ -72,7 +72,8 @@  spread_c10 (gfc_array_c10 *ret, const gfc_array_c10 *s
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/generated/spread_c16.c
===================================================================
--- libgfortran/generated/spread_c16.c	(revision 261075)
+++ libgfortran/generated/spread_c16.c	(working copy)
@@ -72,7 +72,8 @@  spread_c16 (gfc_array_c16 *ret, const gfc_array_c16 *s
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/generated/spread_c4.c
===================================================================
--- libgfortran/generated/spread_c4.c	(revision 261075)
+++ libgfortran/generated/spread_c4.c	(working copy)
@@ -72,7 +72,8 @@  spread_c4 (gfc_array_c4 *ret, const gfc_array_c4 *sour
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/generated/spread_c8.c
===================================================================
--- libgfortran/generated/spread_c8.c	(revision 261075)
+++ libgfortran/generated/spread_c8.c	(working copy)
@@ -72,7 +72,8 @@  spread_c8 (gfc_array_c8 *ret, const gfc_array_c8 *sour
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/generated/spread_i1.c
===================================================================
--- libgfortran/generated/spread_i1.c	(revision 261075)
+++ libgfortran/generated/spread_i1.c	(working copy)
@@ -72,7 +72,8 @@  spread_i1 (gfc_array_i1 *ret, const gfc_array_i1 *sour
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/generated/spread_i16.c
===================================================================
--- libgfortran/generated/spread_i16.c	(revision 261075)
+++ libgfortran/generated/spread_i16.c	(working copy)
@@ -72,7 +72,8 @@  spread_i16 (gfc_array_i16 *ret, const gfc_array_i16 *s
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/generated/spread_i2.c
===================================================================
--- libgfortran/generated/spread_i2.c	(revision 261075)
+++ libgfortran/generated/spread_i2.c	(working copy)
@@ -72,7 +72,8 @@  spread_i2 (gfc_array_i2 *ret, const gfc_array_i2 *sour
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/generated/spread_i4.c
===================================================================
--- libgfortran/generated/spread_i4.c	(revision 261075)
+++ libgfortran/generated/spread_i4.c	(working copy)
@@ -72,7 +72,8 @@  spread_i4 (gfc_array_i4 *ret, const gfc_array_i4 *sour
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/generated/spread_i8.c
===================================================================
--- libgfortran/generated/spread_i8.c	(revision 261075)
+++ libgfortran/generated/spread_i8.c	(working copy)
@@ -72,7 +72,8 @@  spread_i8 (gfc_array_i8 *ret, const gfc_array_i8 *sour
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/generated/spread_r10.c
===================================================================
--- libgfortran/generated/spread_r10.c	(revision 261075)
+++ libgfortran/generated/spread_r10.c	(working copy)
@@ -72,7 +72,8 @@  spread_r10 (gfc_array_r10 *ret, const gfc_array_r10 *s
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/generated/spread_r16.c
===================================================================
--- libgfortran/generated/spread_r16.c	(revision 261075)
+++ libgfortran/generated/spread_r16.c	(working copy)
@@ -72,7 +72,8 @@  spread_r16 (gfc_array_r16 *ret, const gfc_array_r16 *s
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/generated/spread_r4.c
===================================================================
--- libgfortran/generated/spread_r4.c	(revision 261075)
+++ libgfortran/generated/spread_r4.c	(working copy)
@@ -72,7 +72,8 @@  spread_r4 (gfc_array_r4 *ret, const gfc_array_r4 *sour
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/generated/spread_r8.c
===================================================================
--- libgfortran/generated/spread_r8.c	(revision 261075)
+++ libgfortran/generated/spread_r8.c	(working copy)
@@ -72,7 +72,8 @@  spread_r8 (gfc_array_r8 *ret, const gfc_array_r8 *sour
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/generated/sum_c10.c
===================================================================
--- libgfortran/generated/sum_c10.c	(revision 261075)
+++ libgfortran/generated/sum_c10.c	(working copy)
@@ -100,7 +100,7 @@  sum_c10 (gfc_array_c10 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  msum_c10 (gfc_array_c10 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  ssum_c10 (gfc_array_c10 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/sum_c16.c
===================================================================
--- libgfortran/generated/sum_c16.c	(revision 261075)
+++ libgfortran/generated/sum_c16.c	(working copy)
@@ -100,7 +100,7 @@  sum_c16 (gfc_array_c16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  msum_c16 (gfc_array_c16 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  ssum_c16 (gfc_array_c16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/sum_c4.c
===================================================================
--- libgfortran/generated/sum_c4.c	(revision 261075)
+++ libgfortran/generated/sum_c4.c	(working copy)
@@ -100,7 +100,7 @@  sum_c4 (gfc_array_c4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  msum_c4 (gfc_array_c4 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  ssum_c4 (gfc_array_c4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/sum_c8.c
===================================================================
--- libgfortran/generated/sum_c8.c	(revision 261075)
+++ libgfortran/generated/sum_c8.c	(working copy)
@@ -100,7 +100,7 @@  sum_c8 (gfc_array_c8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  msum_c8 (gfc_array_c8 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  ssum_c8 (gfc_array_c8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/sum_i1.c
===================================================================
--- libgfortran/generated/sum_i1.c	(revision 261075)
+++ libgfortran/generated/sum_i1.c	(working copy)
@@ -100,7 +100,7 @@  sum_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  msum_i1 (gfc_array_i1 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  ssum_i1 (gfc_array_i1 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/sum_i16.c
===================================================================
--- libgfortran/generated/sum_i16.c	(revision 261075)
+++ libgfortran/generated/sum_i16.c	(working copy)
@@ -100,7 +100,7 @@  sum_i16 (gfc_array_i16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  msum_i16 (gfc_array_i16 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  ssum_i16 (gfc_array_i16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/sum_i2.c
===================================================================
--- libgfortran/generated/sum_i2.c	(revision 261075)
+++ libgfortran/generated/sum_i2.c	(working copy)
@@ -100,7 +100,7 @@  sum_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  msum_i2 (gfc_array_i2 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  ssum_i2 (gfc_array_i2 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/sum_i4.c
===================================================================
--- libgfortran/generated/sum_i4.c	(revision 261075)
+++ libgfortran/generated/sum_i4.c	(working copy)
@@ -100,7 +100,7 @@  sum_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  msum_i4 (gfc_array_i4 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  ssum_i4 (gfc_array_i4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/sum_i8.c
===================================================================
--- libgfortran/generated/sum_i8.c	(revision 261075)
+++ libgfortran/generated/sum_i8.c	(working copy)
@@ -100,7 +100,7 @@  sum_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  msum_i8 (gfc_array_i8 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  ssum_i8 (gfc_array_i8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/sum_r10.c
===================================================================
--- libgfortran/generated/sum_r10.c	(revision 261075)
+++ libgfortran/generated/sum_r10.c	(working copy)
@@ -100,7 +100,7 @@  sum_r10 (gfc_array_r10 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  msum_r10 (gfc_array_r10 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  ssum_r10 (gfc_array_r10 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/sum_r16.c
===================================================================
--- libgfortran/generated/sum_r16.c	(revision 261075)
+++ libgfortran/generated/sum_r16.c	(working copy)
@@ -100,7 +100,7 @@  sum_r16 (gfc_array_r16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  msum_r16 (gfc_array_r16 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  ssum_r16 (gfc_array_r16 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/sum_r4.c
===================================================================
--- libgfortran/generated/sum_r4.c	(revision 261075)
+++ libgfortran/generated/sum_r4.c	(working copy)
@@ -100,7 +100,7 @@  sum_r4 (gfc_array_r4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  msum_r4 (gfc_array_r4 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  ssum_r4 (gfc_array_r4 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/generated/sum_r8.c
===================================================================
--- libgfortran/generated/sum_r8.c	(revision 261075)
+++ libgfortran/generated/sum_r8.c	(working copy)
@@ -100,7 +100,7 @@  sum_r8 (gfc_array_r8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -289,7 +289,7 @@  msum_r8 (gfc_array_r8 * const restrict retarray, 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -452,7 +452,7 @@  ssum_r8 (gfc_array_r8 * const restrict retarray, 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/intrinsics/reshape_generic.c
===================================================================
--- libgfortran/intrinsics/reshape_generic.c	(revision 261075)
+++ libgfortran/intrinsics/reshape_generic.c	(working copy)
@@ -106,8 +106,7 @@  reshape_internal (parray *ret, parray *source, shape_t
 	alloc_size = rs;
 
       ret->base_addr = xmallocarray (alloc_size, size);
-
-      GFC_DTYPE_COPY_SETRANK(ret,source,rdim);
+      ret->dtype.rank = rdim;
     }
 
   if (shape_empty)
Index: libgfortran/intrinsics/spread_generic.c
===================================================================
--- libgfortran/intrinsics/spread_generic.c	(revision 261075)
+++ libgfortran/intrinsics/spread_generic.c	(working copy)
@@ -71,7 +71,8 @@  spread_internal (gfc_array_char *ret, const gfc_array_
 
       size_t ub, stride;
 
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)
Index: libgfortran/libgfortran.h
===================================================================
--- libgfortran/libgfortran.h	(revision 261075)
+++ libgfortran/libgfortran.h	(working copy)
@@ -439,11 +439,6 @@  typedef GFC_FULL_ARRAY_DESCRIPTOR (GFC_MAX_DIMENSIONS,
 /* Macros to set size and type information.  */
 
 #define GFC_DTYPE_COPY(a,b) do { (a)->dtype = (b)->dtype; } while(0)
-#define GFC_DTYPE_COPY_SETRANK(a,b,n) \
-  do { \
-  (a)->dtype.rank = ((b)->dtype.rank | n ); \
-  } while (0)
-
 #define GFC_DTYPE_IS_UNSET(a) (unlikely((a)->dtype.elem_len == 0))
 #define GFC_DTYPE_CLEAR(a) do { (a)->dtype.elem_len = 0; \
 				(a)->dtype.version = 0; \
Index: libgfortran/m4/iforeach-s.m4
===================================================================
--- libgfortran/m4/iforeach-s.m4	(revision 261075)
+++ libgfortran/m4/iforeach-s.m4	(working copy)
@@ -37,7 +37,7 @@  name`'rtype_qual`_'atype_code` ('rtype` * const restri
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (rtype_name));
     }
@@ -142,7 +142,7 @@  m'name`'rtype_qual`_'atype_code` ('rtype` * const rest
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (rtype_name));
     }
@@ -279,7 +279,7 @@  void
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (rtype_name));
     }
Index: libgfortran/m4/iforeach.m4
===================================================================
--- libgfortran/m4/iforeach.m4	(revision 261075)
+++ libgfortran/m4/iforeach.m4	(working copy)
@@ -28,7 +28,7 @@  name`'rtype_qual`_'atype_code (rtype * const restrict 
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (rtype_name));
     }
@@ -130,7 +130,7 @@  void
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank - 1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (rtype_name));
     }
@@ -261,7 +261,7 @@  void
   if (retarray->base_addr == NULL)
     {
       GFC_DIMENSION_SET(retarray->dim[0], 0, rank-1, 1);
-      GFC_DTYPE_COPY_SETRANK(retarray,retarray,1);
+      retarray->dtype.rank = 1;
       retarray->offset = 0;
       retarray->base_addr = xmallocarray (rank, sizeof (rtype_name));
     }
Index: libgfortran/m4/ifunction-s.m4
===================================================================
--- libgfortran/m4/ifunction-s.m4	(revision 261075)
+++ libgfortran/m4/ifunction-s.m4	(working copy)
@@ -103,7 +103,7 @@  void
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -291,7 +291,7 @@  m'name`'rtype_qual`_'atype_code` ('rtype` * const rest
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -453,7 +453,7 @@  s'name`'rtype_qual`_'atype_code` ('rtype` * const rest
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/m4/ifunction-s2.m4
===================================================================
--- libgfortran/m4/ifunction-s2.m4	(revision 261075)
+++ libgfortran/m4/ifunction-s2.m4	(working copy)
@@ -104,7 +104,7 @@  name`'rtype_qual`_'atype_code (rtype * const restrict 
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]
       		 * string_len;
@@ -296,7 +296,7 @@  void
       		 * string_len;
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -457,7 +457,7 @@  void
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1]
       		 * string_len;
Index: libgfortran/m4/ifunction.m4
===================================================================
--- libgfortran/m4/ifunction.m4	(revision 261075)
+++ libgfortran/m4/ifunction.m4	(working copy)
@@ -90,7 +90,7 @@  name`'rtype_qual`_'atype_code` ('rtype` * const restri
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
@@ -279,7 +279,7 @@  m'name`'rtype_qual`_'atype_code` ('rtype` * const rest
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       if (alloc_size == 0)
 	{
@@ -441,7 +441,7 @@  void
 	}
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/m4/ifunction_logical.m4
===================================================================
--- libgfortran/m4/ifunction_logical.m4	(revision 261075)
+++ libgfortran/m4/ifunction_logical.m4	(working copy)
@@ -87,7 +87,7 @@  name`'rtype_qual`_'atype_code (rtype * const restrict 
         }
 
       retarray->offset = 0;
-      GFC_DTYPE_COPY_SETRANK(retarray,array,rank);
+      retarray->dtype.rank = rank;
 
       alloc_size = GFC_DESCRIPTOR_STRIDE(retarray,rank-1) * extent[rank-1];
 
Index: libgfortran/m4/reshape.m4
===================================================================
--- libgfortran/m4/reshape.m4	(revision 261075)
+++ libgfortran/m4/reshape.m4	(working copy)
@@ -120,7 +120,7 @@  reshape_'rtype_ccode` ('rtype` * const restrict ret, 
         alloc_size = rs;
 
       ret->base_addr = xmallocarray (alloc_size, sizeof ('rtype_name`));
-      GFC_DTYPE_COPY_SETRANK(ret,source,rdim);
+      ret->dtype.rank = rdim;
     }
 
   if (shape_empty)
Index: libgfortran/m4/spread.m4
===================================================================
--- libgfortran/m4/spread.m4	(revision 261075)
+++ libgfortran/m4/spread.m4	(working copy)
@@ -73,7 +73,8 @@  spread_'rtype_code` ('rtype` *ret, const 'rtype` *sour
 
       /* The front end has signalled that we need to populate the
 	 return array descriptor.  */
-      GFC_DTYPE_COPY_SETRANK(ret,source,rrank);
+      ret->dtype.rank = rrank;
+
       dim = 0;
       rs = 1;
       for (n = 0; n < rrank; n++)