public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/34080]  New: Transfer was working, now broken
@ 2007-11-13  9:06 drewmccormack at mac dot com
  2007-11-13 13:56 ` [Bug fortran/34080] [regression] " fxcoudert at gcc dot gnu dot org
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: drewmccormack at mac dot com @ 2007-11-13  9:06 UTC (permalink / raw)
  To: gcc-bugs

I have code that was previously working with gfortran and now is broken. The
problem has to do with the 'transfer' intrinsic. If I transfer a character
string into an array of a different type, and then transfer the array back to a
string, the result is not the original string, but apparently random bytes.

I have prepared sample code to demonstrate:


module TransferBug

   type ByteType
      private
      character(len=1)                                  :: singleByte
   end type

   type (ByteType), save                                :: BytesPrototype(1)

contains

   function StringToBytes(v) result (bytes)
      character(len=*), intent(in)                      :: v
      type (ByteType)                                   ::
bytes(size(transfer(v, BytesPrototype)))
      bytes = transfer(v, BytesPrototype)
   end function

   subroutine BytesToString(bytes, string)
      type (ByteType), intent(in)                       :: bytes(:)
      character(len=*), intent(out)                     :: string
      character(len=1)                                  :: singleChar(1)
      integer                                           :: numChars
      numChars = size(transfer(bytes,singleChar))
      string = ''
      string = transfer(bytes, string)
      string(numChars+1:) = ''
   end subroutine

end module


program main
   use TransferBug
   character(len=100) :: str
   call BytesToString( StringToBytes('Hi'), str )
   print *, trim(str)   ! This should print 'Hi'
end program


-- 
           Summary: Transfer was working, now broken
           Product: gcc
           Version: 4.3.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: drewmccormack at mac dot com
 GCC build triplet: 4.3.0 20071026 (experimental)
GCC target triplet: powerpc-apple-darwin9.0.0


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


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug fortran/34080] [regression] Transfer was working, now broken
  2007-11-13  9:06 [Bug fortran/34080] New: Transfer was working, now broken drewmccormack at mac dot com
@ 2007-11-13 13:56 ` fxcoudert at gcc dot gnu dot org
  2007-11-13 15:09 ` dominiq at lps dot ens dot fr
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: fxcoudert at gcc dot gnu dot org @ 2007-11-13 13:56 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #1 from fxcoudert at gcc dot gnu dot org  2007-11-13 13:55 -------
Confirmed on x86_64-linux.


-- 

fxcoudert at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever Confirmed|0                           |1
  GCC build triplet|4.3.0 20071026              |
                   |(experimental)              |
 GCC target triplet|powerpc-apple-darwin9.0.0   |
           Keywords|                            |wrong-code
      Known to fail|                            |4.3.0
   Last reconfirmed|0000-00-00 00:00:00         |2007-11-13 13:55:55
               date|                            |
            Summary|Transfer was working, now   |[regression] Transfer was
                   |broken                      |working, now broken


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


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug fortran/34080] [regression] Transfer was working, now broken
  2007-11-13  9:06 [Bug fortran/34080] New: Transfer was working, now broken drewmccormack at mac dot com
  2007-11-13 13:56 ` [Bug fortran/34080] [regression] " fxcoudert at gcc dot gnu dot org
@ 2007-11-13 15:09 ` dominiq at lps dot ens dot fr
  2007-11-13 15:51 ` [Bug fortran/34080] [4.3 regression] " burnus at gcc dot gnu dot org
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: dominiq at lps dot ens dot fr @ 2007-11-13 15:09 UTC (permalink / raw)
  To: gcc-bugs

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1323 bytes --]



------- Comment #2 from dominiq at lps dot ens dot fr  2007-11-13 15:08 -------
Reduced test case:

module TransferBug

   type ByteType
      character(len=1)                                  :: singleByte
   end type

contains

   subroutine BytesToString(bytes, string)
      type (ByteType), intent(in)                       :: bytes(:)
      character(len=*), intent(out)                     :: string
      string = 'Hi! '
!      print *, len(trim(string))  !  <-- works
      print *, len(transfer(bytes, string)) ! <-- gives garbage (crash with
g95)
   end subroutine

end module

program main
   use TransferBug
   character(len=100) :: str
   type (ByteType)                                   :: bytes(4)
   bytes = (/ByteType('t'), ByteType('e'), ByteType('s'), ByteType('t')/)
   call BytesToString( bytes, str )
   print *, trim(str)   ! This should print 'Hi!'
end program

