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



--- Comment #14 from janus at gcc dot gnu.org 2013-02-05 22:31:06 UTC ---

Draft patch:



Index: gcc/fortran/trans-array.c

===================================================================

--- gcc/fortran/trans-array.c    (revision 195644)

+++ gcc/fortran/trans-array.c    (working copy)

@@ -7164,6 +7164,17 @@ gfc_conv_array_parameter (gfc_se * se, gfc_expr *

             fold_convert (TREE_TYPE (se->expr), null_pointer_node));

     }



+      if (fsym && fsym->attr.optional && sym && sym->attr.pointer)

+    {

+      tmp = build_fold_indirect_ref_loc (input_location, desc);

+      tmp = gfc_conv_array_data (tmp);

+      tmp = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,

+            tmp, fold_convert (TREE_TYPE (tmp), null_pointer_node));

+      ptr = build3_loc (input_location, COND_EXPR, TREE_TYPE (se->expr),

+            tmp, fold_convert (TREE_TYPE (se->expr), ptr),

+            fold_convert (TREE_TYPE (se->expr), null_pointer_node));

+    }

+

       ptr = gfc_evaluate_now (ptr, &se->pre);



       /* Use the packed data for the actual argument, except for contiguous

arrays,

Reply via email to