https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106603
Bug ID: 106603 Summary: Problem with character(:), allocatable, intent(out) :: err for functions which return fixed arrays Product: gcc Version: 12.1.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: wogan at uw dot edu Target Milestone: --- Consider the following code: ```fortran program main use iso_fortran_env, only: dp => real64 implicit none call test_fun1() contains function fun1(a, err) result(b) real(dp), intent(in) :: a character(:), allocatable, intent(out) :: err real(dp) :: b(2) b = 1 if (a > 2) then err = "a bigger than 2" print*,'err in fun1: ',err return endif err = "OK" end function subroutine test_fun1() real(dp) :: a, b(2) character(:), allocatable :: err a = 3 b = fun1(a, err) if (allocated(err)) then print*,'err is allocated' print*,'next line tries to print err' print*,err endif end subroutine end program ``` I compile the code with `gfortran main.f90`, then run with `./a.out`. The result is ``` (base) nicholas@Nicholass-MacBook-Air test_gfortran_err % ./a.out err in fun1: a bigger than 2 err is allocated next line tries to print err Program received signal SIGSEGV: Segmentation fault - invalid memory reference. Backtrace for this error: #0 0x100df21c7 #1 0x100df11a3 #2 0x194092c43 #3 0x100ee865b zsh: segmentation fault ./a.out ``` When I compile with `-fno-strict-aliasing -fwrapv -fno-aggressive-loop-optimizations` I get a slightly different result, which is also not correct: ``` (base) nicholas@Nicholass-MacBook-Air test_gfortran_err % ./a.out err in fun1: a bigger than 2 err is allocated next line tries to print err ``` Instead of the results above, the program should print "a bigger than 2". Here is a relevant form where I discussed the bug with others: https://fortran-lang.discourse.group/t/what-is-wrong-with-this-code/4151 . Exact version of GCC: ``` (base) nicholas@Nicholass-MacBook-Air test_gfortran_err % gfortran -v Using built-in specs. COLLECT_GCC=gfortran COLLECT_LTO_WRAPPER=/opt/homebrew/Cellar/gcc/12.1.0/bin/../libexec/gcc/aarch64-apple-darwin20/12/lto-wrapper Target: aarch64-apple-darwin20 Configured with: ../configure --prefix=/opt/homebrew/opt/gcc --libdir=/opt/homebrew/opt/gcc/lib/gcc/current --disable-nls --enable-checking=release --with-gcc-major-version-only --enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-12 --with-gmp=/opt/homebrew/opt/gmp --with-mpfr=/opt/homebrew/opt/mpfr --with-mpc=/opt/homebrew/opt/libmpc --with-isl=/opt/homebrew/opt/isl --with-zstd=/opt/homebrew/opt/zstd --with-pkgversion='Homebrew GCC 12.1.0' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues --with-system-zlib --build=aarch64-apple-darwin20 --with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX11.sdk Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 12.1.0 (Homebrew GCC 12.1.0) ```