aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/class.c
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2014-02-28 22:30:04 +0100
committerJanus Weil <janus@gcc.gnu.org>2014-02-28 22:30:04 +0100
commit3c3f892bf083c7df33c50347ed106c54fc9ed941 (patch)
treee96ed2ec0e0b7b9c6b9c6f687dd08b8c59c6a7cd /gcc/fortran/class.c
parentf1ee5eaf07345816fd6b1adf90e53ead9800076b (diff)
downloadgcc-3c3f892bf083c7df33c50347ed106c54fc9ed941.zip
gcc-3c3f892bf083c7df33c50347ed106c54fc9ed941.tar.gz
gcc-3c3f892bf083c7df33c50347ed106c54fc9ed941.tar.bz2
re PR fortran/60359 ([OOP] symbol `__io_MOD___copy_character_1' is already defined)
2014-02-28 Janus Weil <janus@gcc.gnu.org> PR fortran/60359 * class.c (find_intrinsic_vtab): Prevent duplicate creation of copy procedure for characters. 2014-02-28 Janus Weil <janus@gcc.gnu.org> PR fortran/60359 * gfortran.dg/unlimited_polymorphic_16.f90: New. From-SVN: r208227
Diffstat (limited to 'gcc/fortran/class.c')
-rw-r--r--gcc/fortran/class.c32
1 files changed, 16 insertions, 16 deletions
diff --git a/gcc/fortran/class.c b/gcc/fortran/class.c
index fc228cf..d01d7d8 100644
--- a/gcc/fortran/class.c
+++ b/gcc/fortran/class.c
@@ -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;