diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2009-01-10 00:15:37 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2009-01-10 00:15:37 +0000 |
commit | 51df93ba5be0a0cbc2f38b30caf813d4bc6eece0 (patch) | |
tree | bdc9d063c82d482ad2b2dd28eaf839b89621a799 /gcc/fortran | |
parent | 9be3684bdd98f40b323958bc5f083c62846fc45b (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/target-memory.c | 11 |
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); |