[karma] f90/bug% gfc -fbounds-check pr34080_red.f90
[karma] f90/bug% a.out 
           0
 0låŨ0l0 ]Q(Ô¿ÿà`á
d
[karma] f90/bug% pgfc -fbounds-check pr34080_red.f90
[karma] f90/bug% a.out
         100
 Hi!

If I exchange the commented print lines, the code works. So the bug is related
to transfer, but apparently through some memory leak and not due to its result.


-- 


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


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug fortran/34080] [4.3 regression] Transfer was working, now broken
  2007-11-13  9:06 [Bug fortran/34080] New: Transfer was working, now broken drewmccormack at mac dot com
  2007-11-13 13:56 ` [Bug fortran/34080] [regression] " fxcoudert at gcc dot gnu dot org
  2007-11-13 15:09 ` dominiq at lps dot ens dot fr
@ 2007-11-13 15:51 ` burnus at gcc dot gnu dot org
  2007-11-13 20:07 ` pault at gcc dot gnu dot org
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: burnus at gcc dot gnu dot org @ 2007-11-13 15:51 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #3 from burnus at gcc dot gnu dot org  2007-11-13 15:51 -------
I did not do proper regression tests, but it works using
  4.3.0 20071016 (experimental) [trunk revision 129378] (SUSE Linux)
which has presumably no Fortran patches applied.


-- 

burnus at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |burnus at gcc dot gnu dot
                   |                            |org
      Known to work|                            |4.2.1 4.1.3
            Summary|[regression] Transfer was   |[4.3 regression] Transfer
                   |working, now broken         |was working, now broken


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


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug fortran/34080] [4.3 regression] Transfer was working, now broken
  2007-11-13  9:06 [Bug fortran/34080] New: Transfer was working, now broken drewmccormack at mac dot com
                   ` (2 preceding siblings ...)
  2007-11-13 15:51 ` [Bug fortran/34080] [4.3 regression] " burnus at gcc dot gnu dot org
@ 2007-11-13 20:07 ` pault at gcc dot gnu dot org
  2007-11-13 20:19 ` pault at gcc dot gnu dot org
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: pault at gcc dot gnu dot org @ 2007-11-13 20:07 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #4 from pault at gcc dot gnu dot org  2007-11-13 20:07 -------
The regression occurred at r129505.  Allowance was not made in the correction
to gfc_resolve_transfer for assumed size dummy arguments.  This fixes it:

Index: /svn/trunk/gcc/fortran/iresolve.c
===================================================================
*** /svn/trunk/gcc/fortran/iresolve.c   (revision 130152)
--- /svn/trunk/gcc/fortran/iresolve.c   (working copy)
*************** gfc_resolve_transfer (gfc_expr *f, gfc_e
*** 2283,2289 ****
    /* TODO: Make this do something meaningful.  */
    static char transfer0[] = "__transfer0", transfer1[] = "__transfer1";

!   if (mold->ts.type == BT_CHARACTER && !mold->ts.cl->length)
      mold->ts.cl->length = gfc_int_expr (mold->value.character.length);

    f->ts = mold->ts;
--- 2283,2290 ----
    /* TODO: Make this do something meaningful.  */
    static char transfer0[] = "__transfer0", transfer1[] = "__transfer1";

!   if (mold->ts.type == BT_CHARACTER && !mold->ts.cl->length
!       && !(mold->expr_type == EXPR_VARIABLE &&
mold->symtree->n.sym->attr.dummy))
      mold->ts.cl->length = gfc_int_expr (mold->value.character.length);

    f->ts = mold->ts;

It's just now regtesting with a couple of other fixes.  I'll clean this patch
up and commit it as obvious (the others I will submit).

Paul


-- 

pault at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         AssignedTo|unassigned at gcc dot gnu   |pault at gcc dot gnu dot org
                   |dot org                     |
             Status|NEW                         |ASSIGNED
   Last reconfirmed|2007-11-13 13:55:55         |2007-11-13 20:07:30
               date|                            |


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


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug fortran/34080] [4.3 regression] Transfer was working, now broken
  2007-11-13  9:06 [Bug fortran/34080] New: Transfer was working, now broken drewmccormack at mac dot com
                   ` (3 preceding siblings ...)
  2007-11-13 20:07 ` pault at gcc dot gnu dot org
@ 2007-11-13 20:19 ` pault at gcc dot gnu dot org
  2007-11-13 20:28 ` drewmccormack at mac dot com
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: pault at gcc dot gnu dot org @ 2007-11-13 20:19 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #5 from pault at gcc dot gnu dot org  2007-11-13 20:19 -------
Drew,

By the way - thanks!

The regression test is just coming to an end, so it'll be fixed very soon.

Paul


-- 


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


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug fortran/34080] [4.3 regression] Transfer was working, now broken
  2007-11-13  9:06 [Bug fortran/34080] New: Transfer was working, now broken drewmccormack at mac dot com
                   ` (4 preceding siblings ...)
  2007-11-13 20:19 ` pault at gcc dot gnu dot org
@ 2007-11-13 20:28 ` drewmccormack at mac dot com
  2007-11-13 20:33 ` pault at gcc dot gnu dot org
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: drewmccormack at mac dot com @ 2007-11-13 20:28 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #6 from drewmccormack at mac dot com  2007-11-13 20:27 -------
Subject: Re:  [4.3 regression] Transfer was working, now broken

Thanks for fixing it so quick, Paul.

Drew


On 13/11/2007, at 9:19 PM, pault at gcc dot gnu dot org wrote:

>
>
> ------- Comment #5 from pault at gcc dot gnu dot org  2007-11-13  
> 20:19 -------
> Drew,
>
> By the way - thanks!
>
> The regression test is just coming to an end, so it'll be fixed very  
> soon.
>
> Paul
>
>
> -- 
>
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34080
>
> ------- You are receiving this mail because: -------
> You reported the bug, or are watching the reporter.


-- 


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


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug fortran/34080] [4.3 regression] Transfer was working, now broken
  2007-11-13  9:06 [Bug fortran/34080] New: Transfer was working, now broken drewmccormack at mac dot com
                   ` (5 preceding siblings ...)
  2007-11-13 20:28 ` drewmccormack at mac dot com
@ 2007-11-13 20:33 ` pault at gcc dot gnu dot org
  2007-11-14  6:12 ` pault at gcc dot gnu dot org
  2007-11-19  5:21 ` pinskia at gcc dot gnu dot org
  8 siblings, 0 replies; 10+ messages in thread
From: pault at gcc dot gnu dot org @ 2007-11-13 20:33 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #7 from pault at gcc dot gnu dot org  2007-11-13 20:33 -------
Subject: Bug 34080

Author: pault
Date: Tue Nov 13 20:33:21 2007
New Revision: 130158

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=130158
Log:
2007-11-13  Paul Thomas  <pault@gcc.gnu.org>

        PR fortran/34080
        * iresolve.c (gfc_resolve_transfer): Do not try to convert
        to a constant MOLD expression, if it is an assumed size
        dummy.

2007-11-13  Paul Thomas  <pault@gcc.gnu.org>

        PR fortran/34080
        * gfortran.dg/transfer_assumed_size_1.f90: New test.

Added:
    trunk/gcc/testsuite/gfortran.dg/transfer_assumed_size_1.f90
Modified:
    trunk/gcc/fortran/ChangeLog
    trunk/gcc/fortran/iresolve.c
    trunk/gcc/testsuite/ChangeLog


-- 


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


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug fortran/34080] [4.3 regression] Transfer was working, now broken
  2007-11-13  9:06 [Bug fortran/34080] New: Transfer was working, now broken drewmccormack at mac dot com
                   ` (6 preceding siblings ...)
  2007-11-13 20:33 ` pault at gcc dot gnu dot org
