75 lines
2.2 KiB
Fortran
75 lines
2.2 KiB
Fortran
! { dg-do compile }
|
|
! { dg-options "-std=f95" }
|
|
!
|
|
! PR20901 - Checks resolution of types in EQUIVALENCE statement when
|
|
! f95 standard is imposed.
|
|
!
|
|
! Contributed by Paul Thomas <pault@gcc.gnu.org>
|
|
!
|
|
type :: numeric_type
|
|
sequence
|
|
integer :: i
|
|
real :: x
|
|
real(kind=8) :: d
|
|
complex :: z
|
|
logical :: l
|
|
end type numeric_type
|
|
|
|
type (numeric_type) :: my_num, thy_num
|
|
|
|
type :: numeric_type2
|
|
sequence
|
|
integer :: i
|
|
real :: x
|
|
real(kind=8) :: d
|
|
complex :: z
|
|
logical :: l
|
|
end type numeric_type2
|
|
|
|
type (numeric_type2) :: his_num
|
|
|
|
type :: char_type
|
|
sequence
|
|
character(4) :: ch
|
|
character(4) :: cha (6)
|
|
end type char_type
|
|
|
|
type (char_type) :: my_char
|
|
|
|
type :: mixed_type
|
|
sequence
|
|
integer :: i(4)
|
|
character(4) :: cha (6)
|
|
end type mixed_type
|
|
|
|
type (mixed_type) :: my_mixed, thy_mixed
|
|
|
|
character(len=4) :: ch
|
|
integer :: num
|
|
integer(kind=8) :: non_def
|
|
complex(kind=8) :: my_z, thy_z
|
|
|
|
! Permitted: character with character sequence
|
|
! numeric with numeric sequence
|
|
! numeric sequence with numeric sequence
|
|
! non-default of same type
|
|
! mixed sequences of same type
|
|
equivalence (ch, my_char)
|
|
equivalence (num, my_num)
|
|
equivalence (my_num, his_num, thy_num)
|
|
equivalence (my_z, thy_z)
|
|
equivalence (my_mixed, thy_mixed)
|
|
|
|
! Not permitted by the standard - OK with -std=gnu
|
|
equivalence (my_mixed, my_num) ! { dg-error "with mixed components in EQUIVALENCE" }
|
|
equivalence (my_z, num) ! { dg-error "Non-default type object or sequence" }
|
|
equivalence (my_char, my_num) ! { dg-error "in default CHARACTER EQUIVALENCE" }
|
|
equivalence (ch, my_num) ! { dg-error "in default CHARACTER EQUIVALENCE" }
|
|
equivalence (my_num, ch) ! { dg-error "in default NUMERIC EQUIVALENCE" }
|
|
equivalence (num, my_char) ! { dg-error "in default NUMERIC EQUIVALENCE" }
|
|
equivalence (my_char, num) ! { dg-error "in default CHARACTER EQUIVALENCE" }
|
|
equivalence (non_def, ch) ! { dg-error "Non-default type object or sequence" }
|
|
equivalence (my_z, ch) ! { dg-error "Non-default type object or sequence" }
|
|
equivalence (my_z, num) ! { dg-error "Non-default type object or sequence" }
|
|
END
|