[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2009-01-30 Thread hjl dot tools at gmail dot com


-- 

hjl dot tools at gmail dot com changed:

   What|Removed |Added

   Target Milestone|--- |4.4.0


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2009-01-17 Thread pault at gcc dot gnu dot org


--- Comment #22 from pault at gcc dot gnu dot org  2009-01-17 11:32 ---
Subject: Bug 34955

Author: pault
Date: Sat Jan 17 11:32:02 2009
New Revision: 143462

URL: http://gcc.gnu.org/viewcvs?root=gccview=revrev=143462
Log:
2009-01-17  Paul Thomas  pa...@gcc.gnu.org

PR fortran/34955
* trans-intrinsic.c (gfc_conv_intrinsic_array_transfer): Has
been absorbed into gfc_conv_intrinsic_transfer. All
references to it in trans-intrinsic.c have been changed
accordingly.  PR fixed by using a temporary for scalar
character transfer, when the source is shorter than the
destination.

2009-01-17  Paul Thomas  pa...@gcc.gnu.org

PR fortran/34955
* gfortran.dg/transfer_intrinsic_1.f90: New test.
* gfortran.dg/transfer_intrinsic_2.f90: New test.


Added:
trunk/gcc/testsuite/gfortran.dg/transfer_intrinsic_1.f90
trunk/gcc/testsuite/gfortran.dg/transfer_intrinsic_2.f90
Modified:
trunk/gcc/fortran/ChangeLog
trunk/gcc/fortran/trans-intrinsic.c
trunk/gcc/testsuite/ChangeLog
trunk/gcc/testsuite/gfortran.dg/char_cast_1.f90


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2009-01-17 Thread pault at gcc dot gnu dot org


--- Comment #23 from pault at gcc dot gnu dot org  2009-01-17 11:34 ---
Fixed on trunk.

Thanks for the report and sorry that it took so long to fix.

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=34955



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2009-01-14 Thread dominiq at lps dot ens dot fr


--- Comment #21 from dominiq at lps dot ens dot fr  2009-01-14 08:15 ---
On i686-apple-darwin9 I cannot test the valgrind part of this pr, however with
the patch in http://gcc.gnu.org/ml/fortran/2009-01/msg00162.html the following
test now succeeds:

  character(len=1)  :: string = z
  character(len=20) :: tmp = 
  tmp = Upper (abcdefgh)
  print *, tmp
 contains
  Character (len=20) Function Upper (string)
Character(len=*) string
integer :: ij
print *, len(string)
print *, size(transfer(string,xy,len(string)))
i = size(transfer(string,xy,len(string)))
if (i /= len(string)) call abort()
Upper = 
Upper(1:2) =   

 transfer(merge(transfer(string,xy,len(string)),
   string(1:2), .true.), xy)
return
  end function Upper
end

(coming from pr31608). I saw one regression on char_cast_1.f90 which needs some
adjustment of the test, the following change allows it to pass:

--- ../_gcc_clean/gcc/testsuite/gfortran.dg/char_cast_1.f90 2008-05-19
14:20:35.0 +0200
+++ gcc/testsuite/gfortran.dg/char_cast_1.f90   2009-01-14 07:37:03.0
+0100
@@ -27,5 +27,5 @@
 end
 ! The sign that all is well is that [S.5][1] appears twice.
 ! Platform dependent variations are [S$5][1], [__S_5][1], [S___5][1]
-! { dg-final { scan-tree-dump-times 5\\\]\\\[1\\\] 2 original } }
+! { dg-final { scan-tree-dump-times 6\\\]\\\[1\\\] 2 original } }
 ! { dg-final { cleanup-tree-dump original } }

From the comment the test seems fragile and should probably changed to
something more robust.

Thanks for the patch.


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2009-01-12 Thread pault at gcc dot gnu dot org


--- Comment #20 from pault at gcc dot gnu dot org  2009-01-12 16:20 ---
Created an attachment (id=17079)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=17079action=view)
A preliminary patch for the PR

