https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105371
Bug ID: 105371 Summary: The result of the merge function is different when it's type of parameters is the extensions type of derived type Product: gcc Version: 11.3.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: xudong....@compiler-dev.com Target Milestone: --- Created attachment 52862 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52862&action=edit output Whether the mask is a constant or a variable causes inconsistent results of the merge function when it's type of parameters is the extensions type of derived type. 1.The mask is constant Program test00 Type t Integer :: c End Type Type,Extends(t) :: t2 Integer :: c2 End Type Class(t),Allocatable :: x,y,r logical :: ok = .true. x = t2(1,-1) y = t2(2,-2) r = merge (x,y,.true.) Select Type (z=>r) Type Is (t) print *,z%c Type Is (t2) print *,z%c,z%c2 End Select End Program 2. The mask is variable Program test01 Type t Integer :: c End Type Type,Extends(t) :: t2 Integer :: c2 End Type Class(t),Allocatable :: x,y,r logical :: ok = .true. integer :: i = 1 x = t2(1,-1) y = t2(2,-2) r = merge (x,y,i == 1) Select Type (z=>r) Type Is (t) print *,z%c Type Is (t2) print *,z%c,z%c2 End Select End Program