https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121425
Bug ID: 121425 Summary: Invalid derived type constructor using polymorphic variable Product: gcc Version: 16.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: federico.perini at gmail dot com Target Milestone: --- A default DT constructor called with a variable of the correct type, but upstream polymorphic, returns wrong data. Fails with all versions of gfortran. I'm not sure about the standard conformance of this, I defer to your comments... but it seems like it works with other compilers (https://godbolt.org/z/PYcs5sGhP). ``` module types use iso_fortran_env, only: rp => real64 type :: vec real(rp) :: xyz(3) = 0 end type vec type :: ax type(vec) :: p type(vec) :: n end type ax contains subroutine use_class(v) class(vec), intent(in) :: v ! no error if type(vec) type(ax) :: aa aa = ax(p=v,n=vec([1,0,0])) if (any(nint(aa%p%xyz)/=[1,2,3])) then print *, 'n=',aa%n%xyz print *, 'p=',aa%p%xyz error stop 'invalid default constructor' endif end subroutine use_class end module types program t use types type(vec) :: x x = vec([1,2,3]) call use_class(x) end program t ``` It's important in use cases where overriding the default constructor with a function would void defining `parameter`s on the DT. Thank you, Federico