aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrooks Moses <brooks.moses@codesourcery.com>2007-05-28 20:53:09 +0000
committerBrooks Moses <brooks@gcc.gnu.org>2007-05-28 13:53:09 -0700
commit3b45d6c4896ce08bf70adde2a392f1293ee3766b (patch)
tree363cf8a953f0ea97bb498a2f0ce39e2e5647b378
parent3613c7abfa4392fd47d5078eb2261ad763772d2e (diff)
downloadgcc-3b45d6c4896ce08bf70adde2a392f1293ee3766b.zip
gcc-3b45d6c4896ce08bf70adde2a392f1293ee3766b.tar.gz
gcc-3b45d6c4896ce08bf70adde2a392f1293ee3766b.tar.bz2
PR 31972/fortran
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
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/check.c7
-rw-r--r--gcc/fortran/target-memory.c2
3 files changed, 17 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 3062509..001e66e 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,13 @@
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"
struct.
* primary.c (match_hollerith_constant): Store the representation
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index 682dc8b..e229002 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -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)
diff --git a/gcc/fortran/target-memory.c b/gcc/fortran/target-memory.c
index 194bc0b..e235744 100644
--- a/gcc/fortran/target-memory.c
+++ b/gcc/fortran/target-memory.c
@@ -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);