]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - libgfortran/intrinsics/unpack_generic.c
re PR fortran/37577 ([meta-bug] change internal array descriptor format for better...
[thirdparty/gcc.git] / libgfortran / intrinsics / unpack_generic.c
index 86e1253a5c1c7689f958db31c1d3397359f84fed..c5b9ecb051984890c134e075e46fc599a7a9099e 100644 (file)
@@ -222,7 +222,6 @@ unpack1 (gfc_array_char *ret, const gfc_array_char *vector,
     {
     case GFC_DTYPE_LOGICAL_1:
     case GFC_DTYPE_INTEGER_1:
-    case GFC_DTYPE_DERIVED_1:
       unpack1_i1 ((gfc_array_i1 *) ret, (gfc_array_i1 *) vector,
                  mask, (gfc_array_i1 *) field);
       return;
@@ -317,7 +316,16 @@ unpack1 (gfc_array_char *ret, const gfc_array_char *vector,
 # endif
 #endif
 
-    case GFC_DTYPE_DERIVED_2:
+    }
+
+  switch (GFC_DESCRIPTOR_SIZE(ret))
+    {
+    case 1:
+      unpack1_i1 ((gfc_array_i1 *) ret, (gfc_array_i1 *) vector,
+                 mask, (gfc_array_i1 *) field);
+      return;
+
+    case 2:
       if (GFC_UNALIGNED_2(ret->base_addr) || GFC_UNALIGNED_2(vector->base_addr)
          || GFC_UNALIGNED_2(field->base_addr))
        break;
@@ -328,7 +336,7 @@ unpack1 (gfc_array_char *ret, const gfc_array_char *vector,
          return;
        }
 
-    case GFC_DTYPE_DERIVED_4:
+    case 4:
       if (GFC_UNALIGNED_4(ret->base_addr) || GFC_UNALIGNED_4(vector->base_addr)
          || GFC_UNALIGNED_4(field->base_addr))
        break;
@@ -339,7 +347,7 @@ unpack1 (gfc_array_char *ret, const gfc_array_char *vector,
          return;
        }
 
-    case GFC_DTYPE_DERIVED_8:
+    case 8:
       if (GFC_UNALIGNED_8(ret->base_addr) || GFC_UNALIGNED_8(vector->base_addr)
          || GFC_UNALIGNED_8(field->base_addr))
        break;
@@ -351,7 +359,7 @@ unpack1 (gfc_array_char *ret, const gfc_array_char *vector,
        }
 
 #ifdef HAVE_GFC_INTEGER_16
-    case GFC_DTYPE_DERIVED_16:
+    case 16:
       if (GFC_UNALIGNED_16(ret->base_addr)
          || GFC_UNALIGNED_16(vector->base_addr)
          || GFC_UNALIGNED_16(field->base_addr))
@@ -363,6 +371,8 @@ unpack1 (gfc_array_char *ret, const gfc_array_char *vector,
          return;
        }
 #endif
+    default:
+      break;
     }
 
   unpack_internal (ret, vector, mask, field, size);
@@ -433,7 +443,6 @@ unpack0 (gfc_array_char *ret, const gfc_array_char *vector,
     {
     case GFC_DTYPE_LOGICAL_1:
     case GFC_DTYPE_INTEGER_1:
-    case GFC_DTYPE_DERIVED_1:
       unpack0_i1 ((gfc_array_i1 *) ret, (gfc_array_i1 *) vector,
                  mask, (GFC_INTEGER_1 *) field);
       return;
@@ -528,7 +537,16 @@ unpack0 (gfc_array_char *ret, const gfc_array_char *vector,
 # endif
 #endif
 
-    case GFC_DTYPE_DERIVED_2:
+    }
+
+  switch (GFC_DESCRIPTOR_SIZE(ret))
+    {
+    case 1:
+      unpack0_i1 ((gfc_array_i1 *) ret, (gfc_array_i1 *) vector,
+                 mask, (GFC_INTEGER_1 *) field);
+      return;
+
+    case 2:
       if (GFC_UNALIGNED_2(ret->base_addr) || GFC_UNALIGNED_2(vector->base_addr)
          || GFC_UNALIGNED_2(field))
        break;
@@ -539,7 +557,7 @@ unpack0 (gfc_array_char *ret, const gfc_array_char *vector,
          return;
        }
 
-    case GFC_DTYPE_DERIVED_4:
+    case 4:
       if (GFC_UNALIGNED_4(ret->base_addr) || GFC_UNALIGNED_4(vector->base_addr)
          || GFC_UNALIGNED_4(field))
        break;
@@ -550,7 +568,7 @@ unpack0 (gfc_array_char *ret, const gfc_array_char *vector,
          return;
        }
 
-    case GFC_DTYPE_DERIVED_8:
+    case 8:
       if (GFC_UNALIGNED_8(ret->base_addr) || GFC_UNALIGNED_8(vector->base_addr)
          || GFC_UNALIGNED_8(field))
        break;
@@ -562,7 +580,7 @@ unpack0 (gfc_array_char *ret, const gfc_array_char *vector,
        }
 
 #ifdef HAVE_GFC_INTEGER_16
-    case GFC_DTYPE_DERIVED_16:
+    case 16:
       if (GFC_UNALIGNED_16(ret->base_addr)
          || GFC_UNALIGNED_16(vector->base_addr)
          || GFC_UNALIGNED_16(field))
@@ -574,7 +592,6 @@ unpack0 (gfc_array_char *ret, const gfc_array_char *vector,
          return;
        }
 #endif
-
     }
 
   memset (&tmp, 0, sizeof (tmp));