http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46974

--- Comment #3 from Steve Kargl <sgk at troutmask dot apl.washington.edu> 
2010-12-18 06:45:19 UTC ---
On Sat, Dec 18, 2010 at 12:01:13AM +0000, sgk at troutmask dot
apl.washington.edu wrote:
> 
> Index: simplify.c
> ===================================================================
> --- simplify.c  (revision 167949)
> +++ simplify.c  (working copy)
> @@ -5954,6 +5954,11 @@ gfc_simplify_transfer (gfc_expr *source,
>    if (source->expr_type == EXPR_FUNCTION)
>      return NULL;
> 
> +  if ((mold->expr_type == EXPR_VARIABLE || mold->expr_type == EXPR_STRUCTURE)
> +      && mold->ts.type == BT_DERIVED && mold->ts.u.derived
> +      && strcmp(mold->ts.u.derived->name, "c_ptr") == 0)
> +    return NULL;
> +
>    /* Calculate the size of the source.  */
>    if (source->expr_type == EXPR_ARRAY
>        && gfc_array_size (source, &tmp) == FAILURE)

Updated patch to hand C_FUNPTR types.

Index: simplify.c
===================================================================
--- simplify.c  (revision 167949)
+++ simplify.c  (working copy)
@@ -5954,6 +5954,12 @@ gfc_simplify_transfer (gfc_expr *source,
   if (source->expr_type == EXPR_FUNCTION)
     return NULL;

+  if ((mold->expr_type == EXPR_VARIABLE || mold->expr_type == EXPR_STRUCTURE)
+      && mold->ts.type == BT_DERIVED && mold->ts.u.derived
+      && (strcmp(mold->ts.u.derived->name, "c_ptr") == 0
+          || strcmp(mold->ts.u.derived->name, "c_funptr") == 0))
+    return NULL;
+
   /* Calculate the size of the source.  */
   if (source->expr_type == EXPR_ARRAY
       && gfc_array_size (source, &tmp) == FAILURE)

I suspect there may be problems with arrays and/or functions that
use these derived types.

Reply via email to