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
This commit is contained in:
Thomas Koenig 2011-08-06 15:19:45 +00:00
parent cc3801b0e6
commit 48b155b991
3 changed files with 16 additions and 4 deletions

View file

@ -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

View file

@ -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);

View file

@ -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;