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

            Bug ID: 116656
           Summary: Nested pointer assignment is causing a SIGBUS error.
           Product: gcc
           Version: 14.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: cianciosamr at ornl dot gov
  Target Milestone: ---

The following test program is failing with the function foo_construct called
twice and ending with a SIGBUS error. The target machine is MacOS 14.6.1
running on an Apple M1 Pro.



% cat test.f90 
module test

implicit none

type :: foo
end type

contains

function make()
implicit none

class (foo), pointer :: make

make => foo_construct()

end function

function foo_construct()
implicit none

class (foo), pointer :: foo_construct

allocate(foo_construct)
write (*,*) 'construct_foo'

end function

end module
% cat test_prog.f90 
program test_construct
use test
implicit none

class (foo), pointer :: foo_instant

foo_instant => make()
deallocate(foo_instant)

end program
% gfortran -Wall -Wextra -c test.f90     
% gfortran -Wall -Wextra -c test_prog.f90
% gfortran -Wall -Wextra -o test_prog *.o
% ./test_prog 
 construct_foo
 construct_foo

Program received signal SIGBUS: Access to an undefined portion of a memory
object.

Backtrace for this error:
#0  0x102a7eccf
#1  0x102a7dd23
#2  0x18cd7a583
#3  0x102443cff
#4  0x102443d57
zsh: bus error  ./test_prog
% gfortran --version
GNU Fortran (GCC) 14.2.0
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.



Note: If I change the functions to use result variables, the code works as
expected.

Reply via email to