------- Comment #1 from janus at gcc dot gnu dot org  2010-07-13 09:45 -------
The following patch fixes the PR:

Index: gcc/fortran/dependency.c
===================================================================
--- gcc/fortran/dependency.c    (revision 162124)
+++ gcc/fortran/dependency.c    (working copy)
@@ -427,22 +427,13 @@ gfc_ref_needs_temporary_p (gfc_ref *ref)
 int
 gfc_is_data_pointer (gfc_expr *e)
 {
-  gfc_ref *ref;
-
+  symbol_attribute attr;
+  
   if (e->expr_type != EXPR_VARIABLE && e->expr_type != EXPR_FUNCTION)
     return 0;

-  /* No subreference if it is a function  */
-  gcc_assert (e->expr_type == EXPR_VARIABLE || !e->ref);
-
-  if (e->symtree->n.sym->attr.pointer)
-    return 1;
-
-  for (ref = e->ref; ref; ref = ref->next)
-    if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer)
-      return 1;
-
-  return 0;
+  attr = gfc_expr_attr (e);
+  return attr.pointer;
 }


However, it regresses at least on c_loc_tests_5.f03 and c_loc_tests_14.f90.


-- 

janus at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |janus at gcc dot gnu dot org
                   |dot org                     |
             Status|NEW                         |ASSIGNED
   Last reconfirmed|2010-07-12 21:09:53         |2010-07-13 09:45:41
               date|                            |


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

Reply via email to