https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98565
Paul Thomas <pault at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |pault at gcc dot gnu.org Assignee|unassigned at gcc dot gnu.org |pault at gcc dot gnu.org --- Comment #2 from Paul Thomas <pault at gcc dot gnu.org> --- Created attachment 50036 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=50036&action=edit Fix for the PR Dear Yves, I will be committing this patch to master this evening, after it has completed regression testing, together with the testcase below. I will apply to 9- and 10-branches in a few weeks time. You will note that I have made the components public so that I do not need to write constructors. Many thanks for the report. I hope that the fix will help your work in support of sustainable development in Amazonia, even if in an insignificant way. Regards Paul ! { dg-do run } ! ! associated_target_7.f90: Test the fix for PR98565. ! ! Contributed by Yves Secretan <yves.secre...@ete.inrs.ca> ! MODULE PS_SN0N_M IMPLICIT NONE PRIVATE TYPE, PUBLIC :: DT_GRID_T INTEGER :: NNT CONTAINS ! PASS END TYPE DT_GRID_T TYPE, PUBLIC :: LM_ELEM_T CLASS(DT_GRID_T), POINTER :: PGRID CONTAINS PROCEDURE, PUBLIC :: REQPGRID => LM_ELEM_REGPGRID END TYPE LM_ELEM_T TYPE, PUBLIC :: PS_SN0N_T CLASS(DT_GRID_T), POINTER :: PGRID CONTAINS PROCEDURE, PUBLIC :: ASGOELE => PS_SN0N_ASGOELE END TYPE PS_SN0N_T CONTAINS !------------------------------------------------------------------------ !------------------------------------------------------------------------ FUNCTION LM_ELEM_REGPGRID(SELF) RESULT(PGRID) CLASS(DT_GRID_T), POINTER :: PGRID CLASS(LM_ELEM_T), INTENT(IN) :: SELF PGRID => SELF%PGRID RETURN END FUNCTION LM_ELEM_REGPGRID !------------------------------------------------------------------------ !------------------------------------------------------------------------ FUNCTION PS_SN0N_ASGOELE(SELF, OELE) RESULT(ERMSG) INTEGER :: ERMSG CLASS(PS_SN0N_T), INTENT(IN) :: SELF CLASS(LM_ELEM_T), INTENT(IN) :: OELE !CLASS(DT_GRID_T), POINTER :: PGRID LOGICAL :: ISOK !------------------------------------------------------------------------ ! ASSOCIATED with temp variable compiles !PGRID => OELE%REQPGRID() !ISOK = ASSOCIATED(SELF%PGRID, PGRID) ! ASSOCIATE without temp variable crashes with ICE ISOK = ASSOCIATED(SELF%PGRID, OELE%REQPGRID()) ERMSG = 0 IF (ISOK) ERMSG = 1 RETURN END FUNCTION PS_SN0N_ASGOELE END MODULE PS_SN0N_M USE PS_SN0N_M CLASS(PS_SN0N_T), ALLOCATABLE :: SELF CLASS(LM_ELEM_T), ALLOCATABLE :: OELE TYPE (DT_GRID_T), TARGET :: GRID1 = DT_GRID_T (42) TYPE (DT_GRID_T), TARGET :: GRID2 = DT_GRID_T (84) ALLOCATE (PS_SN0N_T :: SELF) ALLOCATE (LM_ELEM_T :: OELE) SELF%PGRID => GRID1 OELE%PGRID => NULL () IF (SELF%ASGOELE (OELE) .NE. 0) STOP 1 OELE%PGRID => GRID2 IF (SELF%ASGOELE (OELE) .NE. 0) STOP 2 OELE%PGRID => GRID1 IF (SELF%ASGOELE (OELE) .NE. 1) STOP 3 END