1! PR target/36680 2! { dg-do compile { target i?86-*-* x86_64-*-* } } 3! { dg-options "-O1 -fschedule-insns" } 4 5MODULE class_dummy_atom_kdtree_types 6 TYPE dummy_atom_kdtree_data 7 INTEGER :: dummy 8 END TYPE 9 10 TYPE :: dummy_atom_kdtree_node 11 TYPE(dummy_atom_kdtree_node_private), POINTER :: p 12 END TYPE 13 14 TYPE :: dummy_atom_kdtree_node_private 15 TYPE(dummy_atom_kdtree_data) :: data 16 END TYPE 17 18 TYPE :: dummy_atom_kdtree 19 TYPE(dummy_atom_kdtree_node) :: root 20 END TYPE 21END MODULE 22 23FUNCTION dummy_atom_kdtree_insert(this, item) 24 USE class_dummy_atom_kdtree_types 25 26 TYPE(dummy_atom_kdtree), INTENT(inout) :: this 27 TYPE(dummy_atom_kdtree_data), INTENT(in) :: item 28 29 TYPE(dummy_atom_kdtree_node) :: parent, current 30 INTEGER :: cmp, level, discriminator 31 32 parent = dummy_atom_kdtree_node(null()) 33 current = this%root 34 level = 1 35 discriminator = 1 36 37 DO WHILE (ASSOCIATED( current%p )) 38 discriminator = MODULO(level-1, 3) + 1 39 cmp = dummy_atom_kdtree_data_compare(item, current%p%data, discriminator) 40 level = level + 1 41 END DO 42 43END FUNCTION 44