re PR fortran/78741 (ICE in gfc_get_symbol_decl, at fortran/trans-decl.c:1534)
[official-gcc.git] / gcc / testsuite / gfortran.dg / minmax_char_1.f90
blob8765aa4819aa7a4812089c1dee8e2dfdbf99c734
1 ! Tests for MIN and MAX intrinsics with character arguments
3 ! { dg-do run }
4 program test
5 character(len=3), parameter :: sp = "gee"
6 character(len=6), parameter :: tp = "crunch", wp = "flunch"
7 character(len=2), parameter :: up = "az", vp = "da"
9 character(len=3) :: s
10 character(len=6) :: t, w
11 character(len=2) :: u, v
12 s = "gee"
13 t = "crunch"
14 u = "az"
15 v = "da"
16 w = "flunch"
18 if (.not. equal(min("foo", "bar"), "bar")) STOP 1
19 if (.not. equal(max("foo", "bar"), "foo")) STOP 2
20 if (.not. equal(min("bar", "foo"), "bar")) STOP 3
21 if (.not. equal(max("bar", "foo"), "foo")) STOP 4
23 if (.not. equal(min("bar", "foo", sp), "bar")) STOP 5
24 if (.not. equal(max("bar", "foo", sp), "gee")) STOP 6
25 if (.not. equal(min("bar", sp, "foo"), "bar")) STOP 7
26 if (.not. equal(max("bar", sp, "foo"), "gee")) STOP 8
27 if (.not. equal(min(sp, "bar", "foo"), "bar")) STOP 9
28 if (.not. equal(max(sp, "bar", "foo"), "gee")) STOP 10
30 if (.not. equal(min("foo", "bar", s), "bar")) STOP 11
31 if (.not. equal(max("foo", "bar", s), "gee")) STOP 12
32 if (.not. equal(min("foo", s, "bar"), "bar")) STOP 13
33 if (.not. equal(max("foo", s, "bar"), "gee")) STOP 14
34 if (.not. equal(min(s, "foo", "bar"), "bar")) STOP 15
35 if (.not. equal(max(s, "foo", "bar"), "gee")) STOP 16
37 if (.not. equal(min("", ""), "")) STOP 17
38 if (.not. equal(max("", ""), "")) STOP 18
39 if (.not. equal(min("", " "), " ")) STOP 19
40 if (.not. equal(max("", " "), " ")) STOP 20
42 if (.not. equal(min(u,v,w), "az ")) STOP 21
43 if (.not. equal(max(u,v,w), "flunch")) STOP 22
44 if (.not. equal(min(u,vp,w), "az ")) STOP 23
45 if (.not. equal(max(u,vp,w), "flunch")) STOP 24
46 if (.not. equal(min(u,v,wp), "az ")) STOP 25
47 if (.not. equal(max(u,v,wp), "flunch")) STOP 26
48 if (.not. equal(min(up,v,w), "az ")) STOP 27
49 if (.not. equal(max(up,v,w), "flunch")) STOP 28
51 call foo("gee ","az ",s,t,u,v)
52 call foo("gee ","az ",s,t,u,v)
53 call foo("gee ","az ",s,t,u)
54 call foo("gee ","crunch",s,t)
56 contains
58 subroutine foo(res_max, res_min, a, b, c, d)
59 character(len=*) :: res_min, res_max
60 character(len=*), optional :: a, b, c, d
62 if (.not. equal(min(a,b,c,d), res_min)) STOP 29
63 if (.not. equal(max(a,b,c,d), res_max)) STOP 30
64 end subroutine foo
66 pure function equal(a,b)
67 character(len=*), intent(in) :: a, b
68 logical :: equal
70 equal = (len(a) == len(b)) .and. (a == b)
71 end function equal
73 end program test