PR 31972/fortran
authorBrooks Moses <brooks.moses@codesourcery.com>
Mon, 28 May 2007 20:53:09 +0000 (20:53 +0000)
committerBrooks Moses <brooks@gcc.gnu.org>
Mon, 28 May 2007 20:53:09 +0000 (13:53 -0700)
PR 31972/fortran
* target-memory.c (gfc_target_expr_size): Add handling
for size of BT_HOLLERITH variables.
* check.c (gfc_check_transfer): Reject BT_HOLLERITH
variables in MOLD argument of TRANSFER.

From-SVN: r125141

gcc/fortran/ChangeLog
gcc/fortran/check.c
gcc/fortran/target-memory.c

index 3062509406fddbace67b9d95ed700556699b1109..001e66e5339c0c3a3fc21edd2afd387c8f63103b 100644 (file)
@@ -1,3 +1,11 @@
+2007-05-28  Brooks Moses  <brooks.moses@codesourcery.com>
+
+       PR 31972/fortran
+       * target-memory.c (gfc_target_expr_size): Add handling
+       for size of BT_HOLLERITH variables.
+       * check.c (gfc_check_transfer): Reject BT_HOLLERITH
+       variables in MOLD argument of TRANSFER.
+
 2007-05-28  Brooks Moses  <brooks.moses@codesourcery.com>
 
        * gfortran.h (gfc_expr): Remove from_H, add "representation"
index 682dc8b90a22244bf16a0d66dcae1c44972e58cf..e229002671422aefba04f99f6ac5c9b55ae45d78 100644 (file)
@@ -2601,6 +2601,13 @@ try
 gfc_check_transfer (gfc_expr *source ATTRIBUTE_UNUSED,
                    gfc_expr *mold ATTRIBUTE_UNUSED, gfc_expr *size)
 {
+  if (mold->ts.type == BT_HOLLERITH)
+    {
+      gfc_error ("'MOLD' argument of 'TRANSFER' intrinsic at %L must not be %s",
+                &mold->where, gfc_basic_typename (BT_HOLLERITH));
+      return FAILURE;
+    }
+
   if (size != NULL)
     {
       if (type_check (size, 2, BT_INTEGER) == FAILURE)
index 194bc0bc52da48b7dd7e5487def283c60df93643..e23574417bd186405d6bb8f3b1767e07d638e816 100644 (file)
@@ -102,6 +102,8 @@ gfc_target_expr_size (gfc_expr *e)
       return size_logical (e->ts.kind);
     case BT_CHARACTER:
       return size_character (e->value.character.length);
+    case BT_HOLLERITH:
+      return e->representation.length;
     case BT_DERIVED:
       type = gfc_typenode_for_spec (&e->ts);
       return int_size_in_bytes (type);