https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67528
Bug ID: 67528 Summary: Wrong result with defined assignment operator and/or parenthesized expressions and allocatable components Product: gcc Version: 6.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: mrestelli at gmail dot com Target Milestone: --- As discussed in https://groups.google.com/d/msg/comp.lang.fortran/8q2nYfHnZfU/M9FmGgx7AQAJ gfortran produces wrong results with the attached code (details are included in the source) $ gfortran --version GNU Fortran (GCC) 6.0.0 20150907 (experimental) module m implicit none type :: t_a real, allocatable :: x end type t_a interface assignment(=) module procedure copy_t_a end interface contains subroutine copy_t_a(y,x) type(t_a), intent(in) :: x type(t_a), intent(out) :: y allocate( y%x , source=x%x) end subroutine copy_t_a end module m program p use m implicit none type(t_a) :: v1 ! Define v1 allocate( v1%x ) v1%x = 1.5 ! This produces segfault v1 = v1 write(*,*) "Case A: v1%x = ",v1%x ! should print 1.5 ! This produces segfault !v1 = (v1) !write(*,*) "Case B: v1%x = ",v1%x ! should print 1.5 ! This prints 0 !call copy_t_a( v1 , (v1) ) !write(*,*) "Case C: v1%x = ",v1%x ! should print 1.5 end program p