diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2011-08-06 15:19:45 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2011-08-06 15:19:45 +0000 |
commit | 48b155b991003487a50ac171ba5ca7c3409ad417 (patch) | |
tree | 6da2f43976711f93fd4853c2e6a054b5b832db02 /gcc | |
parent | cc3801b0e64026be57b2987d23d3f7c0c97bff2d (diff) | |
download | gcc-48b155b991003487a50ac171ba5ca7c3409ad417.zip gcc-48b155b991003487a50ac171ba5ca7c3409ad417.tar.gz gcc-48b155b991003487a50ac171ba5ca7c3409ad417.tar.bz2 |
re PR fortran/50004 (ICE in c_ptr_tests_16.f90)
2011-08-06 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/50004
* target-memory.c (gfc_target_expr-size): Don't clobber typespec
for derived types.
* simplify.c (gfc_simplify_transfer): Don't calculate source_size
twice.
From-SVN: r177527
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/fortran/simplify.c | 2 | ||||
-rw-r--r-- | gcc/fortran/target-memory.c | 10 |
3 files changed, 16 insertions, 4 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 5567ffd..81eec35 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,11 @@ +2011-08-06 Thomas Koenig <tkoenig@gcc.gnu.org> + + PR fortran/50004 + * target-memory.c (gfc_target_expr-size): Don't clobber typespec + for derived types. + * simplify.c (gfc_simplify_transfer): Don't calculate source_size + twice. + 2011-08-05 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/37211 diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index e4ffc3b..13a9c51 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -6048,8 +6048,6 @@ gfc_simplify_transfer (gfc_expr *source, gfc_expr *mold, gfc_expr *size) && gfc_array_size (source, &tmp) == FAILURE) gfc_internal_error ("Failure getting length of a constant array."); - source_size = gfc_target_expr_size (source); - /* Create an empty new expression with the appropriate characteristics. */ result = gfc_get_constant_expr (mold->ts.type, mold->ts.kind, &source->where); diff --git a/gcc/fortran/target-memory.c b/gcc/fortran/target-memory.c index 025bccf..6387895 100644 --- a/gcc/fortran/target-memory.c +++ b/gcc/fortran/target-memory.c @@ -120,8 +120,14 @@ gfc_target_expr_size (gfc_expr *e) case BT_HOLLERITH: return e->representation.length; case BT_DERIVED: - type = gfc_typenode_for_spec (&e->ts); - return int_size_in_bytes (type); + { + /* Determine type size without clobbering the typespec for ISO C + binding types. */ + gfc_typespec ts; + ts = e->ts; + type = gfc_typenode_for_spec (&ts); + return int_size_in_bytes (type); + } default: gfc_internal_error ("Invalid expression in gfc_target_expr_size."); return 0; |