@ 2007-11-14  6:12 ` pault at gcc dot gnu dot org
  2007-11-19  5:21 ` pinskia at gcc dot gnu dot org
  8 siblings, 0 replies; 10+ messages in thread
From: pault at gcc dot gnu dot org @ 2007-11-14  6:12 UTC (permalink / raw)
  To: gcc-bugs



------- Comment #8 from pault at gcc dot gnu dot org  2007-11-14 06:12 -------
Fixed on trunk.

Paul


-- 

pault at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|                            |FIXED


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


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Bug fortran/34080] [4.3 regression] Transfer was working, now broken
  2007-11-13  9:06 [Bug fortran/34080] New: Transfer was working, now broken drewmccormack at mac dot com
                   ` (7 preceding siblings ...)
  2007-11-14  6:12 ` pault at gcc dot gnu dot org
@ 2007-11-19  5:21 ` pinskia at gcc dot gnu dot org
  8 siblings, 0 replies; 10+ messages in thread
From: pinskia at gcc dot gnu dot org @ 2007-11-19  5:21 UTC (permalink / raw)
  To: gcc-bugs



-- 

pinskia at gcc dot gnu dot org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
   Target Milestone|---                         |4.3.0


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


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2007-11-19  5:21 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-11-13  9:06 [Bug fortran/34080] New: Transfer was working, now broken drewmccormack at mac dot com
2007-11-13 13:56 ` [Bug fortran/34080] [regression] " fxcoudert at gcc dot gnu dot org
2007-11-13 15:09 ` dominiq at lps dot ens dot fr
2007-11-13 15:51 ` [Bug fortran/34080] [4.3 regression] " burnus at gcc dot gnu dot org
2007-11-13 20:07 ` pault at gcc dot gnu dot org
2007-11-13 20:19 ` pault at gcc dot gnu dot org
2007-11-13 20:28 ` drewmccormack at mac dot com
2007-11-13 20:33 ` pault at gcc dot gnu dot org
2007-11-14  6:12 ` pault at gcc dot gnu dot org
2007-11-19  5:21 ` pinskia at gcc dot gnu dot org

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).