------- Comment #8 from burnus at gcc dot gnu dot org  2009-12-30 20:50 -------
TODO:
> - SAVED local variables are (probably) mishandled
> - Check whether other things such as allocatable scalar components,
> (absent/present) optional dummys etc. work.
- allocatable-scalar returning functions as actual argument
- character-returning actual arguments

Check whether the following patch is needed or nonsense:

--- gcc/fortran/trans-expr.c    (Revision 155510)
+++ gcc/fortran/trans-expr.c
@@ -1905,7 +1905,7 @@ gfc_add_interface_mapping (gfc_interface
     {
       tmp = gfc_get_character_type_len (sym->ts.kind, NULL);
       tmp = build_pointer_type (tmp);
-      if (sym->attr.pointer)
+      if (sym->attr.pointer || sym->attr.allocatable)
         value = build_fold_indirect_ref_loc (input_location,
                                         se->expr);
       else
@@ -4478,10 +4479,12 @@ gfc_conv_expr_reference (gfc_se * se, gf

   if (expr->expr_type == EXPR_FUNCTION
       && ((expr->value.function.esym
-          && expr->value.function.esym->result->attr.pointer
+          && (expr->value.function.esym->result->attr.pointer
+              || expr->value.function.esym->result->attr.allocatable)
           && !expr->value.function.esym->result->attr.dimension)
          || (!expr->value.function.esym
-             && expr->symtree->n.sym->attr.pointer
+             && (expr->symtree->n.sym->attr.pointer
+                 || expr->symtree->n.sym->attr.allocatable)
              && !expr->symtree->n.sym->attr.dimension)))
     {
       se->want_pointer = 1;


-- 


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

Reply via email to