aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2009-01-10 00:15:37 +0000
committerPaul Thomas <pault@gcc.gnu.org>2009-01-10 00:15:37 +0000
commit51df93ba5be0a0cbc2f38b30caf813d4bc6eece0 (patch)
treebdc9d063c82d482ad2b2dd28eaf839b89621a799 /gcc/fortran
parent9be3684bdd98f40b323958bc5f083c62846fc45b (diff)
downloadgcc-51df93ba5be0a0cbc2f38b30caf813d4bc6eece0.zip
gcc-51df93ba5be0a0cbc2f38b30caf813d4bc6eece0.tar.gz
gcc-51df93ba5be0a0cbc2f38b30caf813d4bc6eece0.tar.bz2
re PR fortran/38763 (TRANSFER ICE due to missing EXPR_NULL case)
2009-01-10 Paul Thomas <pault@gcc.gnu.org> PR fortran/38763 * target-memory.c (encode_derived): Encode NULL. 2009-01-10 Paul Thomas <pault@gcc.gnu.org> PR fortran/38763 * gfortran.dg/transfer_null_1.f90: New test. From-SVN: r143238
Diffstat (limited to 'gcc/fortran')
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/target-memory.c11
2 files changed, 13 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index b7d1b99..b3d1799 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,10 @@
2009-01-10 Paul Thomas <pault@gcc.gnu.org>
+ PR fortran/38763
+ * target-memory.c (encode_derived): Encode NULL.
+
+2009-01-10 Paul Thomas <pault@gcc.gnu.org>
+
PR fortran/38765
* resolve.c (check_host_association): Use the symtree name to
search for a potential contained procedure, since this is the
diff --git a/gcc/fortran/target-memory.c b/gcc/fortran/target-memory.c
index 72bd6ef..dc10b53 100644
--- a/gcc/fortran/target-memory.c
+++ b/gcc/fortran/target-memory.c
@@ -1,5 +1,5 @@
/* Simulate storage of variables into target memory.
- Copyright (C) 2007, 2008
+ Copyright (C) 2007, 2008, 2009
Free Software Foundation, Inc.
Contributed by Paul Thomas and Brooks Moses
@@ -220,8 +220,13 @@ encode_derived (gfc_expr *source, unsigned char *buffer, size_t buffer_size)
continue;
ptr = TREE_INT_CST_LOW(DECL_FIELD_OFFSET(cmp->backend_decl))
+ TREE_INT_CST_LOW(DECL_FIELD_BIT_OFFSET(cmp->backend_decl))/8;
- gfc_target_encode_expr (ctr->expr, &buffer[ptr],
- buffer_size - ptr);
+
+ if (ctr->expr->expr_type == EXPR_NULL)
+ memset (&buffer[ptr], 0,
+ int_size_in_bytes (TREE_TYPE (cmp->backend_decl)));
+ else
+ gfc_target_encode_expr (ctr->expr, &buffer[ptr],
+ buffer_size - ptr);
}
return int_size_in_bytes (type);