A slightly earlier version of this regtested OK.  Will do it to this version
tonight and then will submit.

Cheers

Paul


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-12-18 Thread pault at gcc dot gnu dot org


--- Comment #19 from pault at gcc dot gnu dot org  2008-12-18 22:29 ---
I have noticed that the scalar TRANSFER does not respect the undefined
condition for the rest of the result if the SOURCE size is less than the MOLD
size.  I have a patch for this, which is probably not complete but goes in the
right direction. In particular, it assumes that array types are compelete,
which was not the case when array TRANSFER was written. My inclination is to
combine the two to ensure complete bomb-proofness.  I will post my provisional
patch tomorrow.

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|2008-03-24 18:43:13 |2008-12-18 22:29:38
   date||


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-11-17 Thread mikael at gcc dot gnu dot org


--- Comment #18 from mikael at gcc dot gnu dot org  2008-11-17 19:43 ---
The problem is in ByteToString. 
The assignment of the transfer result is changed to a memmove. 
The memmove is controlled by the size of both the lhs and the rhs. 
The size of the rhs (actually the charlen=3 in this case) is not the same as
that of the actual data, as the charlen was copied from string's typespec in
transfer. 
Thus, we are copying 3 bytes, instead of 2. 

I think the code is still a valid program and a wrong-code, as while the
standard allow to have a result (partially) undefined/processor-dependent, it
doesn't allow to read unallocated memory. 


module TransferBug
  type ByteType
integer(kind=1) :: singleByte
  end type
  type(ByteType) :: BytesPrototype(2)
contains
  function StringToBytes(v) result (bytes)
character(len=2) :: v
type (ByteType) :: bytes(2)!size(transfer(v, BytesPrototype)))
bytes = transfer('Hi', BytesPrototype)
  end function

  subroutine BytesToString(bytes, string)
type (ByteType) :: bytes(2)
character(len=*) :: string
string = transfer(bytes, string)
  end subroutine
end module

program main
  use TransferBug
  character(len=3) :: str
  type(ByteType) :: i(1)
  call BytesToString( StringToBytes('Hi'), str )
end program



Valgrind doesn't complain on this testcase, but I strongly suspect that the bug
is still there. Using the commented array size forces the creation of
temporaries, and then valgrind catches the error. 


Now, how to fix this?
We could unconditionally create a temporary in transfer, so that we have both
the original data size and the target data size at the time of the memmove. 
That would probably mean a lot of regressions, and not only speed ones. 
We could keep track of the original data size.
I must admit I'm not satisfied with this one either. 
What else?


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-05-15 Thread fxcoudert at gcc dot gnu dot org


