[Bug fortran/64699] New: memory corruption with array packing

tkoenig at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Jan 20 20:35:00 GMT 2015


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64699

            Bug ID: 64699
           Summary: memory corruption with array packing
           Product: gcc
           Version: 5.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: tkoenig at gcc dot gnu.org

Trying to find some codepaths for PR 57023 to make sure that there
are no new regressions, find a bug...

ig25@linux-fd1f:~/Krempel/Pack> cat int.f90
module mymod
  implicit none
contains
   subroutine foo3(a,n)
     integer, dimension(n,n), intent(inout) :: a
     integer :: n, m
     m = n - 1
     call baz(a(1:m,1:m),n)  ! { dg-warning "array temporary" }
   end subroutine foo3

  subroutine foo4(a,n)
    integer, dimension(n,n), intent(inout) :: a
    integer, intent(in) :: n
    a(1:n,1:n) = 1
  end subroutine foo4

  subroutine baz(a,n)
    integer, dimension(n,n), intent(inout) :: a
    integer, intent(in) :: n
    a = 1
  end subroutine baz

end module mymod

program main
  use mymod
  implicit none
  integer, dimension(5,5) :: a, b
  integer :: n

  n = 5
  a = 0
  call foo3(a,n)
  if (any(a /= b)) call abort

end program main
ig25@linux-fd1f:~/Krempel/Pack> gfortran int.f90
ig25@linux-fd1f:~/Krempel/Pack> ./a.out
*** Error in `./a.out': free(): invalid pointer: 0x0000000000a7cfd0 ***
*** Error in `./a.out': malloc(): memory corruption: 0x0000000000a7d020 ***
ig25@linux-fd1f:~/Krempel/Pack> valgrind ./a.out
==29433== Memcheck, a memory error detector
==29433== Copyright (C) 2002-2012, and GNU GPL'd, by Julian Seward et al.
==29433== Using Valgrind-3.8.1 and LibVEX; rerun with -h for copyright info
==29433== Command: ./a.out
==29433== 
==29433== Invalid write of size 4
==29433==    at 0x40086F: __mymod_MOD_baz (in /home/ig25/Krempel/Pack/a.out)
==29433==    by 0x4009F7: __mymod_MOD_foo3 (in /home/ig25/Krempel/Pack/a.out)
==29433==    by 0x400A6C: MAIN__ (in /home/ig25/Krempel/Pack/a.out)
==29433==    by 0x400B17: main (in /home/ig25/Krempel/Pack/a.out)
==29433==  Address 0x5c60800 is 0 bytes after a block of size 64 alloc'd
==29433==    at 0x4C277AB: malloc (in
/usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==29433==    by 0x4E4F9A6: _gfortrani_xmallocarray (memory.c:67)
==29433==    by 0x4EF2F8A: _gfortrani_internal_pack_4 (in_pack_i4.c:79)
==29433==    by 0x4009E5: __mymod_MOD_foo3 (in /home/ig25/Krempel/Pack/a.out)
==29433==    by 0x400A6C: MAIN__ (in /home/ig25/Krempel/Pack/a.out)
==29433==    by 0x400B17: main (in /home/ig25/Krempel/Pack/a.out)
==29433== 
==29433== Conditional jump or move depends on uninitialised value(s)
==29433==    at 0x400ABC: MAIN__ (in /home/ig25/Krempel/Pack/a.out)
==29433==    by 0x400B17: main (in /home/ig25/Krempel/Pack/a.out)
==29433== 

Program aborted. Backtrace:
#0  0x4E50477
#1  0x4E512A2
#2  0x4F225D8
#3  0x400AE0 in MAIN__ at int.f90:?

Looks the same with 4.8, I'm not sure about earlier.



More information about the Gcc-bugs mailing list