annotate gcc/testsuite/gfortran.dg/equiv_7.f90 @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents 84e7813d76e9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 ! { dg-do run }
kono
parents:
diff changeset
2 ! { dg-options "-std=gnu" }
kono
parents:
diff changeset
3 ! Tests the fix for PR29786, in which initialization of overlapping
kono
parents:
diff changeset
4 ! equivalence elements caused a compile error.
kono
parents:
diff changeset
5 !
kono
parents:
diff changeset
6 ! Contributed by Bernhard Fischer <aldot@gcc.gnu.org>
kono
parents:
diff changeset
7 !
kono
parents:
diff changeset
8 block data
kono
parents:
diff changeset
9 common /global/ ca (4)
kono
parents:
diff changeset
10 integer(4) ca, cb
kono
parents:
diff changeset
11 equivalence (cb, ca(3))
kono
parents:
diff changeset
12 data (ca(i), i = 1, 2) /42,43/, ca(4) /44/
kono
parents:
diff changeset
13 data cb /99/
kono
parents:
diff changeset
14 end block data
kono
parents:
diff changeset
15
kono
parents:
diff changeset
16 integer(4), parameter :: abcd = ichar ("a") + 256_4 * (ichar("b") + 256_4 * &
kono
parents:
diff changeset
17 (ichar ("c") + 256_4 * ichar ("d")))
kono
parents:
diff changeset
18 logical(4), parameter :: bigendian = transfer (abcd, "wxyz") .eq. "abcd"
kono
parents:
diff changeset
19
kono
parents:
diff changeset
20 call int4_int4
kono
parents:
diff changeset
21 call real4_real4
kono
parents:
diff changeset
22 call complex_real
kono
parents:
diff changeset
23 call check_block_data
kono
parents:
diff changeset
24 call derived_types ! Thanks to Tobias Burnus for this:)
kono
parents:
diff changeset
25 !
kono
parents:
diff changeset
26 ! This came up in PR29786 comment #9 - Note the need to treat endianess
kono
parents:
diff changeset
27 ! Thanks Dominique d'Humieres:)
kono
parents:
diff changeset
28 !
kono
parents:
diff changeset
29 if (bigendian) then
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
30 if (d1mach_little (1) .ne. transfer ((/0_4, 1048576_4/), 1d0)) STOP 1
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
31 if (d1mach_little (2) .ne. transfer ((/-1_4,2146435071_4/), 1d0)) STOP 2
111
kono
parents:
diff changeset
32 else
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
33 if (d1mach_big (1) .ne. transfer ((/1048576_4, 0_4/), 1d0)) STOP 3
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
34 if (d1mach_big (2) .ne. transfer ((/2146435071_4,-1_4/), 1d0)) STOP 4
111
kono
parents:
diff changeset
35 end if
kono
parents:
diff changeset
36 !
kono
parents:
diff changeset
37 contains
kono
parents:
diff changeset
38 subroutine int4_int4
kono
parents:
diff changeset
39 integer(4) a(4)
kono
parents:
diff changeset
40 integer(4) b
kono
parents:
diff changeset
41 equivalence (b,a(3))
kono
parents:
diff changeset
42 data b/3/
kono
parents:
diff changeset
43 data (a(i), i=1,2) /1,2/, a(4) /4/
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
44 if (any (a .ne. (/1, 2, 3, 4/))) STOP 5
111
kono
parents:
diff changeset
45 end subroutine int4_int4
kono
parents:
diff changeset
46 subroutine real4_real4
kono
parents:
diff changeset
47 real(4) a(4)
kono
parents:
diff changeset
48 real(4) b
kono
parents:
diff changeset
49 equivalence (b,a(3))
kono
parents:
diff changeset
50 data b/3.0_4/
kono
parents:
diff changeset
51 data (a(i), i=1,2) /1.0_4, 2.0_4/, &
kono
parents:
diff changeset
52 a(4) /4.0_4/
kono
parents:
diff changeset
53 if (sum (abs (a - &
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
54 (/1.0_4, 2.0_4, 3.0_4, 4.0_4/))) > 1.0e-6) STOP 6
111
kono
parents:
diff changeset
55 end subroutine real4_real4
kono
parents:
diff changeset
56 subroutine complex_real
kono
parents:
diff changeset
57 complex(4) a(4)
kono
parents:
diff changeset
58 real(4) b(2)
kono
parents:
diff changeset
59 equivalence (b,a(3))
kono
parents:
diff changeset
60 data b(1)/3.0_4/, b(2)/4.0_4/
kono
parents:
diff changeset
61 data (a(i), i=1,2) /(0.0_4, 1.0_4),(2.0_4,0.0_4)/, &
kono
parents:
diff changeset
62 a(4) /(0.0_4,5.0_4)/
kono
parents:
diff changeset
63 if (sum (abs (a - (/(0.0_4, 1.0_4),(2.0_4, 0.0_4), &
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
64 (3.0_4, 4.0_4),(0.0_4, 5.0_4)/))) > 1.0e-6) STOP 7
111
kono
parents:
diff changeset
65 end subroutine complex_real
kono
parents:
diff changeset
66 subroutine check_block_data
kono
parents:
diff changeset
67 common /global/ ca (4)
kono
parents:
diff changeset
68 equivalence (ca(3), cb)
kono
parents:
diff changeset
69 integer(4) ca
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
70 if (any (ca .ne. (/42, 43, 99, 44/))) STOP 8
111
kono
parents:
diff changeset
71 end subroutine check_block_data
kono
parents:
diff changeset
72 function d1mach_little(i) result(d1mach)
kono
parents:
diff changeset
73 implicit none
kono
parents:
diff changeset
74 double precision d1mach,dmach(5)
kono
parents:
diff changeset
75 integer i
kono
parents:
diff changeset
76 integer*4 large(4),small(4)
kono
parents:
diff changeset
77 equivalence ( dmach(1), small(1) )
kono
parents:
diff changeset
78 equivalence ( dmach(2), large(1) )
kono
parents:
diff changeset
79 data small(1),small(2) / 0, 1048576/
kono
parents:
diff changeset
80 data large(1),large(2) /-1,2146435071/
kono
parents:
diff changeset
81 d1mach = dmach(i)
kono
parents:
diff changeset
82 end function d1mach_little
kono
parents:
diff changeset
83 function d1mach_big(i) result(d1mach)
kono
parents:
diff changeset
84 implicit none
kono
parents:
diff changeset
85 double precision d1mach,dmach(5)
kono
parents:
diff changeset
86 integer i
kono
parents:
diff changeset
87 integer*4 large(4),small(4)
kono
parents:
diff changeset
88 equivalence ( dmach(1), small(1) )
kono
parents:
diff changeset
89 equivalence ( dmach(2), large(1) )
kono
parents:
diff changeset
90 data small(1),small(2) /1048576, 0/
kono
parents:
diff changeset
91 data large(1),large(2) /2146435071,-1/
kono
parents:
diff changeset
92 d1mach = dmach(i)
kono
parents:
diff changeset
93 end function d1mach_big
kono
parents:
diff changeset
94 subroutine derived_types
kono
parents:
diff changeset
95 TYPE T1
kono
parents:
diff changeset
96 sequence
kono
parents:
diff changeset
97 character (3) :: chr
kono
parents:
diff changeset
98 integer :: i = 1
kono
parents:
diff changeset
99 integer :: j
kono
parents:
diff changeset
100 END TYPE T1
kono
parents:
diff changeset
101 TYPE T2
kono
parents:
diff changeset
102 sequence
kono
parents:
diff changeset
103 character (3) :: chr = "wxy"
kono
parents:
diff changeset
104 integer :: i = 1
kono
parents:
diff changeset
105 integer :: j = 4
kono
parents:
diff changeset
106 END TYPE T2
kono
parents:
diff changeset
107 TYPE(T1) :: a1
kono
parents:
diff changeset
108 TYPE(T2) :: a2
kono
parents:
diff changeset
109 EQUIVALENCE(a1,a2) ! { dg-warning="mixed|components" }
131
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
110 if (a1%chr .ne. "wxy") STOP 9
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
111 if (a1%i .ne. 1) STOP 10
84e7813d76e9 gcc-8.2
mir3636
parents: 111
diff changeset
112 if (a1%j .ne. 4) STOP 11
111
kono
parents:
diff changeset
113 end subroutine derived_types
kono
parents:
diff changeset
114 end