Fortran, committed: segfault with allocate and stat for derived types with default initialization (pr 68078)

Louis Krupp louis.krupp@zoho.com
Sun Sep 18 20:22:00 GMT 2016


Two possibilities:

1. malloc() doesn't silently return NULL on Darwin when it runs out of memory;  it always generates an error message.

2. setrlimit() doesn't work the same on Darwin as it does on Linux, and the test program is hitting a system limit.  It so happens that when I first looked at this bug, I ignored the "ulimit -v 1000000" instruction (I have a bad habit of not paying attention), and I let the program do memory allocation forever.  It eventually got a segfault deep within malloc().  I was able to reproduce this in C as well as in Fortran.  Perhaps something similar happens with Darwin, although at least on Darwin malloc() issues an error, however mysterious, instead of crashing.

Two ways to go from here:

1. If anyone can let me ssh into a Darwin system, I can see if I can get this to work.

2. If that's not possible, add a dg-skip-if so that we don't try to run this test on Darwin, since it requires some OS support, and it doesn't just involve Fortran.

Louis

---- On Sun, 18 Sep 2016 03:45:38 -0700 Dominique d'Humières<dominiq@lps.ens.fr> wrote ---- 
 > > Fixed in revision 240219. 
 >  
 > The test fails on x86_64-apple-darwin15 (at least): 
 >  
 > FAIL: gfortran.dg/pr68078.f90   -O0  output pattern test 
 > FAIL: gfortran.dg/pr68078.f90   -O1  output pattern test 
 > FAIL: gfortran.dg/pr68078.f90   -O2  output pattern test 
 > FAIL: gfortran.dg/pr68078.f90   -O3 -fomit-frame-pointer -funroll-loops -fpeel-loops -ftracer -finline-functions  output pattern test 
 > FAIL: gfortran.dg/pr68078.f90   -O3 -g  output pattern test 
 > FAIL: gfortran.dg/pr68078.f90   -Os  output pattern test 
 > FAIL: gfortran.dg/pr68078.f90   -g -flto  output pattern test 
 >  
 > The failures are 
 >  
 > Output was: 
 > pr68078.exe(37410,0xa381f000) malloc: *** mach_vm_map(size=8388608) failed (error code=3) 
 > *** error: can't allocate region securely 
 > *** set a breakpoint in malloc_error_break to debug 
 >  foo_ptr allocation failed 
 > pr68078.exe(37410,0xa381f000) malloc: *** mach_vm_map(size=8388608) failed (error code=3) 
 > *** error: can't allocate region securely 
 > *** set a breakpoint in malloc_error_break to debug 
 >  foo_obj allocation failed 
 >  
 > Should match: 
 >  *foo_ptr allocation failed( 
 > |^M 
 > |^M) *foo_obj allocation failed( 
 > |^M 
 > |^M) *foo_array allocation failed( 
 > |^M 
 > |^M) 
 >  
 > with -O0 
 >  
 > and 
 >  
 > Output was: 
 > pr68078.exe(39345,0xa381f000) malloc: *** mach_vm_map(size=8388608) failed (error code=3) 
 > *** error: can't allocate region securely 
 > *** set a breakpoint in malloc_error_break to debug 
 >  foo_ptr allocation failed 
 >  
 > Should match: 
 >  *foo_ptr allocation failed( 
 > |^M 
 > |^M) *foo_obj allocation failed( 
 > |^M 
 > |^M) *foo_array allocation failed( 
 > |^M 
 > |^M) 
 >  
 > for the other options. 
 >  
 > Dominique 
 >  
 > 
 > 





More information about the Gcc-patches mailing list