1! { dg-do compile } 2! This checks the fix for PR19362 in which types from different scopes 3! that are the same, according to 4.4.2, would generate an ICE if one 4! were assigned to the other. As well as the test itself, various 5! other requirements of 4.4.2 are tested here. 6! 7! Contributed by Paul Thomas <pault@gcc.gnu.org> 8!============== 9module global 10 11 TYPE :: seq_type1 12 sequence 13 integer :: i 14 end type seq_type1 15 16 TYPE :: nonseq_type1 17 integer :: i 18 end type nonseq_type1 19 type (nonseq_type1) :: ns1 20 21end module global 22 23! Host types with local name != true name 24 use global, only: seq_type2=>seq_type1, nonseq_type2=>nonseq_type1, ns1 25 type (nonseq_type2) :: ns2 26 27! Host non-sequence types 28 type :: different_type 29 integer :: i 30 end type different_type 31 type (different_type) :: dt1 32 33 type :: same_type 34 integer :: i 35 end type same_type 36 type (same_type) :: st1 37 38 real :: seq_type1 39 40! Provide a reference to dt1. 41 dt1 = different_type (42) 42! These share a type declaration. 43 ns2 = ns1 44! USE associated seq_type1 is renamed. 45 seq_type1 = 1.0 46 47! These are different. 48 st1 = dt ! { dg-error "convert REAL" } 49 50 call foo (st1) ! { dg-error "Type mismatch in argument" } 51 52contains 53 54 subroutine foo (st2) 55 56! Contained type with local name != true name. 57! This is the same as seq_type2 in the host. 58 use global, only: seq_type3=>seq_type1 59 60! This local declaration is the same as seq_type3 and seq_type2. 61 TYPE :: seq_type1 62 sequence 63 integer :: i 64 end type seq_type1 65 66! Host association of renamed type. 67 type (seq_type2) :: x 68! Locally declared version of the same thing. 69 type (seq_type1) :: y 70! USE associated renamed type. 71 type (seq_type3) :: z 72 73! Contained type that is different to that in the host. 74 type :: different_type 75 complex :: z 76 end type different_type 77 78 type :: same_type 79 integer :: i 80 end type same_type 81 82 type (different_type) :: b 83 type (same_type) :: st2 84 85! Error because these are not the same. 86 b = dt1 ! { dg-error "convert TYPE" } 87 88! Error in spite of the name - these are non-sequence types and are NOT 89! the same. 90 st1 = st2 ! { dg-error "convert TYPE" } 91 92 b%z = (2.0,-1.0) 93 94! Check that the references that are correct actually work. These test the 95! fix for PR19362. 96 x = seq_type1 (1) 97 y = x 98 y = seq_type3 (99) 99 end subroutine foo 100END 101