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

--- Comment #2 from janus at gcc dot gnu.org ---
Draft patch which fixes the error (not regtested):


Index: gcc/fortran/module.c
===================================================================
--- gcc/fortran/module.c    (revision 205857)
+++ gcc/fortran/module.c    (working copy)
@@ -3358,12 +3358,24 @@ mio_expr (gfc_expr **ep)
     {
       e->value.function.name
         = mio_allocated_string (e->value.function.name);
-      flag = e->value.function.esym != NULL;
+      if (e->value.function.esym)
+        flag = 1;
+      else if (e->ref)
+        flag = 2;
+      else
+        flag = 0;
       mio_integer (&flag);
-      if (flag)
-        mio_symbol_ref (&e->value.function.esym);
-      else
-        write_atom (ATOM_STRING, e->value.function.isym->name);
+      switch (flag)
+        {
+        case 1:
+          mio_symbol_ref (&e->value.function.esym);
+          break;
+        case 2:
+          mio_ref_list (&e->ref);
+          break;
+        default:
+          write_atom (ATOM_STRING, e->value.function.isym->name);
+        }
     }
       else
     {
@@ -3372,10 +3384,15 @@ mio_expr (gfc_expr **ep)
       free (atom_string);

       mio_integer (&flag);
-      if (flag)
-        mio_symbol_ref (&e->value.function.esym);
-      else
+      switch (flag)
         {
+        case 1:
+          mio_symbol_ref (&e->value.function.esym);
+          break;
+        case 2:
+          mio_ref_list (&e->ref);
+          break;
+        default:
           require_atom (ATOM_STRING);
           e->value.function.isym = gfc_find_function (atom_string);
           free (atom_string);

Reply via email to