--- Comment #11 from fxcoudert at gcc dot gnu dot org  2008-05-15 07:46 
---
(In reply to comment #10)
 I don't see any signs of this bug actively fixed?

I wanted to look into it, but I can't reproduce it any more on x86_64-linux
with current mainline.


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-05-15 Thread hp at gcc dot gnu dot org


--- Comment #12 from hp at gcc dot gnu dot org  2008-05-15 10:42 ---
(In reply to comment #11)
 (In reply to comment #10)
  I don't see any signs of this bug actively fixed?
 
 I wanted to look into it, but I can't reproduce it any more on x86_64-linux
 with current mainline.

The bug is apparently of the kind that hides from time to time.
If you want to look into it, I suggest you use one of the mentioned revisions. 
IIUC you once had a revision where you could repeat it?
For CRIS, the bug hid again (or with less probability, was fixed) with r135315,
no surprises.


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-05-15 Thread jvdelisle at gcc dot gnu dot org


--- Comment #13 from jvdelisle at gcc dot gnu dot org  2008-05-15 13:22 
---
valgrind says:

==3482== 474 bytes in 3 blocks are definitely lost in loss record 4 of 11
==3482==at 0x4A04D1F: calloc (vg_replace_malloc.c:279)
==3482==by 0xB3500A: xcalloc (xmalloc.c:162)
==3482==by 0x558A47: init_emit (emit-rtl.c:5012)
==3482==by 0x5F0B52: prepare_function_start (function.c:3903)
==3482==by 0x5F2B68: init_function_start (function.c:3950)
==3482==by 0x4916AD: trans_function_start (trans-decl.c:1599)
==3482==by 0x49847D: gfc_generate_function_code (trans-decl.c:3108)
==3482==by 0x47F921: gfc_generate_module_code (trans.c:1206)
==3482==by 0x454AFB: gfc_parse_file (parse.c:3580)
==3482==by 0x47C69D: gfc_be_parse_file (f95-lang.c:258)
==3482==by 0x6E1140: toplev_main (toplev.c:962)
==3482==by 0x3FF061E073: (below main) (libc-start.c:220)
==3482== 
==3482== 
==3482== 816 bytes in 6 blocks are definitely lost in loss record 5 of 11
==3482==at 0x4A059F6: malloc (vg_replace_malloc.c:149)
==3482==by 0xB34FCB: xrealloc (xmalloc.c:177)
==3482==by 0x8C53B0: vec_heap_o_reserve_1 (vec.c:176)
==3482==by 0x50336D: insn_locators_alloc (vecprim.h:27)
==3482==by 0xA8FEA8: tree_expand_cfg (cfgexpand.c:1850)
==3482==by 0x6656A1: execute_one_pass (passes.c:1252)
==3482==by 0x6658A0: execute_pass_list (passes.c:1302)
==3482==by 0x745C85: tree_rest_of_compilation (tree-optimize.c:421)
==3482==by 0x8F4A01: cgraph_expand_function (cgraphunit.c:1148)
==3482==by 0x8F67A3: cgraph_assemble_pending_functions (cgraphunit.c:514)
==3482==by 0x8F5CF4: cgraph_finalize_function (cgraphunit.c:632)
==3482==by 0x499705: gfc_generate_function_code (trans-decl.c:3371)
==3482== 
==3482== 
==3482== 91,856 (70,320 direct, 21,536 indirect) bytes in 1,827 blocks are
definitely lost in loss record 10 of 11
==3482==at 0x4A059F6: malloc (vg_replace_malloc.c:149)
==3482==by 0xB35057: xmalloc (xmalloc.c:147)
==3482==by 0x447514: gfc_getmem (misc.c:37)
==3482==by 0x470C37: gfc_get_namespace (symbol.c:2079)
==3482==by 0x4544B1: parse_contained (parse.c:3103)
==3482==by 0x454C82: gfc_parse_file (parse.c:3409)
==3482==by 0x47C69D: gfc_be_parse_file (f95-lang.c:258)
==3482==by 0x6E1140: toplev_main (toplev.c:962)
==3482==by 0x3FF061E073: (below main) (libc-start.c:220)
==3482== 
==3482== LEAK SUMMARY:
==3482==definitely lost: 71,610 bytes in 1,836 blocks.
==3482==indirectly lost: 21,536 bytes in 145 blocks.
==3482==  possibly lost: 64 bytes in 2 blocks.
==3482==still reachable: 335,995 bytes in 1,228 blocks.
==3482== suppressed: 0 bytes in 0 blocks.


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-05-15 Thread fxcoudert at gcc dot gnu dot org


--- Comment #14 from fxcoudert at gcc dot gnu dot org  2008-05-15 13:23 
---
(In reply to comment #13)
 valgrind says

What target? I don't see anything.


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-05-15 Thread jvdelisle at gcc dot gnu dot org


--- Comment #15 from jvdelisle at gcc dot gnu dot org  2008-05-15 13:30 
---
x86-64-linux with valgrind --leak-check=full f951 transfer_assumed_size_1.f90

Using built-in specs.
Target: x86_64-unknown-linux-gnu
Configured with: ../gcc44/configure --prefix=/home/jerry/gcc/usr
--enable-languages=c,fortran --disable-libmudflap --enable-libgomp
--with-mpfr-lib=/home/jerry/gcc/usr/lib
--with-mpfr-include=/home/jerry/gcc/usr/include --disable-bootstrap
Thread model: posix
gcc version 4.4.0 20080514 (experimental) [trunk revision 134151] (GCC) 


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-05-15 Thread fxcoudert at gcc dot gnu dot org


--- Comment #16 from fxcoudert at gcc dot gnu dot org  2008-05-15 13:41 
---
(In reply to comment #15)
 x86-64-linux with valgrind --leak-check=full f951 transfer_assumed_size_1.f90

Oh, I see. But the rest of the PR is about running the compiled program. I
don't think the two are related. For what it's worth, the following is a
reduced testcase for the compiler leak issue:

  type ByteType
integer(kind=1) :: singleByte
  end type
  type(ByteType) :: bytes

  bytes = transfer(' ', bytes)
  end


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-05-15 Thread burnus at gcc dot gnu dot org


--- Comment #17 from burnus at gcc dot gnu dot org  2008-05-15 13:55 ---
On AMD Atholon64 x2 4800+ with openSUSE 11 (x86-64 beta3) I still get the
following valgrind message with today's gfortran (4.4.0 20080515 [trunk
revision 135326]):

$ gfortran -g gfortran.dg/transfer_assumed_size_1.f90
$ valgrind ./a.out
[...]
Invalid read of size 1
  at 0x4C26AF0: memmove (in
/usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
  by 0x400E9F: __transferbug_MOD_bytestostring (transfer_assumed_size_1.f90:31)
  by 0x40163C: MAIN__ (transfer_assumed_size_1.f90:41)
  by 0x40172B: main (fmain.c:21)
Address 0x58e27cb is 13 bytes before a block of size 2 free'd
  at 0x4C2430F: free (in /usr/lib64/valgrind/amd64-linux/vgpreload_memcheck.so)
  by 0x4013AD: __transferbug_MOD_stringtobytes (transfer_assumed_size_1.f90:21)
  by 0x401624: MAIN__ (transfer_assumed_size_1.f90:41)
  by 0x40172B: main (fmain.c:21)


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-05-14 Thread hp at gcc dot gnu dot org


--- Comment #10 from hp at gcc dot gnu dot org  2008-05-14 23:58 ---
Worked again with trunk as of r134973, stopped working again as in comment #7
with r135298.  I don't see any signs of this bug actively fixed?


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-04-09 Thread hp at gcc dot gnu dot org


--- Comment #7 from hp at gcc dot gnu dot org  2008-04-09 23:49 ---
For cris-elf, this graduated to a runtime error equivalent to SEGV (no
valgrind); worked with 134139, failed from 134147.


-- 

hp at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||hp at gcc dot gnu dot org


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-04-09 Thread hp at gcc dot gnu dot org


--- Comment #8 from hp at gcc dot gnu dot org  2008-04-09 23:56 ---
Try what?  I always start with a clean slate; an empty build directory!
Perhaps you mean something else?


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-04-09 Thread hp at gcc dot gnu dot org


--- Comment #9 from hp at gcc dot gnu dot org  2008-04-09 23:57 ---
(In reply to comment #8)
 Try what?  I always start with a clean slate; an empty build directory!
 Perhaps you mean something else?

Oops, replied in wrong PR... please ignore.


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-03-24 Thread fxcoudert at gcc dot gnu dot org


--- Comment #6 from fxcoudert at gcc dot gnu dot org  2008-03-24 18:43 
---
OK, I now can reproduce it. Here's a reduced testcase:

module TransferBug
  type ByteType
integer(kind=1) :: singleByte
  end type
  type(ByteType) :: BytesPrototype(1)
contains
  function StringToBytes(v) result (bytes)
character(len=2) :: v
type (ByteType) :: bytes(size(transfer(v, BytesPrototype)))
bytes = transfer('Hi', BytesPrototype)
  end function

  subroutine BytesToString(bytes, string)
type (ByteType) :: bytes(2)
character(len=*) :: string
string = transfer(bytes, string)
  end subroutine
end module

program main
  use TransferBug
  character(len=3) :: str
  call BytesToString( StringToBytes('Hi'), str )
end program


-- 

fxcoudert at gcc dot gnu dot org changed:

   What|Removed |Added

 Status|UNCONFIRMED |NEW
 Ever Confirmed|0   |1
   Last reconfirmed|-00-00 00:00:00 |2008-03-24 18:43:13
   date||


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-03-21 Thread pault at gcc dot gnu dot org


--- Comment #5 from pault at gcc dot gnu dot org  2008-03-21 20:35 ---
FX,

You'll be glad to know that your memory leak patch reports:

!! Memory deallocation error in the code generated by the GNU Fortran compiler.

!! Please report this issue to http://gcc.gnu.org/bugzilla/

Even on Cygwin_NT:)

Paul


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-03-16 Thread dfranke at gcc dot gnu dot org


--- Comment #4 from dfranke at gcc dot gnu dot org  2008-03-16 13:01 ---
$ gfortran-svn -v
Target: i686-pc-linux-gnu
gcc version 4.4.0 20080315 (experimental) (GCC)

$ gfortran-svn -g -Wall -W transfer_assumed_size_1.f90 
$ valgrind --tool=memcheck --leak-check=full a.out
[...]
==6291== Invalid read of size 1
==6291==at 0x4023A83: memmove (mc_replace_strmem.c:516)
==6291==by 0x8048C12: __transferbug_MOD_bytestostring
(transfer_assumed_size_1.f90:31)
==6291==by 0x80493A0: MAIN__ (transfer_assumed_size_1.f90:41)
==6291==by 0x80494A8: main (fmain.c:21)
==6291==  Address 0x425067b is 13 bytes before a block of size 2 free'd
==6291==at 0x402248F: free (vg_replace_malloc.c:323)
==6291==by 0x804912E: __transferbug_MOD_stringtobytes
(transfer_assumed_size_1.f90:21)
==6291==by 0x8049383: MAIN__ (transfer_assumed_size_1.f90:41)
==6291==by 0x80494A8: main (fmain.c:21)
==6291==
==6291== Invalid read of size 1
==6291==at 0x4023A90: memmove (mc_replace_strmem.c:516)
==6291==by 0x8048C12: __transferbug_MOD_bytestostring
(transfer_assumed_size_1.f90:31)
==6291==by 0x80493A0: MAIN__ (transfer_assumed_size_1.f90:41)
==6291==by 0x80494A8: main (fmain.c:21)
==6291==  Address 0x4250679 is 15 bytes before a block of size 2 free'd
==6291==at 0x402248F: free (vg_replace_malloc.c:323)
==6291==by 0x804912E: __transferbug_MOD_stringtobytes
(transfer_assumed_size_1.f90:21)
==6291==by 0x8049383: MAIN__ (transfer_assumed_size_1.f90:41)
==6291==by 0x80494A8: main (fmain.c:21)
[...]


-- 

dfranke at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||dfranke at gcc dot gnu dot
   ||org


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-02-29 Thread fxcoudert at gcc dot gnu dot org


--- Comment #3 from fxcoudert at gcc dot gnu dot org  2008-02-29 19:50 
---
(In reply to comment #2)
 Tobias, what target and options are you compiling with? I can't reproduce this
 on x86_64-linux...

Nor on i686-linux.


-- 


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-02-28 Thread fxcoudert at gcc dot gnu dot org


--- Comment #2 from fxcoudert at gcc dot gnu dot org  2008-02-28 16:01 
---
Tobias, what target and options are you compiling with? I can't reproduce this
on x86_64-linux...


-- 

fxcoudert at gcc dot gnu dot org changed:

   What|Removed |Added

 CC||fxcoudert at gcc dot gnu dot
   ||org


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



[Bug fortran/34955] transfer_assumed_size_1.f90: Valgrind error: invalid read of size 3

2008-02-15 Thread jvdelisle at gcc dot gnu dot org


--- Comment #1 from jvdelisle at gcc dot gnu dot org  2008-02-16 07:08 
---
Take a look at this with valgrind after compiling with -m32.  Very interesting


-- 


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