[Bug fortran/54784] [OOP] allocation of extended types with polymorphic allocatable members

janus at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Oct 2 22:46:00 GMT 2012


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

--- Comment #4 from janus at gcc dot gnu.org 2012-10-02 22:45:31 UTC ---
(In reply to comment #1)
> 
>   allocate(d%L(2)%B,source=b1)
> 

The code generated for this line has two parts: The allocation and the copying
from the source. While the first part looks fine, it seems there is a problem
in the second. -fdump-tree-original shows:

      {
        struct block D.1890;
        struct list[2] * D.1889;

        D.1889 = &d.l;
        D.1890 = b1;
        {
          integer(kind=8) S.0;

          S.0 = 1;
          while (1)
            {
              if (S.0 > 2) goto L.1;
              __vtab_bug_Block._copy (&D.1890, (*D.1889)[S.0 + -1].b._data);
              S.0 = S.0 + 1;
            }
          L.1:;
        }
      }

In principle only one element of the array 'd.l' should be copied. However, it
seems like the while loop does a copy for each element!



More information about the Gcc-bugs mailing list