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

janus at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
   Last reconfirmed|                            |2014-02-28
                 CC|                            |janus at gcc dot gnu.org
           Assignee|unassigned at gcc dot gnu.org      |janus at gcc dot gnu.org
            Summary|Assembler messages symbol   |[OOP] symbol
                   |`__io_MOD___copy_character_ |`__io_MOD___copy_character_
                   |1' is already defined       |1' is already defined
     Ever confirmed|0                           |1

--- Comment #4 from janus at gcc dot gnu.org ---
This is due to a small bug in find_intrinsic_vtab. Patch:


Index: gcc/fortran/class.c
===================================================================
--- gcc/fortran/class.c    (revision 208224)
+++ gcc/fortran/class.c    (working copy)
@@ -2532,17 +2532,22 @@ find_intrinsic_vtab (gfc_typespec *ts)
           c->tb = XCNEW (gfc_typebound_proc);
           c->tb->ppc = 1;

-          /* Check to see if copy function already exists.  Note
-         that this is only used for characters of different
-         lengths.  */
-          contained = ns->contained;
-          for (; contained; contained = contained->sibling)
-        if (contained->proc_name
-            && strcmp (name, contained->proc_name->name) == 0)
-          {
-            copy = contained->proc_name;
-            goto got_char_copy;
-          }
+          if (ts->type != BT_CHARACTER)
+        sprintf (name, "__copy_%s", tname);
+          else
+        {
+          /* __copy is always the same for characters.
+             Check to see if copy function already exists.  */
+          sprintf (name, "__copy_character_%d", ts->kind);
+          contained = ns->contained;
+          for (; contained; contained = contained->sibling)
+            if (contained->proc_name
+            && strcmp (name, contained->proc_name->name) == 0)
+              {
+            copy = contained->proc_name;
+            goto got_char_copy;
+              }
+        }

           /* Set up namespace.  */
           sub_ns = gfc_get_namespace (ns, 0);
@@ -2550,11 +2555,6 @@ find_intrinsic_vtab (gfc_typespec *ts)
           ns->contained = sub_ns;
           sub_ns->resolved = 1;
           /* Set up procedure symbol.  */
-          if (ts->type != BT_CHARACTER)
-        sprintf (name, "__copy_%s", tname);
-          else
-        /* __copy is always the same for characters.  */
-        sprintf (name, "__copy_character_%d", ts->kind);
           gfc_get_symbol (name, sub_ns, &copy);
           sub_ns->proc_name = copy;
           copy->attr.flavor = FL_PROCEDURE;

Reply via email to