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

            Bug ID: 126381
           Summary: Nullifying a deferred-length character pointer in a
                    derived-type argument causes segmentation fault
           Product: gcc
           Version: 16.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: mpahlow at geomar dot de
  Target Milestone: ---

The system type is macos tahoe 26.5.2 with CommandLineTools version
26.6.0.0.1781586589

gcc-16.1.0 was installed with brew

The following code produces the segmentation fault:

!file test.f90
MODULE mymodule
  IMPLICIT NONE
  INTEGER, PARAMETER :: dp=KIND(0D0)
  TYPE :: dimension
     CHARACTER(LEN=:), POINTER :: char_vals(:)
  END TYPE dimension
CONTAINS
  SUBROUTINE values_and_bounds (dimns)
    IMPLICIT NONE
!    TYPE(dimension), TARGET, INTENT(INOUT) :: dimns ! works
    CLASS(dimension), TARGET, INTENT(INOUT) :: dimns ! crashes
    write(*,*)'values_and_bounds: ','x'
    NULLIFY (dimns%char_vals)
    write(*,*)'values_and_bounds: ','y'
  END SUBROUTINE values_and_bounds
END MODULE mymodule

PROGRAM test
  USE mymodule
  IMPLICIT NONE
  TYPE(dimension) :: dimen
  NULLIFY (dimen%char_vals)
  write(*,*)'a'
  CALL values_and_bounds(dimns=dimen)
  WRITE(*,*)'b'
END PROGRAM test
! end of file test.f90

Command line:
gfortran -Og -Wall -Wextra -fno-strict-aliasing -fwrapv
-fno-aggressive-loop-optimizations -fsanitize=address,undefined -o test
test.f90; ./test

There is no output from the compiler but executing the executable shows:
a
 values_and_bounds: x
test.f90:13:29: runtime error: member access within null pointer of type
'struct dimension'

Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0  0x10446b323
#1  0x10446a063
#2  0x18dc63743
#3  0x10423ce67
#4  0x10423d0cf
#5  0x10423d24f

Replacing "CLASS(dimension)" with "TYPE(dimension)" works.

Compiling with gfortran version 15.3.0 with the above command line makes the
executable hang but compiling with
gfortran-15 -Og -Wall -Wextra -fno-strict-aliasing -fwrapv
-fno-aggressive-loop-optimizations -o test test.f90; ./test
works

Reply via email to