blob: 9a627b82ccf4e3673556f7bd6cebcda982b6a495 [file] [log] [blame]
! { dg-do compile }
! This checks the fix for PR19362 in which types from different scopes
! that are the same, according to 4.4.2, would generate an ICE if one
! were assigned to the other. As well as the test itself, various
! other requirements of 4.4.2 are tested here.
!
! Contributed by Paul Thomas <pault@gcc.gnu.org>
!==============
module global
TYPE :: seq_type1
sequence
integer :: i
end type seq_type1
TYPE :: nonseq_type1
integer :: i
end type nonseq_type1
type (nonseq_type1) :: ns1
end module global
! Host types with local name != true name
use global, only: seq_type2=>seq_type1, nonseq_type2=>nonseq_type1, ns1
type (nonseq_type2) :: ns2
! Host non-sequence types
type :: different_type
integer :: i
end type different_type
type (different_type) :: dt1
type :: same_type
integer :: i
end type same_type
type (same_type) :: st1
real :: seq_type1
! Provide a reference to dt1.
dt1 = different_type (42)
! These share a type declaration.
ns2 = ns1
! USE associated seq_type1 is renamed.
seq_type1 = 1.0
! These are different.
st1 = dt ! { dg-error "convert REAL" }
call foo (st1) ! { dg-error "Type mismatch in argument" }
contains
subroutine foo (st2)
! Contained type with local name != true name.
! This is the same as seq_type2 in the host.
use global, only: seq_type3=>seq_type1
! This local declaration is the same as seq_type3 and seq_type2.
TYPE :: seq_type1
sequence
integer :: i
end type seq_type1
! Host association of renamed type.
type (seq_type2) :: x
! Locally declared version of the same thing.
type (seq_type1) :: y
! USE associated renamed type.
type (seq_type3) :: z
! Contained type that is different to that in the host.
type :: different_type
complex :: z
end type different_type
type :: same_type
integer :: i
end type same_type
type (different_type) :: b
type (same_type) :: st2
! Error because these are not the same.
b = dt1 ! { dg-error "convert TYPE" }
! Error in spite of the name - these are non-sequence types and are NOT
! the same.
st1 = st2 ! { dg-error "convert TYPE" }
b%z = (2.0,-1.0)
! Check that the references that are correct actually work. These test the
! fix for PR19362.
x = seq_type1 (1)
y = x
y = seq_type3 (99)
end subroutine foo
END