------- Comment #8 from burnus at gcc dot gnu dot org  2010-07-26 09:42 -------
(In reply to comment #2)
> --- trans-io.c  (revision 162507)
> +++ trans-io.c  (working copy)
> +  if (base_addr == NULL)
> +    return;
> +

This does not make sense if you call transfer_namelist_element in build_dt with
the arguments:
            transfer_namelist_element (&block, nml->sym->name, nml->sym,
                                       NULL, NULL);
The last argument is "tree base_addr". (By the way, I think that should be
NULL_TREE and not NULL.)

Besides, the issue seems to be rather:
      dt =  TREE_TYPE ((sym) ? sym->backend_decl : c->backend_decl);
      dtype = gfc_get_dtype (dt);
which makes more sense in terms of fwhole-file; the problem is that
sym->backend_decl = NULL.

It seems as if the following patch fixes this. With -fno-whole-file the
sym->backend_decl is set and one returns the decl. With -fwhole-file only the
decl was returned.

I wonder how many other issues this patch fixes.

Note: I tested it for the example in comment 0, but I have not yet tested it
against gfortran's test suite.


Index: trans-io.c
===================================================================
--- trans-io.c  (revision 162526)
+++ trans-io.c  (working copy)
@@ -1760,7 +1760,7 @@ build_dt (tree function, gfc_code * code

          for (nml = dt->namelist->namelist; nml; nml = nml->next)
            transfer_namelist_element (&block, nml->sym->name, nml->sym,
-                                      NULL, NULL);
+                                      NULL, NULL_TREE);
        }
       else
        set_parameter_const (&block, var, IOPARM_common_flags, mask);
Index: trans-decl.c
===================================================================
--- trans-decl.c        (revision 162526)
+++ trans-decl.c        (working copy)
@@ -1150,7 +1150,8 @@ gfc_get_symbol_decl (gfc_symbol * sym)
                                           true);
              if (sym->ts.type == BT_CHARACTER)
                sym->ts.u.cl->backend_decl = s->ts.u.cl->backend_decl;
-             return s->backend_decl;
+             sym->backend_decl = s->backend_decl;
+             return sym->backend_decl;
            }
        }
     }


-- 

burnus at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |burnus at gcc dot gnu dot
                   |                            |org
         AssignedTo|unassigned at gcc dot gnu   |burnus at gcc dot gnu dot
                   |dot org                     |org
             Status|NEW                         |ASSIGNED
   Last reconfirmed|2010-07-25 14:26:17         |2010-07-26 09:42:10
               date|                            |


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

Reply via email to