1! { dg-do run }
2! { dg-options "-fbackslash" }
3
4  character(kind=1,len=20) :: s1, t1
5  character(kind=4,len=20) :: s4, t4
6
7  call test (4_"ccc  ", 4_"bbb", 4_"ccc", 4_"ddd")
8  call test (4_" \xACp  ", 4_" \x900000 ", 4_" \xACp  ", 4_"ddd")
9  call test (4_" \xACp  ", 4_" \x900000 ", 4_" \xACp  ", 4_"ddd")
10
11  call test2 (4_" \x900000 ", 4_" \xACp  ", 4_"ddd")
12
13contains
14
15  subroutine test(s4, t4, u4, v4)
16    character(kind=4,len=*) :: s4, t4, u4, v4
17
18    if (.not. (s4 >= t4)) call abort
19    if (.not. (s4 > t4)) call abort
20    if (.not. (s4 .ge. t4)) call abort
21    if (.not. (s4 .gt. t4)) call abort
22    if (      (s4 == t4)) call abort
23    if (.not. (s4 /= t4)) call abort
24    if (      (s4 .eq. t4)) call abort
25    if (.not. (s4 .ne. t4)) call abort
26    if (      (s4 <= t4)) call abort
27    if (      (s4 < t4)) call abort
28    if (      (s4 .le. t4)) call abort
29    if (      (s4 .lt. t4)) call abort
30
31    if (.not. (s4 >= u4)) call abort
32    if (      (s4 > u4)) call abort
33    if (.not. (s4 .ge. u4)) call abort
34    if (      (s4 .gt. u4)) call abort
35    if (.not. (s4 == u4)) call abort
36    if (      (s4 /= u4)) call abort
37    if (.not. (s4 .eq. u4)) call abort
38    if (      (s4 .ne. u4)) call abort
39    if (.not. (s4 <= u4)) call abort
40    if (      (s4 < u4)) call abort
41    if (.not. (s4 .le. u4)) call abort
42    if (      (s4 .lt. u4)) call abort
43
44    if (      (s4 >= v4)) call abort
45    if (      (s4 > v4)) call abort
46    if (      (s4 .ge. v4)) call abort
47    if (      (s4 .gt. v4)) call abort
48    if (      (s4 == v4)) call abort
49    if (.not. (s4 /= v4)) call abort
50    if (      (s4 .eq. v4)) call abort
51    if (.not. (s4 .ne. v4)) call abort
52    if (.not. (s4 <= v4)) call abort
53    if (.not. (s4 < v4)) call abort
54    if (.not. (s4 .le. v4)) call abort
55    if (.not. (s4 .lt. v4)) call abort
56
57  end subroutine test
58
59  subroutine test2(t4, u4, v4)
60    character(kind=4,len=*) :: t4, u4, v4
61
62    if (.not. (4_" \xACp  " >= t4)) call abort
63    if (.not. (4_" \xACp  " > t4)) call abort
64    if (.not. (4_" \xACp  " .ge. t4)) call abort
65    if (.not. (4_" \xACp  " .gt. t4)) call abort
66    if (      (4_" \xACp  " == t4)) call abort
67    if (.not. (4_" \xACp  " /= t4)) call abort
68    if (      (4_" \xACp  " .eq. t4)) call abort
69    if (.not. (4_" \xACp  " .ne. t4)) call abort
70    if (      (4_" \xACp  " <= t4)) call abort
71    if (      (4_" \xACp  " < t4)) call abort
72    if (      (4_" \xACp  " .le. t4)) call abort
73    if (      (4_" \xACp  " .lt. t4)) call abort
74
75    if (.not. (4_" \xACp  " >= u4)) call abort
76    if (      (4_" \xACp  " > u4)) call abort
77    if (.not. (4_" \xACp  " .ge. u4)) call abort
78    if (      (4_" \xACp  " .gt. u4)) call abort
79    if (.not. (4_" \xACp  " == u4)) call abort
80    if (      (4_" \xACp  " /= u4)) call abort
81    if (.not. (4_" \xACp  " .eq. u4)) call abort
82    if (      (4_" \xACp  " .ne. u4)) call abort
83    if (.not. (4_" \xACp  " <= u4)) call abort
84    if (      (4_" \xACp  " < u4)) call abort
85    if (.not. (4_" \xACp  " .le. u4)) call abort
86    if (      (4_" \xACp  " .lt. u4)) call abort
87
88    if (      (4_" \xACp  " >= v4)) call abort
89    if (      (4_" \xACp  " > v4)) call abort
90    if (      (4_" \xACp  " .ge. v4)) call abort
91    if (      (4_" \xACp  " .gt. v4)) call abort
92    if (      (4_" \xACp  " == v4)) call abort
93    if (.not. (4_" \xACp  " /= v4)) call abort
94    if (      (4_" \xACp  " .eq. v4)) call abort
95    if (.not. (4_" \xACp  " .ne. v4)) call abort
96    if (.not. (4_" \xACp  " <= v4)) call abort
97    if (.not. (4_" \xACp  " < v4)) call abort
98    if (.not. (4_" \xACp  " .le. v4)) call abort
99    if (.not. (4_" \xACp  " .lt. v4)) call abort
100
101  end subroutine test2
102
103  subroutine test3(t4, u4, v4)
104    character(kind=4,len=*) :: t4, u4, v4
105
106    if (.not. (4_" \xACp  " >= 4_" \x900000 ")) call abort
107    if (.not. (4_" \xACp  " > 4_" \x900000 ")) call abort
108    if (.not. (4_" \xACp  " .ge. 4_" \x900000 ")) call abort
109    if (.not. (4_" \xACp  " .gt. 4_" \x900000 ")) call abort
110    if (      (4_" \xACp  " == 4_" \x900000 ")) call abort
111    if (.not. (4_" \xACp  " /= 4_" \x900000 ")) call abort
112    if (      (4_" \xACp  " .eq. 4_" \x900000 ")) call abort
113    if (.not. (4_" \xACp  " .ne. 4_" \x900000 ")) call abort
114    if (      (4_" \xACp  " <= 4_" \x900000 ")) call abort
115    if (      (4_" \xACp  " < 4_" \x900000 ")) call abort
116    if (      (4_" \xACp  " .le. 4_" \x900000 ")) call abort
117    if (      (4_" \xACp  " .lt. 4_" \x900000 ")) call abort
118
119    if (.not. (4_" \xACp  " >= 4_" \xACp  ")) call abort
120    if (      (4_" \xACp  " > 4_" \xACp  ")) call abort
121    if (.not. (4_" \xACp  " .ge. 4_" \xACp  ")) call abort
122    if (      (4_" \xACp  " .gt. 4_" \xACp  ")) call abort
123    if (.not. (4_" \xACp  " == 4_" \xACp  ")) call abort
124    if (      (4_" \xACp  " /= 4_" \xACp  ")) call abort
125    if (.not. (4_" \xACp  " .eq. 4_" \xACp  ")) call abort
126    if (      (4_" \xACp  " .ne. 4_" \xACp  ")) call abort
127    if (.not. (4_" \xACp  " <= 4_" \xACp  ")) call abort
128    if (      (4_" \xACp  " < 4_" \xACp  ")) call abort
129    if (.not. (4_" \xACp  " .le. 4_" \xACp  ")) call abort
130    if (      (4_" \xACp  " .lt. 4_" \xACp  ")) call abort
131
132    if (      (4_" \xACp  " >= 4_"ddd")) call abort
133    if (      (4_" \xACp  " > 4_"ddd")) call abort
134    if (      (4_" \xACp  " .ge. 4_"ddd")) call abort
135    if (      (4_" \xACp  " .gt. 4_"ddd")) call abort
136    if (      (4_" \xACp  " == 4_"ddd")) call abort
137    if (.not. (4_" \xACp  " /= 4_"ddd")) call abort
138    if (      (4_" \xACp  " .eq. 4_"ddd")) call abort
139    if (.not. (4_" \xACp  " .ne. 4_"ddd")) call abort
140    if (.not. (4_" \xACp  " <= 4_"ddd")) call abort
141    if (.not. (4_" \xACp  " < 4_"ddd")) call abort
142    if (.not. (4_" \xACp  " .le. 4_"ddd")) call abort
143    if (.not. (4_" \xACp  " .lt. 4_"ddd")) call abort
144
145  end subroutine test3
146
147end
148