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



Tobias Burnus <burnus at gcc dot gnu.org> changed:



           What    |Removed                     |Added

----------------------------------------------------------------------------

             Status|UNCONFIRMED                 |NEW

      Known to work|                            |4.1.2, 4.3.4

           Keywords|                            |wrong-code

   Last reconfirmed|                            |2013-03-14

                 CC|                            |burnus at gcc dot gnu.org

     Ever Confirmed|0                           |1

            Summary|[4.4/4.5/4.6/4.7            |[4.6/4.7/4.8 Regression]

                   |Regression] Wrong code for  |Wrong code with TRANSFER of

                   |passing arrays of character |arrays of character with

                   |                            |stride -1

   Target Milestone|---                         |4.6.4

      Known to fail|                            |4.4.0, 4.5.3, 4.6.3, 4.7.2,

                   |                            |4.8.0



--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> 2013-03-14 
18:01:06 UTC ---

The problem seems to be the TRANSFER in:



  call cmp (a(n:1:-1), t)

...

  subroutine cmp (b, s)

    character(len=1), dimension(:), intent(in) :: b

    c = TRANSFER (b, c)







In the dump, I see code like:



__builtin_memcpy (transfer.5, parm.4.data, MAX_EXPR

<MIN_EXPR<D.1912,D.1904>,0>);





However, that assumes that parm.4.data is contiguous and walked forwardly. In

4.4, one has the same - but additionally the calls:



D.929 = _gfortran_internal_pack (&parm.4);

...

_gfortran_internal_unpack (&parm.4, D.929);

Reply via email to