[Bug fortran/66310] Problems with intrinsic repeat for large number of copies
dominiq at lps dot ens.fr
gcc-bugzilla@gcc.gnu.org
Fri Jul 22 18:34:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66310
--- Comment #14 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
On x86_64-apple-darwin15 with 16Gb of RAM and ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 256
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 65532
cpu time (seconds, -t) unlimited
max user processes (-u) 709
virtual memory (kbytes, -v) unlimited
with the patch at https://gcc.gnu.org/ml/fortran/2016-07/msg00097.html
compiling the test
program p
character(len=2,kind=4), parameter :: z = 'yz'
print *, repeat(z, 2**25)
end
fails at compile time with
f951(36102,0x7fff74e38000) malloc: *** mach_vm_map(size=18446744073441116160)
failed (error code=3)
Compiling the following tests with -m64 (z is no longer a parameter)
program p
character :: z = 'z'
print *, repeat(z, huge(1)-2**9)
end
gives
a.out(92056,0x7fff74e38000) malloc: *** mach_vm_map(size=18446744071562067968)
failed (error code=3)
*** error: can't allocate region
program p
character(len=2,kind=4) :: z = 'yz'
print *, repeat(z, huge(1)/8+2)
end
and
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
The codes execute without any problem if the repeat counts are decremented by
one (tested 1024 times for the first case).
Compiling the following code with -m32
program p
character :: z = 'z'
print *, repeat(z, 2**30-2**21+2**12-1)
end
gave an executable failing 7 times over 2048 runs with
...
real 0m5.318s
user 0m1.058s
sys 0m1.860s
a.out(49086,0xa37d2000) malloc: *** mach_vm_map(size=1071652864) failed (error
code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Operating system error: Cannot allocate memory
Memory allocation failure in xrealloc
Error termination. Backtrace:
#0 0x758f
#1 0x824d
#2 0x845f
#3 0x6dbb
#4 0xbd1a4
#5 0xafcfc
#6 0xb7832
#7 0xbcda5
#8 0xafb26
#9 0x2dff
#10 0x2e5f
real 0m1.197s
user 0m0.787s
sys 0m0.373s
...
while decrementing the repeat count by one runs 2048 times without failure.
Also
program p
character :: z = 'z'
print *, repeat(z, 2**30-2**20)
end
fails at run time with
a.out(35477,0xa37d2000) malloc: *** mach_vm_map(size=1072697344) failed (error
code=3)
More information about the Gcc-bugs
mailing list