https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106546
Bug ID: 106546 Summary: Incorrect reuse of allocatable array temporaries under -O2 -fno-automatic Product: gcc Version: 10.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: solomon.gibbs at gmail dot com Target Milestone: --- Created attachment 53420 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=53420&action=edit Test program that produces the error when compiled and run as described I get an array extent error when running code using allocatable array temporaries compiled with with the flags -O2 -fcheck=bounds -fno-automatic. The error does not occur with -fautomatic instead of -fno-automatic. I believe the generated code is trying to reuse the allocated array temporary, but does not correctly manage resizing it before reuse. It appears that once the temporary is allocated with the maximum possible size, it is never reallocated with a smaller size. I have observed this behavior with GFortran 8.5, 9.4, and 10.3. The attached code example shows the behavior. Compiled as gfortran-10 -o bogus bogus.f90 -O2 -fcheck=bounds -fno-automatic -Wall -Wextra The executable will eventually crash with an error like: Fortran runtime error: Incorrect extent in argument B in MATMUL intrinsic in dimension 1: is 6, should be 2 Error termination. Backtrace: #0 0x7f39f6af6d21 in ??? #1 0x7f39f6af7869 in ??? #2 0x7f39f6af7d99 in ??? #3 0x564889bb5e87 in ??? #4 0x564889bb5144 in ??? #5 0x7f39f6908082 in __libc_start_main at ../csu/libc-start.c:308 #6 0x564889bb517d in ??? #7 0xffffffffffffffff in ??? $ gfortran-10 -v Using built-in specs. COLLECT_GCC=gfortran-10 COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/10/lto-wrapper OFFLOAD_TARGET_NAMES=nvptx-none:amdgcn-amdhsa:hsa OFFLOAD_TARGET_DEFAULT=1 Target: x86_64-linux-gnu Configured with: ../src/configure -v --with-pkgversion='Ubuntu 10.3.0-1ubuntu1~20.04' --with-bugurl=file:///usr/share/doc/gcc-10/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++,m2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-10 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --enable-default-pie --with-system-zlib --enable-libphobos-checking=release --with-target-system-zlib=auto --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none=/build/gcc-10-S4I5Pr/gcc-10-10.3.0/debian/tmp-nvptx/usr,amdgcn-amdhsa=/build/gcc-10-S4I5Pr/gcc-10-10.3.0/debian/tmp-gcn/usr,hsa --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu --with-build-config=bootstrap-lto-lean --enable-link-mutex Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 10.3.0 (Ubuntu 10.3.0-1ubuntu1~20.04)