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).