aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Koenig <tkoenig@gcc.gnu.org>2011-08-06 15:19:45 +0000
committerThomas Koenig <tkoenig@gcc.gnu.org>2011-08-06 15:19:45 +0000
commit48b155b991003487a50ac171ba5ca7c3409ad417 (patch)
tree6da2f43976711f93fd4853c2e6a054b5b832db02
parentcc3801b0e64026be57b2987d23d3f7c0c97bff2d (diff)
downloadgcc-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
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/simplify.c2
-rw-r--r--gcc/fortran/target-memory.c10
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;