diff options
author | Janus Weil <janus@gcc.gnu.org> | 2014-02-28 22:30:04 +0100 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2014-02-28 22:30:04 +0100 |
commit | 3c3f892bf083c7df33c50347ed106c54fc9ed941 (patch) | |
tree | e96ed2ec0e0b7b9c6b9c6f687dd08b8c59c6a7cd /gcc/fortran/class.c | |
parent | f1ee5eaf07345816fd6b1adf90e53ead9800076b (diff) | |
download | gcc-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.c | 32 |
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, ©); sub_ns->proc_name = copy; copy->attr.flavor = FL_PROCEDURE; |