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

            Bug ID: 120483
           Summary: character(len=:), allocatable, save variable returns
                    incorrect substring
           Product: gcc
           Version: 15.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: peter at guentert dot com
  Target Milestone: ---

When using a deferred-length allocatable character variable with the SAVE
attribute, substring references give incorrect results.

Test case:
---------------------------------------
program test
  character(len=:), allocatable, save :: s1
  character(len=:), allocatable :: s2

  s1 = 'ABC'
  print *, 's1='//s1//', s1(3:3)='//s1(3:3)

  s2 = 'ABC'
  print *, 's2='//s2//', s2(3:3)='//s2(3:3)
end
---------------------------------------

Expected Output:
 s1=ABC, s1(3:3)=C
 s2=ABC, s2(3:3)=C

Actual Output (gfortran 15.1.0):
 s1=ABC, s1(3:3)=A
 s2=ABC, s2(3:3)=C

Compiler Version:
  $ gfortran --version
  GNU Fortran (Homebrew GCC 15.1.0) 15.1.0

System:
  MacOS Sequoia 15.5 (24F74)
  Homebrew 4.5.3
  $ gcc --version
  Apple clang version 17.0.0 (clang-1700.0.13.5)
  Target: arm64-apple-darwin24.5.0
  Thread model: posix
  InstalledDir: /Library/Developer/CommandLineTools/usr/bin
  $ uname -a:
  Darwin ... 24.5.0 Darwin Kernel Version 24.5.0: Tue Apr 22 19:54:49 PDT 2025;
root:xnu-11417.121.6~2/RELEASE_ARM64_T6000 arm64

Notes:
- Removing `SAVE` from `s1` makes it behave correctly.
- gfortran 13.3.0 and Intel compilers give correct results.

Reply via email to