https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84093
--- Comment #2 from Neil Carlson <neil.n.carlson at gmail dot com> --- The forced cascade of keyword use is rather annoying, so perhaps someone was thinking the current gfortran behavior is a useful extension, and it almost is. But consider this example: type :: parent type(parent), pointer :: next => null() end type type, extends(parent) :: child integer :: n end type type(child) :: c type(parent), pointer :: p allocate(p) allocate(p%next) c = child(parent=p,n=1) if (.not.associated(c%next,p%next)) stop 1 c = child(p,1) if (.not.associated(c%next,p)) stop 2 end GFortran doesn't distinguish between the two constructor expressions, treating the second the same as the first, when in fact they are quite different.