1! { dg-do compile }
2! Tests the fix for PR31550 in which pointers to derived type components
3! were being TREE-SSA declared in the wrong order and so in the incorrect
4! context.
5!
6! Contributed by Daniel Franke <dfranke@gcc.gnu.org>
7!
8MODULE class_dummy_atom_types
9TYPE :: dummy_atom_list
10  TYPE(dummy_atom), DIMENSION(:), POINTER :: table
11  INTEGER                                 :: nused
12END TYPE
13
14TYPE :: dummy_atom
15  TYPE(dummy_atom_private), POINTER :: p
16END TYPE
17
18TYPE :: dummy_atom_private
19  TYPE(dummy_atom_list)       :: neighbours
20END TYPE
21END MODULE
22
23MODULE class_dummy_atom_list
24USE class_dummy_atom_types, ONLY: dummy_atom_list
25
26INTERFACE
27  SUBROUTINE dummy_atom_list_init_copy(this, other)
28    USE class_dummy_atom_types, ONLY: dummy_atom_list
29    TYPE(dummy_atom_list), INTENT(out) :: this
30    TYPE(dummy_atom_list), INTENT(in)  :: other
31  END SUBROUTINE
32END INTERFACE
33
34INTERFACE
35  SUBROUTINE dummy_atom_list_merge(this, other)
36    USE class_dummy_atom_types, ONLY: dummy_atom_list
37    TYPE(dummy_atom_list), INTENT(inout) :: this
38    TYPE(dummy_atom_list), INTENT(in)    :: other
39  END SUBROUTINE
40END INTERFACE
41END MODULE
42
43SUBROUTINE dummy_atom_list_init_copy(this, other)
44  USE class_dummy_atom_list, ONLY: dummy_atom_list, dummy_atom_list_merge
45
46  TYPE(dummy_atom_list), INTENT(out) :: this
47  TYPE(dummy_atom_list), INTENT(in)  :: other
48
49  this%table(1:this%nused) = other%table(1:other%nused)
50END SUBROUTINE
51