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

            Bug ID: 119380
           Summary: [12,13,14,15] Associate malloc error on selector with
                    allocatable and procedure pointer components
           Product: gcc
           Version: 15.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: damian at archaeologic dot codes
  Target Milestone: ---

An associate construct causes the alloc error "pointer being freed was not
allocated" when the selector is a structure constructor for a derived type with
an allocatable component and a procedure pointer component.  This same error
occurs if a function returning the same type replaces the structure
constructor. The same error occurs for programs compiled with gfortran 12.4.0,
13.3.0, 14.2.0, and 15.0.1:

% cat all.f90 
  implicit none

  type foo_t
    integer, allocatable :: i_
    procedure(f), pointer, nopass :: f_
  end type

  associate(foo => foo_t(1,f))
  end associate

contains

  function f()
    logical, allocatable :: f
    f = .true.
  end function

end

% gfortran all.f90 
% ./a.out
a.out(99502,0x1ed7e4840) malloc: *** error for object 0x200000000: pointer
being freed was not allocated
a.out(99502,0x1ed7e4840) malloc: *** set a breakpoint in malloc_error_break to
debug

Program received signal SIGABRT: Process abort signal.

Backtrace for this error:
#0  0x100e7a563
#1  0x100e794e3
#2  0x183eaade3
#3  0x183e73f6f
#4  0x183d80907
#5  0x183c89e37
#6  0x183c8d9bb
#7  0x183cac143
#8  0x100acfa43
#9  0x100acfabf
zsh: abort      ./a.out

% gfortran --version
GNU Fortran (GCC) 15.0.1 20250315 (experimental)

Reply via email to