https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101814
Bug ID: 101814 Summary: Initialization of local variables broken in presence of SAVE Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: anlauf at gcc dot gnu.org Target Milestone: --- While working on PR68568, I realized that using initialization of local variables using -finit-local-zero, -finit-integer=nnn etc. rejects valid code in the presence of a SAVE statement. % cat zz1.f90 subroutine s1(n) integer, intent(in) :: n character(len=n) :: x save x = 'a' end % gfc-12 -c zz1.f90 -finit-local-zero zz1.f90:1:13: 1 | subroutine s1(n) | 1 Error: non-constant initialization expression at (1) % cat zz2.f90 subroutine s2(n) integer, intent(in) :: n integer :: y(n) save y = 1 end % gfc-12 -c zz2.f90 -finit-local-zero zz2.f90:3:29: 3 | integer :: y(n) | 1 Error: Automatic array 'y' at (1) cannot have an initializer % cat zz3.f90 subroutine s1(n) integer, intent(in) :: n character(len=n) :: x(n) save x = 'a' end % gfc-12 -c zz3.f90 -finit-local-zero zz3.f90:3:29: 3 | character(len=n) :: x(n) | 1 Error: Automatic array 'x' at (1) cannot have an initializer Commenting out the SAVE statements or removing -finit* allows the code to compile. Both error messages are bogus, and the code is valid: F2018: 8.6.14 SAVE statement (1) (...) A SAVE statement without a saved entity list is treated as though it contained the names of all allowed items in the same scoping unit. As automatic objects are not allowed items they should be ignored by the SAVE and its presence should not make any difference.